2018-09-12 Java Web學(xué)習(xí)路徑

  • 來源于知乎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框架

  1. Spring MVC Controler
  2. Sring 業(yè)務(wù)層
  3. 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è)體系

  1. 內(nèi)置鎖體系 synchronized:體系協(xié)作通過wait()、notify()、notifyAll()來實(shí)現(xiàn),屬于Object類。
  2. 外置鎖體系 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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容