作者:黃小斜
百度研發面經
百度智能云
軟件研發工程師

百度智能云研發崗
好像是做控制臺方面的組
一面:
1自我介紹,項目
2 static關鍵字有什么用,static修飾不同東西時有什么作用,內部類用static修飾和不用static修飾有何區別。
3 hashmap,hashtable,concurrenthashmap區別和場景
4 volatile關鍵字有什么用
5 jvm分區講下,作用講下,gc算法講一下,gc是否會有停頓或者延遲。
6 講一下OOM和內存泄漏的例子,為什么有GC還會出現內存泄漏和內存溢出呢
7 線程和進程的區別,通信方式的區別。
8 悲觀鎖和樂觀鎖,說一下Java和數據庫分別怎么實現的。
9 數據庫索引說一下,除了B+樹索引還有什么索引。
10倒排索引說一下,如果關鍵字很多,怎么優化。使用前綴樹和hashmap優化。
11 前綴樹的結構和原理說一下。
12 瀏覽器發起http請求過程,越詳細越好。
13 緩存和數據庫的一致性怎么保證
14 網上寫代碼,寫了一個快排
15 沒了。

二面:
1 自我介紹
2 項目中難點,用到的技術
3 多線程,說一下線程的狀態和狀態轉換,詳細問
4 多線程的sleep方法和wait方法為什么來源不同,一個是object方法,一個是Thread的方法。
5 為什么object的wait和notify必須在同步塊中使用,不在同步塊使用會報錯么,編譯報錯還是運行報錯。
6 jvm講一下gc吧,兩個對象的引用循環依賴,會不會被垃圾回收,什么情況下會什么情況下不會呢
7 GC root是哪些位置呢,我說記不起來,他說你不用記,其實就是運行時的一些對象和變量,比如局部變量表,方法區的元數據比如fianl,static變量,本地方法棧執行的方法。
8 數據庫了解哪個。Redis說一下為什么是單線程的,不會很慢么,有什么好處。
9 Redis的IO請求模型,是不是IO多路復用呢。
10 Spring的interceptor和filter有什么區別。我說沒區別,錯!
11 網絡這塊,說一下dns請求的過程吧,dns是否會訪問緩存呢,緩存在本地和瀏覽器,還有dns服務器上是不是都有。
12 get和post的區別講一下,底層的實現有區別么,都是基于TCP,那么如何限制get的url長度,在哪一層限制的。
13 數據結構熟么,講一下樹和圖吧,樹的層次遍歷使用什么結構,相應的圖的遍歷呢。講講最小生成算法,還有迪杰斯特拉。
14 數組,找到唯一一個出現兩次的數。
剛開始聽錯,說了位運算。
a 然后講了數組計數,hash計數,排序比較。
b 然后面試官說條件給的是1到N-1的N個數字,重新想一下。
c 說了根據數組位置和數字比較進行判斷。面試官最后說可以用相加求差值來判斷。
15 一個10000以下的數組,內存夠。里面只有1,2,3。排下序。
a 普通排序O(nlogn)
b 荷蘭旗問題,雙指針解決。O(N)
c 統計數量,重放數組O(2N)
d 另外搞一個數組,把1放頭,3放尾,也是雙指針。O(N)。空間復雜度O(N)
16 沒了。
全程50分鐘

三面HR
巴拉巴拉巴拉。基本上問題都大同小異。
百度智能云 數據庫部門
一面:
1 數據庫的事務,四個性質說一下,分別有什么用,怎么實現的。一致性沒講好。
2 講到了redo和undo日志,問我分別有什么用,說redo日志說錯了。
3 數據庫的隔離性如何保證,使用悲觀鎖和樂觀鎖有何區別。MVCC的設計目的是什么,怎么使用版本號判斷數據的可見性。
4 問了一道算法,1到N的所有數字,按照字典序打印,怎么做。
說了用數組排序,問復雜度,扯了半天。
怎么優化,按照數字特征順序打印,問這個東西和什么結構比較像。提示是樹,然后說了個多叉樹,問我怎么實現,最后其實使用dfs遍歷樹的每個分支。
5 多線程并發的同步實現,有兩個方法,每個方法里有a部分代碼和b部分代碼,我要讓兩個線程分別執行兩個方法,并且讓他們運行完a部分代碼再一起向下執行,如何實現。
6 我說了用cyclicbarrier實現,互相等待await。
然后他問我怎么用信號量實現,并且提示可以再用一個線程。
然后我說了個方案。
7 問了項目
8 如何把優化遞歸的代碼
改成尾遞歸或者循環。
面試官說不是,引導說用棧實現遞歸。
問我棧中需要壓入哪些數據。他說應該是方法參數,返回值,以及返回地址。

