
- 來源于知乎live 學(xué)習(xí)Java,我建議這樣做——E-臻
- 本文是JavaWeb的學(xué)習(xí)路徑。
- Live內(nèi)容以Java Web學(xué)習(xí)的脈絡(luò)梳理為主,涵蓋主線重要知識(shí)點(diǎn)。
- Live也是以作者自己的學(xué)習(xí)路徑整理而來,以實(shí)用為主。
本文規(guī)范:
1.章節(jié)標(biāo)題: ## 1.Java基礎(chǔ)
2.小節(jié)標(biāo)題:#### 基礎(chǔ)語法
3.內(nèi)容: - 面向?qū)ο笳Z言的三大特征:封裝、繼承、多態(tài)
1. Java基礎(chǔ)

基礎(chǔ)語法
- 面向?qū)ο笳Z言的三大特征:封裝、繼承、多態(tài)。
類、封裝和繼承
- 學(xué)完基礎(chǔ)語法、類與繼承之后——一切皆對(duì)象。一切類皆繼承自O(shè)bject類,Object類是所有類的基類.Object類的11個(gè)基本方法。toString(),equals(),hashCode(),clone(),finalize()、getClass()、wait()(3個(gè))、notify()、notifyAll()等
- 需深入學(xué)習(xí)
- 其中wait()、notify()、notifyAll()方法是多線程里面的,可以在后面多線程的時(shí)候再深入學(xué)習(xí)。

接口與多態(tài)
- 多態(tài)經(jīng)常被面試官問到
- 接口
- 面向接口編程
- 常用的接口(見圖片) serializable comparable
List:
Set:
Map:
Queue:
Stack: -
這些接口的實(shí)現(xiàn)、使用方法
Java異常處理機(jī)制
- 兩種:錯(cuò)誤(Error)和異常(Excetion)兩類
- 異常鏈機(jī)制,一層一層catch,打到日志里
- 異常很重要,必須去學(xué)習(xí)和理解

泛型
- 需要深入理解,是Java基礎(chǔ)
- 看視頻 or 看書:環(huán)境搭建的建議看視頻,學(xué)習(xí)語法的時(shí)候建議看書。視頻較多,魚龍混雜。
- 深入理解泛型的意義:本該用泛型解決的問題,如用繼承解決了,會(huì)增強(qiáng)耦合。
枚舉的使用
- 枚舉:一種特殊的類
- 枚舉和類的區(qū)別,類的對(duì)象有無數(shù)個(gè),枚舉的對(duì)象只有幾個(gè)。
- 枚舉作為基礎(chǔ) 需要好好掌握
Java的IO流 輸入輸出流
- 四個(gè)基礎(chǔ)的類
- Object 對(duì)象的輸入輸出流
- ByteArray 內(nèi)存的輸入流和輸出流
- File 文件的輸入流和輸出流
- Piped 管道的輸入流和輸出流 多線程 流的輸入輸出
Java注解
- 四種原注解@Targe @Retention @Documented @Inhented注解
- 架構(gòu)中很有用
反射
- 一句話描述:通過Object的getClass()方法得到當(dāng)前類的信息,從而對(duì)類進(jìn)行操作
注解和反射,在Spring方法中經(jīng)常能夠看到。
Java網(wǎng)絡(luò) (可選)
- 初學(xué)的時(shí)候可以跳過,實(shí)際過程中可以略過。按照業(yè)務(wù)中實(shí)際需求再說。
Java圖形化(可選)
總結(jié)
- 圖片上是脈絡(luò)梳理的重點(diǎn)。
- 建議看書,快的話就1-2個(gè)月。
- 推薦一本書《Java開發(fā)實(shí)戰(zhàn)經(jīng)典》(無基礎(chǔ)的情況下,從編譯環(huán)境開始搭)
Import 入門不適合看 《Thinking in Java》、《Java編程思想》
2. Java Web開發(fā)/Java后臺(tái)


