天天看點

Java後端面經總結:拿下螞蟻金服美團頭條 offer 秘訣

筆者在面過 猿輔導,去哪兒,曠視, 陌陌,頭條, 阿裡, 快手, 美團, 騰訊之後,除了收獲一大堆面試問題,還思考到如何成為面試官眼中的"愛技術,愛思考,靠譜,有潛力候選人的"一些"套路".

面試問題(Java 後端)

猿輔導

1.八皇後問題

2.求二叉樹的最長距離(任意兩個節點的路徑 中最長的)

3.lru 算法的實作

4.設計一個資料結構 滿足 put 和 getMedium(中位數)兩個方法.

(時間複雜度分析, getMedium 在常數,n,log n 時間複雜度傳回如何實作)

5.rabbitmq 腦裂問題,rabbitmq 延遲隊列實作, rabbitmq高可用政策

(因為項目中用到了 rabbitmq 和他們技術選型出現了重疊,問了這個問題)

死磕項目細節其中包括:

設計方案時有沒有比較多種方案,為什麼選這個方案?

你個人最有成就感,最有挑戰性的 工作是哪一個?

Java架構/分布式:705127209(大牛交流群)沒有開發經驗勿加!

思考:

猿輔導問的算法題屬于 leetcode easy, medium 級别的,基本不會太難

曠視(Python)

Python 如何實作多線程/多程序程式設計

Python GIL 鎖是什麼?為什麼會出現 GIL

python 協程有麼有用過? 有哪些常見的協程庫,介紹一下

python 裝飾器如何實作,原理,常見使用場景?

python 一堆我沒聽見的庫,有沒有用過.(我沒記下來)

給你一個 Linux 路徑,求其最簡化的路徑,例如(/a/b/.. -> /a, a/b/./. -> a/b等)

給你一台 16 核, 32G 的機器, 無限空間大的分布式存儲. 對1 個 16P 大小的文本檔案進行排序.

檔案每行一條記錄, 空格分割例如

key1

key2

介紹一下什麼是外部排序

曠視的這位面試官 和我死磕 python. 一點項目經曆沒問.

除了 leetcode 也要多看看高并發,大資料相關的 系統設計題.

去哪兒(Java)

為什麼使用 MQ, MQ 如何選型, 消息可靠性如何保證, 如何保證幂等

用過 dubbo嗎? 設計一個 rpc 架構.

介紹一下 https

資料庫線程池, http 連接配接池有沒有深入看過源碼?介紹一下.(項目裡用得到了 http client)

給你十億條資料,如何最快的添加到資料庫中

分布式鎖的技術選型, 實作原理, 優劣勢比較, zookeeper 的一緻性協定原理

java 線程同步的幾種方式, countdownlatch 和 栅欄的差別

synchronized和 aqs 如何實作可重入鎖

陌陌

1.分布式鎖的實作方案比較,為什麼選擇 zookeeper, zookeeper 一緻性協定原理

2.一緻性 Hash 原理,實作,項目中是如何使用一緻性 Hash 的,引入了多少虛拟節點?

3.java synchronized和 AQS的原理,差別

redis 有序清單

redis 高可用架構是什麼? codis 和 redis cluster 分片的差別

兩個線程如何交替列印 0到99

頭條(Go)

給你一個 Linux 路徑,求其最簡化的路徑,例如(/a/b/.. -> /a, a/b/./. -> a/b等) 和曠視問重了

top-k

實作字首樹

實作python裝飾器.方法實作,和類實作, 帶參數和不帶參數.以及對裝飾器的思考

如何實作對 多機房,多機架 之前的網絡健康情況監控.

如何了解程序上下文切換, 程序位址空間,為什麼需要程序位址空間, 系統調用實作原理, top 指令介紹.

阿裡

mq 消息可靠性,幂等如何保證

分布式鎖的實作方案比較,為什麼選擇 zookeeper, zookeeper 一緻性協定原理

線程池參數,阻塞隊列實作.

一緻性 Hash解決什麼問題, 如何實作? 虛拟節點的作用?

Java 鎖的實作方式, 比較? AQS實作原理?公平非公平實作原理?

CAS 實作原理

volatile 實作原理, 單例模式

java 記憶體模型, gc 調優的經曆. cms gc 的幾個階段, 為什麼會出現 stop the world. 常見可優化參數有哪些.

為什麼需要優化 gc, gc 會導緻什麼問題.

mysql 事務隔離級别. mvcc 實作原理

mysql 索引原理. 為什麼使用 B+樹. 及何時無法使用索引?

mysql 架構, 引擎層和 server層 各自負責什麼.

hashmap 及 concurrenthashmap 實作原理

Spring aop原理,如何定義新的spring xml 标簽

合并兩個有序連結清單

如何設計一個 大型活動的安保系統(開放題)

你平常都在哪些論壇上學習?

如何學習一門未知的技術?

阿裡面試官 雖然不面算法,但是面試考察點全方位打擊,從淺入深,揪住不放,直到你不會為止.

是收獲最多的面試,也是感受到自己差距的面試.

快手

線程池實作原理,如何調優

如何實作一個延遲隊列

