1. 程式人生 > >做一枚優秀的程式猿,歡迎交流: sunpeng1996 at aliyun dot com

做一枚優秀的程式猿,歡迎交流: sunpeng1996 at aliyun dot com

宜信技術研發中心暑假實習總結

2016年7月5日,我來到宜信技術研發中心-研發九部任職開發實習生,截止到8.25日離職,整整50天。在這裡我度過了一個充實的暑假,學到了太多的東西,在提升自己技術能力的同時也明確了自己的職業方向,收穫頗豐。

                                                                 ------題記

一、初來乍到

2016年7月4日,人生中第四次抵達北京,對這座城市不是很陌生卻沒有好感。匆忙找到落腳的地方,和同學小聚之後,便開始準備第二天的報道。

次日,便前往Soho現代城報道,和我一起入職的員工有哈工大的研一學長、武漢大學的研究生學姐、北郵的應屆生學長和清華大學的應屆生師兄,所以我感到很有壓力,但同時也是對我的一種挑戰。我很幸運,能夠在我大二的暑假有機會來宜信實習。

面試的時候面試的是Java崗,所以已經做好了Java開發的準備,而來到研發九部之後,我遇見了對我職業生涯有很大影響的Team老大(其實我開始以為他叫麒麟的(麒麟之才)),老大同我聊了很久,瞭解我喜歡的方向和技術,我便主動要求去做一些實際的專案,於是開始了和Scala的邂逅。

這裡說明一下我對宜信的初印象:入職的時候提供入職大禮包和免費午餐,宜信的辦公室命名風格獨特,諸如太平洋、大西洋、火星、天王星等等此類。每週的零食和水果發放,取之不盡的coffee、奶茶等等。後來我才瞭解到,福利還有,轉正後可以申請免費的MacBook pro和超大顯示器,加班有免費的晚餐,等等。上班時間均為彈性工時,可以靈活調整。實習生一般9.30到,晚上6.30下班,午間一個小時的休息時間。

二、初出茅廬

自然地,被分配到宜學貸APP開發團隊做後臺,後臺是scala做的。一門新的語言對我來說是一個新的開始,在這之前玩過一點spark,掌握一點spark的RDD(彈性分散式資料集)操作,所以對scala並不是特別陌生。當然了,不陌生和掌握還是有很大的差距。下面我簡單介紹一下scala這門語言。

Scala是一門多正規化的程式語言,一種類似java的程式語言,設計初衷是實現可伸縮的語言、並整合面向物件程式設計和函數語言程式設計的各種特性。對於Java開發者來說,面向物件程式設計應該不是什麼問題,可是對於函數語言程式設計來說,我們就是layman了。習慣了Java,開始學scala的語法倒是沒什麼問題,可是當實際應用的時候,你會發現面向物件程式設計和函數語言程式設計有很大的不同,主要是思維方式的轉變,你不再寫各種控制邏輯,也不要再寫滿天飛的變數。這種思維的轉變困擾我很久,習慣了Java指令式程式設計,所以改變起來不是那麼容易。Scala具有非常強大的Future和Actor等高階特性,這裡不做過多介紹了。

後臺框架用的是Play Framework,這是一個比較新的full-stack框架,包括一個簡單的無狀態MVC模型,具有Hibernate的物件持續,一個基於Groovy的模板引擎,以及建立一個現代Web應用所需的所有東西。

由於play框架比較新,所以只能通過官方文件去學習,對於英語不好的我來說的確是一大挑戰,不過還好有有道詞典(哪裡不會點哪裡)。瞭解了框架,發現它真的很輕量級,作為一個web框架,play要比諸如SSM、SSH輕量級不知道哪裡去。它自帶的模板引擎和jsp很像,所以上手也比較容易。

三、小試牛刀

6天的時間,初步掌握一門語言、一個框架、配好環境。第七天,就開始了我的迭代任務。我們做的是宜學貸APP的後臺,這裡有必要介紹一下專案背景:

