【面試經驗】橫掃阿里、滴滴、美團後,阿里程序媛整理出這份厚厚的面經

這次面試的公司有一點點多,主要是因爲畢業後前兩份工作找的都很草率,這次換工作就想着,emm,畢業三年了,該找個工作好好沉澱幾年了。

先說下這次面試的結果吧:

到HR面的:阿里、美團、滴滴、金山雲、每日一淘、火幣、宜信、旺店通、黃包車、linkedMe

其他:

小米(四輪技術面,大概4個小時的樣子,大數據部門,不知道是不是四面的負責人嫌棄我木有大數據的經驗,我確實木有哈)

京東(電話面試一輪+現場兩輪,面試完快中午一點了,說是讓我先回家,後面讓HR 電話聯繫我,一週後一面的面試官問我還考慮京東不,如果考慮的話,就進行後續,對不起,我已經不考慮了,希望以後有機會再合作,所以沒有後續了)

頭條(二面完gg,我的算法確實菜哈,然後LeetCode又只刷過10道題,去面頭條,確實有些作死的節奏,實在是對不起幫我內推的石衝大佬)

愛奇藝(電話面試一輪+現場兩輪,到技術終面了,這個怪我,面試官也一直很忙,然後我倆就互相一直改面試時間,最後定的那個面試時間我還遲到了一個小時,還是時間到了纔給HR打電話說一個小時後才能到,雖然我知道這樣做非常不好,但是當時情況比較複雜,自己根本忙不過來,一直在面試,也沒有辦法中途給HR打電話說一下。

一天面兩家,兩家離的還比較遠的小夥伴吸取一下教訓。我本來是想約第二天下午的,HR就想當天,結果就晚上7:40開始二面了,面到9點,然後木有然後了)

有贊(電話面試一輪+現場兩輪,到技術終面了,面試官“base考慮杭州嗎”,我“啊,你們北京不是也需要人嗎,最好北京哈,杭州暫時不考慮”,然後木有然後了,哈哈。

後面面阿里的時候我就自己打臉了,面試官“base杭州考慮嗎”,我“面過阿里我就去杭州,面不過我就在北京”。愛,就要大膽的說出來。)

這次面試基本都是三~四輪技術面,很多都是每一輪都有至少一道算法題,所以準備換工作的小夥伴,算法可以搞起來了哈,LeetCode easy和medium 難度的就ok了,當然如果你也要刷hard 難度的題,是更好的哈。

我作爲一名只刷過10道LeetCode 的渣渣,表示以後要好好刷LeetCode 了,拯救一下自己的智商。準備面頭條的小夥伴,那就medium 和 hard難度的搞起來吧。你們加油,我就不想了。

羣裏有很多小夥伴懷疑我是985、211或者研究生畢業,都不是的哈,渣本(但是我還是很愛我的母校的),16年畢業,我一個妹子都可以做到的,你們更可以做到,所以相信自己,去努力就好了。

這篇文章主要是記錄一下自己的面試經歷,分享一些羣裏小夥伴們都很關注的面試題,我個人感覺不錯的,可以提升技術的,當然面試中也會對你有特別大的幫助。

阿里的面試題不會分享哈,這次主要分享TMDJ、以及其他公司的一些面試題,把我分享的這些面試題都掌握了,對想去面阿里的小夥伴的幫助也是非常非常大的。當然,面試題只是起一個查漏補缺的作用,並不是讓你直接去整理答案,去背答案的哈。

一個合格的面試官,是會針對你的簡歷去問的,即每個人的面試題都是不一樣的。

頭條
二輪技術面,17:00~20:25,晚飯時間HR小姐姐還特貼心的帶我體驗了一把傳說中的頭條餐廳,不超過半小時:

聊項目,畫項目架構圖,畫一個用戶從發起請求到接收到響應,中間經過哪些服務,每個服務做什麼事情的流程圖。

講項目中的難點、挑戰,你是如何解決的?

Redis 中有幾種類型 & 各自底層怎麼實現的 & 項目中哪個地方用了什麼類型,怎麼使用的?

