天天看點

在網魚研發實習的一段經曆

校外實踐

由于對實驗室的雲計算網絡和虛拟環境安全研究不太感興趣,也有些摸不着頭腦,我也希望有一些研發的經曆,為将來畢業找到适合的工作早做準備,于是我利用業餘時間到校外企業參與了應用項目的研究與開發。接下來我詳細說明這段實踐經曆。

實踐機關概況:

上海網魚資訊科技有限公司。網魚網咖緻力于成為中國網咖業的領航者,給使用者美好的體驗,讓更多人玩出夢想。截至目前,全球已有1000餘家門店,實名注冊會員超1100萬。網魚還積極融入遊戲行業的發展,與騰訊、完美、網易、暴雪等知名遊戲廠商展開深度合作,聯合舉辦全國性的電競賽事;網魚與騰訊互娛、iG電子競技俱樂部等簽訂戰略合作協定,共謀産業發展。

實習内容:

我參與的項目是網魚釘釘流程開發,開發語言主要是Java,在校期間我曾花了幾個月時間自學Java,項目與我的技術方向相符,我還希望在實踐中進一步了解Java研發,這也是選擇這份實習offer的原因。

網魚釘釘流程主要是使用Spring Boot的微服務架構,基于釘釘這一第三方開放平台開發的一個企業Java Web系統。該系統由網魚流程和網魚報表兩個獨立的部分組成,網魚的流程涉及公司各個部門(如人力資源部、營運部、法務部、IT部、财務部等部門)的相關流程,網魚報表則是對已歸檔的流程相關資訊進行彙總,并生成對應表單,支援excel導出。

初來實習,先是準備搭建開發的環境,安裝配置JDK,我用的是Eclipse,是以需要配置maven項目環境,然後安裝Git插件,将流程代碼pull到本地。流程開發還需要安裝一個重要的工作流插件Activiti,視圖插件FreeMarker。如果使用目前流行的IDEA編輯器,由于它預設內建了Git、freemarker,安裝就更簡單了。當然,這是個逐漸學習的過程,為了更快上手,我選用自己熟悉的Eclipse。對于系統所采用的Spring Boot架構,它具有許多優點如支援自動配置編碼更簡單,部署更簡單,監控更簡單。這也是企業選擇它的原因吧。

整合MyBatis後的項目結構上比較清晰:流程圖以及流程模闆放在/yoa-web/resources下,服務層接口和實作在/yoa-service下,控制層在/yoa-web/web下,dao接口和映射mapper檔案在/yoa-dao下,流程實體類在/yoa-modal下。盡管如此,對于公司上百個流程而言,要查找定位到具體的流程無異于大海撈針,光是翻看目錄就“令人窒息”,好在帶我的同僚教我用Eclipse快捷鍵,這樣一來,Ctrl+Shift+R,Ctrl+H,想找什麼檔案找什麼代碼都得心應手了。第一次接觸到這麼大的代碼量,雖然是很多開發人員共同奮鬥的結果,但小菜鳥看着都覺得很激動了哈哈。

開發人員首先得弄清楚需求,第一次看流程需求文檔時覺得沒什麼,不知它是開發人員開展工作的指南,其中的表格和文字說明都是重要的,會展現到代碼上的。有時候,文檔中有不清楚的地方,我都會與流程經理溝通。流程經理雖說不了解技術,但對業務卻是比我更懂的,人也比較親切,每次溝通還算順利。

項目裡已經有很多流程存在了,大多情況是已有流程需求變更需對其優化,這時需要去找到已有的代碼,看懂别人的代碼,然後添加或修改代碼。也會有需要開發的新流程,這時候就得看看類似的已有流程,依葫蘆畫瓢,一個新流程編碼調試到自己測試通過,不出意外通常需要三天左右。總的來說,由于底層已經封裝好服務類,有些方法直接傳參數調用即可,是以看下别人怎麼調用方法自己就知道怎麼寫了。也難怪網上的段子手調侃程式員隻會複制粘貼了。下面以我寫過的新流程—直營閉店資産清算處理審批為例來說明。

