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