大三下有幸到了美團(tuán)點(diǎn)評實(shí)習(xí)。在這半年的時(shí)間里,經(jīng)過導(dǎo)師和主管的悉心教導(dǎo),無論是專業(yè)技能還是開發(fā)技巧方面都有很大的提升。恰好午休時(shí)間,隨便寫寫,總結(jié)一下這半年的收獲吧。不留下篇文章總感覺有點(diǎn)遺憾。
一、 初到美團(tuán)
  剛?cè)肼毜臅r(shí)候,其實(shí)自己非常虛,因?yàn)槎臇|西不多。投簡歷的時(shí)候,自己只是做過一些Android的Demo,然后就掌握了一點(diǎn)課堂上的知識吧。(計(jì)算機(jī)網(wǎng)絡(luò),數(shù)據(jù)結(jié)構(gòu)等等)面試的時(shí)候,也是面試了這些,很幸運(yùn)主管讓我通過了面試。后來被告知入職之后要學(xué)習(xí)Spring來開發(fā),雖然自己以前寫過一些Servlet的小程序,但是框架、控制反轉(zhuǎn)、依賴注入和切面這些東西真的是一點(diǎn)都不理解。怎么看網(wǎng)上的博客也不懂,就是和JavaSE中間隔了一堵墻的感覺。
  入職之后,美團(tuán)給開發(fā)配發(fā)的是15寸的mac pro,雖然當(dāng)時(shí)剛使用mac不適應(yīng),但是現(xiàn)在看來,mac的確很適合開發(fā)工作。剛開始的一周主要是熟悉環(huán)境,熟悉mac的操作,熟悉美團(tuán)點(diǎn)評的內(nèi)部系統(tǒng)等等。值得一提的是,美團(tuán)的內(nèi)部應(yīng)用很多,并且在工作中很實(shí)用。內(nèi)部交流有專門的應(yīng)用,類似微信,功能強(qiáng)大。最近還出了一個(gè)話題社區(qū),和知乎差不多??梢哉f現(xiàn)在主流的互聯(lián)網(wǎng)產(chǎn)品,美團(tuán)點(diǎn)評都有相應(yīng)的內(nèi)部應(yīng)用。有一點(diǎn)比較麻煩但是很重要的就是每天要發(fā)工作日報(bào),每一周要發(fā)周報(bào)。對于記錄和思考自己的工作,還是有很大幫助的。
  熟悉了內(nèi)部環(huán)境,就要開始學(xué)習(xí)一下開發(fā)相關(guān)的知識了。有兩點(diǎn)讓我感觸很深,一個(gè)是開發(fā)使用IDEA,第二個(gè)是Git。說一下之前我是這么寫程序的吧,用Eclipse,寫好類,在Main函數(shù)里面寫寫幾句話就完了,然后也沒有什么保存的工作。下次繼續(xù)開發(fā)就找到項(xiàng)目存儲的地方打開項(xiàng)目即可。所以在那個(gè)時(shí)候,我并不理解Git的作用,不就是遠(yuǎn)程保存一下代碼嘛。但實(shí)際上,開發(fā)工作并不是一個(gè)人完成的,不可能大家進(jìn)度都一樣,也不可能保存在一個(gè)硬盤。難道別人開發(fā)的時(shí)候,你就把項(xiàng)目拷給別人添加完代碼自己再弄嗎?在導(dǎo)師的指導(dǎo)下,我學(xué)習(xí)了IDEA和Git。
  IDEA是主流的Java開發(fā)IDE,用過AndroidStudio的就明白了,同一個(gè)公司的。主要是好用,能集成的東西很多,個(gè)人感覺比Eclipse好用。
  至于Git,基本上每天都會接觸到。最簡單的用處就是能夠保存代碼,創(chuàng)建了Git項(xiàng)目后,pull到本地,然后編寫完代碼后push上去。這樣就算你電腦進(jìn)水了壞了開不了了,換了一臺電腦,你的項(xiàng)目還在的。第二個(gè)用處,當(dāng)一個(gè)項(xiàng)目,已經(jīng)在線上運(yùn)行了,但是你要開發(fā)一個(gè)新功能,怎么辦呢?你不可能在現(xiàn)有的項(xiàng)目上改啊,因?yàn)楦牧舜a重新編譯,服務(wù)肯定會斷掉的,會影響到使用的用戶們。還有就是改錯了怎么辦呢?Git提供了一個(gè)辦法就是,新開一個(gè)dev分支,該分支上的代碼和master分支上一樣的,你可以在dev分支上隨意改。Dev就算改錯了,還能回滾到以前的版本。當(dāng)確認(rèn)無誤了,可以將dev的代碼合并到master分支上。當(dāng)然了,大項(xiàng)目的合并是有權(quán)限的,master分支不能讓你隨便合并。你可以提一個(gè)合并的請求,然后在Git上能看到你修改的地方。當(dāng)管理員查看的你的代碼之后,確認(rèn)沒有問題,他就會讓合并通過。如果沒有沖突,這樣新的功能就添加上去了。第三個(gè)用處就是在服務(wù)器部署很方便。不需要從本地拷貝代碼到服務(wù)器,只需要從git上pull代碼下來,直接跑就可以了。當(dāng)然,重新編譯啟動項(xiàng)目要選在使用者較少的時(shí)候。這就能理解為什么一些游戲都選在晚上更新維護(hù)了吧。主要用到的地方,暫時(shí)想到的就這么多吧。說實(shí)話,當(dāng)時(shí)我看Git教程也非常迷糊根本不懂,在工作中慢慢接觸就理解明白了。