mysql 索引

mysql 事務隔離級别

java 鎖和常見線程同步方式

zookeeper 分布式實作方式及優劣,如何避免 多個用戶端同時擷取到鎖?

求二叉樹兩個節點的共同節點

求二叉樹的深度(非遞歸)

java 集合常見類及原理

tcc 原理

netty 的請求處理流程.線程模型

美團

HashMap 的實作原理?擴容原理? 為什麼 jdk 8修改了沖突連結清單的插入位置

mysql 的高可用架構.主從同步過程.

http 和rpc 調用的差別

redis 如何用單線程支撐高并發, redis 的常見使用場景

mq 如何選型. 為什麼用 mq

一緻性 Hash 原理

美團外賣的支付 ,要求在 15 分鐘内取消未支付的訂單. 如何實作

列印 * 星号的等腰三角形

項目的全鍊路架構, 有沒有單點問題,解決單點問題有哪些常見的方案.

項目中有哪些可以衡量工作産出的名額.

說一下你負責的 最複雜,參與人數最多,周期對長.的項目是如何推進的

你認為自己的優勢,劣勢在哪裡.

你對未來的職業規劃,你期望的工作内容,方向是什麼?

騰訊(Java)

1.如何在實體機和容器中擷取 cpu 核數,如何設定線程數, 如何主動觸發 GC

2.一緻性 Hash, Hash 的作用, 為什麼叫一緻性 Hash,一緻性展現在哪裡.

HashMap中還可以使用什麼方式處理 Hash 沖突

3.線程池參數,優化,原理

4.實作一個功能:

