8 月份開始到現(xiàn)在,進(jìn)行了一個(gè)多月的實(shí)習(xí),崗位是 Java Web 后端開發(fā)。這過程學(xué)到的知識(shí)著實(shí)比自學(xué)要來得多,而且也讓我意識(shí)到需要學(xué)習(xí)的知識(shí)也更加多。在這里我會(huì)在比較大的方面總結(jié)這次實(shí)習(xí)中學(xué)習(xí)到的事情,以及之后需要努力學(xué)習(xí)的知識(shí)。
基礎(chǔ)
經(jīng)過一個(gè)多月的項(xiàng)目的鍛煉,最大一點(diǎn)感受就是基礎(chǔ)的重要。這里我指的是數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)。因?yàn)榻?jīng)歷過實(shí)際項(xiàng)目的開發(fā),無疑令我更清楚一個(gè)企業(yè)項(xiàng)目里的編程是怎樣一會(huì)事,明白實(shí)際用到的技術(shù)大概是怎樣,而這個(gè)過程讓我知道基本的數(shù)據(jù)結(jié)構(gòu)是如此重要。老實(shí)說,我感覺一個(gè)項(xiàng)目大部分時(shí)候做的都是重復(fù)性活動(dòng),也就是所謂的增刪查改。這個(gè)過程無非就是與數(shù)據(jù)打交道,譬如怎么獲取數(shù)據(jù),如何保存獲取的數(shù)據(jù),怎樣返回前端想要的數(shù)據(jù)就是我們要做事情的核心。而這不正是數(shù)據(jù)結(jié)構(gòu)的事情嗎?例如,我們要熟悉 List、Map 等結(jié)構(gòu),知道什么場景使用那些容器來封裝數(shù)據(jù)。還有一個(gè)是算法,雖然我這一個(gè)半月中沒有用到算法,但無疑這是進(jìn)階必須的,因?yàn)樗惴梢詭椭覀兏玫奶幚頂?shù)據(jù),而這正是后端工程師的任務(wù)——處理數(shù)據(jù)。所以數(shù)據(jù)結(jié)構(gòu)跟算法是未來一定要掌握的。
另外一點(diǎn)需要注意的基礎(chǔ)地方,就是 JDK 的常用 API 的使用。我印象深刻的一件事就是 String 的使用。有一次我要判斷 String 非空,當(dāng)時(shí)的做法好像只是“抄”別人的代碼,沒有深入思考的過程,后來有空閑思考,發(fā)現(xiàn)一個(gè) String 判斷非空其實(shí)要注意的事情是很多的,而我們其實(shí)可以直接查看 JDK 的文檔,就會(huì)發(fā)現(xiàn) JDK 里面 String 類直接有 isEmpty() 方法供我們使用了;同樣,如果要判斷兩個(gè)字符串相等,API 文檔直接提供了 .equal() 方法供我們使用,這里還需要特別注意的一點(diǎn)就是不能用 == 來判斷兩個(gè)字符串相等!因此這個(gè)過程我學(xué)到的一點(diǎn)就是,養(yǎng)成查看官方文檔的習(xí)慣,特別是常用的 API,要做到熟記。
SQL 與數(shù)據(jù)庫
還有一個(gè)十分重要的地方是 SQL 的學(xué)習(xí)。這一塊跟數(shù)據(jù)結(jié)構(gòu)是我現(xiàn)在認(rèn)為最重要的。在上面我說過,后端的處理無非就是數(shù)據(jù)的處理,而很多時(shí)候數(shù)據(jù)需要從各種數(shù)據(jù)庫中檢索出來,這就需要用到 SQL 了。在沒有實(shí)習(xí)之前,我對 SQL 并不怎么熟悉,好幾次的面試中也因?yàn)檫@樣而吃了虧。在真正的實(shí)際項(xiàng)目開發(fā)中,也真正感受到使用 SQL 的頻繁與重要,特別是在 Mybatis 框架中要經(jīng)常編寫 SQL 語句,加深了我對 SQL 的重視。當(dāng)然 SQL 語句也只是非常基礎(chǔ)的東西,在這上面還有數(shù)據(jù)庫要我去了解與學(xué)習(xí),例如怎樣優(yōu)化數(shù)據(jù)查詢,某些數(shù)據(jù)庫的特性等。項(xiàng)目使用的是 MySQL 數(shù)據(jù)庫,這也是我接下來需要加深學(xué)習(xí)的數(shù)據(jù)庫。
團(tuán)隊(duì)開發(fā)
說說團(tuán)隊(duì)開發(fā)。我們項(xiàng)目用的是 SVN,感覺挺方便,沒那么復(fù)雜(雖然我對 git 并不熟悉)。這里需要記錄的事情是,每次提交代碼的“規(guī)范流程”(不局限于 SVN,團(tuán)隊(duì)開發(fā)都應(yīng)該這樣做,以防沖突)。
每天到公司,打開項(xiàng)目后首先更新代碼(一般是全部),發(fā)現(xiàn)沖突及時(shí)解決;
寫好自己的功能,在本地跑,直到可以跑通;
現(xiàn)在需要更新全部代碼,防止與別人當(dāng)天寫的代碼有沖突;
更新完代碼不能立刻提交,需要再次跑一下,驗(yàn)證代碼更新后也沒有出錯(cuò);
再次檢查是否有更新代碼,沒有了才可以提交自己的代碼;
每天下班前檢查是否自己寫完的代碼有沒有提交的,及時(shí)提交。
這里再說說代碼提交的“注釋規(guī)范”,沒有統(tǒng)一標(biāo)準(zhǔn),我是自己網(wǎng)上搜索后覺得挺不錯(cuò),以后要這樣用。
changed(完成的任務(wù))
updated(完成任務(wù)的更新)
added(新加入的需求)
fixed(修復(fù) bug)
修 issue 時(shí)可以寫:fixed #xx
小改的直接用一句話說清楚
大改的自己建一個(gè) issue 說清楚情況、方案、變化,然后寫 fixed #該 issue 號(hào)
框架與流程
這個(gè)項(xiàng)目是用 SSM 框架的,現(xiàn)在我想對于這個(gè)框架的日常使用是沒問題了,這也是一大收獲,正式在企業(yè)項(xiàng)目中用到,對這幾個(gè)框架的認(rèn)識(shí)深了很多。
再者,對一個(gè)項(xiàng)目的流程,如前期需求、原型實(shí)現(xiàn)、編碼、測試、上線也有更清晰的了解,知道是怎樣一會(huì)事。我想我算是踏入這個(gè)行業(yè)的門了。
最佳實(shí)踐
至于編程技術(shù)思想方面也同樣有很多進(jìn)步。例如對一些技巧的使用,知道是怎樣一回事。好比 DTO,還有封裝前端請求數(shù)據(jù)的 Query 兩個(gè)對象的區(qū)別與用法,這些算得上是最佳實(shí)踐吧。說到最佳實(shí)踐,這次的實(shí)習(xí)也鍛煉了我遇到問題找尋原因的思想,其實(shí)這里頭也沒有多高深的知識(shí)。
例如,遇到 bug,首先整個(gè)流程跑一次,看看這個(gè)實(shí)際功能是否能跑通,然后觀察前端傳輸?shù)臄?shù)據(jù)有沒有錯(cuò),調(diào)用的請求是否真的調(diào)用了,這些步驟都沒錯(cuò)的話,看看后端 Controller 接受的數(shù)據(jù)情況,以及進(jìn)一步的數(shù)據(jù)處理的情況,而這后端的觀察便可以用 debug 了(加強(qiáng)了我 eclipse 的 debug 能力),這個(gè)流程走下來應(yīng)該可以很快定位到問題出現(xiàn)的地方。
上面寫的這些都是大方面的內(nèi)容,其他的收獲都是一些細(xì)節(jié)的技術(shù)內(nèi)容,例如文件上傳下載實(shí)現(xiàn)、分頁對象原理與實(shí)現(xiàn)、一些 jQuery 插件使用等等,就不展開講了。
那么最后再來一個(gè)需要學(xué)習(xí)知識(shí)的粗略計(jì)劃:
數(shù)據(jù)結(jié)構(gòu)與算法
MySQL 數(shù)據(jù)庫的深入學(xué)習(xí)(學(xué)習(xí)《數(shù)據(jù)庫技術(shù)叢書·MySQL技術(shù)內(nèi)幕:InnoDB存儲(chǔ)引擎》)
Java 基礎(chǔ)以及 JVM、多線程等知識(shí)(學(xué)習(xí)《深入理解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐》《Java并發(fā)編程實(shí)戰(zhàn)》)
繼續(xù)深入學(xué)習(xí) SSM 框架,也要學(xué)習(xí) Spring Boot 框架(《Spring 實(shí)戰(zhàn)》以及相關(guān)視頻學(xué)習(xí))
網(wǎng)絡(luò)編程相關(guān)知識(shí)
-
Web
+關(guān)注
關(guān)注
2文章
1257瀏覽量
69357 -
JAVA
+關(guān)注
關(guān)注
19文章
2960瀏覽量
104557 -
開發(fā)工程師
+關(guān)注
關(guān)注
1文章
91瀏覽量
14928
發(fā)布評論請先 登錄
相關(guān)推薦
評論