二、 接觸項(xiàng)目
  說起來非常幸運(yùn),實(shí)習(xí)的任務(wù)就是和導(dǎo)師一起負(fù)責(zé)美團(tuán)點(diǎn)評·眾測平臺的后端開發(fā)。這個(gè)項(xiàng)目主要是讓用戶通過這個(gè)平臺提交試用美團(tuán)點(diǎn)評旗下APP發(fā)現(xiàn)的BUG與建議,然后相關(guān)業(yè)務(wù)線的QA能在后臺處理相關(guān)的問題。在我實(shí)習(xí)結(jié)束之前,已經(jīng)進(jìn)行過四次的線下眾測活動和三次版本迭代。目前的運(yùn)營方式就是讓報(bào)名參與眾測活動用戶(非對應(yīng)QA)在限定的時(shí)間內(nèi)去測試某一業(yè)務(wù)組提供的一個(gè)新應(yīng)用包,提交自己發(fā)現(xiàn)的BUG,然后給予相應(yīng)的積分獎勵。讓我感到非常驚訝的是,每次活動結(jié)束完,都能發(fā)現(xiàn)一百多個(gè)有效BUG。不敢相信一個(gè)待上線的應(yīng)用能有這么多的Bug,第二個(gè)就是感嘆參與的用戶發(fā)現(xiàn)Bug能力太強(qiáng)了。
  為什么說幸運(yùn)呢,我感覺有兩點(diǎn)。第一點(diǎn)是這個(gè)項(xiàng)目覆蓋面很廣,基本上美團(tuán)點(diǎn)評線上應(yīng)用很多都通過了眾測平臺來收集發(fā)現(xiàn)BUG。是個(gè)影響面廣并且很實(shí)用的項(xiàng)目。自己負(fù)責(zé)開發(fā)的項(xiàng)目這么多人用到,很有成就感。第二點(diǎn)就是,它不是一個(gè)很難的項(xiàng)目。麻雀雖小五臟俱全,現(xiàn)在想起來,對于我這種剛起步的Spring學(xué)習(xí)者來說真的最適合不過了。
  說一下項(xiàng)目用到的框架:Spring+SpringMVC+Mybatis,構(gòu)建項(xiàng)目使用了Gradle,數(shù)據(jù)庫使用MySQL,服務(wù)器是jetty,部署于美團(tuán)點(diǎn)評的線上機(jī)器。接下來就簡單說下每個(gè)框架的用處吧。
  Gradle:最簡單的說法,就是管理依賴。總不能每用到一個(gè)jar包,就去網(wǎng)上下載,或者在美團(tuán)點(diǎn)評的庫上下載,拉進(jìn)項(xiàng)目里面吧。使用gradle