03.06 應屆生如何自學 Java、成功拿下騰訊 Offer?

應屆生如何自學 Java、成功拿下騰訊 Offer?

作者 | 王彥新

本人19本科應屆生,專注Java後臺學習,已籤騰訊WXG的offer(日後轉C++)。

眾所周知,鵝廠後臺一直以C++為重,面試官也是做C++開發。但是語言只是工具,對代碼的理解才是核心。面試時重點考察的是基礎知識,以及解題的思考過程。憑藉著對Java的理解去回答,也受到了面試官的認可,最終幸運地拿到offer。

一直以來,通過很多程序員大牛聚集地,學習到了很多經驗方法,也少走了很多彎路。感謝這些平臺給予我的幫助,同時也分享一下我的Java學習經驗。

Java基礎

做Java開發,Java基礎是最需要下功夫的一項。在校招時最注重的就是基礎,拿不出像樣的項目沒關係,但是基礎萬萬不可不牢固。

  • 想要基礎紮實,看書沉澱是必須的,有一些編程基礎的同學推薦閱讀《JAVA核心技術 卷1》,可以跳過圖形程序設計、事件處理、Swing、applet以及部分日誌章節,如果比較吃力也可以先跳過多線程章節。
  • 看完一本書,一定要多加練習去理解和吸收。科班的同學可以用Java寫實驗,寫的同時一定要多多運用學到的特性。練習階段各種設計模式套上去用,不要怕笨重,即使是濫用特性和設計模式也是一種有效的學習。
  • 有了一定量的編程經驗後,可以再回過頭將《JAVA核心技術 卷1》速讀一遍,查漏補缺。同時我們開始擴寬我們的知識領域,開始進行JavaWeb的學習。

JavaWeb基礎

JavaWeb是一系列技術的綜合,也是大多數Java學習者日後的技術方向。及早了解JavaWeb也有利於更深層面理解,Java在完整的應用中,是如何與各個模塊交互併發揮作用的。

基礎篇包括Servlet和JSP的學習、tomcat的使用、理解MVC分層模式、MySQL的基礎用法及JDBC、瞭解HTTP協議。

  • 這部分的學習,我主要通過《Head First Servlets and JSP》這本書。這本書輕鬆幽默讀起來很愉快,但是實在是很厚,而且部分技術已經過時,有時間的同學可以選讀。
  • 可以看到這部分的內容是很雜且多的,此階段注重廣度的基礎學習,日後慢慢深入。這裡推薦個在線教程:
  • Servlet系列教材(一)-基礎-教程:開發第一個Servlet - how2j.cn
  • http://how2j.cn/k/servlet/servlet-eclipse/558.html
  • MySQL系列教材(一)-安裝mysql-server-how2j.cn
  • http://how2j.cn/k/mysql/mysql-install/377.html
  • Tomcat系列教材(一)-教程-how2j.cn
  • http://how2j.cn/k/tomcat/tomcat-tutorial/541.html
  • JSP系列教材(一)-教程-how2j.cn
  • http://how2j.cn/k/jsp/jsp-tutorials/530.html
  • HTTP協議系列教材(一)-教程-how2j.cn
  • http://how2j.cn/k/http/http-tutorials/568.html
  • JDBC系列教材(一)-Java使用JDBC之前,先要準備MySQL
  • http://how2j.cn/k/jdbc/jdbc-mysql/386.html
  • MVC系列教材(一)-教程-how2j.cn
  • http://how2j.cn/k/mvc/mvc-tutorials/561.html
  • 重點要理解Servlet的原理以及生命週期。在完成這一部分的學習後,可以簡單的做個小網站,包括註冊登陸,增刪改查等功能。如果想繼續折騰,可以考慮將項目部署在阿里雲或者騰訊雲上,一個完整可供他人訪問的項目,所獲得的成就感是非凡的。
  • 部署到Linux系列教材(一)-介紹-如何把J2EE應用部署到Linux - how2j.cn
  • http://how2j.cn/k/deploy2linux/deploy2linux-breif/1591.html

Java進階