前端腳本 HTML、js、velocity、xml
- 前端:頁面展示不是主要部分。了解(適度)HTML等
Servlet
- 理解成網(wǎng)站開發(fā)。
- 重點(diǎn):servlet開發(fā)
- Java Web開發(fā)的基礎(chǔ),一切框架的基礎(chǔ)。
- servlet的理解,需要深入研究和理解
- 看一下J2EE的API文檔,看一下servlet類的實(shí)現(xiàn).其中四個(gè)方法:init()、destory()、service(req,res)、getServlet()
- service()方法是精髓,中間的調(diào)用。
理解整個(gè)request的整個(gè)過程。
強(qiáng)調(diào):不要上來就學(xué)spring、strust等框架,會(huì)浮于表面。而忽略了Servlet。Servlet是Java Web的基礎(chǔ)。
-
要使用servlet配合前端,寫一個(gè)小程序來練手。
MVC設(shè)計(jì)模式
- 分層、架構(gòu)。module-view-controller
- 此為純理論內(nèi)容
- 如何分層 該寫什么 不該寫什么
- 開放接口:不是以瀏覽器形式,而是以調(diào)用接口的形式。
- manage層:調(diào)用其他系統(tǒng)的接口。
- 代碼的好壞取決于兩方面:1.規(guī)范 2.基礎(chǔ)。
- MVC是代碼規(guī)范

Tomcat /Jetty -Web容器
- 學(xué)會(huì)如何啟動(dòng)
- 了解、會(huì)用即可
MySQL的使用
- 數(shù)據(jù)庫的掌握
- 增刪改查
- 索引(聚集、非聚集)常問到怎么建立
- 樹是怎么管理的
- 怎么建表 建樹 建庫 基礎(chǔ)的部分,需要會(huì)
- 事物、鎖(略)
基礎(chǔ)的理論都掌握后,就可以寫一個(gè)基礎(chǔ)的框架程序,來上手
推薦一個(gè)SSM框架
- Spring MVC Controler
- Sring 業(yè)務(wù)層
- myBatis 數(shù)據(jù)庫的管理 ORM
用此上手寫一個(gè)程序,GitHub等博客上很多,去研究,去會(huì)寫。
總結(jié)
兩個(gè)項(xiàng)目練手1.Servlet 2.ssm
推薦書籍
- Java Web開發(fā)實(shí)戰(zhàn)經(jīng)典
- 不推薦看《spring框架》、《spring action》不適合這一階段看 書是好的。
Java基礎(chǔ)和Java Web學(xué)完之后還要進(jìn)階。
這兩個(gè)部分學(xué)完達(dá)到外包水平
3. Java多線程

線程入門
- 入門的類:Thread()類、Runnable()接口
- 常用的方法 run() 、join()、sleep()、start()、yield()方法,弄懂用法、功能
- 內(nèi)置鎖 synchronized ,描述一個(gè)方法是同步方法
線程協(xié)作
- wait()、notify()、notifyAll()
以上為Java 多線程的基礎(chǔ)知識(shí)
下面是更高的進(jìn)階
Executor體系
- callable接口
- 里面的call()方法
- call()跟run()的區(qū)別:一個(gè)有返回值(call),一個(gè)沒有(run)
顯示鎖 Lock
- ReentrantLock,可重用鎖
- 與 synchronized的區(qū)別。(lock-顯示,synchronized隱式鎖)
條件隊(duì)列 condition
- 和 wait()、notify()、notifyAll()的區(qū)別
多線程其實(shí)有兩個(gè)體系
- 內(nèi)置鎖體系 synchronized:體系協(xié)作通過wait()、notify()、notifyAll()來實(shí)現(xiàn),屬于Object類。
- 外置鎖體系 Executor:以lock為核心,常用ReentrantLock來實(shí)現(xiàn)鎖的機(jī)制,條件隊(duì)列是condition(地位相當(dāng)于synchronized體系中的wait()、notify()、notifyAll()).
常用并發(fā)編程類
- 常用的并發(fā)編程類:Semaphore信號(hào)量類、CyclicBarria ??棧的類、CountDownLatch門栓類、ThreadPoolExecutor線程池的類
- volatile關(guān)鍵字:需要理解,volatile和synchronized的區(qū)別:
前者保證線程的可見性,不保證原子性;后者既保證線程的可見性,又保證線程的原子性 - volatile關(guān)鍵字的理解,體現(xiàn)了你多線程基礎(chǔ)的功力,需要好好理解
體現(xiàn)功力的ThreadLocal類(線程本地變量)
- 框架中經(jīng)常使用的類,賦予了線程能夠綁定一個(gè)線程本地變量的能力。
- 在Java中使用ThreadLocal,可以定義一個(gè)變量,此變量跟線程綁定。
- 例:每一個(gè)線程運(yùn)行這個(gè)方法都會(huì)獲得這樣的一個(gè)量。功能強(qiáng)大,用處很多
- 需深入掌握
以上是Java多線程編程的主要內(nèi)容,下面是線程安全
線程安全
- 本質(zhì):多線程并發(fā)訪問可變變量時(shí),會(huì)遇到安全問題,就需要加鎖
- 加鎖就有可能導(dǎo)致死鎖。死鎖的條件(四個(gè)),打破死鎖(使四個(gè)條件有一個(gè)不滿足)
- 了解樂觀鎖、悲觀鎖,使用場(chǎng)景,實(shí)現(xiàn)方案
- 常見的死鎖的原因,四個(gè)因素如果同時(shí)具備了,就會(huì)導(dǎo)致死鎖。
推薦書籍
- Java工程師必讀,進(jìn)階必讀。
4. Java虛擬機(jī)
目的:了解我們寫的代碼在底層如何運(yùn)行的,并不是為了去寫虛擬機(jī)
掌握虛擬機(jī)常見的內(nèi)容、體系,在底層如何運(yùn)行的
包括5小節(jié),掌握就可以了。不用再深入研究。(對(duì)編譯原理有深入研究除外)