Redis如何實現分佈式鎖,zk如何實現分佈式鎖,兩者的區別。如果service還沒執行完,分佈式鎖在Redis中已經過期了,怎麼解決這種問題?

synchronized底層實現,加在方法上和加在同步代碼塊中編譯後的區別、類鎖、對象鎖。

鎖升級的過程。

Java運行時區域及各個區域的作用、對GC的瞭解、Java內存模型及爲什麼要這麼設計?

對索引的理解,組合索引,索引的最佳實踐

countDownLatch用過沒有,在項目中如何使用的,對AQS的瞭解。

寫生產者消費者問題,考慮高併發的情況,可以使用Java 類庫,白紙寫代碼。

如下圖所示:
Rczrcai530sVlQ.jpg

設計一個發號器,考慮集羣和高併發的情況,要求發號器生成的id是遞增趨勢,通過id可以區分出來是今天生成的id還是昨天生成的id,但是生成的id中不能直接帶有日期,要具有一定的混淆功能,白紙寫代碼

一個二位數組,每個元素都可以往上下左右四個方向走,尋找最長遞增路徑。如下圖所示,最長遞增路徑即紅色字體路徑。白紙寫代碼。
Rczrcax5nA42ff.jpg

美團
電話面試(40分鐘)+現場三輪技術面試(3.5小時)+HRBP面試(30分鐘)

數據庫和緩存的一致性問題。先更新數據庫,再更新緩存,若更新完數據庫了,還沒有更新緩存,此時有請求過來了,訪問到了緩存中的數據,怎麼辦?

聚簇索引/非聚簇索引,MySQL索引底層實現,爲什麼不用B-Tree,爲什麼不用hash,葉子結點存放的是數據還是指向數據的內存地址,使用索引需要注意的幾個地方?

MySQL默認的事務隔離級別,MVCC、RR怎麼實現的?RC如何實現的?

MySQL間隙鎖有沒有了解,死鎖有沒有了解,寫一段會造成死鎖的SQL語句,死鎖發生瞭如何解決,MySQL有沒有提供什麼機制去解決死鎖

談下對GC的瞭解,何爲垃圾,有哪些GC算法,有哪些垃圾回收器,cms和g1的區別,還有一個直擊靈魂的問題,看過cms的源碼嗎?

有沒有排查過線上OOM的問題,如何排查的?

有沒有使用過JVM自帶的工具,如何使用的?

假設有下圖所示的一個Full GC 的圖,縱向是內存使用情況,橫向是時間,你如何排查這個Full GC 的問題,怎麼去解決你說出來的這些問題?

RczrcxXGbIug6c.jpg

說說對Java中集合類的理解,項目中用過哪些,哪個地方用的,如何使用的?

對CAS的理解,CAS帶來的問題,如何解決這些問題?

volatile底層、synchronized底層、鎖升級的過程、MESI

Ehcache支持哪些緩存?

JUC有研究沒有,講一講?

聊項目,畫項目架構圖,畫一個用戶從發起請求到接收到響應,中間經過哪些服務,每個服務做什麼事情的流程圖。

講項目中的難點、挑戰,如何解決的,項目這一塊會問的特別細。

如何保證RocketMQ 消息的順序性,如何解決重複消費問題。

項目中如何保證接口的冪等操作。

講一講對Redis 的瞭解,項目中如何使用的,哪個地方使用的,爲什麼要使用?

哨兵機制、Redis 兩種備份方式的區別,項目中用的哪種,爲什麼?

講一講對分佈式鎖的瞭解

項目中系統監控怎麼做的?

如何理解Spring中的AOP 和 IOC,以及DI,讀過Spring源碼沒有?

讀過MyBatis源碼沒有?

說一個你瞭解最多的框架,說出你的理解。

如何理解分佈式事務,爲什麼會出現這個問題,如何去解決,瞭解哪些分佈式事務中間件?

聊一聊對分庫分表的理解。

