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