JVM體系架構(gòu):必須掌握內(nèi)容
- 內(nèi)存的分區(qū):方法區(qū)、堆、棧,用來做什么,每一個(gè)線程對(duì)于每一個(gè)區(qū)的使用(理論知識(shí),理解)
- 程序的.class類加載放到哪里,程序運(yùn)行時(shí)哪些對(duì)象放到堆里,哪些對(duì)象放到棧里
- 多線程開始時(shí),對(duì)于棧的管理
類的生命周期:
- .java文件 編譯產(chǎn)生.class文件,運(yùn)行class文件
- class文件的生命周期,通過classLoader這個(gè)加載器加載到方法去,又是怎樣運(yùn)行起來的。【知道】
- 生命周期中的重要方法:編譯器生成的方法<clinit> (class-init)是用來干嘛的--單列模式中
對(duì)象的初始化:<init>
- 對(duì)象的生命管理, 類加載到方法區(qū)之后之后,怎么根據(jù)類,創(chuàng)造出對(duì)象,類的對(duì)象在內(nèi)存中的組織,怎么找到對(duì)象所屬的類,
- 怎么根據(jù)一個(gè)已有的類,創(chuàng)建出一個(gè)對(duì)象,并且把對(duì)象放在堆區(qū)還是棧區(qū),如何組織的
容量池:String、Integer---這兩部分的源碼【理解】
- JVM對(duì)于自身性能的優(yōu)化。
- 面試常見問題:string常量池、Integer常量池怎么用。
- 示例(圖片)語句有什么不一樣。
- String常量池的范圍:
- Integer常量池的范圍:-128~127,為什么要這樣,為什么不是所有的Integer類型都放在常量池里面
垃圾回收機(jī)制
- 體現(xiàn)JVM理論功底的時(shí)候。垃圾回收是怎么樣的
- 兩種算法(引用計(jì)數(shù)、可達(dá)性分析算法(主流JVM)),各自的流程,為什么主流JVM用可達(dá)性分析算法而不是引用計(jì)數(shù)算法,來實(shí)現(xiàn)垃圾回收。
了解這5部分內(nèi)容就可以了,對(duì)于JVM有一個(gè)基本常識(shí)性了解,對(duì)于寫的代碼在JVM中是怎么運(yùn)行的,生命周期如何管理的,垃圾如何回收的,有一個(gè)充分的理論性的支撐。——了解代碼是怎么運(yùn)行的。
- 推薦書籍《深入Java虛擬機(jī)》(機(jī)械工業(yè)出版社)文那斯
5. 設(shè)計(jì)模式