宜學貸是面向教育培訓機構和個人推出的普惠金融諮詢服務,為學生及學生家庭提供信用借款諮詢服務,推薦便捷、廣泛的資金來源,幫助學生解決資金壓力,獲得教育培訓機會。
宜學貸填補了國家助學貸款以外的市場空白,無論是學歷教育、 IT培訓、語言培訓或是藝術培訓、職業技能培訓等專案,宜信普惠均可以根據教育培訓機構的特點,結合學生的具體需求,量身定製不同的“宜學貸”解決方案, 使學生可以輕鬆通過分期付款的形式來完成學業,形式更靈活,申請更便捷。

宜信普惠作為 “教育培訓信用借款”的專業借款諮詢服務機構,先後獲 得“教育培訓助學貸款領軍企業”及“百萬讀者推崇的教育培訓信貸服務機構”稱號。宜學貸目前服務網路覆蓋北京、上海、廣州等近40個城市,已為1000多家全國性、地域性合作伙伴的數萬名學員及學員家庭提供了便捷服務,實現信用的價值。

目前,為增強進件時效、簡化申請流程,宜學貸產品線已經開發並運營了一款宜學貸APP應用,為客戶提供借款申請、借款查詢、還款查詢等功能。
隨時業務的不斷髮展、變化,秉承引領市場的宜信理念,需要適時推出一款全線上的宜學貸APP應用,應用更加先進、成熟的驗證、防偽技術,在保證風險可控的前提下,實現借款申請、快速稽核、非面對面簽約、按客戶時間需求選時放款、線上還款等功能,更好的滿足學貸市場的需求,更好的服務於宜學貸的客戶。

初來乍到,對業務的瞭解真是知之甚少,所以在完成每一項迭代任務的時候,都要熟悉相應的業務。總結一下自己完成的迭代任務,六個迭代週期,大大小小我記得完成這些:

  • 完成親屬稱謂後臺靈活控制

  • 完成身份證兩次輸入不一致時身份證資訊入庫;

  • Boss身份證展示

  • Boss下載合同PDF

  • Boss使用者登出

  • 線下合同可上傳銀行卡資訊

  • 完善進件聯絡人親屬稱謂判定

  • 完善手持身份證DAO

  • 完成最新需求上傳身份證、銀行卡統一介面的編寫和實現

  • 修復一些bug

  • 完成boss每日定時器執行sql並且展示

  • 完善boss使用者管理搜尋模組

  • 完善使用者管理模組

  • 完成位置轉換成經緯度的介面,以及計算距離

  • 增加聯絡人親屬稱謂時錯誤資訊返回的code碼

  • 身份證驗證時,增加兩次認證不一致時也入庫

  • (BOSS)放款對賬需要加關鍵資訊並增加按日期查詢

  • 完善boss端使用者管理模組(查詢和登出問題)

  • 放款對賬需要加關鍵資訊並增加按日期查詢

  • 手工改為線下籤約的訂單,在收到信審通知時不要重新獲取簽約方式

  • (完善)boss使用者登出,刪除使用者token

  • (BOSS)放款點選按鈕,必須返回提示。並增加放款列表

  • 計算兩個經緯度之間的距離

  • 根據商家地址獲取經緯度

  • (BOSS)可以通過輸入手機號碼,查詢對應的機構碼

  • 定時執行進件按城市統計和每日統計的SQL,插入資料庫中

  • 找到點選任何按鈕,(經常)頁面意外跳轉到登陸介面的原因

  • 重構定時查詢功能,完成定時執行sql

  • 修復boss端頁面點選放款詳細檢視後,跳出到登入頁面的bug

  • 完成boss使用者登出,刪除使用者token後出現加密解密異常,返回錯誤token的錯誤co de碼

  • 完善手持身份證DAO

  • 身份證資訊更新改為新添

  • Boss端配置管理功能,原型設計

  • 配置組各項配置的合理性校驗

四、工作日常

