天天看點

超級硬核!Java 自學路線總結,已 Get 大廠 Offer,建議立馬收藏!

還是要說一句,“大廠”可能有标題黨的嫌疑,但我覺得已經屬于比較輕微的那種了,CSDN 的小夥伴們應該能接受。有一說一,能進來看的小夥伴都算是賺到了,認認真真看完這篇内容後,我敢保證,一定會大有所獲!trust me!

對于校招來說,面試官也清楚,應聘者的項目經驗不可能太多的,是以各位學弟學妹們心裡一定要拎得清,該把重心放在哪!大家一定要明白,語言隻是工具,對代碼的了解才是核心。面試的時候,不管是大廠還是小廠,考察的核心永遠都是基礎知識,以及解題的思路。

至于社招,重點當然是做了什麼項目,遇到了什麼問題,自己是怎麼解決的,尤其是高并發高性能這塊,是加分項。

下面來分享下我這些年學習 Java 的心得經驗吧,希望能給大家一點點幫助。

01、Java 基礎

前面已經說過了,校招的時候最注重的是基礎知識和解題的思路,有沒有項目經驗其實是可以往後放一放的。面試官首先期望的是,你的基本功是紮實的,學習能力是能跟得上的。

要想基礎紮實,我給大家推薦一份 GitHub 上星标 115k+ 的學習資料,Java 文法、Java 集合架構、Java 并發程式設計、Java IO 和 Java 虛拟機,這些基本知識點都包括在内了,詳細的内容可以通過下面這篇文章了解。

太贊了,GitHub 上标星 115k+ 的 Java 教程!

我列一下 Java 基礎部分要掌握的知識點。

超級硬核!Java 自學路線總結,已 Get 大廠 Offer,建議立馬收藏!

書籍的話,我推薦《Java 核心技術卷 1》,過濾掉裡面圖形化界面的知識點,這部分知識無論校招還是社招,都不會再考了。已經過時,出版社之是以還印這部分内容,除了不專業,最大的目的就是讓書貴一點。

并發程式設計和 Java 虛拟機是其中的難點,這部分内容怎麼學呢,首先,并發程式設計可以推薦看看阿裡的幾位大佬重寫的Java 多線程并發小冊子。然後,就是周志明老師的《深入了解 Java 虛拟機》,是部大部頭。

書裡面不一定都是精華,但好書還是值得花時間去認真讀一讀的。

不要隻是看書,一定要多練習,隻有多練多去總結,才能把裡面的知識點吸收消化,否則可能隻是過了過腦袋,什麼都沒記得住!

02、Spring 架構基礎

可以直接上手學習 Spring Boot,但我還是建議大家先看一看老三樣,Spring+SpringMVC+MyBatis,SSM 學得好,對 Spring Boot 有着巨大的幫助,畢竟 Spring Boot 不是新的技術,它隻是對這些東西做了約定俗稱,讓開發的效率提高了,本質上的東西還是老三樣。

其中 Spring 是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器架構。它可以裝載 Bean(也就是 Java 中的類,包括 Service、Dao 裡面的),有了控制反轉這個機制,我們就不用在每次使用類的時候先初始化,用 new 關鍵字聲明。另外,Spring 的 AOP、事務管理等等都是我們經常用到的。

SpringMVC 分離了控制器、模型對象、分派器以及處理程式對象的角色,這種分離讓它們更容易進行定制。

用戶端發送請求到 DispacherServlet(分發器)

由 DispacherServlet 控制器查詢 HanderMapping,找到處理請求的 Controller

Controller 調用業務邏輯處理後,傳回 ModelAndView

DispacherSerclet 查詢視圖解析器,找到 ModelAndView 指定的視圖

視圖負責将結果顯示到用戶端

MyBatis 是一個支援普通 SQL 查詢,存儲過程和進階映射的優秀持久層架構。

MyBatis 對 JDBC 做了封裝,它讓資料庫底層操作變的透明。 MyBatis 的操作都是圍繞一個叫 sqlSessionFactory 的執行個體展開的,通過配置檔案關聯到各實體類的 Mapper 檔案,Mapper 檔案中配置了每個類對資料庫所需進行的 SQL 語句映射。在每次與資料庫互動時,通過 sqlSessionFactory 拿到 sqlSession,再執行 SQL 指令。

超級硬核!Java 自學路線總結,已 Get 大廠 Offer,建議立馬收藏!

在學習 SSM 和 Spring Boot 之前,确認一下上圖中的基礎知識有沒有掌握,如果都掌握了,再開始學習會比較輕松一點。

Spring Boot 是由 Pivotal 團隊提供的一個全新架構,其設計目的是用來簡化 Spring 應用的初始搭建以及開發過程。該架構使用了特定的方式來進行配置,進而使開發人員不再需要定義樣闆化的配置。說句人話就是,Spring Boot 不是什麼新的架構,它預設配置了很多架構的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的架構。

使用 Spring Boot有什麼好處其實就是簡單、快速、友善!在沒有 Spring Boot 之前,我們要搭建一個 Web 項目,通常要這麼做:

1)配置 web.xml,加載 Spring 和 SpringMVC

2)配置資料庫連結、配置 Spring 事務

3)配置日志檔案

4)部署 Tomcat 運作 Web 項目

有了 Spring Boot 之後呢,再也不用折騰這些了,僅僅隻需要非常少的幾個配置就可以快速地搭建一套 Web 項目!

使用 Spring Boot 可以非常友善、快速搭建項目,使我們不用關心架構之間的相容性,适用版本等各種問題,我們想使用任何東西,僅僅添加一個配置就可以,是以使用 Spring Boot 非常适合建構微服務。

SSM 可以到 B 站上看江南一點雨的視訊教程。