第一步,建立流程圖,流程圖主要包括開始,任務,流程控制網關和結束,還有一些屬性值需要注意填寫,有時候會忘記填寫導緻一些異常被抛出。第二步,建立與流程關聯的Form,也就是所謂的前端視圖,表單域主要是申請人資訊以及具體資産清算方式和金額資訊,還有隐藏的表單域如流程号、活動ID等也是必不可少的,我常常會沒注意到這些隐藏字段導緻抛出異常或與預期不同的結果,前端的語言用的HTML和JQuery,工作之餘我也會學習這些前端知識。第三步,寫DataHandle檔案,DataHandle檔案用來對前端資料進行填充,除了發起節點外,其餘節點審批人需要看到發起者填寫的資訊,這時,由DataHandle填充值然後傳回Map對象給前端。第四步,寫Controller檔案,控制器中對應一些web請求,映射到相應的方法,主要包括:送出、審批、拒絕、查詢子表等。第五步,Service接口和實作類。服務層主要是調用DAO層進行資料的存取和一些業務事件處理,同時它又被Controller層所調用。就我舉例的這個流程,包括save、update、delete、findById、findChildById、complete、sendmessage、sendmail等業務方法。第六步,寫DAO接口和對于mapper xml檔案。這裡主要用到MyBatis文法,涉及到對MySQL資料庫的insert、update、select、delete操作,一些sql語句的編寫。這樣以來,從前端到後端的整個過程就走了一遍了。調試通過,push到遠端git庫,然後打包上測試環境測試通過後,就生産釋出投入實際使用了,看到自己寫的功能在釘釘上被别人用,其實也有些小小的成就感了,呵呵。

統計下我的代碼量,開發一個新流程,比如直營閉店資産清算處理,一共寫了10個檔案,包括流程圖、流程模闆、郵件模闆、兩個實體類、 DirectShopClosedAssetsLiquidationDataHandle.java、DirectShopClosedAssetsLiquidationController.java、DirectShopClosedAssetsLiquidationServiceImpl.java、IDirectShopClosedAssetsLiquidationDao.java和IDirectShopClosedAssetsLiquidationDao.xml。這裡我偷工減料少寫了一個服務層接口,不影響最終的功能。一共有接近900行代碼。

除了流程的開發,我還負責流程上線前的測試。公司的制度是上線前測試通過,有了測試報告才可以釋出版本上線。于是,這項看似微小的活兒就交給我這個實習生了,測試的時候我是嚴肅的甚至是嚴格的,因為如果因為自己的疏忽或者偷懶,以至于上線後流程不能用被打回來,自己臉上無光,上級怪罪來恐怕飯碗不保了。和我一起流程開發的是帶我的師父,有時候我也能找出它的程式中的小問題。他教給我技術給我答疑,我幫他挑出bug,也算是互相合作、互利共存了。測試也不簡單,測起來小半天就沒了,有時候需要測試的資料環境,為了驗證那一個個測試點,我需要自己往資料庫中加資料,枯燥但我也不敢馬虎。

當然我的工作并不是單一機械的重複,每次的流程工作也都涉及不同方面。有的流程優化簡單,隻需改下節點審批角色。流程中的子表和附件的處理稍有不同。有的模闆涉及到金額合計,這個js代碼對我而言有些挑戰。還有寫定時任務,讓流程逾時自動流轉。寫過的sql語句種類也很全面。以及寫報表時接觸到JPA和Swagger,對我而言的新技術時而出現,整個實習過程,都需要看代碼再嘗試自己寫,不斷學習。

當然,公司制度對實習生也足夠寬松,讓我也能兼顧到學校的研究和學習,以學校為重,有時候居然發現學校所學和實習的某些地方有相通之處,對自己的學習也是有幫助。8小時外求發展,業餘時間我也養成看技術書籍,有計劃地學習一門新技術的習慣了。

公司的環境也值得一贊,水吧的奶茶和飲料零食福利,讓人覺得在網吧辦公。周年慶的趣味運動會也鼓勵實習生參加,隻有動起來運才會來,在趣味運動中收獲了感動與歡笑,也讓我看到了沉悶研究所學生生活之外的另一個世界。還有幸見證iG奪冠的那個星期六,對網遊不感冒的我也被同僚們的激情以及這年輕的氛圍所感染。

回頭看,連我自己都不敢相信,幾個月的實習工作,我一共開發3個新流程、1張報表、優化了19個流程,這小小的數字見證着我的努力和成長,以及我為網魚公司奉獻的小小價值,每一步如履薄冰、步步驚心,也為未來打下了基礎。學習技術隻有多動手嘗試多思考多問,才能有所提高。在離職的時候,我心裡由衷感謝幫助過我的小夥伴們和我的上級,有了他們實習才變得充實,我才能勝任這份工作,更自信。工作中哪怕是一個白眼,也能讓我更加有力量,更何況他們聽說我是複旦的研究所學生,都對我贊歎不已。但學曆隻是一方面,公司其實更看重技術以及勝任工作的能力,就像我的師父,雖然大專文憑,但是技術上絕對是值得我好好學習的。流程經理,同濟的在職碩士,在如何協調工作與下屬溝通這點上也是值得我學習的。研發實習,累并快樂着。面前的路還很長,我還需要不斷地學習,積累更豐富的經驗,準備好迎接未來更多的挑戰。

在網魚研發實習的一段經曆

工作累了喝口奶茶

在網魚研發實習的一段經曆

完成工作發發呆

在網魚研發實習的一段經曆

新人教育訓練合影被擠到最左是我