三面頭條+四面阿里+五面騰訊拿offer分享面經(jīng)總結(jié),最終入職阿里
前言
一路走來(lái)也遇到很多困難,也踩了很多坑,同時(shí)我自己也探索了很多的學(xué)習(xí)方法,總結(jié)了很多心得體會(huì),并且對(duì)面試這塊也做了一些研究和相應(yīng)的準(zhǔn)備。
這里分享面試阿里、頭條、騰訊的經(jīng)過以及一些總結(jié)
四面阿里
面試崗位是研發(fā)工程師,直接找螞蟻金服的大佬進(jìn)行內(nèi)推,參與了阿里巴巴中間件部門的提前批面試,一共經(jīng)歷了四次面試,拿到了口頭offer。
一面:
自我介紹
項(xiàng)目中做了什么,難點(diǎn)呢。
Java的線程池說(shuō)一下,各個(gè)參數(shù)的作用,如何進(jìn)行的。
Redis講一下
分布式系統(tǒng)的全局id如何實(shí)現(xiàn)。用zookeeper如何實(shí)現(xiàn)的呢,機(jī)器號(hào)+時(shí)間戳即可。
分布式鎖的方案,redis和zookeeper那個(gè)好,如果是集群部署,高并發(fā)情況下哪個(gè)性能更好。
kafka了解么,了解哪些消息隊(duì)列。
想做業(yè)務(wù)還是研究。
然后出了一道題,linux的訪問權(quán)限是rwx格式的。使用一個(gè)類支持訪問權(quán)限的增刪改查,并且注意使用的數(shù)據(jù)格式以及方法效率,規(guī)范。給了一個(gè)多小時(shí)寫題。
耗時(shí)將近30分鐘。
二面:
介紹你做的項(xiàng)目和其中的難點(diǎn)。
上次面試官問的問題,反射的作用是什么。
數(shù)據(jù)倉(cāng)庫(kù),多線程和并發(fā)工具等。
私有云,docker和k8s等。
了解哪些中間件,dubbo,rocketmq,mycat等。
dubbo中的rpc如何實(shí)現(xiàn)。
自己實(shí)現(xiàn)rpc應(yīng)該怎么做
dubbo的服務(wù)注冊(cè)與發(fā)現(xiàn)。
聽說(shuō)我是非科班,于是問了些排序算法
耗時(shí)將近30分鐘。
三面:
三面不是面試,而是筆試,耗時(shí)三個(gè)小時(shí),考的是Java核心的基礎(chǔ)。但是好像不能透題,就不說(shuō)了。都挺有難度的。
大概說(shuō)一下就是有幾個(gè)考點(diǎn),Java并發(fā)的知識(shí)點(diǎn),集合類,線程池,多線程之間的通信等。
HR面:
聊人生談理想,HR小姐姐非常溫柔,交流十分愉快。30分鐘。
五面騰訊
面試崗位是后臺(tái)開發(fā)工程師,我沒有選擇意向事業(yè)群。
SNG的部門撈了我的簡(jiǎn)歷,開始了面試,他們的技術(shù)棧主要是Java,所以比較有的聊一共經(jīng)歷了四次技術(shù)面試和一次HR面試,拿到offer。
一面:
有序數(shù)組排序,二分,復(fù)雜度
常見排序算法,說(shuō)下快排過程,時(shí)間復(fù)雜度
有N個(gè)節(jié)點(diǎn)的滿二叉樹的高度。1+logN
朋友之間的點(diǎn)對(duì)點(diǎn)關(guān)系用圖維護(hù),怎么判斷兩人是否是朋友,并查集,時(shí)間復(fù)雜度,過程。沒講清楚
單元點(diǎn)最短路的方法,時(shí)間復(fù)雜度
如何實(shí)現(xiàn)關(guān)鍵字輸入提示,使用字典樹,復(fù)雜度多少,有沒有其他方案,答哈希,如果是中文呢,分詞后建立字典樹?
hashmap的實(shí)現(xiàn)講一下吧,講的很詳細(xì)了。講一下紅黑樹的結(jié)構(gòu),查詢性能等。
Java中的垃圾回收講一下,講了分代,gc算法,gc root可達(dá)性分析等
講一下兩個(gè)項(xiàng)目你都做了什么把。
除了代碼之外你還學(xué)習(xí)了什么技術(shù),框架。
死鎖是怎么產(chǎn)生的
線程和進(jìn)程的區(qū)別
進(jìn)程的通信方式
CPU的執(zhí)行方式
代碼中遇到進(jìn)程阻塞,進(jìn)程僵死,內(nèi)存泄漏等情況怎么排查。通過ps查詢狀態(tài),分析dump文件等方式排查。
Linux了解么,查看進(jìn)程狀態(tài)ps,查看cpu狀態(tài) top。查看占用端口的進(jìn)程號(hào)netstat grep
10g文件,只有2g內(nèi)存,怎么查找文件中指定的字符串出現(xiàn)位置。MapReduce分割文件處理。
二面:
快排的時(shí)間復(fù)雜度,冒泡時(shí)間復(fù)雜度,快排是否穩(wěn)定,快排的過程
100w個(gè)數(shù),怎么找到前1000個(gè)最大的,堆排序,怎么構(gòu)造,怎么調(diào)整,時(shí)間復(fù)雜度。
一個(gè)矩陣,從左上角到右下角,每個(gè)位置有一個(gè)權(quán)值。可以上下左右走,到達(dá)右下角的路徑權(quán)值最小怎么走。
四輛小車,每輛車加滿油可以走一公里,問怎么能讓一輛小車走最遠(yuǎn)。說(shuō)了好幾種方案,面試官引導(dǎo)我優(yōu)化了一下,但是還是不滿意,最后他說(shuō)跳過。
hashmap的實(shí)現(xiàn),hashtable,concurrenthashmap實(shí)現(xiàn)。
MySQL的索引,B+樹性質(zhì)。
Linux的cpu 100怎么排查,top jstack,日志,gui工具
Linux大文件怎么查某一行的內(nèi)容。
Redis內(nèi)存數(shù)據(jù)庫(kù)的內(nèi)存指的是共享內(nèi)存么
Redis的持久化方式
秒殺系統(tǒng)的架構(gòu)設(shè)計(jì)
三面:
十億個(gè)數(shù)的集合和10w個(gè)數(shù)的集合,如何求它們的交集。
十億和數(shù)找到前100個(gè)最大的,堆排序,怎么實(shí)現(xiàn),怎么調(diào)整。
TCP和UDP的區(qū)別,具體使用場(chǎng)景呢。
TCP四次揮手講一下過程,最后一次ack如果客戶端沒收到怎么辦。
對(duì)于socket編程,accept方法是干什么的,在三次握手中屬于第幾次,可以猜一下,為什么這么覺得。
Linux操作系統(tǒng)了解么,了解一點(diǎn)點(diǎn),就沒問了。
對(duì)于單例模式,有什么使用場(chǎng)景了,講了全局id生成器,他問我分布式id生成器怎么實(shí)現(xiàn),說(shuō)了zk,問我zk了解原理不,講了zab,然后就沒問啦。
除了單例模式,知道適配器模式怎么實(shí)現(xiàn)么,有什么用
回到網(wǎng)絡(luò),剛才你說(shuō)到直播場(chǎng)景,知道直播的架構(gòu)怎么設(shè)計(jì)么,要點(diǎn)是什么,說(shuō)了幾個(gè)不太對(duì),他說(shuō)要避免廣播風(fēng)暴,答不會(huì)。
Redis和MySQL有什么區(qū)別,用于什么場(chǎng)景。
問了一下最近看什么書,什么時(shí)候開始寫博客的
問了還有幾輪面試,他說(shuō)這輪我可以過,有點(diǎn)小驚喜
四面:
三面過了半個(gè)多月,終于安排四面了。
自我介紹
項(xiàng)目,收獲
Linux了解哪些,基礎(chǔ)命令和知識(shí)。問我proc文件系統(tǒng)了解么,答不了解。
TCP和UDP的核心區(qū)別在哪,講了滑動(dòng)窗口保證可靠有序傳輸,UDP不可靠。TCP需要連接而UDP不需要。
TCP的四次揮手,time wait狀態(tài)有什么意義。
說(shuō)完這個(gè)他問我有什么想問他的了。
我問他為什么隔了這么久才面試,而且之前三面都只是初試,然后他說(shuō)最近他在休假,所以就。。。害我擔(dān)心了好久。他說(shuō)接下來(lái)等HR面就行了。
HR面:
自我介紹
實(shí)習(xí)收獲
臺(tái)灣交流體驗(yàn)
之前實(shí)習(xí)公司的情況,拿到offer了嗎,會(huì)如何選擇呢
排一下公司,部門,薪資和城市等因素。
你的優(yōu)缺點(diǎn),如何改進(jìn)
學(xué)生時(shí)代最成功的事
你的預(yù)期薪資
三面頭條
面試崗位是后臺(tái)研發(fā)工程師,地點(diǎn)選擇了上海,通過大佬內(nèi)推,跳過死亡筆試,直接視頻面,從3點(diǎn)開始,斷斷續(xù)續(xù)到晚上8點(diǎn)結(jié)束。
一共三輪技術(shù)面試,每一輪都要寫代碼,問問題的風(fēng)格有點(diǎn)像騰訊,也喜歡問一些底層知識(shí),讓我有點(diǎn)懵逼。
一面:
寫一個(gè)題,找一個(gè)無(wú)序數(shù)組的中位數(shù)
寫了個(gè)快排,然后讓我找到無(wú)序數(shù)組第k大的一個(gè)數(shù),我說(shuō)先排序再找,實(shí)際上可以用快排的partition函數(shù)。
快排的時(shí)間復(fù)雜度,最壞情況呢,最好情況呢,堆排序的時(shí)間復(fù)雜度呢,建堆的復(fù)雜度是多少,nlgn。
操作系統(tǒng)了解么,Linux和windows
說(shuō)說(shuō)Linux的磁盤管理,一臉懵逼
Linux有哪些進(jìn)程通信方式,五大件
Linux的共享內(nèi)存如何實(shí)現(xiàn),大概說(shuō)了一下。
共享內(nèi)存實(shí)現(xiàn)的具體步驟,我說(shuō)沒用過
socket網(wǎng)絡(luò)編程,說(shuō)一下TCP的三次握手和四次揮手,中間網(wǎng)絡(luò)不好,面試官都沒聽清楚,很尷尬
跳過網(wǎng)絡(luò),問了項(xiàng)目的一些東西
問我如何把docker講的很清楚,我從物理機(jī),虛擬機(jī)到容器具體實(shí)現(xiàn)稍微說(shuō)了下。
問我cgroup在linux的具體實(shí)現(xiàn),不會(huì)。
多線程用過哪些,chm和countdownlatch在實(shí)習(xí)用過
二面:
自我介紹
Java的集合類哪些是線程安全
分別說(shuō)說(shuō)這些集合類,hashmap怎么實(shí)現(xiàn)的,扯了很多
MySQL索引的實(shí)現(xiàn),innodb的索引,b+樹索引是怎么實(shí)現(xiàn)的,為什么用b+樹做索引節(jié)點(diǎn),一個(gè)節(jié)點(diǎn)存了多少數(shù)據(jù),怎么規(guī)定大小,與磁盤頁(yè)對(duì)應(yīng)。
MySQL的事務(wù)隔離級(jí)別,分別解決什么問題。
Redis了解么,如果Redis有1億個(gè)key,使用keys命令是否會(huì)影響線上服務(wù),我說(shuō)會(huì),因?yàn)槭菃尉€程模型,可以部署多個(gè)節(jié)點(diǎn)。
問我知不知道有一條命令可以實(shí)現(xiàn)上面這個(gè)功能。不知道
Redis的持久化方式,aod和rdb,具體怎么實(shí)現(xiàn),追加日志和備份文件,底層實(shí)現(xiàn)原理的話知道么,不清楚。
Redis的list是怎么實(shí)現(xiàn)的,我說(shuō)用ziplist+quicklist實(shí)現(xiàn)的,ziplist壓縮空間,quicklist實(shí)現(xiàn)鏈表。
sortedset怎么實(shí)現(xiàn)的,使用dict+skiplist實(shí)現(xiàn)的,問我skiplist的數(shù)據(jù)結(jié)構(gòu),大概說(shuō)了下是個(gè)實(shí)現(xiàn)簡(jiǎn)單的快速查詢結(jié)構(gòu)。
了解什么消息隊(duì)列,rmq和kafka,沒細(xì)問
寫題時(shí)間到。第一題:寫一個(gè)層序遍歷。
第二題:寫一個(gè)插入樹節(jié)點(diǎn)到一顆排序樹的插入方法,使用遞歸方式找到插入位置即可。
第三題:一個(gè)有向圖用鄰接矩陣表示,并且是有權(quán)圖,現(xiàn)在問怎么判斷圖中有沒有環(huán)。
第四題:一個(gè)二叉樹,找到二叉樹中最長(zhǎng)的一條路徑。
三面:
三面的面試官真的高冷啊,不茍言笑就算了,我問他他都不愛搭理的,搞得我內(nèi)心慌得一比,感覺涼涼。
1 介紹一下項(xiàng)目
2 你談到的并發(fā)技術(shù),chm和countdownlatch怎么使用的
3 為什么要這么處理,使用線程池是不是也可以。我說(shuō)也可以
4 操作系統(tǒng)的進(jìn)程通信方式,僵尸進(jìn)程和孤兒進(jìn)程是什么,如何避免僵尸進(jìn)程,我說(shuō)讓父進(jìn)程顯示通知,那父進(jìn)程怎么知道子進(jìn)程結(jié)束了,答不會(huì)。
5 計(jì)算機(jī)網(wǎng)絡(luò)TCP和UDP有什么區(qū)別,為什么迅雷下載是基于UDP的,我說(shuō)FTP是基于TCP,而迅雷是p2p不需要TCP那么可靠的傳輸保證。
6 他說(shuō)不對(duì),我說(shuō)是不是因?yàn)橐⑦B接,開銷比較大,他說(shuō)不對(duì)
7 我說(shuō)p2p的發(fā)送節(jié)點(diǎn)很多,所以不是那么需要各種傳輸保證,他說(shuō)不對(duì)。
8 我說(shuō)TCP會(huì)自動(dòng)分包而TCP可以自己定義數(shù)據(jù)長(zhǎng)度。。他還是說(shuō)不對(duì)。
最后他說(shuō)算了。我們問下一個(gè)吧。
9 操作系統(tǒng)的死鎖必要條件,如何避免死鎖。
10 寫一個(gè)LRU的緩存,需要完成超時(shí)淘汰和LRU淘汰。
我說(shuō)用lhm行不行,他說(shuō)用linkedlist和hashmap可以。
于是我就寫了put和get函數(shù),進(jìn)行了隊(duì)頭隊(duì)尾操作。
他說(shuō)get復(fù)雜度會(huì)不會(huì)太高,我瞎掰了半天沒找到辦法,他說(shuō)那就這樣吧,今天面試到這。
11 媽蛋,過期淘汰的處理我還沒寫呢,你就說(shuō)結(jié)束了,感覺涼了啊,我說(shuō)我要不要把剩下邏輯下完,他說(shuō)不用,心涼了一大截~
然后就是HR小姐姐讓我等結(jié)果了。溜了溜了
最后
最后,強(qiáng)調(diào)幾點(diǎn):
1. 一定要謹(jǐn)慎對(duì)待寫在簡(jiǎn)歷上的東西,一定要對(duì)簡(jiǎn)歷上的東西非常熟悉。因?yàn)橐话闱闆r下,面試官都是會(huì)根據(jù)你的簡(jiǎn)歷來(lái)問的;能有一個(gè)上得了臺(tái)面的項(xiàng)目也非常重要,這很可能是面試官會(huì)大量發(fā)問的地方,所以在面試之前好好回顧一下自己所做的項(xiàng)目;
2. 和面試官聊基礎(chǔ)知識(shí)比如設(shè)計(jì)模式的使用、多線程的使用等等,可以結(jié)合具體的項(xiàng)目場(chǎng)景或者是自己在平時(shí)是如何使用的;
3. 注意自己開源的Github項(xiàng)目,面試官可能會(huì)挖你的Github項(xiàng)目提問;
我個(gè)人覺得面試也像是一場(chǎng)全新的征程,失敗和勝利都是平常之事。所以,勸各位不要因?yàn)槊嬖囀《倚摹适Ф分尽R膊灰驗(yàn)槊嬖囃ㄟ^而沾沾自喜,等待你的將是更美好的未來(lái),繼續(xù)加油!
以上面試專題的答小編案整理成面試文檔了,文檔里有答案詳解,以及其他一些大廠面試題目。
如何獲取整理好的Java面試專題資料?
資料獲取方式:
關(guān)注+轉(zhuǎn)發(fā)后,私信關(guān)鍵詞 【面試資料】即可免費(fèi)獲取到!
重要的事情說(shuō)三遍,轉(zhuǎn)發(fā)、轉(zhuǎn)發(fā)、轉(zhuǎn)發(fā)后再發(fā)私信,才可以拿到!
面試答案



本文就是愿天堂沒有BUG給大家分享的內(nèi)容,大家有收獲的話可以分享下,想學(xué)習(xí)更多的話可以到微信公眾號(hào)里找我,我等你哦。