https://www.bilibili.com/video/BV1NX4y1G7wx

Spring Boot 的話,可以搜“純潔的微笑”的部落格,閱讀量還是挺大的。

03、Java 進階

這時候,可以看看 Java 聖經《Java 程式設計思想》,或者新書 On Java 8,在 GitHub 上有開源。

https://github.com/LingCoder/OnJava8

這是思想層面的書,記得不适合作為入門書來看的,很多大佬不明是以會給初學者推薦這本書的,推薦一個勸退一個,真的。等有了一定的 Java 程式設計經驗之後,再看這本書就會有一種豁然開朗的感覺,真的。

這本書讀完後,記得寫個小項目,可以是個簡易版的聊天室,總之得有一個,加上前面的 Spring 架構基礎,寫這樣一個系統我覺得還是可以做到的。聊天室會涉及到 Java 并發程式設計,網絡通信。

做完小項目之後,又該看書沉澱了,比如說《Effective Java》,這本書不算厚,但都是作者在編寫 Java 代碼時候的最佳實戰和經驗規則,能幫助我們寫出清晰、健壯、高效的代碼,裡面其實涉及了蠻多的面試考點,比如說:

局部變量的作用域要最小化

自動裝箱和自動拆箱

枚舉單例的寫法

為什麼覆寫equals時總要覆寫hashCode

為什麼for-each循環優先于傳統的for循環

這些都是我臨時想到的,強烈大家把這本書放在手邊,沒事的時候看一遍,然後背會——真的是背後。

然後,還有一本阿裡出品的《Java 開發手冊》,最新版是嵩山版,仍然是最佳實戰經驗,并且是一線大廠總結出來的開發規約,可想而知它有多重要!

當然了, 如果第一次沒有看懂《深入了解 Java 虛拟機》,沒關系,可以在這個階段再深入的學習一遍。把 Java 的記憶體模型,各種鎖的原理,Java 虛拟機的垃圾回收機制等等掌握透徹,面試的時候是重點要考的内容。

04、Java Web 進階

這時候,要學的,可就不隻是 Java 的相關知識了,要跳出這個圈子。

第一,要學 Linux,基本上所有的伺服器都是 Linux 環境,尤其是正式環境,不存在圖形化界面操作的,是以每個立志要做工程師的學弟學妹,一定要把 Linux 重視起來,要知道什麼是 Shell,什麼是 Vim,Linux 的基礎指令等等。

等阿裡雲或者騰訊雲、華為雲搞活動的時候,可以買個學生版的伺服器,随便折騰下。推薦的書,就是《鳥哥的 Linux 私房菜》,算是一本暢銷書了。

第二,要學作業系統,最好把《深入了解計算機系統》這本書給看一看,這本書看起來有難度,可以多看幾遍,第一遍,大緻過掉裡面的知識點,第二遍精讀,第三遍再溫習。

學生時代的時間還是足夠的,是以一定不要把所有的時間都花費到打遊戲上面。

第三,要學資料庫,推薦《SQL 必知必會》和《MySQL 必知必會》,兩本很小的冊子,很快就能刷完了。然後再學一下 Redis,這也是面試考試的重點,以及 MongoDB。

第四,要學計算機網絡,也是面試要經常考的内容,比如說經典問題:

TCP 為什麼三次握手?四次揮手?

TCP 為什麼要有 TIME_WAIT 狀态?

TCP 為什麼是可靠傳輸協定,而 UDP 不是?

鍵入網址到網頁顯示,期間發生了什麼?

HTTPS 握手過程是怎樣的?

入門書有《圖解 HTTP》、《圖解 TCP/IP》、《網絡是怎樣連結的》,再深入的話推薦《計算機網絡:自頂向下》。

第五,要學資料結構與算法,這塊我也強調過多次了,基本上面試的重點吧,無論什麼時候,程式=資料結構+算法這種說法都是成立的。Java 中的線性資料結構有數組、連結清單、棧、隊列,非線性資料結構有樹、哈希表、圖等等。常見的排序算法有:選擇排序、冒泡排序、插入排序、快速排序、歸并排序、希爾排序、基數排序、計數排序、桶排序、堆排序等等。常見的查找算法有:順序查找、二分查找、插值查找、斐波那契查找、樹表查找等等。常見的算法有:KMP算法、貪心算法、回溯算法、動态規劃、遞歸算法等等。

這裡給大家推薦一份純 Java 版的 LeetCode 刷題筆記吧。作者曾給我說,刷完 100 道題之後,發現真的是愛上了刷題。基本上後面的每道題都可以想出一種思路,甚至就是最優解,還會萌生一些别人沒想到過的解法——基本上隻要算法學得好,大廠小廠的 offer 基本上就 70% 的把握了!

刷完 300 道 LeetCode 題後,我膨脹到要飄起來了

05、加分項

多少學一點前端知識吧,并不是非要做全棧開發工程師,可以在做練手項目的時候能順手一點,畢竟練手的時候和公司上班不一樣,後端隻幹後端的活,一個人還是要能搞定一個練手項目的,JavaWeb 又離不開前端,基本的 JavaScript、CSS 和 HTML,還是盡量掌握一些。

熟練使用各種工具,比如說 Intellij IDEA,能提高編寫代碼的效率,比如說 Git,能提高“區域網路協作開發”的效率,比如說抓包工具,用來測試,比如說反編譯工具,用來深入檢視Java 位元組碼,等等。

對一些新技術有敏感度,比如說伺服器治理架構 Dubbo,比如說網絡程式設計 netty,比如說消息通信 rabbitmq,比如說伺服器 Nginx,比如說虛拟機化 docker 等等,這些知識都有掌握。

希望大家都能找到一份稱心如意的 offer!據說點贊的運氣都不差。