大家好,我是大彬~
我本科學的不是計算機,大四開始自學Java,並且找到了中大廠的offer。自學路上遇到不少問題,每天晚上都是堅持到一兩點才睡覺,最終也拿到了30w的offer。
在這裡也提醒學弟學妹們,要儘早確定以後的方向,讀研還是工作,找工作的話,也要儘快確定工作崗位,想轉行的,需要花更多的時間準備。很多同學到了大四快畢業的時候,才思考自己未來要做什麼,這個時候已經有點晚了。如果錯過了校招,走社招渠道去找工作,難度將會提升一個等級,到時後悔也來不及!
好了,下面給大家分享一下我的自學經驗。
首先看一下Java學習路線圖:
內容還是挺多的,需要不斷堅持!
給大家分享一份精心整理的大廠高頻面試題PDF,需要的小夥伴可以自行下載:
http://mp.weixin.qq.com/s?__b...
Java基礎
初學者的建議就是:多敲程式碼!多敲程式碼!多敲程式碼!
學習程式設計就是看書加實踐,要多動手,不然看過的知識點很快就會忘,而且多實踐也會遇到很多坑,豐富經驗。 可以到github上找一些專案練練手,通過做專案鞏固知識,而且每實現一個功能之後,會有滿滿的成就感,也會激勵你不斷去學習。
推薦書籍:
- 《head first java》
- 《JAVA核心技術卷》
head first系列的書籍講解比較有趣,比較好理解。《JAVA核心技術卷》難度相對適中,內容也比較全面,部分章節(如Swing)可以跳過。
Java基礎知識主要有:
- 類與物件
- 物件導向特性
- 抽象類和介面
- 資料型別、重寫過載、封裝繼承多型
- 容器類Map/List/Set等
- IO操作:InputStream , OutputStream, Reader/Writer, 檔案讀取,各種流讀取等
- 異常處理
- 反射機制
- 泛型
- final關鍵字的作用
- throw和throws
- 自定義異常
- 內部類
- 匿名內部類
IO流操作:
- File類對檔案的操作
- 位元組流寫資料
- 位元組流讀資料的方式
- 位元組流完成視訊檔案的複製
- 編碼表
- 字元流寫資料
- 字串讀資料
- 字元緩衝流的使用
- 標準輸入輸出流
- 物件序列化流
- 記憶體操作流
- RandomAccessFile
- SequenceInputStream
- 壓縮流/解壓縮流
集合基礎:
- 集合框架
- ArrayList集合的特點
- ArrayList的構造方法
- ArrayList的常用操作
- HashMap、HashTable、Hashset
- HashMap原始碼
- 迭代器Iterator
- Map集合遍歷
- LinkedHashMap
- ConcurrentHashMap
Java Web
Java Web是一系列技術的綜合,也是大多數Java開發者的技術方向。有必要學習一下。這部分可以看看視訊教程。
視訊推薦【尚矽谷】的JavaWeb全套教程,HTML/CSS/JavaScript等跟前端相關的可以倍速觀看。
https://www.bilibili.com/vide...
【黑馬程式設計師】的Java web教程總體也不錯,IDEA版本的:https://www.bilibili.com/vide...
HTML&CSS(瞭解)
- HTML基本使用
- HTML常用標籤
- CSS選擇器
- HTML5新特性
- CSS3新特性
JavaScript(瞭解)
- JavaScript嵌入方式
- JavaScript基本語法
- ECMA6新特性
- JavaScript流程控制
- 陣列、函式、物件
- JavaScript物件導向
- 常用內建物件
- JavaScript事件繫結/觸發
- JavaScript DOM操作及API
- JavaScript BOM物件及API
Servlet
- Servlet概述
- Servlet執行過程分析
- Servlet的實現方式分析
- Servlet的類試圖詳解
- Servlet的生命週期
- Servlet的執行緒安全問題分析
Java EE
- JavaEE規範
- 靜態資源和動態資源
- C/S和B/S
- Tomcat概述
- Tomcat下載與安裝
- Tomcat各版本所需支援
- Tomcat啟動及啟動問題分析及解決
- Tomcat目錄結構
- JavaEE工程概述
工具
首先是 Git,版本控制工具,必須掌握。很多剛工作的同學,可能經常會遇到Git相關的問題,如程式碼衝突、分支合併等,所以還是得把Git學會。推薦狂神的視訊:
Git零基礎入門到實戰詳解:
https://www.bilibili.com/vide...
接下來是 Maven 和 Gradle,構建工具,用來構建和管理各種專案。
maven零基礎入門:
https://www.bilibili.com/vide...
Git基礎知識
- Git概述和特點
- Git基本概念
- Git歷史版本控制
- Git分支版本控制
- Git遠端倉庫
- Git遠端託管平臺
- Git解決衝突
Maven基礎知識
- Maven環境搭建
- Maven構建&自動化構建
- 本地倉庫&中央倉庫
- Maven建立Java、Web工程
- pom.xml、依賴管理
- 座標、依賴、生命週期等
- pom檔案依賴傳遞介紹
- 依賴衝突的解決
- Maven專案繼承的關係
- Maven專案聚合的關係
- 分模組搭建聚合專案
- 私有伺服器倉庫介紹和搭建
- 本地資源上傳到私有伺服器
- 從私有伺服器下載資源到本地
- 安裝第三方資源到本地倉庫
- 安裝第三方資源到私有伺服器倉庫
Docker基礎知識
- Docker映象命令
- Docker容器命令
- Docker部署MySQL、Redis等
- 容器儲存轉為映象
- 映象備份
- 映象恢復和遷移
- Dockerfile
- Docker Compose 常用命令
- Docker私有倉庫使用
資料庫
資料庫也是必學的一塊內容,主要是Mysql資料庫。書籍推薦:
- 《mysql必知必會》
- 《高效能mysql》
《mysql必知必會》主要是Mysql的基礎語法,很好理解。後面有了基礎再看《高效能mysql》,這本書主要講解索引、SQL優化、高階特性等,很多Mysql相關面試題出自《高效能Mysql》這本書,值得一看。
MySQL基礎知識:
- 增刪改查
- 事務特性、隔離級別
- 索引原理、優化
- b+樹
- 最左匹配原則
- 儲存引擎
- MVCC
- 執行計劃
- 分庫分表
- 日誌,bin log/undo log/redo log
- 資料的複雜查詢
- 約束的使用
- 多表關係(一對一、一對多、多對多)
- 資料庫的還原和備份
- 多表查詢操作
- 事務介紹
- 事務的隔離
- 資料庫的使用者管理和許可權管理
- 檢視的使用
- 儲存過程的使用
- 觸發器的使用
- 儲存引擎原理
- 索引高效查詢
- 鎖機制
- 資料庫叢集
框架
主流框架主要有:
- spring:面向切面、依賴注入,推薦書籍《Spring實戰》,通過demo的方式帶你一步步搭建Spring應用
- springboot:習慣優於配置、自動配置。目前很多公司內部都是使用Spring Boot。書籍推薦《Spring Boot實戰》
- springmvc:基於MVC架構模式的輕量級Web框架
- Mybatis:orm框架,推薦書籍《深入淺出Mybatis》
- springcloud:現在面試基本都會問到微服務相關的內容,最好了解下微服務相關的知識。服務註冊與發現、負載均衡、服務降級、API閘道器等。推薦書籍《spring cloud微服務實戰》
Spring
- Spring概述
- 耦合與解耦
- 工廠設計模式
- IoC概述及作用
- 依賴注入的概念
- Spring中的依賴注入
- Spring基於註解的IoC配置
- 常用註解的使用
- 元件掃描器
- BeanFactoryPostProcessor
- BeanPostProcessor
- InitializingBean
SpringMVC
- 常用元件
- @RequestMapping註解
- 請求引數封裝
- 表單校驗相關注解
- ServletAPI相關的註解使用
- 控制器方法的返回值詳解
- 的非同步互動和相關注解介紹
- Rest風格URL
- @PathVariable註解
- 跨域訪問詳解和 @CrossOrigin註解的使用
- SpringMVC中的異常處理
- SpringMVC中的攔截器
MyBatis
- 全域性配置檔案
- 對映配置檔案
- 增刪改查
- 引數深入
- 結果集封裝
- 連線池與事務深入
- 動態sql語句
- 多表查詢
- 延遲載入策略
- 新增分頁外掛
- 日誌整合
Spring Boot
- SpringBoot的核心功能
- SpringBoot的優勢
- 起步依賴原理分析
- 自動配置原理解析
- 自定義起步依賴並實現自動配置
- SpringBoot配置檔案型別
- 配置檔案與配置類的屬性對映方式
- SpringBoot整合Mybatis
- 自定義Starter
- 事件監聽
- 初始化流程
SpringCloud
- 服務註冊中心Eureka介紹
- Eureka服務端開發
- 微服務開發並註冊到Eureka服務註冊中心
- Eureka保護模式
- 客戶端負載和服務端負載
- Ribbon實現客戶端負載均衡
- Feign的實現
- Feign工作原理
- 雪崩效應與熔斷器
- 熔斷器Hystrix使用
- 閘道器介紹
- 基於Gateway構建閘道器服務
- 通過Gateway閘道器訪問微服務
- Spring Cloud Config
- 使用Git儲存的方式實現配置管理
- 微服務改造從配置中心獲取配置資訊
- 服務匯流排Spring Cloud Bus介紹和應用
Dubbo
- Dubbo簡介
- Dubbo架構
- Dubbo服務提供方
- Dubbo服務消費方
- Dubbo相關配置
- 監控中心
- 架構原理
- 工作原理與服務治理
- 心跳與通訊
中介軟體
Redis
- Redis優勢
- Redis五大資料型別
- 基本操作命令
- Redis持久化(RDB和AOF)
- LUA指令碼
- 分散式鎖
- pipeline
- Redis資料刪除策略
- Redis資料淘汰策略
- 叢集主從複製
- 叢集哨兵模式
RocketMQ
- 搭建RocketMQ
- RocketMQ-Console
- RocketMQ模式
- 訊息丟失
- 訊息重複
- 基於MQ的分散式事務解決方案說明
JVM
jvm也是面試經常會問的內容。Java開發者不用自己進行記憶體管理、垃圾回收,jvm幫我們做了,但是還是有必要了解下jvm的工作原理,這樣在出現oom等問題的時候,才有思路去排查和解決問題。書籍推薦周老師的《深入理解Java虛擬機器》。
jvm的基礎知識:
- jvm記憶體結構(程式計數器、虛擬機器棧、本地方法棧、堆、方法區、執行時常量池、直接記憶體)
- 類載入過程
- 類檔案結構
- 物件頭
- 雙親委派
- 記憶體分配和回收
- 垃圾回收演算法
- 垃圾回收器
- 調優工具(jsp/jstack/jstat/jmap,瞭解即可)
併發
併發程式設計的相關內容可以看看《JAVA併發程式設計實戰》這本書,主要內容有:
- 執行緒的基本定義
- 實現執行緒的種方法
- 執行緒執行狀態
- 執行緒池原理
- 執行緒間通訊方式
- 鎖(synchronized、ReentrantLock)
- 併發工具類(CountDownLatch/CyclicBarrier/Semaphore)
- 原子類
- AQS
- 執行緒間通訊的方法
- 執行緒同步
- 執行緒死鎖
計算機基礎知識
平時抽空學習計算機基礎知識,鞏固基礎。
資料結構和演算法
推薦書籍《資料結構與演算法分析 java語言描述》,用Java語言描述各種資料結構和演算法,對於Java開發者來說,更容易理解,主要學習以下內容:
- 基本資料結構(陣列、連結串列、棧、佇列等)
- 樹(二叉樹、avl樹、b樹、紅黑樹等)
- 堆結構
- 排序演算法(氣泡排序、選擇排序、插入排序、快速排序、歸併排序、堆排序等及時間空間複雜度)
- 動態規劃
- 回溯
- 貪心演算法
計算機網路
推薦《計算機網路自頂向下方法》:
- 網路分層結構
- TCP/IP
- 三次握手四次揮手
- 滑動視窗、擁塞控制
- HTTP/HTTPS
- 訪問某個連結的整個過程
- DNS
- 網路安全問題(CSRF、XSS、SQL隱碼攻擊等)
作業系統
學起來比較頭大,可以到b站找找視訊看,推薦清華大學的公開課。書籍推薦《深入理解計算機系統》,大部頭,經典書籍,值得多讀幾遍。
基礎知識:
- 程式執行緒
- 程式間通訊方式
- 執行緒同步方式
- 死鎖是什麼?產生條件
- 死鎖處理策略
- 分頁分段區別
- 程式排程策略
- 虛擬記憶體是什麼
- 頁面置換演算法
- 訊號量
- ...
linux
推薦書籍《鳥哥的linux私房菜》。
以上就是Java的學習路線,整個路線學習下來,基本最少也要半年時間,堅持就是勝利!
最後給大家分享一個github倉庫,上面放了200多本經典的計算機書籍,包括C語言、C++、Java、Python、前端、資料庫、作業系統、計算機網路、資料結構和演算法、機器學習、程式設計人生等,可以star一下,下次找書直接在上面搜尋,倉庫持續更新中~
github倉庫:https://github.com/Tyson0314/...
如果github訪問不了,可以訪問gitee倉庫。
gitee倉庫:https://gitee.com/tysondai/ja...
碼字不易,小夥伴們覺得有幫助的話,可以點個贊!
我是@程式設計師大彬,定期分享Java後臺核心知識,歡迎大家關注~