Hystrix功能和在項目中怎麼使用的?Hystrix怎麼檢測斷路器是否要開啓/關閉?Hystrix實現原理?除Hystrix之外的其他熔斷限流中間件有了解沒有,瞭解多少說多少?

Dubbo有了解沒有?

怎麼理解Java 中和 MySQL中的樂觀鎖、悲觀鎖?

一致性hash

滴滴
現場三輪技術面試+一輪HRBP面(4小時5分鐘)

1.聊項目,畫項目架構圖,畫一個用戶從發起請求到接收到響應,中間經過哪些服務,每個服務做什麼事情的流程圖,講數據庫設計。

2.處理過線上OOM問題沒有,如何處理的?

3.遇到過線上服務器CPU飆高的情況沒有,如何處理的?

4.線上有沒有遇到其他問題,如何處理的?

5.對線程池的理解,項目中哪個地方使用了,如何使用的,用的Excutor框架中的哪個實現類,爲什麼用這個

6.對CAS的理解,CAS帶來的問題,如何解決這些問題?

7.volatile底層、synchronized底層、鎖升級的過程、MESI

8.對MySQL索引的理解、對組合索引的理解、索引的最佳實踐

9.分佈式鎖的實現、對比Redis分佈式鎖 & ZK分佈式鎖

10.唯一ID如何實現的,Snowflake實現原理,Snowflake有哪些問題,如何避免根據訂單號可以推算出今天的訂單量

11.如果線上一個功能是用棧結構實現的,使用過程中要注意哪些問題,爲什麼?

12.怎麼理解線程安全?

13.怎麼理解接口冪等?項目中如何保證的接口冪等?

14.怎麼理解微服務,服務如何劃分,可以從哪幾個方面去劃分,爲什麼這樣劃分,微服務帶來了哪些好處,哪些壞處,如何看待這個問題?

15.如何理解網關,網關帶來的好處和壞處,如何解決

16.Hystrix功能 & 在項目中怎麼使用的 & Hystrix怎麼檢測斷路器是否要開啓/關閉 &Hystrix實現原理

17.怎麼理解命令模式和觀察者模式,手寫一個觀察者模式或者命令模式的代碼,策略模式也行

18.掌握哪些設計模式,常用哪些,項目中如何使用的,爲什麼用這個,不用那個?手寫一個線程安全的單例模式

19.如何設計一個秒殺系統?

20.如果我現在就是要實現每秒10w請求,不能熔斷限流,如何去設計?

21.假設現在雙十一零點,大量下單請求,如何對這些訂單進行分庫分表,爲什麼?

22.服務A調用服務B中一個接口,服務B調用服務C中一個接口,如何實現若服務B響應服務A成功,則服務C一定響應服務B成功,需要考慮系統性能問題?

23.遞歸使用中有什麼需要注意的地方,遞歸寫法一般可以用什麼去替換?

24.有兩個表,table a,table b,寫SQL查詢出僅在table a中的數據、僅在table b中的數據、既在table a 又在table b 中的數據?

25.Spring 源碼有了解沒有?

26.MyBatis源碼有了解沒有?

27.MySQL事務隔離級別、MVCC?

我:既然現在很多業務線都是Go了,有沒有考慮把剩餘的業務線也轉成Go呀?

面試官:我認爲,語言只是工具,語言不應該是影響開發的一個因素吧。

面試官說的很有道理。

京東
電話面試(30分鐘)+現場兩輪技術面試(1小時40分鐘),面完12:50,說讓我先回來,後續hr 電話和我聯繫,一週後一面的面試官問我還考慮京東嗎,對不起,已經不考慮了,希望以後有機會再合作

一個final修飾的屬性,定義的時候沒有初始化,在無參構造函數中初始化,可以嗎,爲什麼

說說對Java中集合類的理解,項目中用過哪些,哪個地方用的,如何使用的,爲什麼不用其他的集合類

HashMap,concurrentHashMap底層實現

List刪除是怎麼實現的,遍歷的時候可以刪除嗎?爲什麼?

Redis中有哪些數據結構,瞭解過其底層怎麼實現的嗎,和Java中相似的數據結構的對比?