cat /usr/local/*.log|grep tencent

  1. 并發 IO
  2. 30 s 内必須傳回結果

如何了解 Future模式?java 的實作原理

Java 阻塞隊列實作原理

java 鎖 volatile 實作原理

mysql 索引原理,事務隔離級别, mysql 死鎖的場景會有哪些, 内部如何檢測死鎖的?

java 線程同步共有哪幾種工具?

你認為 java 設計得比較優秀的地方有哪些?

如何了解面向對象設計,能用你看過得開源代碼或者實際項目介紹一下嗎?

java 類加載器的原理及實際使用場景.

java 記憶體模型, 虛拟機棧預設大小.

說一下高可用架構的常見解決思路

騰訊一面面試官考察點非常深入,要求你具有歸納能力.例如分布式中常見的負載政策,

分布式中資料同步備份的常見方案.線程同步的幾種方式等等.

而且在你回答之後能繼續深入逼問.

不像其他面試官抛出來問題,他就聽你吹. 你能吹多少,他就認為你會多少.

思考

手撕算法需要準備,面試之前保證刷夠 100 題,及部分設計題.

無論會不會,一定不能慌.無論會不會,一定要和面試官确認自己的了解是不是正确,這道題應該如何思考? 避免跑偏

面試重點在于溝通.

3.1 強行總結結論

一定要有條理性的和面試官溝通. 避免東一笤帚,西一掃帚.最好提前想好一些結論,重複幾遍.這樣面試官可能直接用你的"結論"來 寫面試經過,結論,評價等. 說完一件事,最好有條理性的結論,讓面試官印象深刻. 即使強行 1,2,3的劃重點結論也比戛然而止強.

3.2 優雅的中斷目前問題,隻在檢查點退出讨論,響應面試官的中斷

當面試官出現了疑問,抛出了問題,中斷你的回答,一定不要一味的回答,立即響應,把握自己的節奏,先面試官征求意見,能否把剩下的說完.繼續快速的說完,記得總結結論 求同存異,避免争論。

面試官沒有你熟悉你的項目,你的經曆. 說,聽,讨論. 三個階段都會存在溝通資訊的損失. 給面試官講清楚, 讓他了解,認同你可能很難. 但是如果出現争論,會降低對你的好感,降低溝通效率.是以你有責任及時的終止争論.可以使用一下技巧:

重申 上下文, 目的, 現狀, 背景, 利弊抉擇.

坦誠的承認這塊我們的設計,實作并不是完美的.甚至做得不好.我們已經提出了哪些優化點(提出了解決方案).

但是優先級并不是很高(優先級是最好的甩鍋方式).當初由于更專注于業務目标.技術前瞻性做得不足.你的意見确實一針見血,

這個問題讓我們頭疼了很久.

"這塊确實比較複雜,咱們總結一下,細化一下分歧再讨論" 面試官一般不會拒絕,面試方向主動權重新由你掌握.(要有主動權意識)

細化分歧過程中, 其實就是取得共識, 某些細枝末節的争論,直接和面試官解釋,忽略掉即可. 把你們的共識擺出來.然後說:

"咱們的分歧主要是什麼什麼,其實是我每說清楚,再針對面試官疑問解釋一下,或者甩鍋,我們想優化,因為優先級.我們想這麼做,

但是由于時間來不及,或者當時 XXX,沒有這麼做.不過後來我們确實吃了虧,算是技術債".

(承認 low 沒有問題,強項裝逼不服輸才是最二百五的)

面試三千問

履歷重要嗎? 随便寫行不行

履歷一定要認真寫.面試官抛出的問題中,除了常見的高頻面試題,就是履歷中你寫的東西.要保證履歷中寫的東西,

透徹了解! 無論寫的是了解,還是精通都要精通. 否則别寫

我認為不用寫的

1.不熟悉的,僅僅是知曉的.

2.在學校整的東西,沒啥知名度就不要寫了

3.github 要有,但是我沒有被問過github 中的項目

項目經曆問嗎?

項目經曆一般是 面試必問的,重點問的. 是以第一步要優先發掘自己項目中的亮點, 把自己做的工作清晰的寫出來.

自我介紹階段重點介紹應該也是自己的項目經曆,這時最好自己提前準備一份演講稿把自己的項目亮點說出來.

多練幾遍.避免不過腦子,黃河決堤式回答,想到哪裡說哪裡.

常見高頻問題呢?

java 鎖,線程同步,Juc 包.線程池

記憶體模型,gc 調優

mysql 索引,鎖,事務隔離級别.

常見分布式高可用架構 redis, mysql, zk, mq等. 資料同步,資料分片,資料備份等

需要刷題嗎?

阿裡一般不會問太多算法題.

但是至少一半以上公司都會手撕算法. 把leetcode 各個類型的題都刷十道以上基本沒太大問題. hard題一般不會問.

如果自己面試表現非常好,但是因為算法題被刷掉是不是會很遺憾呢?

算法題能擴充一個人的思路,還是有用的.也鍛煉一個人編碼能力. 個人建議白闆算法用 python 非常簡潔.更聚焦解題思路

如果自己面試表現特别好,職位比對度非常高. 算法題是可以防水的,會挑簡單題問. 目的就是 留下你,怕你答不上來,避免尴尬

但是自己面試比較差, 算法題答得特别好,會不會扭轉面試結果呢? 基本不會, 手撕算法隻是輔助.項目經曆和基礎面試題是核心.

面試結果可以問嗎?

如果沒有面試到 hr,或者 終面面試官沒有明确 hr 會聯系,我基本都會問. 或者問一下自己的不足. 一般都會告訴自己.

另外, 手撕算法OK,也會被刷掉. 我在陌陌就是 手撕算法非常完美,結果還是挂了.

一般幾輪面試?

不算 hr ,基本都是三輪. 但如果二輪面試官開始扯虛的,和你介紹項目,問你職業規劃 也許二面就是終面. 不清楚就問一下面試官.

平時工作劃水, 面試臨時抱佛腳行不行?

不行

當面試官逼問項目細節時, 如果平時沒有對細節特别熟悉,做事馬馬虎虎,技術深度不夠,例如 技術選型為什麼這麼做,其他方案?優劣勢是什麼?

如果沒有調研,面試時,很快會露出馬腳.

如果對項目的整體架構不熟悉,隻熟悉自己的子產品,也會可能被面試官問到關聯的子產品,項目如果自己不熟悉,馬上就會支支吾吾.如果你回答,這塊不是我負責的,我不太熟悉,就會讓面試官對你産生 沒有大局觀,主動意識不夠的狐疑.評價時會被評"隻能完成自己子產品内的工作,對系統的全局沒有了解,主動意識不強.自我驅動意識差"

工作時,可能僅僅聚焦業務,對于項目中應用的技術關注不足. 面試時候就會被面試官揪住.如果當時不思考清晰,并且面試前沒有意識到這塊技術風險, 就會給面試帶來很大風險.美團面試官曾問我,介紹一個你主要負責的 參與方最多,周期最長,最複雜的一個項目如何推進的? 如果平時工作不積極,不主動思考,面試被攤上這麼一個問題.基本上啞口無言. (我就目瞪口呆了)

僅僅看部落格,把高頻面試題搞懂行不行? (問題驅動式準備面試)

這是必須要做的事情.但是僅僅做到這些還遠遠不夠

例如:

阿裡面試官問:gc 為什麼一定要 stop the world? 一般部落格沒有給出明确清晰直覺的原因.

一緻性 Hash 如何實作? 手撕一下.為什麼叫一緻性 hash,一緻性展現在哪裡? 一般部落格沒有.

lru 算法手撕一下. 部落格有,看一遍就能手撕了?

redis 和 zk 分布式鎖實作如何選型? 各自缺點,優勢?項目使用時如何避免缺點帶來的負面影響?

如何基于 AQS實作擷取鎖的公平性非公平性?

面試官甚至給你埋坑,故意說一個錯誤的,看你能否反駁.

我之前被帶坑過, 線程池問題

面試官問:是先到 max size 還是先添加到阻塞隊列?

我說 阻塞隊列滿了才會繼續建立線程到max size

面試官: 是這樣嗎? 那麼如果是無界隊列豈不是永遠無法到達 max size

我心想: 是啊,有道理,我可能記錯了.然後被面試官帶偏了.

是以結論是,光看懂記下來,不夠,要深刻了解.時刻帶着問題去學習.問題驅動式學習.

最後你會發現,

過了許久,你印象最深刻的還是自己當初提出來的疑問及其解決思路和答案.

以上就是面試過後收獲的一大堆面試題,希望可以幫到即将面試的你。