前言
娛樂(lè)圈有“男神收割機(jī)”“女神收割機(jī)”。同樣程序員圈子也有“Offer收割機(jī)”。
想必大家都有面試的經(jīng)歷吧,但是你有面一個(gè)拿一個(gè)offer的經(jīng)歷嗎。或許聽起來(lái)很離譜,但是也確實(shí)有這樣的事情,畢竟萬(wàn)事皆有可能。之前我在網(wǎng)上認(rèn)識(shí)的一位網(wǎng)友,我們有一天下午聊天的時(shí)候聊到面試這塊,他跟我說(shuō)了他的面試經(jīng)歷:他面了餓了么、阿里、京東、拼多多、愛奇藝,聽著好像很簡(jiǎn)單的樣子,但是別人背后付出的可能是你的百倍千倍。好了廢話不多說(shuō)?,F(xiàn)在我開始寫面經(jīng),希望能幫助到大家!
首先,他先是去面了阿里
一面
自我介紹后,直接開始問(wèn)多線程相關(guān)問(wèn)題。大概問(wèn)題如下:
1.為什么要使用多線程?多線程需要注意的問(wèn)題。上下文開銷、死鎖等。
2.java內(nèi)存模型、導(dǎo)致線程不安全的原因。
3.volatile關(guān)鍵字,緩存一致性、指令重排序概念。
4.synchronize關(guān)鍵字,java對(duì)象頭、Markword概念、synchronize底層monitorenter和moniterexit指令。
5.lock語(yǔ)句和synchronize對(duì)比。
6.原子操作,CAS概念、相關(guān)參數(shù)。
7.樂(lè)觀鎖、悲觀鎖概念及使用場(chǎng)景。
8.線程池概念、實(shí)現(xiàn)原理等。
9.JVM鎖的優(yōu)化,偏向鎖、輕量級(jí)鎖概念及原理。
10.多線程方面回答得比較好,面試官反饋比較滿意。
然后就是數(shù)據(jù)庫(kù)相關(guān)的:(其實(shí)沒(méi)這么多,有些是我整理的,挑了一些概率大的題目,僅參考)
1.在MySQL中ENUM的用法是什么?
2.CHAR和VARCHAR的區(qū)別?
3.為什么事務(wù)可以優(yōu)化數(shù)據(jù)庫(kù)?
4.Mysql的數(shù)據(jù)庫(kù)引擎,區(qū)別特點(diǎn)
5.數(shù)據(jù)連接池采用了什么設(shè)計(jì)模式?意義是什么?
6.項(xiàng)目用到什么數(shù)據(jù)庫(kù)?隔離級(jí)別?每個(gè)隔離級(jí)別各做了什么
7.數(shù)據(jù)庫(kù)的索引?mysql不同引擎索引的區(qū)別
8..索引使用的注意事項(xiàng)
9..數(shù)據(jù)庫(kù)掛了怎么辦?除了熱備份還有什么方法?
10..接上面場(chǎng)景題:服務(wù)器掛了,優(yōu)惠券還沒(méi)發(fā)怎么辦?
11..數(shù)據(jù)庫(kù)掛了怎么辦?
12..數(shù)據(jù)庫(kù)優(yōu)化中,有一個(gè)關(guān)鍵字可以分析執(zhí)行過(guò)程,知道么(explain關(guān)鍵字)?
13..數(shù)據(jù)庫(kù)優(yōu)化有什么了解?
14..索引的原理說(shuō)一下吧。
15.聯(lián)合索引,如果聯(lián)合索引(a,b),現(xiàn)在查詢a>0,b>0可以用到這個(gè)聯(lián)合索引么?(太久沒(méi)看,生疏了,答錯(cuò)了,答案應(yīng)該是不能,只能用到a的索引,范圍索引只能用到一列)
16.Mysql集群數(shù)據(jù)是怎么同步的?
17.Select,poll,epoll的區(qū)別。
還圍繞了項(xiàng)目架構(gòu)、Java基礎(chǔ)、JVM、并發(fā)編程、中間件技術(shù)和Dubbo服務(wù)治理框架等展開。(題目不怎么記得了)
二面(問(wèn)得比較深入,問(wèn)題也是格外的令人頭疼)
JVM方面
1.java內(nèi)存模型,五個(gè)部分,程序計(jì)數(shù)器、棧、本地棧、堆、方法區(qū)。
2.每個(gè)部分的概念、特點(diǎn)、作用。
3.類加載的過(guò)程,加載、驗(yàn)證、準(zhǔn)備、解析、初始化。每個(gè)部分詳細(xì)描述。
4.加載階段讀入.class文件,class文件時(shí)二進(jìn)制嗎,為什么需要使用二進(jìn)制的方式?
5.驗(yàn)證過(guò)程是防止什么問(wèn)題?驗(yàn)證過(guò)程是怎樣的?加載和驗(yàn)證的執(zhí)行順序?符號(hào)引用的含義?
6.準(zhǔn)備過(guò)程的靜態(tài)成員變量分配空間和設(shè)置初始值問(wèn)題。
7.解析過(guò)程符號(hào)引用替代為直接引用細(xì)節(jié)相關(guān)。
8.初始化過(guò)程jvm的顯式初始化相關(guān)。
9.類卸載的過(guò)程及觸發(fā)條件。
10.三種類加載器,如何自定義一個(gè)類加載器?
11.雙親委派機(jī)制。
12.JVM內(nèi)存分配策略,優(yōu)先放于eden區(qū)、動(dòng)態(tài)對(duì)象年齡判斷、分配擔(dān)保策略等。
13.JVM垃圾回收策略,怎樣判對(duì)象、類需要被回收?
14.四種垃圾回收算法標(biāo)記-清除、復(fù)制、標(biāo)記-整理、分代收集。
15.JVM中的垃圾回JVM收器,新生代回收器、老年代回收器、stop-the-world概念及解決方法。
16.四類引用及使用場(chǎng)景?
這里給大家分享一個(gè)JVM知識(shí)圖譜,可以分享給大家。
JVM知識(shí)圖譜展示
通信協(xié)議
接下來(lái)是對(duì)通信協(xié)議的了解,大概問(wèn)了下列問(wèn)題:
1.TCP三次握手、四次揮手。
2.http請(qǐng)求報(bào)文結(jié)構(gòu)、響應(yīng)報(bào)文,狀態(tài)碼。
3.http2.0相比于http1.0的新特性,推送、多路復(fù)用、消息頭壓縮等。
數(shù)組面試問(wèn)題
1.如何在給定的1到100的整數(shù)數(shù)組中找到缺失的數(shù)字?
2.如何在給定的整數(shù)數(shù)組上找到重復(fù)的數(shù)字?
3.如何在未排序的整數(shù)數(shù)組中找到最大和最小的數(shù)字?
鏈表面試問(wèn)題
1.如何在沒(méi)有遞歸的情況下反轉(zhuǎn)單鏈表?
2.如何在未排序的鏈表中刪除重復(fù)節(jié)點(diǎn)?
3.你如何找到單鏈表的長(zhǎng)度?
4.如何在單鏈表中找到最后的第三個(gè)節(jié)點(diǎn)?
5.如何使用Stack找到兩個(gè)鏈表的總和?
二叉樹、字符串面試問(wèn)題
1.你如何計(jì)算給定字符串中的元音和輔音?
2.如何計(jì)算字符串中給定字符的出現(xiàn)次數(shù)?
3.如何找到字符串的所有排列?
4.如何在不使用任何庫(kù)方法的情況下反轉(zhuǎn)給定句子中的單詞?
5.如何使用遞歸來(lái)反轉(zhuǎn)給定的字符串?
6.如何檢查字符串是否只包含數(shù)字?
7.如何在字符串中找到重復(fù)的字符?
8.如何在沒(méi)有遞歸的情況下按預(yù)先遍歷給定的二叉樹?
9.如何在給定的二叉樹中執(zhí)行有序遍歷?
10.如何在沒(méi)有遞歸的情況下使用inorder遍歷打印給定二叉樹的所有節(jié)點(diǎn)?
11.你如何實(shí)現(xiàn)一個(gè)后序遍歷算法?
12.如何在沒(méi)有遞歸的情況下遍歷后序遍歷中的二叉樹?
13.如何打印二叉搜索樹的所有葉子?
14.如何計(jì)算給定二叉樹中的多個(gè)葉節(jié)點(diǎn)?
這里整理了關(guān)于數(shù)據(jù)結(jié)構(gòu)相關(guān)資料文檔,需要的小伙伴請(qǐng)查看文末獲取方式。
三面
1.Spring Boot有哪些優(yōu)點(diǎn)?
2.什么是 Spring Framework?
3.Spring Framework有哪些不同的功能?
4.Spring Framework中有多少個(gè)模塊,它們分別是什么?
5.什么是 Spring配置文件?
6.什么是Spring IOC容器?
7.BeanFactory–BeanFactory實(shí)現(xiàn)舉例
8.解釋AOP模塊
9.解釋JDBC抽象和DAO模塊
10.解釋對(duì)象/關(guān)系映射集成模塊
11.哪種依賴注入方式你建議使用,構(gòu)造器注入,還是Setter方法注入?
12.對(duì)MySQL的鎖了解嗎
13.隔離級(jí)別與鎖的關(guān)系
14.按照鎖的粒度分?jǐn)?shù)據(jù)庫(kù)鎖有哪些?鎖機(jī)制與InnoDB鎖算法
15.從鎖的類別上分MySQL都有哪些鎖呢?像上面那樣子進(jìn)行鎖定豈不是有點(diǎn)阻礙并發(fā)效率了
16.MySQL中InnoDB引擎的行鎖是怎么實(shí)現(xiàn)的?
17.什么是死鎖?怎么解決?
這里給大伙兒分享一張Spring知識(shí)總結(jié)圖(不知道怎么學(xué)習(xí)的可以收藏)
京東(四面)
一面
1.Elasticsearch是怎么使用的,有接觸過(guò)大數(shù)據(jù)的應(yīng)用嗎?
2.項(xiàng)目里的數(shù)據(jù)處理是怎么做的?
3.當(dāng)前要存入elasticsearch的數(shù)量過(guò)大,會(huì)在存儲(chǔ)時(shí)造成等待,存儲(chǔ)速度很慢,如何解決這個(gè)問(wèn)題?
4.Jvm里如何判斷對(duì)象死亡?
5.Jvm里如何判斷類死亡?
6.Hashmap在jdk7和8里的區(qū)別。
7.多線程,synchronized和lock的區(qū)別。
8.Concurrenthashmap的數(shù)據(jù)結(jié)構(gòu)講一下,如何做到線程安全的?
9.Concurrenthashmap新插入一個(gè)對(duì)象會(huì)Hash幾次?
10.講一個(gè)簡(jiǎn)歷上的項(xiàng)目,技術(shù)難點(diǎn)在哪?
11.Jvm內(nèi)存分區(qū),為什么要有新生代和老年代?
12.有做個(gè)VM內(nèi)存優(yōu)化嗎?
13.數(shù)據(jù)庫(kù)索引主鍵和唯一索引有什么區(qū)別?
14.聚集索引和非聚集索引的區(qū)別?
15.MySQL存儲(chǔ)引擎innoDB和MylSAM的區(qū)別?
16.InnoDB的B+樹索引葉子節(jié)點(diǎn)的Data域存儲(chǔ)的是什么?MylSAM的B+樹索引葉子節(jié)點(diǎn)的Data域存儲(chǔ)的是主鍵還是物理地址?
二面
1.Hashmap說(shuō)下吧。
2.線程池有哪些參數(shù),如果滿了新的線程會(huì)怎么處理?
3.你們網(wǎng)關(guān)有配jvm參數(shù)嗎,都有哪些?
4.高并發(fā)的時(shí)候你們網(wǎng)關(guān)高可用怎么做的?
5.數(shù)據(jù)庫(kù)用過(guò)嗎,如果現(xiàn)在有十億的數(shù)據(jù)給你怎么存?
6.你們的熔斷降級(jí)怎么做的?
7.項(xiàng)目的線程池怎么配的?
8.字符串的類說(shuō)一下。
9.兩個(gè)字符串都是y,用equals返回什么?
10.Hashcode和equals的關(guān)系。
11.兩個(gè)線程一起輸出100個(gè)數(shù)怎么做?
12.SpringBoot的AOP是什么?
三面
1.分布式下redis如何保證線程安全?
2.redis持久化的方式以及區(qū)別;
3.zookeeper如何實(shí)現(xiàn)分布式鎖、其他分布式鎖怎么實(shí)現(xiàn)?
4.kafka的架構(gòu),如何用kafka保證消息的有序性?
5.數(shù)據(jù)庫(kù)的優(yōu)化包含哪些?MySQL的優(yōu)化,談兩個(gè)你優(yōu)化的例子。
6.最有技術(shù)難度的項(xiàng)目,介紹下相關(guān)核心設(shè)計(jì)流程。
7.工作中,遇見了技術(shù)瓶頸無(wú)法解決,你的解決思路?
8.未來(lái)你的職業(yè)規(guī)劃是怎么樣?
HR面
- 你覺(jué)得自己的優(yōu)點(diǎn)是什么,有哪些缺點(diǎn)呢?(靈魂拷問(wèn))
- 你之前公司給的薪水是怎么樣的?如果阿里給你offer,你是怎么考量這兩個(gè)offer的?
- 為什么沒(méi)有在之前的公司留下來(lái)?之前公司的主管是怎么評(píng)價(jià)你的?
- 除了今天這個(gè)面試,還安排了其他公司的嗎?(這不是無(wú)聊吧)
餓了么
1.HashMap和hashtable的區(qū)別有哪些?
2.Mysql有哪些索引方式
3.一個(gè)Java文件有3個(gè)類,編譯后有幾個(gè)class文件?
4.局部變量使用前需要顯式地賦值,否則編譯通過(guò)不了,為什么這么設(shè)計(jì)?
5.ReadWriteLock讀寫之間互斥嗎?
6.Semaphore拿到執(zhí)行權(quán)的線程之間是否互斥?
7.寫一個(gè)你認(rèn)為最好的單例模式。
8.B樹和B+樹是解決什么樣的問(wèn)題的?怎樣演化過(guò)來(lái),之間的區(qū)別?
9.寫一個(gè)生產(chǎn)者消費(fèi)者模式。
10.寫一個(gè)死鎖。
11.CPU 100%怎樣定位?
12.Synchronized底層實(shí)現(xiàn)原理。
13.volatile作用,指令重排相關(guān)。
14.Spring怎樣解決循環(huán)依賴的問(wèn)題?
15.說(shuō)說(shuō)InheritableThreadLocal 的實(shí)現(xiàn)原理?
16.InheritableThreadLocal 是如何彌補(bǔ) ThreadLocal 不支持繼承的特性?
17.CyclicBarrier內(nèi)部的實(shí)現(xiàn)與 CountDownLatch 有何不同?
二面
1.多線程先入隊(duì)出隊(duì)操作的線程安全?
2.為什么不使用一把鎖,使用兩把為何能提高并發(fā)度?
3.基于數(shù)組的阻塞隊(duì)列 ArrayBlockingQueue原理。
4.講講對(duì)JUC 中回環(huán)屏障 CyclicBarrier 的使用?
5.CyclicBarrier內(nèi)部的實(shí)現(xiàn)與 CountDownLatch 有何不同?
6.Semaphore 的內(nèi)部實(shí)現(xiàn)是怎樣的?
7.簡(jiǎn)單對(duì)比同步器實(shí)現(xiàn),談?wù)勀愕目捶ǎ?/p>
8.什么是Java指令重排序?
9.Java中Synchronized關(guān)鍵字的內(nèi)存語(yǔ)義是什么?
10.Java中Volatile關(guān)鍵字的內(nèi)存語(yǔ)義是什么?
11.什么是可重入鎖、樂(lè)觀鎖、悲觀鎖、公平鎖、非公平鎖、獨(dú)占鎖、共享鎖?
三面
1.說(shuō)說(shuō)分庫(kù)與分表設(shè)計(jì)
2.分庫(kù)與分表帶來(lái)的分布式困境與應(yīng)對(duì)之策
3.說(shuō)說(shuō) SQL 優(yōu)化之道
4.MySQL 遇到的死鎖問(wèn)題
5.存儲(chǔ)引擎的 InnoDB 與 MyISAM
6.數(shù)據(jù)庫(kù)索引的原理
7.為什么要用 B-tree
8.聚集索引與非聚集索引的區(qū)別
9.limit 20000 加載很慢怎么解決
10.選擇合適的分布式主鍵方案
11.選擇合適的數(shù)據(jù)存儲(chǔ)方案
12.ObjectId規(guī)則是什么?
13.聊聊 MongoDB使用場(chǎng)景吧。
14.pring MVC運(yùn)行流程是什么?
15.Spring MVC啟動(dòng)流程說(shuō)一下吧。
16.Spring 的單例實(shí)現(xiàn)原理是什么?
17.Spring 框架中用到了哪些設(shè)計(jì)模式?
拼多多
一面
1.自我介紹。
2.部門組織結(jié)構(gòu)是怎樣的?
3.給我一張紙,畫了一個(gè)九方格,都填了數(shù)字,給一個(gè)MN矩陣,從1開始逆時(shí)針打印這MN個(gè)數(shù),要求時(shí)間復(fù)雜度盡可能低。
4.鏈路追蹤的信息是怎么傳遞的?(RpcContext的attachment,說(shuō)了Span的結(jié)構(gòu):parentSpanId + curSpanId)
5.SpanId怎么保證唯一性?(UUID,說(shuō)了下內(nèi)部的定制改動(dòng))
6.RpcContext是在什么維度傳遞的?(線程)
7.Dubbo的遠(yuǎn)程調(diào)用怎么實(shí)現(xiàn)的?(講了讀取配置、拼裝url、創(chuàng)建Invoker、服務(wù)導(dǎo)出、服務(wù)注冊(cè)以及消費(fèi)者通過(guò)動(dòng)態(tài)代理、filter、獲取Invoker列表、負(fù)載均衡等過(guò)程(嘩啦啦講了10多分鐘),我可以喝口水么)
8.Spring的單例是怎么實(shí)現(xiàn)的?(單例注冊(cè)表)
9.為什么要單獨(dú)實(shí)現(xiàn)一個(gè)服務(wù)治理框架?(說(shuō)了下內(nèi)部剛搞微服務(wù)不久,主要對(duì)服務(wù)進(jìn)行一些監(jiān)控和性能優(yōu)化)
10.誰(shuí)主導(dǎo)的??jī)?nèi)部還在使用么?
11.逆向有想過(guò)怎么做成通用么?
12.Java中的HashMap、TreeMap解釋下?(TreeMap紅黑樹,有序,HashMap無(wú)序,數(shù)組+鏈表)
13.TreeMap查詢寫入的時(shí)間復(fù)雜度多少?
14.HashMap多線程有什么問(wèn)題?
二面
1.CAS和synchronize有什么區(qū)別?
2.都用synchronize不行么?
3.如果要保證線程安全怎么辦?(ConcurrentHashMap)
4.ConcurrentHashMap怎么實(shí)現(xiàn)線程安全的?(分段鎖)
5.get需要加鎖么,為什么?(不用,volatile關(guān)鍵字)
6.Volatile的作用是什么?(保證內(nèi)存可見性)
7.底層怎么實(shí)現(xiàn)的?(說(shuō)了主內(nèi)存和工作內(nèi)存,讀寫內(nèi)存屏障,happen-before,并在紙上畫了線程交互圖)
8.在多核CPU下,可見性怎么保證?(思考了一會(huì))
9.聊項(xiàng)目,系統(tǒng)之間是怎么交互的?
10.系統(tǒng)并發(fā)多少,怎么優(yōu)化?
11.Linux進(jìn)程間通信的方式?
三面
1.TCP連接的特點(diǎn)大概說(shuō)一下吧。
2.TCP連接如何保證安全可靠的?
3.為什么TCP連接需要三次握手,兩次不可以嗎,為什么?
4.動(dòng)態(tài)代理與cglib實(shí)現(xiàn)的區(qū)別是什么?
5.那么你說(shuō)說(shuō)代理的實(shí)現(xiàn)原理吧。
6.看過(guò)Spring源碼沒(méi),說(shuō)說(shuō)Ioc容器的加載過(guò)程吧。
7.了解過(guò)字節(jié)碼的編譯過(guò)程嗎(這個(gè)回答的有一些含糊,就跳過(guò)了)
8.Hadoop里面由哪些組件,你用過(guò)哪些?
9.Spring Bean 的生命周期大概說(shuō)說(shuō)。
10.nat是什么?屬于哪一層?
11.介紹一下網(wǎng)絡(luò)分層的模型
12.鏈路層有什么協(xié)議?
13.數(shù)據(jù)庫(kù)范式是什么?
14.面向?qū)ο笕筇攸c(diǎn)。
愛奇藝
一面
1.手撕代碼。??偷脑},可以去練練:NC22合并兩個(gè)有序的數(shù)組。
2.TCP/IP協(xié)議。
3.長(zhǎng)連接與短連接。
4.mapreduce過(guò)程。
5.多路歸并的時(shí)間復(fù)雜度。
6.海量url去重類問(wèn)題。
7.Java NIO使用。
8.倒排索引的原理說(shuō)一下吧。
9.對(duì)分詞技術(shù)的了解。
10.HTTP協(xié)議是哪一層的?其報(bào)文結(jié)構(gòu)如何?七層網(wǎng)絡(luò)結(jié)構(gòu)是?
11.HTTP 請(qǐng)求/響應(yīng)的步驟有哪一些?(大概說(shuō)說(shuō)就可以,沒(méi)有講得很詳細(xì))
二面
1.算法方面了解哪些?簡(jiǎn)述動(dòng)態(tài)規(guī)劃、貪心算法。
2.緩存問(wèn)題,緩存與內(nèi)存的區(qū)別。以及數(shù)據(jù)庫(kù)連接池。
3.volatile關(guān)鍵字介紹一下。
4.多線程實(shí)現(xiàn)方式,三種。
5,JVM介紹一下,從他的編譯之類,加載(忘記回答父類,子類,以及靜態(tài)代碼塊,普通代碼塊的加載過(guò)程)
6.Map,Collection的關(guān)系。
7.ArrayList擴(kuò)充問(wèn)題。add()方法的底層實(shí)現(xiàn)。
8.spring 的核心如:IOC AOP等,注入一個(gè)UserDaoImpl時(shí),UserDaoImpl有幾個(gè)實(shí)例,一個(gè)還是多個(gè)。
9.介紹一下同步,安全與不安全。
10.Thread中,ThreadLocal,Lock等。
11,.數(shù)據(jù)庫(kù)索引的底層實(shí)現(xiàn)。B二叉樹
12.線程池,線程池有多少種,每種的特點(diǎn)。
總結(jié)
最后針對(duì)于上面的面試問(wèn)到的知識(shí)點(diǎn)我總結(jié)出了互聯(lián)網(wǎng)公司Java程序員面試涉及到的絕大部分面試題及答案做成了文檔和架構(gòu)視頻資料免費(fèi)分享給大家。
希望能幫助到您面試前的復(fù)習(xí)且找到一個(gè)好的工作,也節(jié)省大家在網(wǎng)上搜索資料的時(shí)間來(lái)學(xué)習(xí)。
還有Java核心知識(shí)點(diǎn)+全套架構(gòu)師學(xué)習(xí)資料和視頻+一線大廠面試寶典+面試簡(jiǎn)歷模板可以領(lǐng)取+阿里美團(tuán)網(wǎng)易騰訊小米愛奇藝快手嗶哩嗶哩面試題+Spring源碼合集+Java架構(gòu)實(shí)戰(zhàn)電子書。
**資料獲取方式:添加小助理vx:mxzFAFAFA 即可獲取上述資料~**