成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java面試 32個核心必考點完全解析

JiaXinYi / 1186人閱讀

摘要:如問到是否使用某框架,實際是是問該框架的使用場景,有什么特點,和同類可框架對比一系列的問題。這兩個方向的區(qū)分點在于工作方向的側(cè)重點不同。

[TOC]

這是一份來自嗶哩嗶哩的Java面試

Java面試 32個核心必考點完全解析(完)

課程預(yù)習(xí) 1.1 課程內(nèi)容分為三個模塊

基礎(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年
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)

Client-Server

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保證

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)容。

1555308921705

3.4.2 垃圾回收算法 CMS算法——JDK 1.7以前

1555309308617

G1算法——JDK 1.9后默認垃圾回收算法

1555309418313

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問題

1555316152196

Synchronized實現(xiàn)原理

1555316240167

AQS與Lock

1555316349493

4.4 線程池詳解 線程池使用場景

1555316406381

線程池參數(shù)介紹

核心線程數(shù),默認情況下,核心線程會一直存活

最大線程數(shù),決定線程池最多可以創(chuàng)建多少線程

線程的空閑時間,空閑時間的單位,當(dāng)線程閑置超過空閑時間時就會被銷毀

線程緩存隊列

有界隊列

無界隊列

同步隊列

線程池工廠方法

線程池滿時拒絕策略

拋出異常

丟棄

提交失敗時,由提交任務(wù)的線程直接執(zhí)行任務(wù)

丟棄最早提交的任務(wù)

1555316495718

線程池任務(wù)執(zhí)行流程

1555316993492

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ā)場景
4.6 考察點和加分項

考察點

理解線程的同步與互斥的原理(臨界資源、理解區(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+樹

1555322006259

1555322091545

5.3 字符串匹配 字符串匹配問題

判斷給定字符串中的括號是否匹配

解體思路:

1、使用棧

2、遇左括號入棧

3、遇右括號出棧,判斷出棧括號是否與右括號成對

字符串匹配問題解題思路

1555334760723

5.4 TopK問題 TopK問題

找出N個數(shù)中最小的K個數(shù)(N非常大)

1555334823104

TopK變種

從N有序隊列中找到最小的K個值

1555334934753

5.5 常用算法適用場景 常用算法介紹

1555334984091

1555335033586

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

1555342061188

線上調(diào)試神奇——btrace

1555342168298

其他常用JVM工具介紹

1555342246235

6.3 Git工作流 Git常用命令

1555342338332

Git常用工作流

1555342399202

6.4 Linux系統(tǒng)分析工具

1555342510607

1555342537958

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基本概念

1555395888730

Spring框架組件

1555396040775

機制與實現(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初始化流程

1555397197543

Spring 中bean的生命周期

1555397260319

Spring 擴展接口

1555397325596

Spring Boot

1555397399875

課時7:必會框架(下)——RPC與ORM 7.3 Netty與RPC

1555407949580

Netty線程模型

1555408007496

RPC介紹

1555408449634

開源RPC框架介紹

1555408488352

7.4 Mybatis Mybatis知識點

1555408578829

Mybatis處理流程

1555409715315

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 知識點匯總

1555411052725

8.2 Memcache MC內(nèi)存結(jié)構(gòu)

1555411889664

8.3 Redis Redis知識點

1555411944911

Redis數(shù)據(jù)結(jié)構(gòu)

1555412014624

8.4 緩存常見問題

1555412069766

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

相關(guān)文章

  • 帝都寒冬一年經(jīng)驗前端面試總結(jié)

    摘要:不過幸運的是所有面試的公司都給了,在這里總結(jié)下經(jīng)驗吧。這里推薦下我當(dāng)時看的一篇的面經(jīng),木易楊老師寫的大廠高級前端面試題匯總。 前言 本人畢業(yè)一年,最近陸續(xù)面試了頭條、瓜子、360、猿輔導(dǎo)、中信銀行、老虎等公司,由于最近比較寒冬而且招1-3年的并不多,再加上自己對公司規(guī)模和位置有一定要求,所以最后合適的也就這幾家了。不過幸運的是所有面試的公司都給了offer,在這里總結(jié)下經(jīng)驗吧。掘金:h...

    Scott 評論0 收藏0
  • 七面阿里:現(xiàn)在分享一下阿里最全面試116題:阿里天貓、螞蟻金服、阿里巴巴面試題含答案

    摘要:面試,是跳槽后第一個需要面對的問題而且不同公司面試的著重點不同但是卻有一個共同點基礎(chǔ)是必考的。對自動災(zāi)難恢復(fù)有要求的表。 貌似這一點適應(yīng)的行業(yè)最廣,但是我可以很肯定的說:當(dāng)你從事Java一年后,重新找工作時,才會真實的感受到這句話。 工作第一年,往往是什么都充滿新鮮感,什么都學(xué)習(xí),沖勁十足的一年;WEB行業(yè)知識更新特別快,今天一個框架的新版本,明天又是另一個新框架,有時往往根據(jù)項目的需...

    animabear 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<