Java始終是我們JavaWeb開發體系中最核心的一環,唯有不停地探索,才能把握住方向和機遇。

  • 在做完一個簡單完整的JavaWeb項目後,我們對代碼的認知和理解會提高不少,這為接下來的深入學習打下了基礎。Java聖經《JAVA編程思想》值得仔細品讀,作者的功力十分深厚,即使很多內容還無法理解,但每次讀完一定會有所收穫。同樣建議跳過“圖形化用戶界面“章節,這是一本伴隨我們技術成長的好書,買一本放在旁邊,摸著就有底氣。
  • 讀完編程思想,建議寫一個有一定複雜度和代碼量的後臺項目。可以是一個HTTP服務器,一個大型聊天室,也可以參考我的項目實現一個DBMS:wwwyanxin/wyxDBMS。這一部分要強化我們的Java基礎,同時也為日後的招聘積累項目經驗。
  • 做完項目我們又該看書沉澱技術了,此時我推薦《Effective Java》,這本書並不厚但是乾貨十足,作者講述Java的最佳實踐和經驗規則。它能幫助我們寫出清晰、健壯、高效的代碼,同時這本書涵蓋了非常多的面試考點,一定要牢記於心!
  • 最後還要深入學習Java多線程技術以及Java虛擬機原理,這兩部分難度較大,理解起來比較抽象。也許日後工作中,我們很少遇到併發問題,不一定有機會進行JVM調優,但是這部分一定要認真對待,越理解底層寫出的代碼越高效,查bug時越準確,另外更重要的是面試常考!推薦兩本書《Java併發編程的藝術》《深入理解Java虛擬機》,以及併發編程網(http://ifeve.com/)重點掌握Java內存模型,各種鎖的原理及應用,JVM GC垃圾回收原理。

JavaWeb進階

圍繞整個Java體系學習,我們要築起高高的城牆。

  • Linux,現在的服務器基本都是Linux系統,也不存在圖形化操作界面。作為開發工程師推薦閱讀《The Linux Command Line》,有中文在線免費版本TLCL。那本《鳥哥的Linux私房菜》更適合運維工程師,就不推薦給大家了。學習的時候,可以去阿里雲或騰訊雲租一個學生服務器,每個月大概10元左右,直接ssh到雲服務器上操作,能更好地模擬公司的開發及生產環境。
  • 操作系統原理,主要學習進程控制調度、進程通信、存儲和設備管理、文件管理以及系統安全。這一部分可以看教材或者自行找一些網課補充。
  • 數據庫,可以買一本《MySQL必知必會》小冊子作為基礎入門,沒有什麼理論的堆砌,是一本實踐指南。學習數據庫原理可以閱讀《MySQL技術內幕》,索引優化、事務、鎖、範式都是重點。
  • 網絡協議,入門可以讀《圖解HTTP》、《圖解TCP/IP》,如果要深入研究可以讀《UNIX網絡編程 卷1》和《TCP/IP詳解 卷1》。大多數開發者接觸HTTP和TCP、UDP、IP協議比較多,所以對整體網絡協議棧有個完整了解是必要的。
  • 數據結構與算法,數據結構是算法的基礎,一定要清晰明瞭。算法則是筆試面試中無法繞過的難關,推薦去LeetCode刷題,現在也有了中文官方網站(https://leetcode-cn.com/)。從easy難度開始刷起,積累一定題量之後,做算法題會很快找到類型方法。
  • SSM框架,Spring+SpringMVC+MyBatis可以說是開發必備了,但框架只是錦上添花,不要太依賴框架進行學習。當我們能不依賴任何框架開發完整項目時,才是真正掌握了它。最為重要的是理解Spring的兩個特性:IOC反轉控制和DI依賴注入。明白實現原理以及為什麼要使用Spring,只有這樣才能在層出不窮的框架中靈活應對,立於不敗之地。
  • Spring系列教材(一)-教程-how2j.cn
  • http://how2j.cn/k/spring/spring-ioc-di/87.html
  • Spring MVC系列教材(一)-教程
  • http://how2j.cn/k/springmvc/springmvc-springmvc/615.html
  • Mybatis系列教材(一)-基礎-入門教程-how2j.cn
  • http://how2j.cn/k/mybatis/mybatis-tutorial/1087.html

加分技能

  • 前端。一些崗位要求全棧,即使不是全棧,懂得前端技術的後臺能寫出更加合理的接口,與前端工程師合作起來會更順利,理解項目更通透,解決問題更準確迅速。
  • 學習一門動態語言。動態語言開發起來更靈活迅速,同時比較動態靜態語言的特點,可以更好去提煉跳出語言束縛的代碼思想,推薦學習JavaScript或者Python等。
  • 大數據。大數據開發近幾年也是熱門方向之一,有興趣的同學可以學習。
  • 熱門工具及框架,包括分佈式Dubbo、緩存優化redis、nginx、虛擬化技術docker等。一般來說本科應屆生不會要求很高,但是要對熱門技術有一定的瞭解。

常用網站推薦:

  • GitHub: Build software better, together(https://github.com/);
  • Java學習:How2J 的 Java教程(http://how2j.cn/);
  • Linux命令行:TLCL(http://billie66.github.io/TLCL/index.html);
  • 算法:(https://leetcode-cn.com/);
  • 正則表達式測試:PHP, PCRE, Python, Golang and JavaScript(https://regex101.com/)。

作者:王彥新,就職於騰訊公司,WXG開發工程師,熱愛技術,熱愛生活。

免責聲明:作者獨立觀點,不代表CSDN立場。


分享到:


相關文章: