摘要:如問到是否使用某框架,實際是是問該框架的使用場景,有什么特點,和同類可框架對比一系列的問題。這兩個方向的區(qū)分點在于工作方向的側(cè)重點不同。
[TOC]
這是一份來自嗶哩嗶哩的Java面試課程預(yù)習(xí) 1.1 課程內(nèi)容分為三個模塊Java面試 32個核心必考點完全解析(完)
基礎(chǔ)模塊:
技術(shù)崗位與面試
計算機基礎(chǔ)
JVM原理
多線程
設(shè)計模式
數(shù)據(jù)結(jié)構(gòu)與算法
應(yīng)用模塊:
常用工具集
常用框架
緩存
隊列
數(shù)據(jù)庫
綜合模塊:
系統(tǒng)架構(gòu)設(shè)計
微服務(wù)架構(gòu)
容器化
1.2 換工作面臨問題能力不錯,卻總被忽略
不知道簡歷怎么準備
工作年限
美觀度
多分簡歷
不知道面試官考什么
社交門戶側(cè)重于大規(guī)模并發(fā)場景的應(yīng)用和架構(gòu)能力
OTO行業(yè)側(cè)重于綜合能力考察
金融更喜歡邏輯縝密,對高可用安全領(lǐng)域有經(jīng)驗的候選人
校招更多對基礎(chǔ)知識和邏輯思維方面的考察,以培養(yǎng)潛力考察為主
初中級工程師則需要多關(guān)注知識的廣度,基礎(chǔ)知識的應(yīng)用
高級資深工程師需要深入理解基本原理,以綜合能力考察為主
沒有g(shù)et到面試官的考察意圖。如:問到是否使用某框架,實際是是問該框架的使用場景,有什么特點,和同類可框架對比一系列的問題。
不知道如何提升晉級?
學(xué)習(xí)首先有個框架
1.3 課程特色全盤匯總:Java知識體現(xiàn)精細梳理
特近實戰(zhàn):面試官親自教你拿Offer
潛規(guī)則:揭秘技術(shù)面試加分&潛規(guī)則
權(quán)威性:拉勾40W技術(shù)崗位大數(shù)據(jù)支持
課時1:技術(shù)人職業(yè)發(fā)展路徑 1.1 工程師發(fā)展路徑技術(shù)序列:技術(shù)攻堅、架構(gòu)知識、專業(yè)知識
工程師
高級工程師
資深工程師
技術(shù)專家
高級技術(shù)專家
1~3年內(nèi)從工程師到高級工程師發(fā)展,夯實基礎(chǔ),重點提高工作基礎(chǔ)能力,培養(yǎng)技術(shù)的深度和廣度,對不同方向的新技術(shù)保持強烈的好奇心和學(xué)習(xí)心
3年以上資深工程師需要重點配音技術(shù)攻堅能力,疑難問題的排查,大型項目的工程拆分,技術(shù)品牌的塑造。具體工作包括,原理實現(xiàn),注重框架能力的培養(yǎng),大規(guī)模高并發(fā)場景,高可用可擴展措施和方案,業(yè)務(wù)的抽象和架構(gòu)能力
管理序列:團隊管理、項目管理、溝通協(xié)作
工程師
高級工程師
技術(shù)經(jīng)理
技術(shù)總監(jiān)
高級技術(shù)總監(jiān)
偏向于團隊把控,需要讓團隊形成技術(shù)戰(zhàn)斗力,利用一切資源讓團隊完成作戰(zhàn)目標(biāo),做好團隊內(nèi)和跨團隊溝通工作,在實際工作中這兩種并沒有明顯的邊界,例如做管理不表示遠離架構(gòu)設(shè)計,技術(shù)專家也不是單兵作戰(zhàn)。這兩個方向的區(qū)分點在于工作方向的側(cè)重點不同。
面試訣竅示例:同過往的經(jīng)驗來看,我對項目的整體規(guī)劃、管理、推進比較感興趣,在任務(wù)協(xié)調(diào)溝通方面也有過比較突出的表現(xiàn),所以我的職業(yè)規(guī)劃是成為一名職業(yè)的技術(shù)經(jīng)理,以管理方向為發(fā)展目標(biāo)。
1.2 常見技術(shù)崗位劃分職級 | 工作年限 | B(百度) | A(阿里) | T(騰訊) |
---|---|---|---|---|
高級技術(shù)專家 | 5-10 | T7 | P8 | |
技術(shù)專家 | 4~8年 | T6 | P | |
資深工程師 | 3~6年 | T5 | P | |
高級工程師 | 2~4年 | T4 | ||
工程師 | 1~3年 |
公司&團隊
大公司核心業(yè)務(wù)(首選)
小公司核心業(yè)務(wù)(1~3年)
大公司邊緣業(yè)務(wù)(鍍金)
小公司邊緣業(yè)務(wù)(盡量不選)
崗位匹配度
匹配度與發(fā)展方向相吻合
1.4 常見面試流程
前置面試
電話面試
筆試
上機編程
技術(shù)一面
純技術(shù)面(首選算法,例如排序、)
偏重于基礎(chǔ)與實戰(zhàn)能力
面試官是未來的同組同事
技術(shù)二面
純技術(shù)面(項目能力、架構(gòu)能力)
偏重算法、技術(shù)深度
面試官是未來直屬leader
技術(shù)三面
半技術(shù)面(架構(gòu)能力、技術(shù)敏感度、職業(yè)規(guī)劃)
架構(gòu)能力與發(fā)展?jié)摿?/p>
面試官是部門技術(shù)leader
HR面
非技術(shù)面
個人發(fā)展規(guī)劃
價值觀與薪資
各級領(lǐng)導(dǎo)
一般非技術(shù)面
沒有原則性問題能都通過
1.5 面試前的準備工作能力、心態(tài)、溝通
了解應(yīng)試公司及崗位信息
系統(tǒng)復(fù)習(xí)基礎(chǔ)知識
對原公司負責(zé)的項目進行梳理總結(jié)
學(xué)習(xí)典型架構(gòu)案例
閱讀??伎键c源碼
針對性準備加分項
提前準備一份自我介紹,自己的技術(shù)特長和職業(yè)優(yōu)勢
避免冷場,對于回答不上來的問題,提供解題思路,或者詢問面試官是否可以換一個問題
注意細節(jié),坐姿、表情、觀察面試官反應(yīng)
1.6 面試考察點硬技能
基礎(chǔ)知識
項目經(jīng)驗
架構(gòu)能力
應(yīng)用能力
軟實力
邏輯思維
溝通協(xié)作
管理推進
學(xué)習(xí)思考
培養(yǎng)潛力
1.7 四類硬技能基礎(chǔ)知識
計算機基礎(chǔ)
網(wǎng)絡(luò)
操作系統(tǒng)
數(shù)據(jù)結(jié)構(gòu)
算法
Java
JVM
語言特性
多線程
項目經(jīng)驗
項目描述
項目難點
項目問題
項目改進
應(yīng)用知識
常用工具
排查類
協(xié)作類
保障類
系統(tǒng)類
常用框架
Spring
Netty
Dubbo
Motan
Mybatis
隊列
數(shù)據(jù)庫
緩存
架構(gòu)能力
微服務(wù)架構(gòu)
Docker
ZK
SC
KBs
課時2:計算機與網(wǎng)絡(luò)基礎(chǔ)知識點匯總
TCP詳解
設(shè)計模式詳解
Java語言基礎(chǔ)知識
考察點和加分項
真題
2.1 知識點匯總 2.1.1操作系統(tǒng)(加粗為重點)進程與線程
區(qū)別聯(lián)系:進程是資源分配的最小單位,線程是程序執(zhí)行的最小單位;進程使用獨立的數(shù)據(jù)空間,線程共享進程的數(shù)據(jù)空間
線程調(diào)度:時間片輪轉(zhuǎn)調(diào)度、先來先服務(wù)調(diào)度、優(yōu)先級調(diào)度、多級反饋隊列調(diào)度、高響應(yīng)比優(yōu)先調(diào)度
線程切換步驟:線程的上下文切換、線程切換的代價
Linux下的IPC(進程間通訊)
Pipe
MessageQueue
共享內(nèi)存
UnixSocket
Signal
Semaphore
協(xié)程
Linux常用命令
awk
top
netstat
grep
less
tail
死鎖
內(nèi)存分頁管理于Swap
任務(wù)隊列于CPU Load
擴展知識點
內(nèi)存屏障
指令亂序
分支預(yù)測
CPU親和性(affinity)
Netfilter于iptables
2.1.2 網(wǎng)絡(luò)知識(加粗為重點)4/7層網(wǎng)絡(luò)模型
TCP協(xié)議
建立鏈接三次握手
關(guān)閉鏈接四次握手
報文狀態(tài)標(biāo)志與鏈接狀態(tài)
Nagel算法與ACK延遲
Keepalive
滑動窗口與流量控制
UDP
非鏈接
非可靠傳輸
效率高
HTTP
協(xié)議
Method
Header
Cookie
UrlEncode
狀態(tài)碼
HTTPS
HTTP2
多路復(fù)用
Stream
流量控制
服務(wù)端推送
頭部壓縮
QUIC(基于UDP,但是提供了基于UDP的可靠性保障)
避免前序抱阻塞(HOL阻塞)
零RTT建聯(lián)
FEC前向糾錯
2.2 TCP詳解TCP特點
基于鏈接(點對點)
雙工通信
可靠傳輸
擁塞控制
基于字節(jié)流而非報文(保證數(shù)據(jù)的可靠性和完整性)
TCP實現(xiàn)細節(jié)
8種報文狀態(tài)
滑動窗口機制
KeepAlive
Bagel算法
2.2.1 三次握手建聯(lián) 2.2.2 四次揮手斷連 2.3 設(shè)計模式詳解主要考察兩點
設(shè)計模式的實現(xiàn)
設(shè)計模式的使用場景(用來解決什么問題)
單例模式
工廠模式
代理模式
構(gòu)造者模式
責(zé)任鏈模式
適配器模式
觀察者模式
其他模式
2.3.1 單例模式線程安全實現(xiàn)靜態(tài)初始化(餓漢式)
雙重檢查(懶漢式)
單例注冊表
2.3.2 常用設(shè)計模式與應(yīng)用場景工廠模式:Spring如何創(chuàng)建Bean
代理模式:Motan服務(wù)的動態(tài)代理
責(zé)任鏈模式:Netty消息處理的方式
適配器模式:Slf4J如何支持Log4J
觀察者模式:GRPC是如何支持流式請求的
構(gòu)造者模式:PB序列化中的Builder
2.4 Java基礎(chǔ)知識詳解JUC
ConcurrentXXX
AtomicXXX
Executor
Caller&Future
Queue
Locks
版本差異新特性
動態(tài)代理與反射
數(shù)據(jù)類型
空間占用
基本數(shù)據(jù)結(jié)構(gòu)
自動轉(zhuǎn)型與強制轉(zhuǎn)型
封箱與拆箱
常用集合
HashMap
ConcurrentHashMap
ArrayList&LinkedList
HashSet
TreeMap
對象引用
強引用
弱引用
軟引用
虛引用
異常機制
擴展知識點
SPI機制
注解處理機制
2.4.1 Map——知識點詳解HashMap
數(shù)組加鏈表的實現(xiàn)方式
容量大小是2的冪次方
并發(fā)讀寫會有什么風(fēng)險
ConcurrentHashMap
并發(fā)控制與分段鎖思想
1.8中的CAS自旋鎖
紅黑樹的啟用條件
2.4.1 Java版本特性V 1.8
Lambda表達式
Stream API
方法引用
接口默認方法
Metaspace替換PermGen
V 1.9-1.10
模塊系統(tǒng)
默認G1回收器
接口私有方法
局部變量推斷
Graal編譯器
V 1.11
ZGC
字符串API增強
內(nèi)建HTTP Client
2.5 考察點和加分項面試考察點
基本概念和基本原理
實現(xiàn)方式與使用姿勢
經(jīng)常用到的知識點
實際應(yīng)用中容易犯錯的點
與面試方向相關(guān)的知識點
加分項
知識點與典型的業(yè)務(wù)場景關(guān)聯(lián)
以反例來描述實際場景中誤用的危害
與知識點相關(guān)的優(yōu)化點(例如在介紹TCP的建聯(lián)與斷連時最好能夠指出,出現(xiàn)timewait時可以調(diào)整系統(tǒng)參數(shù)加快鏈接的回收與復(fù)用)
與知識點相關(guān)的最新技術(shù)趨勢
在了解的前提下,盡量增加回答內(nèi)容深度
2.6 真題真題匯總——1
線程與進程的區(qū)別與聯(lián)系
從資源的占用,切換效率,通信方式回答
簡單介紹一下進程的切換過程
主要考察線程上下文的切換代價,要回答切換會保持寄存器、棧等線程相關(guān)的現(xiàn)場,需要由用戶態(tài)切換到內(nèi)核態(tài),最后知道可以通過vmstate命令查看上下文的切換狀況
你經(jīng)常使用哪些Linux命令,主要用來解決什么問題?
為什么TCP建聯(lián)需要3次握手而斷連需要4次
為什么TCP關(guān)閉鏈接時需要TIME_WAIT狀態(tài),為什么要等2MSL?
一次完整的HTTP請求過程是怎樣的
DNS解析、TCP建聯(lián)、HTTP請求、HTTP相應(yīng)
真題匯總——2
HTTP2與HTTP的區(qū)別有哪些?
在你的項目中你使用過哪些設(shè)計模式?主要用來解決什么問題?
Object中的equal和hashCode的作用分別是什么?
final、finally、finalize的區(qū)別與使用場景
簡單描述一下java的異常機制
線上使用的哪個版本jdk,為什么使用這個版本(有什么特點)?
課時3:深入淺出JVM 3.1 知識點匯總內(nèi)存模型
程序計數(shù)器
方法區(qū)
堆
棧
本地方法棧
類加載器
雙親委派機制
Boostrap類加載器
Extension類加載器
System類加載器
自定義類加載器
GC
分代回收
老年代
年輕代
持久代
回收器實現(xiàn)
穿行回收器
并行回收器
CMS
G1
性能調(diào)優(yōu)
JVM參數(shù)
性能分析工具
MAT
JMC
JStack
JStat
執(zhí)行模式
解釋模式
編譯模式
混合模式
編譯器優(yōu)化
公共子表達式的消除
指令重排
內(nèi)聯(lián)
逃逸分析
方法逃逸
線程逃逸
棧上分配
同步消除
3.2 JVM的內(nèi)存模型 3.2.1 JVM內(nèi)存模型線程獨占
棧(存儲局部變量表、操作棧、動態(tài)鏈接、方法出口等信息)
本地方法棧(native方法)
程序計數(shù)器
線程共享
堆(堆所有線程共享,分代管理)
方法區(qū)(類信息、常量、靜態(tài)變量,jdk1.7中的永久代和jdk1.8中的metaspace都是方法區(qū)的一種實現(xiàn))
面試回答要點:
各部分功能
哪些是線程共享,哪些是線程獨占
3.2.2 JMM與內(nèi)存可見性Java內(nèi)存模型,定義程序中變量的訪問規(guī)則。
在多線程進行數(shù)據(jù)交互時,例如線程A給一個共享變量賦值后由線程B來讀取這個值,線程A修改變量只修改在自己的工作內(nèi)存區(qū)中,線程B是不可見的,只有從A的工作內(nèi)存區(qū)寫回到工作主內(nèi)存,B在從主內(nèi)存讀取到自己的工作內(nèi)存區(qū)才能進行進一步的操作。
由于指令重排序的存在,寫和讀的順序可能會被打亂,因此JMM需要提供原子性、可見性、有序性的保證。
3.2.3 JMM保證 3.3 Java類加載機制詳解 3.3.1 類的生命周期加載:是文件到內(nèi)存的過程,通過類的完全限定名查找此類字節(jié)碼文件,并利用字節(jié)碼文件創(chuàng)建一個Class對象;
驗證:驗證是堆文件類內(nèi)容驗證,目的在于當(dāng)前類文件是否符合虛擬機的要求,不會危害到虛擬機安全,主要包括四種:文件格式驗證、元數(shù)據(jù)驗證、字節(jié)碼、符號引用;
準備:準備階段是進行內(nèi)存分配,為類變量,也就是類中由static修飾的變量分配內(nèi)存并設(shè)置初始值,初始值是0或null,而不是代碼中設(shè)置的具體值,代碼中設(shè)置的值在初始化階段完成,另外也不包括final修飾的靜態(tài)變量,因為final變量在編譯時就已經(jīng)分配;
解析:解析主要是解析字段、接口、方法,主要是將常量值中的符號引用替換為直接引用的過程,直接引用就是直接指向目標(biāo)的指針或相對偏移量等;
初始化:最后是初始化,主要是完成靜態(tài)塊執(zhí)行與靜態(tài)變量的賦值,這是類加載最后階段,若被加載類的父類沒有初始化,則先對父類進行初始化。
只有對類使用是才會初始化,初始化的條件包括訪問類的實例,訪問類的靜態(tài)方法和靜態(tài)變量的時候,使用Class.forName()反射類的時候,或者某個子類被初始化的時候。
圖中淺綠的兩個部分表示類的生命周期。
3.3.2 類加載器BootStrap ClassLoader:啟動類加載器加載JAVA_HOME/lib下的類
ExtClassLoader:擴展加載器加載JAVA_HOME/lib/ext下的類
AppClassLoader:應(yīng)用加載器加載加載classpath指定目錄下的類
除此之外,還可以自定義類加載器。
Java的類加載器使用雙親委派模式,雙親委派模型的工作過程是:
如果一個類加載器收到了類加載的請求,它首先不會自己去嘗試加載這個類,而是把這個請求委派給父類加載器去完成。
每一個層次的類加載器都是如此。因此,所有的加載請求最終都應(yīng)該傳送到頂層的啟動類加載器中。
只有當(dāng)父加載器反饋自己無法完成這個加載請求時(搜索范圍中沒有找到所需的類),子加載器才會嘗試自己去加載。
很多人對“雙親”一詞很困惑。這是翻譯的鍋,,,“雙親”只是“parents”的直譯,實際上并不表示漢語中的父母雙親,而是一代一代很多parent,即parents。
雙親委派模式優(yōu)勢:
采用雙親委派模式的是好處是Java類隨著它的類加載器一起具備了一種帶有優(yōu)先級的層次關(guān)系,通過這種層級關(guān)可以避免類的重復(fù)加載,當(dāng)父親已經(jīng)加載了該類時,就沒有必要子ClassLoader再加載一次。其次是考慮到安全因素,java核心api中定義類型不會被隨意替換,假設(shè)通過網(wǎng)絡(luò)傳遞一個名為java.lang.Integer的類,通過雙親委托模式傳遞到啟動類加載器,而啟動類加載器在核心Java API發(fā)現(xiàn)這個名字的類,發(fā)現(xiàn)該類已被加載,并不會重新加載網(wǎng)絡(luò)傳遞的過來的java.lang.Integer,而直接返回已加載過的Integer.class,這樣便可以防止核心API庫被隨意篡改。
3.4 常用GC算法介紹 3.4.1 分代回收分代管理主要是為了方便垃圾回收,這樣做是基于兩個事實:
大部分對象很快都不在使用
還有一部分不會立即無用,但也不會持續(xù)很長時間
大部分對象在Eden區(qū)中生成,Eden區(qū)滿時,還存活的對象會在兩個Suivivor區(qū)交替保存,達到一定次數(shù)后對象會晉升為老年代。
老年代用來存放從年輕代晉升而來的存活時間較長的對象。
永久代主要用來保存類信息等內(nèi)容。
3.4.2 垃圾回收算法 CMS算法——JDK 1.7以前 G1算法——JDK 1.9后默認垃圾回收算法 ZGC——針對大內(nèi)存堆的低延遲垃圾回收算法著色指針
讀屏障
并發(fā)處理
基于Region
內(nèi)存壓縮(整理)
ZGC算法
3.5 考察點和加分項考察點
深入理解JVM內(nèi)存模型
了解類加載機制
了解內(nèi)存可見性
了解常用的GC算法實現(xiàn)和使用場景
能夠根據(jù)業(yè)務(wù)場景選擇合適JVM參數(shù)與GC算法
加分項
編譯器優(yōu)化
問題排查經(jīng)驗與思路
JVM調(diào)優(yōu)經(jīng)驗與調(diào)優(yōu)思路
了解最新的技術(shù)趨勢(例如:ZGC、Grraalvm)
3.6 真題簡述描述一下JVM的內(nèi)存模型
生命情況下會觸發(fā)FullGC
Java類加載器由幾種,關(guān)系是怎樣的?
雙親委派機制的加載流程是怎樣的,有什么好處?
1.8為什么用Metaspace替換掉PermGen?Metasapce保存在哪里?
編譯期會對指令做哪些優(yōu)化?(簡單描述編譯器的指令重排)
簡單描述一下volatile可以解決什么問題?如何做到的?
強制主內(nèi)存讀寫同步以及防止指令重排序兩點
簡單描述一下GC的分代回收
G1垃圾回收算法與CMS的區(qū)別有哪些?
對象引用有哪幾種方式,有什么特點?
強弱軟虛在四種引用以及在GC中的處理方式
使用過哪些JVM調(diào)試工具,主要分析哪些內(nèi)容?
課時4:并發(fā)與多線程 4.1 知識點匯總死鎖
競爭條件與臨界區(qū)
死鎖檢測與防止死鎖
殘剩條件
互斥
請求并保持
不可剝奪
循環(huán)等待
線程通信
wait
notify
notifyAll
線程狀態(tài)轉(zhuǎn)換
NEW
RUNNABLE
BLOCKED
WAITING
TIMED_WAITING
TERMINATED
常用工具類(JUC)
ConcurrentXXX
AtomicXXX
Executor
Caller&Future
Queue
Locks
機制
ThreadLocal
Fork/Join
Volatile
Interrupt
同步與互斥
Synchronized
Lock
鎖類型
鎖實現(xiàn)
CAS
Unsafe
原語
線程池
使用場景
原理與實現(xiàn)方式
線程池實現(xiàn)
4.2 線程的狀態(tài)轉(zhuǎn)換 4.3 線程同步與互斥 CAS與ABA問題 Synchronized實現(xiàn)原理 AQS與Lock 4.4 線程池詳解 線程池使用場景 線程池參數(shù)介紹核心線程數(shù),默認情況下,核心線程會一直存活
最大線程數(shù),決定線程池最多可以創(chuàng)建多少線程
線程的空閑時間,空閑時間的單位,當(dāng)線程閑置超過空閑時間時就會被銷毀
線程緩存隊列
有界隊列
無界隊列
同步隊列
線程池工廠方法
線程池滿時拒絕策略
拋出異常
丟棄
提交失敗時,由提交任務(wù)的線程直接執(zhí)行任務(wù)
丟棄最早提交的任務(wù)
線程池任務(wù)執(zhí)行流程 4.5 JUC重點工具實現(xiàn)類類名 | 特點 |
---|---|
AtomicLong, AtomicInteger, AtomicBoolean, LongAdder, DoubleAdder, LongAccumulator, DoubleAccumulator | AtomicLong通過unsafe類實現(xiàn),基于CAS。LongAdder基于Cell,分段鎖思想,空間換時間,更適合高并發(fā)場景 |
AtomicReference, AtomicStampedReference, AtomicMarkableReference | 原子對象讀、寫。AtomicStampedReference和AtomicMarkableReference用來解決ABA問題,分別基于時間戳和標(biāo)記位 |
ReentrantLock, ReentrantReadWriteLock, StampedLock, LockSupport | ReentranLock是獨占鎖,Semaphore是共享鎖。StampedLock是1.8改進的讀寫鎖,CLH樂觀鎖,防止寫?zhàn)囸I |
Executors, ForkJoinPool, FutureTask, CmpletableFuture | CompletableFuture支持流式調(diào)用,多future組合,可以設(shè)置完成時間。ForkJoinPool:分治思想+工作竊取 |
LinkedBlockingDeque, ArrayBlockingQueue | 雙端隊列,單端隊列 |
CountDownLatch, CyclicBarrier, Semaphore | 多線程任務(wù)匯總,多線程并發(fā)執(zhí)行,控制并發(fā)讀(共享鎖) |
ConcurrentHashMap, CopyOnWriteArrayList | COW適合讀多寫少,小數(shù)據(jù)量,高并發(fā)場景 |
考察點
理解線程的同步與互斥的原理(臨界資源、理解區(qū)、自旋鎖、偏向鎖 、沖入鎖、讀寫鎖概念)
掌握線程安全相關(guān)機制(CAS、Synchronized、ThreadLocal使用弱引用ThreadLocalMap)
了解JUC工具的使用場景與實現(xiàn)原理
熟悉線程池的原理、使用場景、常用配置
理解線程的同步與異步、阻塞與非阻塞(同步與異步的區(qū)別是任務(wù)是否在同一個線程中執(zhí)行的 ,阻塞與非阻塞的區(qū)別是異步執(zhí)行任務(wù)時線程是不是會阻塞等待結(jié)構(gòu)還是會繼續(xù)等待后面的邏輯)
加分項
結(jié)合實際項目經(jīng)驗或?qū)嶋H案例介紹原理
解決多線程問題的排查思路與經(jīng)驗
熟悉常用的線程分析工具與方法
了解Java8堆JUC的增強
了解Reactive異步編程思想
4.7 真題如何實現(xiàn)一個生產(chǎn)者與消費者模型?(鎖、信號量、線程通信、阻塞隊列等)
如何理解線程的同步與異步、阻塞與非阻塞?
線程池處理任務(wù)的流程是怎樣的?
wait與sleep的由什么不同?
1、wait屬于Object類,sleep屬于Thread類;2、wait會釋放對象鎖,而sleep不會;3、wait需要在同步塊中使用,sleep可以在任何地方使用;4、sleep需要捕獲異常、wait不需要。
Synchronized和ReentranLock有什么不同?
讀寫鎖適用于什么場景?ReentrantReadWriteLock是如何實現(xiàn)的?
讀寫鎖適合讀并發(fā)多,寫并發(fā)少的場景
線程之間如何通信?
wait和notify機制、共享變量Synchronized
保證線程安全的方法由哪些?
CAS、Synchronized、Lock、ThreadLocal
如何盡可能提高多線程并發(fā)性能?
盡量減少臨界區(qū)范圍、使用ThreadLocal、減少線程切換、使用讀寫鎖或CopyOnWrite機制
ThreadLocal用來解決什么問題?ThreadLocal是如何實現(xiàn)的?
重點回答ThreadLocak不是用來解決多線程共享變量的問題,而是線程數(shù)據(jù)隔離的問題
死鎖產(chǎn)生的條件?如何分析是否由線程死鎖?
在實際工作中遇到過什么樣的并發(fā)問題,如何發(fā)現(xiàn)(排查)并解決的?
課時5:數(shù)據(jù)結(jié)構(gòu)與算法 5.1 知識點匯總 5.1.1 數(shù)據(jù)結(jié)構(gòu)隊列
棧
表
數(shù)組
單鏈表
雙鏈表
循環(huán)鏈表
散列表
圖
有向圖
無向圖
帶權(quán)圖
多叉樹
B、B+樹
字典樹
二叉樹
平衡二叉樹
紅黑樹
哈夫曼樹
堆
5.1.2 算法常用算法思路
分治
動態(tài)規(guī)劃
貪心
回溯
分支界定
復(fù)雜度
時間復(fù)雜度
空間復(fù)雜度
排序
插入
希爾
直插
交換
冒泡
快排
選擇
簡單選擇
堆
歸并
基數(shù)
查找
二分查找
二叉排序樹
B樹
BloomFilter
字符串匹配
BF算法
BM算法
Sundady算法
KMP算法
Tire樹
5.2 從搜索樹到B+樹 5.3 字符串匹配 字符串匹配問題判斷給定字符串中的括號是否匹配
解體思路:
1、使用棧
2、遇左括號入棧
3、遇右括號出棧,判斷出棧括號是否與右括號成對
字符串匹配問題解題思路 5.4 TopK問題 TopK問題找出N個數(shù)中最小的K個數(shù)(N非常大)
TopK變種從N有序隊列中找到最小的K個值
5.5 常用算法適用場景 常用算法介紹 5.6 考察點和加分項 考察點了解基本數(shù)據(jù)結(jié)構(gòu)與特點
表、棧、隊列、樹需要熟練掌握,深刻理解使用場景(例如紅黑樹適合搜索,B+樹適合索引)
了解常用的搜索、排序算法,及復(fù)雜度和穩(wěn)定性
了解常用的字符串處理算法
能夠分析算法實現(xiàn)的復(fù)雜度
了解常用算法分類,解決問題的思路和解決哪類問題
加分項能夠?qū)?shù)據(jù)結(jié)構(gòu)與實際使用場景結(jié)合(介紹紅黑樹時結(jié)合TreeMap的實現(xiàn),介紹B+樹時結(jié)合MySQL的索引)
不同算法在業(yè)務(wù)場景中的應(yīng)用
面對模糊的題目能溝通確認條件和邊界
書寫算法代碼前,先講一下解題思路
能夠發(fā)現(xiàn)解答中的一些問題,給出改進的思路
5.7 真題題1、題2基礎(chǔ)題,必須掌握
各種排序算法實現(xiàn)和復(fù)雜度、穩(wěn)定性
二叉樹的前、中、后序遍歷
翻轉(zhuǎn)句子中單詞的順序
用棧模擬隊列(或用隊列模擬棧)
堆10億個數(shù)進行排序,限制內(nèi)存位1G
去掉(或找出)兩個數(shù)組中重復(fù)的數(shù)字
將一顆二叉樹轉(zhuǎn)換成其鏡像
確定一個字符串中的括號是否匹配
給定一個開始詞,一個結(jié)束詞,一個字典,如何找到從開始詞到結(jié)束詞的最短單詞接龍路徑
如何查找兩個二叉樹節(jié)點的最近公共祖先
課時6:常用工具集 6.1 知識點匯總團隊協(xié)作
Ant
Maven
Gradle
Git
SVN
質(zhì)量保證
Checkstyle
FindBugs
SonarQube
壓測
JMeter
JMH
AB
LoadRunner
容器與代理(隨著微服務(wù)的盛行,Envoy、OpenResty、Kong等API網(wǎng)關(guān)的使用也越來越普遍)
Tomcat
Jetty
Nginx
Envoy
OpenResty
Kong
CI/CD
Gitlab-CI
Jenkins
Travis
JVM相關(guān)
JMC(JFR)
jstack、jmap、jstat
系統(tǒng)分析
vmstat
iostat & iotop
ifstat & iftop
netstat
dstat
strace
GDB
lsof
tcpdump
traceroute
文檔管理
JavaDoc
Swagger
網(wǎng)絡(luò)工具
PostMan
WireShark(網(wǎng)絡(luò)包分析工具)
Fiddler(只針對HTTP進行抓捕)
Charies
6.2 JVM工具 JMC 線上調(diào)試神奇——btrace其他常用JVM工具介紹
6.3 Git工作流 Git常用命令 Git常用工作流 6.4 Linux系統(tǒng)分析工具 6.5 考察點和加分項 考察點了解常用JVM分析工具
掌握Git的常用操作和工作流
了解Linux系統(tǒng)下常用的分析工具
加分項能夠主動出擊體現(xiàn)知識廣度(在描述項目問題主動引出工具)
能夠體現(xiàn)實戰(zhàn)能力
6.6 真題排查JVM問題有哪些常用工具?
Git合并代碼有那兩種方法?有什么區(qū)別
Git與SVN有哪些差異?
你所在的團隊項目開發(fā)使用什么樣工作流?有什么優(yōu)點?
課時7:必會框架(上)——Spring全家桶 7.1 知識點匯總Spring
Spring Framework
Spring Boot
Spring Data
Spring Cloud
Sleuth
Netflix
Config
Bus
Security
Struts
ORM
Hibernate
Mybatis
Netty
RPC
Motan
Bubbo
Grpc
其他框架
Jersey
RESTEasy
Shiro
7.2 Spring框架 Spring基本概念 Spring框架組件 機制與實現(xiàn)AOP
動態(tài)代理
靜態(tài)代理
PlaceHolder動態(tài)替換
PropertyPlaceholderConfigure
PropertySourcesPlaceholderConfigure
事務(wù)
隔離級別
ISOLATION_DEFAULT
ISOLATION_READ_UNCOMMITTED
ISOLATION_READ_COMMITTED
ISOLATION_REPEATABLE_READ
ISOLATION_SERIALIZABLE
傳播行為
PROPAGATION_REQUIRED
PROPAGATION_SUPPORTS
PROPAGATION_MANDATORY
PROPAGATION_REQUIRED_NEW
PROPAGATION_NOT_SUPPORTED
PROPAGATION_NEVER
PROPAGATION_NESTED
核心接口/類
ApplicationContext
BeanFactory
BeanWrapper
FactoryBean
scope
Singleton
Prototype
Request
Session
Global-session
Application
Websocket
事件機制
ContextRefreshedEvent
ContextStatedEvent
ContextStoppedEvent
ContextClosedEvent
RequestHandledEvent
Spring應(yīng)用類型類
@Controller
@service
@Repository
@Component
@Configuration
@Bean
設(shè)置類
@Required
@Autowired && @Qualifier
@Scope
Web類
@RequestMapping && @GetMapping @ PostMapping
@PathVariable && @RequestParam
@RequestBody && @ResponseBody
功能類
@ImportResource
@ComponentScan
@EnableCaching && Cacheable
@Transactional
@Aspect && Poincut
@Scheduled
配置方式
XML
注解
API
自動裝配
byType
byName
constructor
autodetect
集合屬性注入
內(nèi)部bean
Spring Context初始化流程 Spring 中bean的生命周期 Spring 擴展接口 Spring Boot 課時7:必會框架(下)——RPC與ORM 7.3 Netty與RPCNetty線程模型
RPC介紹 開源RPC框架介紹 7.4 Mybatis Mybatis知識點 Mybatis處理流程 7.5 考察點與加分項 考察點掌握Spring的IOC、AOP的概念與實現(xiàn)
掌握Spring的Context創(chuàng)建流程和Bean的生命周期
了解Spring常用注解的作用與使用方式
了解SpringBoot的相關(guān)知識點
掌握Netty的線程處理模型
知道常用RPC框架的特點
了解Mybatis、Hibernate的實現(xiàn)原理
加分項閱讀過框架源碼,了解實現(xiàn)細節(jié)及思路
除了會應(yīng)用,還能夠理解理念
了解最新實現(xiàn)或方向
有實際優(yōu)化經(jīng)驗,例如Nett有性能調(diào)優(yōu)
7.6 真題SSH和SSM框架組合的區(qū)別是生命?
能描述一些Spring Context初始化的整個流程嗎?
簡單介紹一些Bean的生命周期及作用域
Spring配置中的placeholder占位符是如何替換的?有什么辦法可以實現(xiàn)自定義的配置替換?
要答出通過beanFactoryPostProfessal后置處理器進行的替換,如果要自定義處理,可以擴展PropertyPlaceHolderConfigure或者PropertySourcePlaceHolderConfigure來實現(xiàn)
SpringMVC的工作流程是怎樣的?
Spring如何解決循環(huán)依賴?
從構(gòu)造器循環(huán)依賴和setter循環(huán)依賴兩方面來回答
Bean的構(gòu)造方法、@PostConstruct注解、InitializingBean、init-method的執(zhí)行順序是怎樣的?
說說Netty中有哪些重要的對象,它們之間的關(guān)系是什么?
RPC與HTTP的區(qū)別是什么,什么場景適合選用RPC,什么場景適合使用HTTP?
在使用方式方面,HTTP使用Client,RPC通過動態(tài)代理;從請求模型看,HTTP一般會經(jīng)過DNS解析,4/7層代理等中間環(huán)節(jié),而RPC是點對點直連;從服務(wù)治理能力來看,RPC提供豐富的服務(wù)治理功能,例如熔斷 、負載均衡,HTTP對跨語言處理比較方便
RPC的交互流程是怎樣的?
請介紹一下Mybatis的緩存機制
Mybatis如何配置動態(tài)SQL?有哪些動態(tài)SQL標(biāo)簽?
課時8:緩存 8.1 知識點匯總 8.2 Memcache MC內(nèi)存結(jié)構(gòu) 8.3 Redis Redis知識點 Redis數(shù)據(jù)結(jié)構(gòu) 8.4 緩存常見問題 8.5 考察點和加分項 考察點了解緩存的使用場景,不同類型緩存的使用方式
掌握MC和Redis的常用命令
了解MC的Redis在內(nèi)存中的存儲結(jié)構(gòu)
了解MC和Redis的數(shù)據(jù)失效方式和剔除策略
了解Redis的持久化、主從同步與cluster部署的原理
加分項結(jié)合使用場景來介紹緩存的使用
有過分布式緩存設(shè)計和應(yīng)用經(jīng)驗
了解緩存使用中可能產(chǎn)生的問題
知道Redis的典型應(yīng)用場景
知道Redis的新特性
8.6 真題Redis和Memcache有什么區(qū)別?該如何選用
你用到過哪些Redis的數(shù)據(jù)結(jié)構(gòu)?用在什么場景下?
Redis有哪些持久化方式,分別是什么?
Redis的過期機制是怎樣的?Redis有哪些淘汰策略
如何保證Redis的高并發(fā)和高可用?
如何使用Redis實現(xiàn)延時隊列?如何使用Redis實現(xiàn)分布式鎖?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/74239.html
摘要:不過幸運的是所有面試的公司都給了,在這里總結(jié)下經(jīng)驗吧。這里推薦下我當(dāng)時看的一篇的面經(jīng),木易楊老師寫的大廠高級前端面試題匯總。 前言 本人畢業(yè)一年,最近陸續(xù)面試了頭條、瓜子、360、猿輔導(dǎo)、中信銀行、老虎等公司,由于最近比較寒冬而且招1-3年的并不多,再加上自己對公司規(guī)模和位置有一定要求,所以最后合適的也就這幾家了。不過幸運的是所有面試的公司都給了offer,在這里總結(jié)下經(jīng)驗吧。掘金:h...
摘要:面試,是跳槽后第一個需要面對的問題而且不同公司面試的著重點不同但是卻有一個共同點基礎(chǔ)是必考的。對自動災(zāi)難恢復(fù)有要求的表。 貌似這一點適應(yīng)的行業(yè)最廣,但是我可以很肯定的說:當(dāng)你從事Java一年后,重新找工作時,才會真實的感受到這句話。 工作第一年,往往是什么都充滿新鮮感,什么都學(xué)習(xí),沖勁十足的一年;WEB行業(yè)知識更新特別快,今天一個框架的新版本,明天又是另一個新框架,有時往往根據(jù)項目的需...
閱讀 807·2021-11-24 09:38
閱讀 1009·2021-11-11 11:01
閱讀 3255·2021-10-19 13:22
閱讀 1541·2021-09-22 15:23
閱讀 2843·2021-09-08 09:35
閱讀 2779·2019-08-29 11:31
閱讀 2133·2019-08-26 11:47
閱讀 1578·2019-08-26 11:44