今日頭條面經匯總


算法

  • 翻轉二叉樹
  • 最大連續子串和
  • 給一棵邊權樹樹找到最大路徑,要找到兩個端點怎么辦
  • 給一個字符串和單詞列表,判斷字符串能不能由這些單詞組成
  • 給定一組股票的價格,最多買賣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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM