2022Java最新真实面试题汇总
一、面經
適當夸夸面試官(或所在公司)不會有壞處
如果某個問題完全不會(或稍微懂點),直接承認(或略作回答)并把話題引導向類似話題(redis集群的槽機制 -> 一致性哈希)
第二條如果完全不會,可以在表達自己不會之后給與面試官一點反問,表現出自己的求知欲與關注度
所有話題都可以適當性的發散,不要太發散以免顯得有備而來
所有問題(熟悉或不熟悉)的回答不要太快,給面試官反應與打斷的時間,同時方便自己梳理邏輯,顯得沉穩;回答太快容易顯得有備而來
一定要樂觀向上(至少攝像頭下的你看起來得是這樣)
80%面試官的80%的問題來自于簡歷的自寫技術棧及第一個項目,這一條真的非常重要
入職阿里40w+(整理)
?
入職騰訊35w+(整理)
?
入職京東(整理)
?
二、真題(2021)
完字節跳動
1、為什么MySQL索引更適合B+樹而不是二叉樹、B樹
https://blog.csdn.net/qq_38038480/article/details/81738079
2、微服務下的用戶登錄權限校驗解決方案
https://www.cnblogs.com/zxfei/p/11716822.html
3、微服務之熔斷、降級、限流 熔斷是在客戶端還是服務端?
https://blog.csdn.net/aa1215018028/article/details/81700796
4、kafka如何保證消息不丟失?Kafka Rebalance機制
保證消息不丟失:
https://www.jianshu.com/p/68c173e4c549
Rebalance機制:
https://www.cnblogs.com/yoke/p/11405397.html
5、redis集群模式下key的尋址
https://blog.csdn.net/chang384915878/article/details/86749209
6、算法題:給定一組非負整數,重新排列它們的順序使之組成一個最大的整數。
輸入: [10, 2]
輸出: 210
輸入: [3,30,34,5,9]
輸出: 9534330
輸入:[5, 60, 2, 80, 342]
輸出:865432200
輸入是數組,輸出是字符串。
美團
美團一面
1、什么是冪等,Get和Post的區別
2、Https實現方式 能用私鑰加密公鑰解密嗎
3、希爾排序是什么
4、解釋一下【寧用組合,不用繼承】
5、List list;可以這樣定義嗎?為什么?解釋一下泛型擦除?為什么java必須強制?(因為別的語言有泛型,java沒有,運行時擦除,所以在編譯前強制)
6、什么是STW,stop the world,為什么用
7、我能在一個有序鏈表來進行二分查找么?(不能,沒有索引)
8、COW ,copy on write是什么
9、CSRF攻擊是什么
10、DMA是什么
11、CPU負載過高怎么處理
12、還有別的 服務器指標嗎
13、經常觸發FullGC怎么排查處理
14、CPU過高怎么排查處理
15、令牌桶是什么
16、反爬蟲怎么做(一開始說的mq削峰,但是如果大流量都到不了mq層,在網關/nginx做)
17、解釋一下【數據存取在內存用平衡二叉樹(avl,紅黑樹),在硬盤用b樹b+樹】
18、解釋一下BIO、NIO
19、解釋一下多路復用,多路復用需要CPU參與嗎
20、為什么Eden與s0s1比例為8:1:1
21、ABA問題怎么解決
22、為什么不用Mysql的緩存而用redis的
23、HashMap1.7 1.8區別,為什么
24、你覺得哪門數學對你的工作有幫助?為什么?(高數,積分可以求時間空間復雜度,線代,數據庫連表查詢就是矩陣相乘-笛卡爾積)
25、CPU負載跟使用率的區別
26、第一第二第三范式,為什么生產環境不用外鍵
美團二面
1、主要方向是什么(Spring+java為核心,微服務架構和redis等)
2、為什么ZK可以作為注冊中心?ZK都有什么用?樹狀結構有什么用?(數據隔離)
3、redis的數據結構為了性能做了哪些優化?(list,zset沒有鎖不需要競爭,String是simple)
4、redis的map擴容原理?
5、redis過期數據清除原理?
6、用的主從還是cluster?(cluster)原理是什么?如何保證多節點數據一致性?
7、你們項目中用的什么收集器?(G1)為什么性能好?(描述收集過程,可以并行)
8、Synchronized與volatile區別?鎖升級原理?(展開聊,核心是根據并發的數量進行升級)
9、負載均衡有哪些?(服務端負載nginx 客戶端負載ribbon,,,輪詢、最少連接、一致性哈希)
10、為什么用mongo
11、spring-cache有什么用?(集成redis,簡單,可以替換底層為guava)
12、算法題,三個線程順序打印1-10(sync對全局唯一的遞增量進行加鎖保證順序)
13、為什么想換工作?
美團三面
1、講當前組的業務(人財物)
2、梳理業務線,描述當前項目的設計過程,業務流程,相對于之前有什么變化和好處(有具體數值體現最好)
3、項目中為什么用這些組件?技術選型過程?你做了什么?
4、如果是別的部門選型會怎么選?看重什么?
5、項目中遇到哪些挑戰?
快手
1、不要拿被問的問題反復重復。。。
2、一定要主動說
快手一面
1、講講項目
負責為用戶還各種費用并且消解債務的系統
SpringBoot 和Jetty有什么區別?
2、IO模型
nio中的驚群現象是什么怎么解決?
3、Redis的主從同步、Zookeeper的主從同步
redis實現分布式鎖使用的命令?
set key value [ex|px] seconds|milliseconds [NX|XX]
ex和px都是設置過期時間,如果是ex使用秒為單位,如果是milliseconds使用毫秒為單位
NX和XX是設置策略,NX表示沒有的時候我設置,XX表示存在我才設置
set不成功返回null,set成功返回ok
還可以使用lua腳本來實現,redis.call("參數名稱",args)
解決redis釋放鎖的各種問題(但是換來的性能不好):使用Redssion框架
兩者使用對比:
ZAB協議:
CAP定理:
BASE理論
集群模式有哪幾種?分別都怎么實現的?
raft協議聽過嗎?
4、業務場景設計題:被調方單機最多只能夠提供1w的qps,如果調用方突然暴漲到2w的qps,這種情況怎么解決?
fail-over:
如果允許任務延遲執行,可以放到消息隊列中去,然后慢慢的消費,或者快速拋出處理中異常,上游去補單+冪等重試。
如果就是要實時交付,在接口調用開始做一個限流,超過了最大限制使用異常通知。這時候需要注意控制連接數,不能夠過大,否則會導致大量超時,不能夠實時反饋。
5、volatile如何實現的?
redisson如何保證watch機制準確關閉?
6、和我講講MySQL分頁查詢如何去做?如果不使用id去實現為什么慢?
主要從回表的方面回答。
快手二面
數據平滑遷移方案?
需要開發的工具:遷移工具、數據對比工具
1、開啟雙寫(insert),雙update操作,其中update新庫返回0(影響條數為0表示新庫沒有數據)記錄到日志中去,日志格式為庫名、表名、數據id。
2、遷移工具開始先將老庫的最后一條數據的id記錄到文件中
3、開始遷移比<=記錄id的所有記錄到庫中,然后將update日志中的記錄都讀取重新update一次
4、開啟比對工具,不斷的比較,將不一致的數據打印錯誤日志。
5、反復校驗數據,直到數據都一致。
6、這時候可以代碼上線了。
快手發紅包場景設計
快手三面:
1、數組的大小如何計算
數組對象本身的大小和它自身的長度是有關系的,因為長度越長要存放的引用也就越多
如果是引用類型的數組,計算總空間大小的時候還是要考慮數組中存放的對象的大小的。
2、時間空間復雜度
空間復雜度和字符串的長度有關系
時間復雜度和分割之后的字符個數有關系
3、字符串反轉,以單詞為單位反轉。
實現一個空間復雜度為O(1)的字符串反轉。
快手面試補充
快手使用的技術棧
涉及的Java相關:常見集合類源碼、多線程并發、虛擬機一些特性(如內存分布、垃圾回收)、網絡編程(如網絡io等等)
數據存儲:redis、mysql
消息隊列:kafka、rocketmq
計算機網絡:http協議、tcp/ip協議(常見的一些參數和調優)
還有就是zk、主從同步、還有一些解決分布式問題的方案
比如想CAP定理、AKF拆分
kafka相關
kafka一般用在業務需要解除耦合的場景,比如我們現在做的打款流程,發送金幣
kafka消費者一般用于兩個系統的解除耦合的操作,比如我們給用戶發錢,不會同步的給一個一個用戶發錢,而是會通過kafka將這個事件發出來,然后開啟異步的consumer去做處理,這樣一來可以提高機器的處理速度增大吞吐量、二來可以將補償邏輯寫到一起不用再單獨的想著去寫補償邏輯了
MySQL相關
mysql一般用于存儲可靠數據,比較重要的數據,而且要求數據是關系形的
比如我們會存儲一些發邀關系、用戶和師傅的關系
mysql的話會存儲一些可靠的數據,比如金幣、比如應該發放的工資等等
利用mysql去做存儲,一般都是利用它有事務的特性
可以比較好的實現原子操作
因為想金幣、工資這種比較重要的不能夠出現中間狀態
需要有一種機制去保證數據的可靠性
但是有時候但系統的數據庫可以很方便的實現事務,但是在分布式場景下我們是系統與系統、集群與集群所以要考慮的分布式情況下的事務
分布式事務要考慮的情況就比較多了,這個好像也問得挺多的,你如何去保證多個系統數據之間的一致性??
一般有很多開源的實現方案,什么兩階段提交協議、三階段提交協議、saga協議等等
絕大部分都是基于CAP定理去考慮的
就是你到底要數據強一致性、還是可用性,等等
如果要數據強一致性,那么可用性是必然下降的
我們一般用的是弱一致性,提高可用性,常見的就是tcc
tcc的原理就是,由一個主調方,由主調方挨個的調用被調方,相當于是try操作,等到所有的被調方都try成功后,再進行commit操作;
如果try成功的話,基本認為被調方請求處理都是成功了
接下來commit必須要成功,所以如果當出現commit出現失敗或者處理中的情況下,需要進行不斷的補償
直到都成功,整個請求才算成功;
但是還有可能不是commit請求出現異常,有可能是try請求出現異常
這個業內的實現方式一般也是處理中就不斷的補償、如果一旦有一個被調方請求try失敗了,那么會將之前try過的被調方再發起一遍cancel請求去取消剛才try鎖定的資源
如果try請求出現處理中那么會進行掛起,并等待補償繼續try,直到得到一個終態,要么成功、要么失敗,這就是最終一致性,而不是強一致性
但是應用場景的話,我這一種是真實線上存在的
其實面試的時候會問得比較細,很多細節點如果不是真的做過是感受不到的
老師如果你沒有這方面的經驗,可以去網上找找開源項目看看吧
剛才的方案只是能夠解決分布式的一種方案,但是還是有很多缺陷,缺陷就是調用鏈路太長鎖定的時間太長會造成資源的浪費,并發量不高的情況,可以用這一種方案,但是如果并發特別高的話就不能用了
redis相關
我們好像問redis比較多
redis一般比mysql快百倍的速度,但是一般不是很可靠
我們的業務場景比如會用redis存儲用戶的消息飄新,如飄小紅點、飄數字
還有會存儲一些比如需要限制彈窗次數的數值
環信科技
環信一面(技術leader)
1、IOC的理解
2、Mysql怎么用樂觀鎖
3、Synchronized能與wait或lock混用嗎
4、Dubbo選擇的原因,為什么不考慮gRPC?http2的了解?
5、客戶端負載均衡與服務端負載均衡優劣
6、JWT用什么保證一致
7、如何設置線程池的參數
8、@component與@bean的區別
9、@autowried是按類型還是按名稱
10、@Resource?
11、對于經典三層的理解
環信二面(技術leader)
1、詳細解釋CAP 結合zookeeper
2、詳細介紹系統設計,畫圖解釋系統架構,以及拆分過程,為什么要用nacos替換consul,(不應該經常更替組件)
3、為什么總mysql替換mongo(雪花模型,最根本的原因就一個,元數據更容易用mysql表示,因為MongoDB是文檔數據庫,不容易抽象)
4、100G的數字數組用256M內存怎么排序(答,位圖,建議用大數據的方式,分而治之)
5、大數組取最大值?取前三個值?(答,排序取值,建議直接遍歷比較取最大值,cas)
6、Vue生命周期
7、描述一下多線程技術的演進(答:1.5前后的lock出現、sync的鎖升級,線程池的出現,線程池靜態方法的廢棄,Thread到runnable到callable,Future)
8、什么是堆排序
9、Mysql與Redis的QPS是多少?如果一個千兆網卡跟Redis呢
百度
百度一面
1、方向是paas云,提供k8s+docker的開箱即用的產品,所以問的方向大多在這里
2、都有哪些注冊中心?區別是什么?為什么會出現zk?zk原理?zk保證了cp還是ap?為什么后來棄用了?zk和nacos的區別?zk底層數據結構?什么算法?具體原理?(znode,paxos,忘記了。。)
3、Hystrix原理?ribbon如何跟其他服務注冊中心結合使用?
4、Springcloud都有哪些?
5、Docker是做什么的?有什么優勢?
6、講一下你理解的容器編排
7、算法題,1,十個線程并行計算,最后主線程統一輸出結果(countdownlauch+callable+線程池)2.一個數組,只有一個數字出現了一次,其他的都是兩次,找出這個數字(位圖)
8、多線程同步的方法
百度二面
1、介紹下項目
2、進程線程區別?什么時候用多進程與多線程?多進程如何通信?
3、百度搜索輸入i會有一個下拉列表,如何實現?
4、項目中的難點是什么?
5、為什么用Mysql沒用Mongo?
6、為什么不用zk?
7、BOSS三面
8、描述下java(類)啟動流程
9、慢sql優化?
螞蟻金服
螞蟻金服一面
1、自我介紹
2、ES的查詢怎么進行性能優化?
3、ES寫入怎么進行性能優化?
4、ES的深度分頁問題?
5、Redis的常用數據結構有哪些?你們項目里面分別用來做什么?
6、Zset的底層數據結構了解嗎?Zset是怎么實現的?
7、Redis的緩存過期和淘汰策略了解嗎?LRU和LFU具體有什么區別?Redis是怎么實現LRU和LFU的?
8、你們怎么解決Redis緩存和DB數據不一致的問題?延遲雙刪的原理
9、HashMap源碼了解嗎?講講get和put的過程?HashMap怎么解決Hash沖突?java8的HashMap中為什么要引入紅黑樹?
10、HashMap是線程安全的嗎?ConcurrentHashMap怎么保證線程安全的?
11、MySQL隔離級別?不可重復讀和幻讀的區別?
12、給了幾種情況讓MySQL判斷索引是不是命中?
13、新建MySQL索引的時候依據什么原則呢?
14、有沒有遇到MySQL主從的數據一致性問題,怎么解決的?
15、Jvm垃圾回收算法了解嗎?
16、能講講CMS和G1收集器的具體原理嗎?哪些垃圾收集器是吞吐量優先的?
17、還有什么問題要問我嗎?
螞蟻金服二面
1、自我介紹
2、介紹下你們的項目?你主要負責哪一塊?
3、問我們的業務細節,可能面試官對我們的業務比較感興趣,這個問的很細,我一直舉例子說了好幾遍
4、對著我項目中的一個短信切包問題從頭問到尾,這一個問題就解釋了大概20分鐘,項目細節問的很多很細,里面各種是怎么實現的
5、還有什么要問我嗎?
螞蟻金服三面
1、自我介紹
2、介紹下之前的項目,你自己主要負責哪一塊?
3、照著簡歷問項目細節,連環問了40多分鐘
主要解決了什么問題?
怎么實現的?
你做了哪些優化?你是怎么實現的?
為什么不像XXX這么實現呢?
4、你們項目的限流怎么做的?
5、滑動窗口了解嗎?
6、MySQL事務的隔離級別?
7、數據傾斜問題了解嗎?
8、你們MySQL的架構是什么?大概是什么樣的數據量級?
9、你和內推你的同學是什么關系?
10、你目前在這家公司的薪資大概是多少?
11、還有其他問題問我嗎?
字節-抖音
1、自我介紹
2、最有挑戰或者說你覺得最有意義的項目介紹
3、tcp三次握手,有哪些狀態?
4、springboot的啟動過程說一下?
5、一個含有域名的正常C端請求,在獲取響應數據之前,請求的處理鏈路能描述一下嗎?cdn是怎么做網絡解析的?
6、rocketmq的rebalance原理?消息怎么保證有序性?
7、redis你經常使用的數據存儲結構?zset、string類型的底層實現
8、redis的持久化方式、特點。數據如何同步和恢復?(主下面新加入一個從節點,數據怎么同步? 節點宕機,重啟怎么恢復數據)
9、redis的Gossip協議、集群選舉方式raft算法、分片方式(客戶端編碼key分區(提問了什么是一致性hash算法)、codis、cluster)
10、Redis的分布式鎖底層實現原理了解嗎,怎么確保唯一?(AP模型) 紅鎖了解不?(面試官這方面挺懂的,后續還引導我理解紅鎖的思想)
11 、什么是CAP理論?為什么redis采用的是raft,而不是paxoy算法?
12、redis為什么那么快?
13、什么是緩存的擊穿和雪崩? 緩存熱點key怎么處理?
14、如果說直播時的一個活動場景,發送優惠券(有效期前5分鐘要提醒用戶,優惠券快過期提醒),該怎么實現? rocketmq的延時消息是怎么實現的?
15、concurrenthashmap了解嗎?怎么擴容? 擴容期間能否進行put和查詢?說下ConcurrentHashMap,怎么實現size的?
16、volatile關鍵字的使用及原理
17、threadlocal是否了解?
18、mysql索引結構、mysql為什么采用B+樹而不是B樹?B+樹的時間復雜度、一般樹高是多少?
19、mysql事務的隔離級別、MVCC機制原理、如何解決幻讀問題?binlog了解嗎?
20、JVM的垃圾回收算法、對象什么時候被轉移到老年代?
21、編程題:
求一個單詞的最大回文子串(滑動窗口)
單向鏈表逆向按K個一組翻轉 12345678 -》87654312 (先把鏈表整個翻轉一次,再按組翻轉,最后再把結果鏈表再翻轉一次)
單向鏈表,偶數點正序、奇數點逆序,合并轉換,使得整個鏈表是升序的。
二叉樹Z字形打印
22、系統設計題:
1.長短鏈接url轉換系統設計
2.100個乒乓球,兩個人輪流拿。每批次可以隨機拿1~5個球,誰拿到最后一批,就算誰贏。我先拿,設計一個方案,保證我一定贏。(答案:我先拿4個,然后兩個人一組作為一個批次,保證每批次的和都是6。
15組之后就是94了,接下來該對方去拿。這樣可以確保最后我是肯定贏的。--》即需要確保對方最后一次去拿球時,剩余是6個球。)
23、擴展(朋友問到的算法題)
旋轉數組,查找元素下標
數組,移動K位 {1,2,3,4,5} ->移動2位 {3,4,5,1,2}。
鏈表去重
https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/
單向鏈表,中間一段做翻轉。 比如說12345 -》 14325
實現一個簡單的StringBuilder
手寫一個簡單的hashmap
系統設計題:直播搶發紅包方案設計
阿里-釘釘
1、自我介紹
2、最有挑戰或者說最有意義的項目介紹、針對你說的相關內容隨機提問(講業務項目的時候,我會延伸一下我們公司項目的一些好的系統模塊設計方案、與三方平臺交互的限流處理設計等。講技術項目的話,我會說自己搭建的xxl-job調度平臺和源碼設計,還有一個自己手寫的服務探活應用)
3、CopyOnWriteArrayList的優缺點及常用場景
4、Set集合的底層原理
5、Map有哪些類型?HashMap和LinkedHashMap有什么不同?
6、線程有哪些狀態?線程池的原理?怎么實現線程復用?worker線程了解嗎?
wait/notify和sleep方法的區別?
volatile關鍵字的使用及原理
公平鎖和非公平鎖底層實現區別?
Juc并發包常見工具類是否使用過?底層原理是否了解?
7、zk的選舉機制具體說一下?
大型項目,當有很多實例節點部署時,zk做注冊中心不太適合,為什么?
zk集群宕機了,dubbo服務還能否正常調用?比如說宕機2小時這種的?
8、guava的本地緩存,緩存回收策略。底層了解嗎?類似于guava的本地緩存設計思路,你怎么設計一個LRU緩存?
9、rocketmq消息怎么保證不丟失?當下游的服務消費能力有限時,怎么處理?(增加下游服務實例節點、拉取線程等mq參數設置調整、下游服務RateLimiter自身限流等)
10、cannel是怎么結合mysql實現數據同步的?
11、java的雙親委派加載機制,這樣的設計有什么好處?
12、mysql:
mysql的鎖。什么時候加記錄鎖、間隙鎖、臨鍵鎖? 意向鎖設計的意義?
mysql怎么解決幻讀?
慢sql優化
有沒有遇到過死鎖問題、怎么排查和解決?
13、jastack命令有沒有用過?jastack查看線程狀態主要關注哪些狀態?
Cpu使用率高問題怎么排查?哪些問題會導致Cpu使用率高?
14、垃圾回收算法:
你們線程采用的什么垃圾回收策略(PartNew+CMS)?主要關注和設置了哪些參數?
對G1垃圾回收器是否了解?有什么特點?有沒有嘗試采用G1垃圾回收器對你們的服務進行優化?
FullGc問題的排查和解決經歷說一下。
你們線上服務的jvm內存主要參數設置?(我們線上主流服務配置,4核8G虛擬機,新生代3g,老年代2g,eden:g1=6)為什么會那樣設置?
15、算法題:
1000張票,3個黃牛,賣票及結果統計問題。每賣100個,票價漲100元。類似這樣的多線程問題。
晟茂科技
三輪面試(兩輪技術一輪人事),每輪自我介紹是必須的,簡略個人信息介紹
然后大概講了下工作經歷和工作內容,每段工作經歷擔任的角色
完成的主要工作,貢獻內容,帶團隊幾人,離職原因。
1、MySQL相關問題
- 一條sql執行,在MySQL中的執行流程(考察MySQL架構及各組件作用)
- redolog、undolog、binlog、relaylog作用、寫入時機、如何保證斷電數據一致
- buffer刷盤策略
- innodb行鎖(顯式加鎖實現)以及產生間隙鎖、next-key鎖、表鎖的原因
- 分庫分表(結合mycat講的)
- 分布式事務問題(分庫分表相關,引出不同系統通信的分布式事務問題以及解決方案)
- 索引問題,主要是索引類型和組合索引優化
2、Kafka相關問題
- 架構模型
- 數據一致性問題(producer、broker、consumer是如何保證的)
- 消費模式為什么只有pull
- log文件的寫入(工作原理、buffer刷盤相關)
- 索引(稀疏索引、內存映射是怎么回事)
- __consumer_offsets、log、索引文件關系
- 寫log和寫索引機制(主要為buffer、和內存映射的考察)
- 如何實現高吞吐量的
- ISR、OSR概念和副本在這兩者的角色切換,產生的時機
- 消息的批量發送
- 多partition、多consumer的partition分配問題,是如何分配的,數量關系不對應會出現什么問題
- partition的master和副本消息同步原理,HW、LEO是怎樣工作的
- 選主問題以及master掛了選主問題,為什么不采用zookeeper的選主策略或借助zookeeper選主
3、rocketmq相關問題
- 架構模型
- producer、namespace、broker、consumer通信關系
- 消息的存儲(commitlog、索引)以及與Kafka的區別,buffer的刷盤以及與Kafka異同
- commitlog存儲內容、索引存儲內容、隊列中的內容
- 消息從生產到消費各環節是如何保證消息不丟的(消息的傳輸、持久化、offset機制)
- 隊列的讀寫分離(Kafka為什么不讀寫分離),讀寫隊列不對等會有什么問題。
- 讀隊列和consumer數量不對等隊列分配
- 事務消息流程
- 集群下topic消息發送策略
- 消息的消費模式(pull、偽push),消費者組消費模式(Kafka為什么不支持組內廣播)
4、spring相關問題
- 事務控制原理,以及調用同類的事務方法失效原因和解決辦法
- spring啟動流程
- spring boot自動裝配原理
- springmvc工作原理、組件、功能
- service異常處理(事務方法異常處理)
- 全局異常處理(controlleradvice)
5、mybatis相關問題
- 架構組成和調用dao方法底層流程(從啟動到執行sql)
- 插件原理
6、dubbo相關問題
- 架構設計
- 支持的協議、協議特點
- 流程(服務注冊、服務發現、服務消費)
- zookeeper掛了還能否消費服務?
- SPI機制
7、spring cloud各組件
- 由于沒有項目實戰,只講了gateway、feign、hystrix、eureka的作用及使用,說自己平時研究用的,沒有深問
8、redis相關問題
- 高可用方案
- 分布式鎖實現原理
- key設計問題
- 數據分片問題
- 常用操作命令
- 主從切換鎖丟失問題
- 整個redis集群掛掉,業務服務應對方案(按redis作用講)
- 批量命令(mget、mset相關)和不同數據類型如何批量修改值
- 生產禁用命令以及原因,scan、unlink命令考察
- 單線程為什么快、吞吐高
- 跳表
9、Java基礎
- 常用設計模式,項目場景舉例說明和具體怎樣用的(要求詳細講,應該是怕背題糊弄),我主要講了策略模式(營銷策略)、享元模式(配置緩存、營銷規則緩存、流水號自增實現中對緩存的使用)、單例模式(講的靜態內部類實現單例)、工廠模式(營銷策略對象的生產)在項目中的使用。
- Integer緩存的數值范圍(-128~127)問題(integer 127 == 127為true,integer 128 == 128為false)
- voliate關鍵字作用、原理,引出JMM工作模型
- synchronized關鍵字用法及鎖定范圍
- JUC包,主要是各種鎖作用和實現(CAS、AQS)和atomic類原理(問到UNSAFE為止)
- HashMap、ConcurrentHashMap
- 線程池種類、用法,自己new線程池的各個參數含義作用
- 線程池工作原理,主要考察核心線程、非核心線程創建時機。拒絕策略執行時機和有哪些策略,執行后會有什么結果
- JVM模型、常用參數
- Xms、Xmn為什么設置成相同大小
- heap內存劃分比例,原因,給出一組配置參數,計算Eden、survivor(from、to)、old區大小
- 線上heap持續增長問題排查(引出OOM dump堆內存設置)
- 線上cup飆升如何用命令快速定位線程
- jps、jstat、jstack、jmap命令的使用
- 如何dump堆內存并分析大對象(jmap -dump:format=b,file=dump文件保存路徑 PID,使用MAT分析)
- 服務響應慢如何在線快速分析GC(命令:jstat -gc PID 1000 100,然后解讀GC日志)
- JVM調優(高吞吐、低停頓怎么調)
- 在線修改JVM參數
10、編碼
- 二叉樹樹高計算
- 二叉樹遍歷
11、有什么想問的以及閑聊內容
- 問了下公司的技術棧(cloud、dubbo都有用,不同的事業線技術選型不同,看各事業線老大)
- 了解了下公司業務內容以及規模
閑聊
- SC體系和ASC體系應對集群容錯、限流、熔斷技術實現
- servicemash
- 微服務發展
- 微服務的個人看法,不涉及到具體技術細節了,隨意聊了
BOSS直聘
BOSS一面
1、都知道哪些數據結構,collection集合有哪些
2、ConcurrentHashMap 原理
3、SQL怎么優化
4、聯合索引最左原則
5、多線程,多個方法改并行執行怎么做,誰執行最快取誰,怎么做
6、Redis數據結構,如果設計一個延時隊列用哪種
7、AOP原理,cgLib與jdk動態代理區別
8、事務傳播
9、Dubbo都有哪些負載均衡
10、Synchronized與Lock區別
11、CountDownLatch
12、LocalThread
13、FutureTask
14、實現線程的幾種方式
15、線程池創建的方式
16、SQL題,查詢某天考試所有科目的成績最高的學生
語文 張三 50
語文 李四 50
數學 王五 99
BOSS二面
1、沒有自我介紹,直接屏幕展示開始敲代碼問問題...
2、幾個題目,sql應該建立幾個索引?什么情況下用的到?索引排序?
3、主鍵索引與唯一索引哪個性能好?為什么?
4、三個線程,主線程的A為100,線程1設置A為200,線程2設置A為300,線程3打印A,問并行的執行情況?
5、如果要只打印第一個執行結束的線程值怎么做?(一開始說的主線程輪詢,優化方法是CountDownLatch設置為1,主線程監聽)
6、更改代碼,線程1、2都會打印A的值,如果是先打印200再打印300,那么3打印出來的是什么?(答,不一定,沒有用volatile修飾)
7、介紹下項目,你在項目中是什么角色?負責什么模塊?
8、拆庫了嗎?為什么(沒有,動態庫動態表沒有引入分布式事務,而且體量夠了)
9、為什么沒用Feign而是用Dubbo
10、GCRoot有哪些
微脈科技(杭州)
1、asm(字節碼增強相關技術)
2、springboot啟動過程
3、kafa的零拷貝機制
4、jvm優化手段
5、阿里jvm監控組件arthas
6、如何遠程debug
7、spring容器加載過程 bean的生命周期 spring組件銷毀的過程
8、消息堆積和消息延時如何處理
9、網絡的七層五層結構
10、es建立索引的原則
11、redis新版功能(多線程 i/o多線程) redis淘汰策略
12、json序列化的方式以及他們之前的區別
13、protobuf有了解嗎
14、maven 的scope和 dependency 和dependencyManagent
15、mycat分頁原理
16、分庫分表之后的查詢怎么搞
17、線上故障定位和排查怎么做的
18、mysql中一條sql的執行過程
19、rocketmq的offset是怎么提交的
20、mysql索引的存儲結構,mysql為什么不用紅黑樹作了存儲結構
21、dubbo預熱
22、某個微服務要調用下游五個微服務如何提高響應時間
23、阿里推薦的新建多線程的方式
阿里巴巴-阿里云
1、spring bean的生命周期,作用域,在平時開發中使用spring bean需要注意什么?
2、假設一個類中有a,b兩個方法,a中沒有事務,b中有事務,a方法中調用b,此時事務是怎樣的
3、redis數據類型中的數據結構
4、rocketmq的如何保證消息一致性
阿里巴巴烏冬科技
1、hashmap中put原理,數組存放的數據是什么樣的?擴容說一下?為什么用紅黑樹?key是否可為空?和concurrenthashmap的區別;hash沖突咋解決?
2、ioc的原理說一下?spring用到哪些設計模式?aop原理
3、線程的狀態,線程狀態的切換,cas原理,底層實現,和syncronized區別?線程池核心參數,拒絕策略哪些,你們環境中這些參數如何設置
4、jvm內存結構,jvm如何調優,你們設置的多少
5、mysql索引結構,mysql調優,最左匹配原則,a,b,c的一些索引失效場景
6、redis鎖結合使用場景,需要注意什么?假設業務執行時間大于設置的超時時間如何解決;
阿里巴巴智能云平臺
1、redis雪崩,緩存擊穿以及解決方案
2、redis緩存怎么使用的?有用過redis的二級緩存嗎,你們使用的哪種高可用部署方式,幾個哨兵?假設10g內存,導入20g的數據,會發生什么
3、mysql主從復制過程,binlog和redolog中的一樣嗎
4、zk的核心概念
5、在你們項目中es用來做什么?腦裂咋解決的?大數據量下的查詢優化
6、dubbo的工作過程,如何服務治理的,spi,哪里使用了spi?和jdk的區別?有哪些負載均衡策略以及實現原理
7、網關使用的什么,鑒權如何做的
涂鴉-安全部門
1、加密:使用過了哪些加密技術,加密后的數據很長,數據庫加密字段怎么設置的?后臺推送給前端的數據怎么加密的?
2、rocketmq怎么保證消息的順序性,分布式事務怎么實現的
彩貝殼(核心團隊來自支付寶、騰訊、美團點評和普華永道)
1、Thread run 和 start方法有什么區別
2、你覺得你在自己的項目,你還可以做哪些優化
3、如果你的業務線越來越多了,你覺得你的代碼會有什么問題?
4、如何排查問題,如果用戶a和用戶b同時使用一個功能,用戶b出錯了,用戶a正常,你從哪些方面排查?
5、有沒有印象深刻的bug?怎么解決的?
6、說下常用的數據結構的底層原理
7、線程安全問題怎么解決?
8、你在項目中,Redis是怎么用的?
Redis的運行機制
9、jvm運行機制、怎么調優
10、spring有有用到哪些設計模式
11、ThreadpoolExecutor 幾個參數
12、ThreadLocal 底層原理
13、SpringBoot啟動機制
14、線程池
15、你知道有哪些設計模式,并說下應用場景
京東
1、jdk1.6升到1.8 還有 tomcat6升到8分別都有什么變化?
2、jdk1.8新特性?
3、為什么要用stream?并發場景使用stream有做壓測嗎?
4、線程池參數怎么配置?為什么這么配置?做過壓測嗎?遇到過線程池拒絕的情況嗎?怎么處理的?
5、mysql索引類型?
6、需要對索引優化,你會怎么做?
7、explain解釋字段含義?
8、項目中如何發現慢sql的?在項目中你是怎么優化的?
9、linux指令?maven指令?git指令?
10、在使用springboot遇到了什么問題?為什么推出springboot,使用springboot的好處?
11、springmvc是怎么解決并發問題的?
12、有經歷過jvm調優嗎?
神策數據、貝殼、京東面試整理
Java基礎
* 集合類型(Array,Link,HashMap,Set)
* 多線程(線程池:調度,生命周期,ThreadLocal)
* GC
Spring
* Spring IOC AOP是如何做的,原理是什么
* Spring Cloud了解多少(這家公司用的不是scn和sca 所以基本上沒怎么問,但是其他公司問了)
* 如果讓你實現一個配置中心,該怎么做
數據庫
* MySQL內存模型
* MySQL 索引的類別,區別,索引實現原理(B+樹的原理,優勢),索引優化的方法
* MySQL 事務(什么是事務,用于什么場景,什么情況會死鎖,怎么避免)
* MySQL 日志,UnDo和ReDo 是做什么的
* MVCC是什么,怎么實現的
* MySQL集群架構怎么做?如果讓你設計一個集群架構的服務拆分,數據庫部分應該怎么設計
Redis
* Redis 用來做什么
* Redis 線程模型
* 緩存穿透、擊穿、雪崩是什么,怎么解決
* Redis 持久化機制,RDB和AOF有什么不同,怎么實現的,項目中怎么用
* Redis 集群架構有幾種,怎么做的
* Redis與數據庫一致性怎么做
* Redis內存淘汰規則有幾種(引申手寫一個LRU算法)
Kafka
* 消息組件一般解決什么問題
* Kafka 的消費流程
* Kafka 持久化怎么做的
* Kafka 與RabbitMQ區別,分別在什么場景下使用
Zookeeper
* ZK如何進行選舉
* ZK如何保證一致性,協議內容及實現原理
* ZK的集群模式,對節點數有什么要求
* ZK 崩潰恢復怎么實現
算法,一般1~2道算法題,這部分得靠刷題
* 設計一個LRU算法
* 兩個有序集合找第K大的值
* 一個無序數組,找第K大的值
海洋王 照明(深圳)
1、介紹一下限流的那個令牌桶是什么
2、dubbo的用法,原理
3、做了哪些模塊 怎么做的
4、RocketMQ 怎么用的 為什么用
5、sqlServer知道嗎 一個表兩個字段 一個表三個字段 合并起來有多少個字段
6、表連接有哪幾種方式
7、mysql事務是什么
8、會哪幾種設計模式 最擅長哪個 為什么要單例 spring 用了哪些?
9、會寫前端嗎 vue 用的怎么樣
微品致遠(深圳)
1、講一下你最近這個項目是做了哪一塊的,是怎么實現的?
2、你的分布式事務用的是哪一個?
3、用mq解決分布式事務的原理實現是什么樣的,底層是什么樣的?
4、你們的這種方式和其他的比如TCC有什么區別
5、JDK1.8有什么新特性?工作中有用到么?
6、有沒有處理過高并發?是怎么解決的?怎么保證第一個人能搶到商品
7、你的商城有沒有聊天室,在線咨詢怎么解決?
8、消息推送是怎么實現的?
9、支付這塊有沒有做過,微信呢?
10、加班的看法,期望薪資
交通銀行外包(深圳)
機試:下午2點機試,早上10點的時候hr發了2份word,大概60頁的題庫
題目是50道不定項選擇,要求正確率80%+
一面:外包公司技術人員
1、自我介紹
2、對外包公司怎么看
3、介紹下第二個項目,內部有哪些組成,分別是干什么的
4、講一下你們的API網關,怎么實現的?
5、說一下Guava ,是什么,用了什么功能?
6、對代碼風格,代碼規范的認識?對用Java寫過程代碼是怎么看?
7、如果讓你去完整設計一個項目,有什么思路?對軟件工程的理解?
8、設計模式知道哪些?展開說一下
二面:交通銀行技術人員
1、自我介紹
2、介紹最近一個項目或者比較熟悉的一個項目
3、權限管理是怎么做的,表是怎么設計的?
4、數據表怎么建表,是用工具還是直接create一張表?表是怎么設計的?
5、項目的數據庫用的什么
6、左連接和內連接的區別
7、MD5摘要算法是什么,對加密算法熟悉么? 對稱加密,非對稱加密分別有哪些算法,應用場景?兩者有什么不同
8、Redis中存哪些信息?
9、RocketMQ的重復消費問題講一下?你們的MQ應用場景有哪些
10、sql語句里面的分組,用到的具體函數?having講一下應用場景,舉一個具體的例子
11、服務器部署,運維誰負責?架構是誰搭的?
12、平常的工作是什么?
13、linux命令,在文件中查找一些關鍵字?
14、前端技術什么水平,vue,h5這方面?
15、設計模式中的策略模式你了解么?講一下代理模式,有哪幾種?
16、說一下數據結構中的棧和堆,對他們有什么認識?
17、為什么來深圳
18、說說常用的Spring注解
19、開發過程中遇到過什么比較難的問題?怎么解決的
20、技術方面哪一塊最熟悉?
CDP
1、SpringBoot啟動過程
2、SpringBoot加載指定位置JAR包
3、SpringBoot tomcat啟動過程
4、Sentinel降級后恢復原理
5、時間滑動窗口限流原理
6、線程池核心線程數設置的多少
7、你知道Java中有哪些鎖
8、Lock實現原理
9、非公平鎖與公平鎖實現區別
10、死鎖
11、數據庫死鎖
12、MySql在RR隔離級別下什么時候會發生幻讀
13、QPS,TPS,吞吐量
14、Oauth2四種模式
15、dubbo與fegin的比較
16、分布式鎖
17、單例為什么要雙重檢查鎖
18、DDD與MVC的區別
19、多表聯合查詢與業務層里面進行邏輯拼接的優劣
Strikingly面試題:
1、為什么選擇分布式微服務而不是單體集群
2、為什么使用SpringCloud
3、選擇SpringCloud后有沒有后悔使用了哪些組件
4、假設某市舉行選美大賽,候選人有100位,該市有800萬人口,根據往年經驗,約有30%~40%的人參與投票,每人只能投一票,投票時間為24小時,這個系統你怎么設計
5、假設投票高峰期在投票開始的前15-20分鐘,這個時候你怎么設計
6、假設選美大賽升級為全球活動,會有60億人參與,此時系統需要怎么設計
阿里巴巴
1、HashMap插入的過程
2、HashMap為什么使用尾插法
3、Hash沖突有什么解決方式
4、JVM內存布局
5、常量池在JVM哪里
6、volatile實現原理
7、你用過什么設計模式
8、你用到哪些設計思想
涂鴉智能
1、dubbo服務注冊過程
2、Spring bean
3、SpringBoot自動裝配
4、nacos與zookeeper的區別
5、JVM內存布局
6、類加載機制
7、JVM調優
8、讀寫鎖實現
9、分布式鎖
快手
1、寫SQL語句分析索引
2、使用SQL語句實現指定的功能
3、Redis底層數據結構
4、RabbitMq事務
5、MVVC底層數據結構
6、一致性hash
7、JVM內存結構
8、JVM調優
MOKA
1、JVM調優
2、JVM排查問題
3、synchronized
4、Lock
5、AQS其他實現
6、并發容器
7、CurrentHashMap實現
8、創建線程
9、線程池構造器參數
10、ThreadLocal
11、雙親委派機制
12、Spring FactoryBean
13、innodb聚簇非聚簇索引
14、MVVC底層實現
15、數據庫死鎖
16、Redis底層數據結構
17、Redis持久化
18、Linux awk與grep命令
餓了么一面:
1、自我介紹 聊各種過去經歷
2、mysql索引數據結構 MVVC
3、volatile
4、闡述一個對象在JVM中完整的生命周期
5、線程池的各個參數 隊列有哪幾種 各個參數什么含義
6、Mybatis源碼
餓了么二面(還沒面):
1、據說面架構設計 場景 架構合理性 考慮并發及需求對接合理性
2、考慮講項目的時候順帶帶出別的系統 講述問題的解決 如何解決的
頭條一面(Java+項目)
1、倒排索引
2、講講redis里面的哈希表?
3、happen-before的規則?
4、volatile修飾符,synchronize鎖
5、java單例模式的實現,懶漢、餓漢?
6、進程與線程的區別,多進程和多線程的區別?
7、HashMap原理,為什么用紅黑樹,紅黑樹的特點?
8、快排時間空間復雜度,最好最壞的情況,優化方案?
9、TCP的擁塞控制,具體過程是怎么樣的?UDP有擁塞控制嗎?如何解決?
10、講講了解的垃圾回收算法和回收器,什么時候執行STOP THE WORLD?
11、了解Go語言嗎?
頭條二面(大數據+項目)
1、Kylin的項目架構
2、Paxos和ZAB協議
3、CAP理論,分區容錯性的意義
4、大表Join小表優化,如何處理數據傾斜?
5、 講一下最大堆和最小堆
6、HDFS的讀取、寫入,容錯處理。(源碼)
7、MapReduce的過程(第一版和第二版的)
8、MR shuffle,Spark shuffle。
9、namenode HA,腦裂,Yarn的調度機制。
10、 Hive的內部表和外部表區別、數倉建模模型、數倉分層、雪花模型和星型模型。
11、了解ClickHouse嗎?它與Kylin的區別?
頭條三面(算法+場景題)
1、LRU算法實現(偽代碼)
2、鏈表倒數第K個數(講思路)
3、一堆螺絲和螺母用最短時間匹配(代碼實現)
4、求每天瀏覽頁面的新用戶(Hive QL實現)
5、求抖音小視頻每日點擊量最高的10個(Hash + 最小堆)
學習更多JAVA知識與技巧,關注與私信博主(學習)
總結
以上是生活随笔為你收集整理的2022Java最新真实面试题汇总的全部內容,希望文章能夠幫你解決所遇到的問題。