每個研發團隊都有自己團隊的合作模式,我們team的程式碼管理工具採用基於內網的gitlab,任務進度管理由開始的Tower轉而現在的Trello。每日一次的站會,跟蹤進度,每個人輪流說自己昨天完成的任務和今天即將完成的任務。每週一次的技術分析會,分析如何高效地工作和學習、演算法或者技術工具相關等等。不定期的小組討論會,由於團隊成員互相挨的比較近,所以有什麼疑問隨時提問,隨時有人給你解答。老大和鵬哥離得我很近,所以每當我有什麼疑問,都會隨時請教他們。

學貸團隊人員由產品經理、安卓團隊、iOS團隊、後臺、測試和運維組成。我想來到宜信之後,很大的收穫是熟悉了大公司的軟體工程開發流程,從產品經理引進需求(開需求分析會)、到組內細化需求(把需求拆分為任務)、再到組內分配任務(開小組討論會)、獨自開發 、開發完畢後review code、Acceped Merge Request、合併到master,然後測試伺服器部署、測試人員測試,最後到這一迭代版本的上線。整個一套流程下來,你會收穫到不少東西。我在這裡的50天,支援了6個迭代週期,平均每個迭代週期為一週左右,由於學貸是今年3月才開始做的APP,所有目前學貸還不是特別穩定,大部分的需求都是新功能而只有少部分的維護,所以對於我來說是一個很大的挑戰也是一個很好的機遇。

除了支援APP的後臺,還對宜學貸APP應用運維管理系統進行功能開發(boss端),由於boss端是web專案,所以我上手起來還是比較容易。而對於學貸APP,前後端分離的專案,測試起來就要自己寫測試用例進行單元測試和整合測試。我覺得有必要強調一下測試用例的重要性,因為作為一名優秀的coder,可能寫測試用例的時間要多於寫code的時間,測試用例是對於你思維嚴謹性的體現,你會知道你寫的code有哪些隱患和不足,減少bug。測試人員真正的工作不是給你檢查出bug,正常到他們手中的版本應該沒有bug,當然了,這種情況過於理想。

五、實習收穫

有一點很大的感觸是老大教會我的,在開始coding之前,一定要充分明白你在做什麼,就是你一定要充分理解需求,充分理解產品經理的話,然後在透徹地理解需求的基礎上,結合實際業務場景去coding。不要盲目地去寫code,一定要明確目標。

每一次和老大探討,老大都會教會我很多東西,12年工作經驗,老大的技術能力早日超出架構師的水平,讓我深深佩服。他總是能從各個角度出發思考問題,對我們不能解決的問題提出解決方案。具有很強的大局觀,能夠用長遠的眼光審視程式碼、重構程式碼。

在這裡結實了很多朋友,full-stack的老大、嚴謹的鵬哥、幽默的傑哥、帥氣的強哥、熱心的一為等等等等,在工作中給我莫大的幫助和指導,感謝你們,希望有機會能夠再一起合作。感謝欣姐,對我姐姐般的照顧。再次感謝浩瑜學長內推,感謝瀟瀟姐對我入職前的答疑解惑。

瞭解了大公司職位晉升機制,在公司裡晉升與否不關乎你的學歷,而是你的個人能力、你的KPI、你關鍵時刻能夠頂住壓力、你的主觀能動性和自驅力。以前自己經常糾結是否讀研,現在我想我已經很明確了。當然,如果讀研玩一些高科技的東西,也未嘗不可,很多公司在部分崗位招人的時候,還會限制學歷,是吧?