如果說JVM是程序員從Java應(yīng)用向底層的拓展,那么設(shè)計(jì)模式就是從Java應(yīng)用向上層的拓展,對(duì)于軟件架構(gòu)的設(shè)計(jì)模式。
外國人提出,常見的有23種
設(shè)計(jì)模式是進(jìn)階階段需要掌握的知識(shí)
本質(zhì):軟件的可復(fù)用性,常用場(chǎng)景的高度抽象
其中常見的設(shè)計(jì)模式 7種:
1.單例模式:5種
- 最常見的模式。
- 5種實(shí)現(xiàn),對(duì)提升功力有很大的幫助
2.工廠模式:
- 需要深入掌握
3.策略模式
- 動(dòng)態(tài)的多態(tài)。在接口的實(shí)現(xiàn)的時(shí)候選擇不同的策略。
4.適配器模式
- 把一個(gè)已有的不喜歡的接口類型轉(zhuǎn)變成一個(gè)喜歡的接口類型.動(dòng)態(tài)的多態(tài)。
5.模板模式
- 對(duì)于一個(gè)代碼的流程有高度的抽象,定義出一個(gè)流程,把流程寫成模板,留一個(gè)鉤子函數(shù)
6.回調(diào)模式
- 框架設(shè)計(jì)當(dāng)中經(jīng)常使用。
7.建造者模式
- 類有很多類的對(duì)象,創(chuàng)建一個(gè)類的時(shí)候使用,比set get方法更搞笑
沒有推薦書籍,blog上搜一搜,解釋很多
6.網(wǎng)站架構(gòu)

大型網(wǎng)站的架構(gòu)
- 大型網(wǎng)站的架構(gòu),你需要知道演化過程:
- 從PC到分布式系統(tǒng)、分布式緩存、分布式數(shù)據(jù)庫、分布式的session管理 等大型網(wǎng)站的架構(gòu),主要在推薦的書里面。
網(wǎng)站常用優(yōu)化手段
- 面試經(jīng)常問道:一臺(tái)機(jī)器無法負(fù)載,要做分布式,怎么做負(fù)載均衡、分層、分割、緩存等,這就涉及到常用的優(yōu)化手段。
分布式與無狀態(tài)
- 分布式一個(gè)特性:任何一個(gè)服務(wù)器上都不能有狀態(tài)
- session:不能保存在單態(tài)機(jī)器上,需要去理解。不能把web中有狀態(tài)的量放進(jìn)去
負(fù)載均衡
- 是干什么的
- 學(xué)一下常見的實(shí)現(xiàn)方式,lvs、http、dns等手段。
推薦書籍 《大型網(wǎng)站程序架構(gòu)》李智慧
每一個(gè)Java程序員都應(yīng)該看一下
7. spring框架

AOP如何實(shí)現(xiàn)
- 面向切面編程,如何實(shí)現(xiàn),——需要懂Java動(dòng)態(tài)代理、反射。然后動(dòng)手寫一個(gè)AOP的小框架
- 需要去學(xué)習(xí)如何使用,理解機(jī)理,如何實(shí)現(xiàn)。
IOC如何實(shí)現(xiàn)
- 控制反轉(zhuǎn)
- spring如何是對(duì)Java Web中的一些bean、bean主鍵、service主鍵進(jìn)行管理的---涉及到工廠模式
對(duì)象如何管理(控制反轉(zhuǎn)如何管理)
- 控制反轉(zhuǎn)如何實(shí)現(xiàn)的
- 里面有一個(gè):?jiǎn)卫?、多線程。
- JavaWeb程序就是一個(gè)單例多線程程序
事物如何實(shí)現(xiàn)
- 事物指數(shù)據(jù)庫事物
- 比如,spring如何進(jìn)行事務(wù)管理,怎么做到的,需要懂**模板方法、AOP、strictLocal **
8. 閑談與問答

他準(zhǔn)備了一個(gè)月
希望大家能不要踩坑
希望大家把Java學(xué)的扎實(shí),不要浮躁
關(guān)于面對(duì)對(duì)象的練習(xí) 有沒有什么小技巧 感覺不太理解
- 抽象能力很重要,面向編程的6大規(guī)范
- 規(guī)范清楚內(nèi)部類 外部類 封裝時(shí)要定義清楚。** 高內(nèi)聚,低耦合**
- 培養(yǎng)自己抽象的能力
推薦的書 Effictive Java
How tomcat works