二面:
1 自我介紹,項目 10分鐘過去
2 服務器如何負載均衡,有哪些算法,哪個比較好,一致性哈希原理,怎么避免DDOS攻擊請求打到少數機器。
3 TCP連接中的三次握手和四次揮手,四次揮手的最后一個ack的作用是什么,為什么要time wait,為什么是2msl。
4 數據庫的備份和恢復怎么實現的,主從復制怎么做的,什么時候會出現數據不一致,如何解決。
5 今天面試太多了,記不清了。。。
6 開源的技術看過用過么,分布式存儲的了解么。
7 想做什么方向的開發。
8 Linux查看cpu占用率高的進程
9 查看占用某端口的進程和某進程監聽的端口
10 如何查詢日志文件中的所有ip,正則表達式

三面(8.3號更新):
數據庫部門真的很嚴格,問題都挺難的。
1 講一下項目
2 平時了解什么操作系統
Linux,說一下Linux排查問題常用的命令,ps,top,netstat,free,du等等
3 Linux的內存管理算法,問了一下是不是頁面置換算法,他說是。
說了lru和fifo,問我lru有什么缺點,沒答上來。
4 Linux的文件系統了解么,講了一下inode節點,文件和目錄的原理。他問我了不了解具體的文件系統ext2,ext3,答不會。。
5 進程通信方式有哪些,問我分別怎么使用,管道有哪些類型,各有什么優缺點。
6 問我服務器硬件了解么。。一臉懵逼,問了我懂不懂Raid,瞎扯了幾句就說不懂了。
7 shell了解么,沒怎么寫過。
8 聽說你會Java,說一下JVM內存模型把,有哪些區,分別干什么的
9 說一下gc算法,分代回收說下。
10 設計模式了解么,說了7種,問我分別怎么用,實際應用過嗎,稍微扯了一下。
11 MySQL的引擎講一下,有什么區別,使用場景呢。
12 查詢最新的10條數據,想了好一會,order by id desc limit 10
13 MySQL的union all和union有什么區別,我瞎掰了一下,應該不對。
14 MySQL有哪幾種join方式,底層原理是什么,答不會,只知道表現形式。
15 Redis了解哪些啊,數據結構和基本原理把。
問我Redis怎么做集群,答了主從哨兵和cluster。
Redis的持久化怎么做,aof和rdb,有什么區別,有什么優缺點。
16 Redis使用哨兵部署會有什么問題,我說需要擴容的話還是得集群部署。
17 分布式系統了解么,說一下Hadoop了解啥。
我說基本組件稍微了解過,簡單搭過環境。
18 MapReduce的combiner干啥的,我說是合并結果的,問我啥時候會用到,答不知道。
19 Hadoop分發任務時,有個job失敗了,hadoop會怎么處理,我答不知道,猜是會繼續執行。。
20 hadoop分發任務,如果有一個節點特別慢拉慢了整體速度怎么辦。我猜測是通過yarn分配相同的資源給每個任務,可以避免這種情況,他好像不太滿意。
21 hadoop答得很爛。問了我兩個10g文件比較,2g內存,重復率很高,篩選出不同的內容。我說拆成十份hash,每份兩兩比較hash的結果集,貌似他說OK。
22 排序算法了解哪些,巴拉巴拉。
23 用隊列計算一個樹的高度,我說用層次遍歷記錄節點高度。
24 一個黑名單集合,數據量很大,快速查詢一個值是否在集合里,怎么設計,我說布隆過濾器。
25 還是上一題,說這個黑名單可能需要動態地增刪改,如何設計才能避免訪問響應太慢。我沒思路,瞎扯了一下加硬件,用內存存,都被駁回了。然后他說算了。
26 上一題的黑名單做成分布式,怎么做。說了分片的方案,根據地址的hash值確定分片所在節點。
27 分布式數據庫了解么,我不太明白他問的是啥,說不了解,感覺應該是問數據庫的分布式方案。
28 有什么想問的,據他所說還有2-3輪面試,驚了。
全程50分鐘,可以說是迄今為止難度最大的一個?