頭條一面(Java+項目)
1.倒排索引
2.講講redis裏面的哈希表?
3.happen-before的規則?
4.volatile修飾符,synchronize鎖
5.java單例模式的實現,懶漢、餓漢?
6.進程與線程的區別,多進程和多線程的區別?
7.HashMap原理,爲什麼用紅黑樹,紅黑樹的特點?
8.快排時間空間複雜度,最好最壞的情況,優化方案?
9.TCP的擁塞控制,具體過程是怎麼樣的?UDP有擁塞控制嗎?如何解決?
10.講講了解的垃圾回收算法和回收器,什麼時候執行STOP THE WORLD?
11.瞭解Go語言嗎?
頭條二面(大數據+項目)
1.Kylin的項目架構
2.Paxos和ZAB協議
3.CAP理論,分區容錯性的意義
4.大表Join小表優化,如何處理數據傾斜?
- 講一下最大堆和最小堆
6.HDFS的讀取、寫入,容錯處理。(源碼)
7.MapReduce的過程(第一版和第二版的)
8.MR shuffle,Spark shuffle。
9.namenode HA,腦裂,Yarn的調度機制。
10. Hive的內部表和外部表區別、數倉建模模型、數倉分層、雪花模型和星型模型。
11.瞭解ClickHouse嗎?它與Kylin的區別?
頭條三面(算法+場景題)
1.LRU算法實現(僞代碼)
2.鏈表倒數第K個數(講思路)
3.一堆螺絲和螺母用最短時間匹配(代碼實現)
4.求每天瀏覽頁面的新用戶(Hive QL實現)
5.求抖音小視頻每日點擊量最高的10個(Hash + 最小堆)
小結
這次的筆試裏總共有5道,我AC了2.5題,第一題90%,第二題90%,第三題70%,不算好,但勉強通過了。去年的這個時候我可是連題目都看不懂的,看得懂的只知道用嘴怎麼說,不會用代碼實現。通過這段時間的算法訓練,總結了如下幾點算法筆試經驗:
1.平時刷題一定要總結歸納,最好分類。比如關於樹的題型,鏈表的,數組等等,觀察它們的解題思路,總結出解題套路。
2.積累工具類算法。什麼叫工具類算法?就是你解一道算法題需要用到另一種算法,這個被調用的算法就是解決這道算法題的工具。比如常見的「深度優先遍歷」、「廣度優先遍歷」、「01揹包」、「KMP算法」以及常見的選擇和排序算法都是經常使用的工具類算法。
3.學會抽象題目。筆試算法題不同於面試算法,不會直白跟你說要使用哪種算法去解答,更多的要自己學會抽象,拋開題目本身,要明白內部講的是什麼,別被題目的糖衣炮彈迷惑了。只有把題目抽象成最原始的算法你才能更好地使用工具類算法進行解答。
如何準備頭條面試?
頭條面試和其他大廠可能大同小異,但就是這個小異才是關鍵地方,能異於其他人的地方。可以從如下幾個方面去做準備:
1.特意準備幾個面試題源碼。像我在回答一些中規中矩面試題的時候,都會從源碼角度出發。比如常見的HashMap等集合類,多線程的各種鎖以及大數據框架的部分源碼。
2.特意準備項目難點。面一些大廠的時候避免不了被問到項目難點,不可能用普通Bug含糊過去啊。這邊可以從項目用到的技術棧出發,去尋找技術棧在項目中會存在的難點,然後套進自己的項目,找個自己能懂,最好能全懂的。
3.針對性去了解公司的技術棧使用情況。比如頭條使用Go,衆人皆知,那爲什麼我不突擊學習一下呢?比如從業內人士得知頭條最早使用的是Kylin框架,後面慢慢轉爲ClickHouse,那我必須瞭解一下兩者的不同啊,而且可以結合頭條的業務場景。
程序員代碼面試指南—IT名企算法與數據結構題目最優解
- 棧和隊列
- 鏈表問題
- 二叉樹問題
- 遞歸和動態規劃
- 字符串問題
- 大數據和空間限制
- 位運算
- 數組和矩陣問題
- 其他題目
排序及數據結構與算法
一、冒泡排序
二、選擇排序
三、插入排序
四、快速排序
五、歸併排序
六、希爾排序
七、堆排序
八、基數排序(桶排序)
九、遞歸
十、鏈表
十一、棧
十二、隊列
十三、二叉樹
《程序員代碼面試指南—IT名企算法與數據結構題目最優解》及《排序及數據結構與算法》感興趣的朋友們私信我回復【666】或【算法】即可免費領取
推薦閱讀:
牛皮了,馬士兵老師全網首播阿里P8級技術、實現大型淘寶實戰落
面試美團被JVM慘虐?阿里P9架構師用500分鐘把JVM從入門講到實戰#合集
清華啓蒙架構師馬士兵針對應屆生到開發十年的Java程序員做職業把脈