Redis是單線程的還是多線程的,爲什麼這麼快?

Redis Hash中某個key過大,變爲String類型的大key,怎麼處理,使用中如何避免出現這種問題?

設計模式在項目中哪個地方用到了,怎麼使用的,能不能畫一個你熟悉的設計模式的UML圖,手寫單例模式,手寫靜態內部類實現的單例模式。

講一講MySQL索引,實際工作中,哪些場景用了B+Tree索引,哪些場景用了hash索引?

explain 可以看到哪些信息,什麼信息說明什麼,explain的結果列講一下

Spring源碼看過沒有,會多少講多少?

MyBatis源碼看過沒有,會多少講多少?

CAS的缺點,如何解決?

AQS、countDownLatch如何實現?

線程池如何實現,核心線程數和最大線程數設置成多少,爲什麼這麼設置,項目中哪個地方使用了線程池,使用時需要注意什麼

MySQL事務隔離級別,幻讀,髒讀,項目中用什麼事務隔離級別,爲什麼?

volatile底層原理、synchronized實現機制

對XA、TCC的理解,瞭解哪些分佈式事務框架,有什麼缺點?

Feign 和 Dubbo,瞭解多少說多少?

Eureka 和 Zookeeper,瞭解多少說多少?

Hystrix 和 sentinel,瞭解多少說多少?

Spring Cloud Alibaba,瞭解多少說多少?

對分庫分表、讀寫分離的瞭解,瞭解多少說多少?

畫一下Java 線程幾個狀態及狀態之間互相轉換的圖?

聊項目,畫項目架構圖,畫一個用戶從發起請求到接收到響應,中間經過哪些服務,每個服務做什麼事情的流程圖,講數據庫設計具體到部分表中有哪些字段?

部門體量比較大,可能需要加班,到凌晨兩三點的那種,也可能通宵,通宵是大促期間,你能接受嗎?

也會加班到十點,這個不是大促期間,但也不是每天,非常態情況,你能接受嗎,你在哪裏住,過來要多久,有男朋友嗎?

下面是面試TMDJ之外的公司中遇到的一些問題哈,TMDJ中已經被問到的就不再重複寫了,只寫一下個別公司中我還記得的面試題。

其他面試題
火幣:

四輪技術面試+一輪HR面試(4小時),後來HR小姐姐和我說,她們正常是兩輪技術面試,因爲技術面試完面試官一直沒有找到她,然後就又來了一輪技術面試,又來了一輪技術面試。

Kafka 如何保證消息順序消費、在consumer group 中新增一個consumer 會提高消費消息的速度嗎、那如果我想提高消息消費的速度,我要怎麼辦?

Redis幾種數據結構及底層,項目中如何使用的Redis?

哨兵機制、選舉算法

一致性hash

Redis是單線程的還是多線程的,爲什麼速度這麼快?

多路複用的幾種方式以及區別?

對線程池的理解,在項目中如何使用的,多個線程之間如何共享數據,多個進程之間如何共享數據?

HashMap、concurrentHashMap的區別及底層實現、HashMap和HashTable 的區別?

什麼是紅黑樹,什麼是B-Tree,爲什麼HashMap中用紅黑樹不用其他樹?

對MySQL索引的理解,爲什麼MySQL索引中用B+Tree,不用B-Tree 或者其他樹,爲什麼不用hash 索引?

數據庫和緩存的雙寫一致性問題?

每日一淘:

三輪技術面試+一輪HRBP面

用過哪些Object類的方法,如何使用的

Java如何實現序列化的,Serialization底層如何實現的

countDownLatch如何實現的

項目中監控報警機制如何做的,說說你的瞭解

線上服務器CPU飆高,如何處理這個問題

服務A調用服務B,用戶請求服務A,發現返回較慢,如何定位這個問題

TIME_WAIT是什麼狀態還記得嗎,什麼情況下網絡會出現這個狀態

linkedMe:

二輪技術面試+一輪HR面試

內核態和用戶態、cas 和 sout 哪個用到了內核態和用戶態的切換

哪些典型的應用用的是UDP?

線程池有了解嗎,項目中如何使用的?

計算密集型/IO密集型任務分別如何設置線程池的核心線程數和最大線程數,爲什麼這麼設置?

假如我下午5點要和5個人一起開會,但是這5個人現在都出去了,不在公司,但是今天會回來,問,我如何開這場會,用Java 併發方面的知識回答。

旺店通:

5小時+,中午我還木有喫飯,下午面試時候真是餓的要死,而且下午腦細胞死了好多好多

先機試(50分鐘時間,三選二,不聯網,明確告知機試不通過沒有後續)

一面給面試官講一下自己機試題的思路,面試官運行看結果,然後問了幾個問題(什麼是B-tree,什麼是B+tree之類的)

筆試(10道選擇題+2道數據庫+2道算法題,30分鐘)

二面給面試官講自己的機試題的思路,面試官運行看結果,然後給面試官講筆試題,一道一道講爲什麼這麼寫,過程中面試官可能會改題,然後問你怎麼解決修改後的題,然後又問了幾個題

三面開始正常面試,但不是看簡歷問,一部分是簡歷上的,一部分是看面試官心情

HR面

當場給了Offer,但是啊,從他家出來的時候的想法就是,早知道下午這個樣子,不如中午喫個午飯,回家好好睡一覺。

想去他家的小夥伴就好好寫代碼吧,多看Java 中一些方法的實現,因爲機試的題目都要求不能用Java中提供的方法,要自己寫,然後還要好好準備算法。

算法題
[1,1,2,2,3,4,4,5,5,5] 找出不重複的元素(黃包車)

反轉鏈表,要求時間複雜度O(N),空間複雜度O(1) (火幣)

非遞歸實現斐波那契數列 (愛奇藝)

這一週股市價格爲[2,6,1,4,8],求哪一天買入哪一天賣出,可獲得最大收益,最大收益爲多少 (愛奇藝)

按照箭頭方向查找二叉樹 (金山雲)

RczrdAt8ulIXXq.jpg

表a b c之間用ID關聯,求陰影部分的數據 (金山雲)
RczrdB94ErzLXj.jpg

一個整形無序數組,裏面三個數只和等於一個目標值,求這三個數 (小米)

鏈表問題 (小米)

RczrdBTJGrj7fe.jpg

撲克牌問題 (小米)

有十張撲克牌,從上面開始抽,抽出一張放桌子上,然後再抽出一張放撲克牌的最下面,這樣循環往復的操作,直到手裏的牌都沒有了。這時,桌子上牌的順序正好是1 2 3 4 5 6 7 8 9 10。要求寫代碼求出原順序

手寫大頂堆 (linkedMe)

手寫LRU 算法 (火幣)

字符串相加 (滴滴)

兩個數字類型的字符串,直接轉int或者double肯定都放不下,然後求這兩個數的和,返回值還是字符串,15分鐘時間,要求無Bug

尋找目標值位置 (滴滴)

有一個二維數組,數組橫向有序,縱向有序,求目標值的位置,10分鐘時間

求字符串“efabcbaefehiabcba”中最長的迴文數,不去重(美團)

反轉int類型的值x,不要借用String,只用int 即可。&& 針對該程序,寫出其應有的測試用例 (美團)

top K 問題(每日一淘)

HR面
真誠待人,以真心換真心,不要弄虛作假,HR 問什麼問題,如實回答即可。在回拒Offer 時候,也請好好說話。

Tips:
其實面試過程中,你是可以感受到哪些面試官是真的很欣賞你,哪些只是想找一個可以幹活的人的,最後一定要去一個欣賞你的面試官那裏,因爲待遇真的會不一樣(假裝我體驗過只是想找我幹活的Leader哈,很感激以前遇到的每一位Leader 都很欣賞我,給我我想要的空間去做自己想做的事情,真的非常感謝你們)。

作者簡介:Bella,16 年本科畢業,94 年程序媛一枚,現就職於阿里,從事Java開發。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章