暑假實習之餘讀了幾本書,分享給大家:

  • 《程式碼整潔之道》:只讀了前幾章。感謝老大,讓我學會如何寫出“優雅”的code,這本書讀完或許沒什麼卵用,但你會下意識地審視自己的程式碼的可讀性、可維護性和可擴充套件性。這種意識要比你會寫出優秀程式碼重要得多。
  • 《大資料架構師指南》:這本書很適合想做資料卻不瞭解大資料的人閱讀,此書介紹了大資料的一些技術,諸如Spark、Hadoop、Storm及大資料視覺化的相關技術和背景,會讓你對Big Data有一個比較巨集觀的認識,清華大學出版,還不錯。
  • 《資料探勘導論》:記得以前立過flag,不搞機器學習,獨醉Java。我想可能當時太年輕了,這本書寫的通俗易懂,導論嘛,沒有太多複雜的數學公式,入個門還是不錯的。想做資料探勘的童鞋可以讀此書入門,歡迎與我交流,一起進步。
  • 《機器學習實戰》:這本書只看了前幾章,自己閒暇之餘用python實現了比較簡單的演算法,例如KDD、決策樹、Logistic迴歸等等比較簡單的演算法,大三繼續看下去,把各種演算法實現一遍。
  • 《快學Scala》:學習Scala入門推薦首選,想當時六天時間一門語言、一個框架大致內容記一遍也是挺不容易的,這本書說實話有的地方翻譯的不是很準確,但是入門絕對夠了,寫的比較易懂。如果想了解scala的更多細節,不妨讀一讀《Scala程式設計》這本書,是老大推薦的,需要pdf版的可以私戳我。

六、娛樂時光

暑假的娛樂時光非常瀟灑,在傳媒大學附近住10天左右之後,我便如約住到哥們寢室去了—北京化工大學,在那裡:二人世界咔嚓,空調WiFi西瓜,2K15一打,雷霆火箭互殺。我想這也是為什麼在北京近2個月未曾感到一絲孤獨,因為有兄弟陪伴。火鍋、燒烤、烤肉、驢肉火燒、海底撈、西餐、綠茶、必勝客,還有吃的最多的牛肉炒飯。我想這些都是我珍貴的回憶。

住在化工40天,節省了約3000元的住宿開支,四年兄弟情,無以表達感謝,來日方長,希望情誼長存。

七、未來展望

我想我已經決定去做Distributed computing和Data Mining了,毫不猶豫,下學期加入王老師的海量資料研究中心,希望接觸到更多實際的專案。

之前把玩過Hadoop、Spark、Strom,也就是寫寫WordCount,搭搭偽分散式或者本地分散式環境,已經忘得差不多了,接下來抽時間細作WordCount,接觸實際專案,把上述框架把玩一遍,深入瞭解下ZooKeeper、Hive、Pig、Hbase此類,之前瞭解的不夠深入,當然,爬蟲還是要學的,暑假之餘瞭解了py和Scrapy,python的確是一門出色的語言,能做很多事同時也非常簡潔,接著學學Scrapy,爬爬網站。至於Lucene、Nutch、Solr此類,有時間再學深入瞭解吧。還需要掌握下Nginx,目前做負載均衡用的還是比較多的,我們的專案也在用到。

記得和老大說過這樣一句話:我只能看得到自己一年後的樣子。正如老大所說,這樣的人生才有意義,不然,倘若你看得到十年後的樣子,豈不是人生很無聊嗎?

八、特別鳴謝

我想我最應該感謝的是研發九部老大徐Sir,我的二面面試官,是您給了我實習的機會,我一直心存感激,珍惜在宜信實習的每一天,沒有太多機會和您促膝長談,只是離職前有機會和您聊一次,感觸頗深。誠然,基礎非常重要,我會謹記您的教誨,夯實基礎,努力成為一名合格的軟體工程師。

再次感謝Team老大,您這段時間教會我太多東西,不僅僅是技術,還有其他更重要的東西。您是一名出色的Leader,善於與人溝通交流,積極組織團建,帶動氣氛,當Team裡有人遇到困難的時候,您都同他長談,解決疑惑。您是我的榜樣,我希望以後可以跟您一樣出色。

再次感謝鵬哥、傑哥、一為,認真耐心地回答我每一個問題,教會我很多技術細節,希望有機會能再次合作,像你們學習。

附上我的離職申請:

最後送給自己一句話,與君共勉:

通曉天下武功而百無一用,其實和不出家門的書生也沒太大的區別;

學盡世上技術但做不出成功的產品,一樣是毫無意義。

所謂知行合一,實在缺一不可!

一萬小時的努力是任何人從平凡到超凡的必要條件!