算法
- 翻轉二叉樹
- 最大連續子串和
- 給一棵邊權樹樹找到最大路徑,要找到兩個端點怎么辦
- 給一個字符串和單詞列表,判斷字符串能不能由這些單詞組成
- 給定一組股票的價格,最多買賣0一次,問最大收益
- !!!二叉樹任意兩個節點之間路徑的最大長度
- 二叉樹的深度
- lfu
- 一個鏈表 奇數位升序偶數位降序 讓鏈表變成升序的
- 給你一個循環后的數組 比如 45123 問你恢復原數組 最少幾步 原數組是升序的
- 一個數組 里面存着 1 -- 無窮大的數 但是他的十位數 比如 10 拆成了 1 和0 問你這樣拆分的數組里 讓你求i位置的數字是啥 數字肯定就是0-9的數
- !!! 0-25表示A-Z,給一個數字字符串,求有多少種解碼方式
- 給定一個亂序的鏈表,現在有一個操作,可以把鏈表任意位置的值移動到鏈表的最后。求鏈表排序所需要的最少操作次數。
- 已知一個函數rand3() 可以等概率隨機產生1,2,3,請實現函數rand7(),可以等概率隨機產生1~7
- 當你在搜索框輸入h的時候會出現一些h開頭的單詞,然后再輸入一個a(ha),會出現ha開頭的很多單詞,現在給你一個詞典,讓你實現這個功能,當用戶動態的輸入字母時,跳出以此字符串為前綴的所有單詞,要求時間復雜度最優
- 找一下兩個節點的LCA
- !!!給出k對括號的全部正確匹配方案,如k=2,輸出()(),(())
- 將一些柱子整齊的擺在一行(立着),高度存在數組height[]中,height[i]表示第i個柱子高為height[i],然后往凹下去的地方倒水,問一共能蓄多少單位水,比如[5,1,3,4,5,1,3],答案是7 2=9
- 快速排序
- 拋2k+1次硬幣,問正面次數比背面多的概率是多大,並講出數學證明思路
- 給N個數字,返回這N個數字能組成的所有二叉搜索樹
- 給一個字符串,得到它字典序最大的子序列
- n個整數的無序數組,找到每個元素后面比它大的第一個數
- LRU
- 實現一個二叉樹的持久化方案
- 實現二叉樹的層序遍歷
- 旋轉打印矩陣
數據庫
- 索引為什么用B+樹 為什么不用B樹
- redis為什么是單線程
- redis單線程有什么缺點,如果用多線程有什么 優缺點
- aof,rdb,優點,區別
- 數據庫的特性
- 如何實現數據庫的原子性,可以用偽代碼實現嗎
- 數據庫中的WAL技術
- 查看索引使用情況需要哪個關鍵字
- 修改MySQL字符集需要哪個關鍵字
計算機網絡
- 三次握手、四次揮手
- 三次握手的隱患
- TCP/Ip
- 滑動窗口
- HTTP2
- cookie和session
- HTTP緩存
- GET和POST
- POST和PUT
- 端口的作用
操作系統
- linux內核存儲方式
- 什么是頁式存儲
- Linux線程與進程的區別
- 鍵盤敲一個A,發生了什么
- 介紹5種IO模型
- 異步編程的事件循環
- 操作系統為什么要分內核態和用戶態
- 為什么要有page cache,操作系統怎么設計的page cache
- 協程
設計
- 假設現在有一個情景,一些客戶端瘋狂的訪問你的服務器,然后你現在要限制他們的訪問,比如說一分鍾只准訪問100次,怎么實現這個功能,偽代碼實現
- 長短url
## 一面
一面提前去了,結果前面一個面試官沒結束面試,后面給換了一個面試官。
問的問題很多,只能憑記憶來了。
1. 先自我介紹一下。
2. 你這個時空索引是什么,怎么做分布式時空索引說一下
3. 說一下你這個項目吧,你在這個項目中主要干什么
4. 你對鎖了解多少?無鎖HashMap怎么設計?(這個自己找死,索性面試官接了個電話換了個話題)
4. 你對Hadoop了解多少?知道HDFS的機制嗎?是如何分塊的,每塊保存多少份?為什么分塊大小是這個?介紹一下Namenode和datanode。
5. 介紹一下MapReduce怎么做到?在map階段和reduce階段分別做了什么工作?
6. 你這些語言都會嗎?(c,python,scala)強行扯了一波怎么學習Scala的(基本上就是Coursera的課)
7. jvm的內存怎么划分的?什么是本地方法棧?
8. java的鎖了解嗎?有哪些鎖,都說一下?
9. 進程與線程的區別
10. 進程的通信方式
11. 進程的內存模型(沒理解具體要問什么,直接跳過)
12. 什么時候會引起進程的切換?加鎖會讓進程切換嗎?(自旋鎖)
12. 寫一道題:二叉樹的層次遍歷。寫完解釋一下意思,面試官問用遞歸怎么寫?簡單描述了一下思想。
13. 你有什么問題需要問我的?問了一下部門具體干什么的,偏業務還是偏底層。面試官說偏業務
14. 時間到了,就不問網絡了
## 二面
1. 自我介紹一下
2. 我先看看一面面試官都問了你啥?你先做一道題,給出了一道題,給出輸入輸出,反轉字符串。比如“ abc hello sam ”反轉成“ cba olleh sam ”。
3. 你說一下你第一個項目?storm和jstorm有啥區別?
4. Kafka你了解多少?kafka的基本概念說一下?你們這么項目是怎么使用kafka的?多個消費者同時消費一個topic,它們如何消費的?
5. 你這里用到了redis,了解redis嗎?(不了解,換了一個)
6. 你這里一旦沒寫入redis,但是消費了該數據,怎么保證數據的正確性。講到實際場景數據要exact at once。說了一下jstorm的保證機制,沒達到點上,后面又說用事務來做。面試官說還沒到點上。后面給我解釋了一波。
7. 你對hadoop、spark了解多少?用過多少?你還了解其他大數據相關的東西嗎?說了一下畢設中了解的raft算法,以及說了一些raft的基本原理。
8. 你們這個雲集存儲項目是干啥的?這里把項目介紹了一下。
9. 你用mysql嗎?(不用,我用pg)
10. 用到什么程度?簡單的表,在處理時並不復雜。
11. 再做一道題。[1 1 2 2 3 3 4 5 5]原地去重,要求最后[1 2 3 4 5 1 2 4 5]前5個數是去重的結果,后面的數是重復的數,順序隨意。要求原地,並且面試官強調代碼只有10幾行,寫多了肯定錯。
12. 寫完看了一下。面試發現一個小問題,給說了一下,一開始沒理解,后面理解了說把語句調到前面就行。他說沒問題。
13. 你了解哪些保證線程安全的手段?
14. 你有什么問題要問的?(這邊實習需要全職嗎?喜歡全職,一般要求4天)
## 三面
都不知道自己在干啥?
面試官給出了一個情景題,有兩個數據集A和B,A的屬性字段有(logid, uid, item_id, attrs1, ts),B的屬性字段有(logid, uid, item_id, attrs2, ts),把這兩個東西合並。用你最喜歡的方式。
一開始題目意思都沒有理解,向他請教了一波,問他是否是join操作,是否是寫SQL語句。面試官給我說,你可以理解為join操作,不一定使用SQL語句,用你最熟悉的方式解決這個問題。
強行說了一波MapReduce怎么做,面試官給糾正了,這么做存在什么問題?后面又給A和B加了一些限定條件,問我怎么做?比如A里面uid, item_id可能有多行,你怎么merge。所幸說了一個笛卡兒積,后面才可以繼續下去。
后面有限定了B里面沒有重復,要么為0,要么為1。怎么做?你先寫一個試試?
寫了一個。分析一下時間復雜度,后面還有沒有更優化的方案,你這里為什么要排序?(便於查找)怎么利用只有0和1這個條件?后面換成Map來做,又分析了一波時間復雜度。
上述場景切換到流式場景,你怎么做?先寫個偽代碼,解釋一下思路。
后面沒寫偽代碼,只是說了一下思路。后面問,A和B那個可以刪除?我去這里又蒙蔽了。后面他把條件說了一下,又分析了一波,覺得A和B里的元素都不能刪除。他分析了一下,說再想想,后面分析了一波,說A里面凡是B里有的可以刪除,沒有的不能刪除。
主要總結的是后台研發崗和機器學習崗的面經,反正頭條的揍性就是上來一堆算法題,刷題吧騷年!
參考
https://mp.weixin.qq.com/s/EwG6K2x_JUzb3PtEYh9jFg
https://www.nowcoder.com/discuss/71505?type=0&order=0&pos=15&page=1
https://www.nowcoder.com/discuss/72122
http://www.cnblogs.com/weiyinfu/p/8546080.html
https://www.nowcoder.com/discuss/71748?type=0&order=0&pos=6&page=0
http://www.codingstar.cn/article/57