天天看點

面經搜集

頭條學長分享

從開始面試 到現在已經大半年了 和大家分享一下研發崗的履歷審查和面試考察點:

一、研發崗呢 大家都還是希望要科班的學生(計算機 & 軟體)的 , 如果不是科班的同學, 會關注項目經驗和崗位的比對程度, 以及學習能力和潛力 (是否有技術部落格, 對知識點是否會主動深挖) 履歷中關于項目的描述是會重點看的,如果對項目的背景,目标,結果有好的描述的(STAR原則:,即Situation(情景)、Task(任務)、Action(行動)和Result(結果)), 這樣是會加分的,對項目有描述和技術架構的, 在後面面試的時候會重點考察技能,判斷候選人在項目裡的真實性和參與度。然後是大家寫的技能樹的部分,除了希望對技術的描述準确之外, 描述是否有體系性的思維也是非常重要的。

二. 說完履歷 然後說說面試時候的考察要點

  1. 計算機的基礎知識 計算機四大專業課 資料結構 : 圖、hashmap, 算法原理, 對時間複雜度和空間複雜度的推算 計算機網絡 : 通信基本原理,如TCP/IP協定,三次握手四次揮手、TCP/UDP差別,DNS屬于哪層協定 作業系統知識 : 程序和線程了解,IPC方式和原理 資料庫相關概念 : 三範式, 事務 四大專業課之外(加分項) : 程式設計語言特性, 設計模式的了解
  2. 工程能力 編碼能力 : 如實作一個多元數組的快排 (都是簡單的算法題, leetcode難度為簡單的那些) 架構能力 : 對技術選型了解, 對開源元件的解讀
  3. 邏輯思維 一般是一些小的數學題,如機率論的小題目, 看反應能力
  4. 項目經驗 業務了解 : 對項目的整體背景, 目标, 方案 , 結果的了解 (STAR原則) 遇到問題的解決思路 : 描述一兩個難點, 如何克服
  5.  軟素質
    • 1. 心态 : 對待問題是否會深究, 是否有較強的自驅力, 有虛心學習強者的心态
    • 2. 溝通 : 是否誠實, 不誇大, 表達流暢, 準确
    • 3. 抗壓 : 不輕易放棄 (我一般會針對候選同學不是很熟悉的領域, 連續追問, 看是否主動思考, 持續思考, 不輕易放棄)

以下内容來自njustlcx的頭條面經

作者:njustlcx

連結:https://www.nowcoder.com/discuss/159228

來源:牛客網

Java有哪些常用的線程池

之前還沒來得及準備線程池,哭暈,直接回複不太了解,第一個問題就這麼告終,實在有點過意不去。Java基礎太薄弱了。

哪些同步的方式,就是加鎖

用synchronized關鍵字加鎖,還有分段鎖。

追問,怎麼了解分段鎖?

之前隻顧記概念了,沒能好好了解。瞎胡說一通,說不是對整個資料段加鎖,而是一段一段的加鎖(面試官内心應該是奔潰的),性能比synchronized關鍵字好。

追問,知道哪些資料結構是用分段鎖的嗎?

回答隻知道ConcurrentHashMap。

追問,那它是怎麼實作分段鎖的,了解過嗎?

回答沒有。

除了這個還有沒有别的資料結構用分段鎖?

回答不是很清楚。

synchronized知道怎麼用嗎?

之前沒怎麼用過,回答在方法或變量前面使用。面試官内心應該很崩潰了。

知不知道鎖的可重用是一個什麼樣的概念?

這個真沒了解過。

資料庫裡面的索引了解嗎,可以談談它的結構嗎

hash索引和B+樹索引,如果查詢單條記錄的話,hash索引比較友善。查詢多條記錄的話B+樹索引能夠提高查詢效率。

追問:B+樹和B樹什麼差別?

回答:這個好像答反了,哭暈

為什麼使用索引查詢會變快呢?

回答:本身資料庫的結構是按頁存儲,不同的頁之間構成一個循環連結清單,頁裡面的記錄也是單連結清單。如果不用索引并且資料量比較大的話,查詢效率低。如果用B+樹balabala,說的有點語無倫次。最主要原因還是對B+樹沒那麼了解。

知道聚簇索引嗎?

回答:聚簇索引也叫聚集索引。是以主鍵為索引的。

追問:主鍵索引和普通的索引有什麼差別

回答:以主鍵索引查詢沒有回表的操作,普通索引的話好像沒有回表的操作。

追問:為什麼主鍵索引就不需要回表呢,根本原因是啥?

回答:好像是資料庫裡面是以主鍵存儲的。面試官:大緻是這個意思

講一下tcp三次握手四次揮手

三次握手主要是為了通信雙方建立一個可靠的通信信道。第一次握手balabala,第二次balabala,第三次balabala。

四次揮手balabala

追問:為什麼握手要三次,改成兩次行不行?

回答:沒了解面試官的意思,答偏了。直接說的兩次握手的話接收端無法确認自己是不是發送成功,發送端是不是成功接收。

追問:兩次的話斷開會有什麼問題?

我的回答還是建立在三次握手的基礎之上來思考的,沒有抛開三次握手的概念。

算法題,二叉樹的序列化與反序列化

昨天基友剛答過這題,今天又來了。早上還瞄過一眼,感覺應該不會再出現吧,但沒想到還是出現了。用的是前序周遊的方式對二叉樹進行序列化,反序列化的時候感覺也挺順利的,但後面執行出現了一個bug,好像是有個遞歸的出口沒考慮到,網頁上寫代碼又不像用IDE,還可以debug,一時半會沒找到原因,期間還問了面試官StringBuilder在哪個包下。。。再加上遇到問題解決不了,有點緊張,卡了很久。最後讓我回頭再調試。還是不能太依賴于IDE,要學會在沒有IDE的情況下寫代碼。

問我有沒有什麼想問的

我問了三個問題

平時工作如果忙的話,怎麼學習自己的東西

會做技術分享,每個月都有人會做技術分享,一個組内,每個人按月份分享。學東西的話在工作中遇到一些問題,解決了也能夠學到一些東西。

怎麼學習源碼,有什麼政策

一般遇到問題會去源碼那邊跟一下,如果單純學源碼的話,最好按子產品來看,架構是什麼樣子的。最好是能夠跑起來,debug看一些資料。

像我們在校學生,平時接觸不到生産上的資料和業務場景,如何提升自己

找實習是最好的,或者自己接項目,做老師的項目。

以下内容來自小啾啾的小叽叽的頭條面經

作者:小啾啾的小叽叽

連結:https://www.nowcoder.com/discuss/158930

一面

1、一上來就是問項目,有意思的或者說是有難度的(項目履歷上寫了一堆,含金量都不高)?

A:我就挑了個有意思,一個學校助手小程式,也不知道重點說什麼,就把功能和實作方法說了,其實蠻 low 的。

2、HTTP 請求方法?

A:我說5個嘛(其實有8個),說到最後還忘了一個,尴尬。

追問:Post 和 Put 的差別?

A:隻說了 POST 的作用,也是一知半解,沒有說清楚。PUT 不知道,哎。

3、Cookie 和 Session 的差別?

A:說了一些基本的差別。

追問:跨域問題?

A:記得看過,結果也不知道說什麼了,硬是說了 Session 共享。

HashMap 和 HashTable 的差別?

A:emmmmm... 不會 Java,隻會 System.out.println()

7、資料庫索引結構了解嗎?

A:B+ 樹,還有哈希

追問:B+ 樹和 B 樹的差別?

A:腦子裡有 B+ 樹結構,看到哪裡說哪裡

追問:聚集索引?

A:以主鍵為索引的索引,大概就記得這點。還挖坑說了非聚集索引,說到回表時被問為什麼會回表,因為有非主鍵字段,然後額,有點說不清楚了。

8、來做個題吧,二叉樹的序列化和反序列化

(Leetcode 原題)一開始還沒搞明白啥意思,光前序或者中序或者後序是不唯一的,後來才明白就是字元串的編解碼。

要實作兩個方法,中序 + 前序 或者 中序 + 後序能唯一确定一個二叉樹,序列化就周遊結果相接,反序列化就倒推。

面試官提示的時候還說了層序,我就默默的開始想怎麼層序,面試官又提示用特殊字元節點代替空節點,emmmm,好吧,開始寫吧。尴尬的是居然不知道咋層序了,知道是用清單存節點周遊,硬是寫不好(太菜了)。自己越想越亂,而且耳麥裡時不時嘈雜,腦子一片空白,亂了亂了。好不容易層序完,反層序又亂了,總之整個過程就很亂,寫的時候還發現序列化的結果有問題(代替所有空節點,形成滿二叉樹,而我卻寫成了隻把葉子節點替換了)。

整個過程耗時一個小時,不知道面試官怎麼這麼有耐心的,尴尬,總之自己是真的菜。

9、還有什麼想問的嗎?

先問面試官的在哪個部門工作;位元組某個産品的服務請求響應處理是不是按地區劃分(其實我也不知道怎麼問);怎麼處理海量資料的(幾萬台主機的叢集)

6、難度比較大的項目?

A:來來來,計量你來,畢竟你是永遠結束不了的項目。亂說一通,就這樣吧

7、做題了,根據使用者閱讀文章的情況(article_id, user_id, ...)統計閱讀量 Top5 的文章

A:第一反應,map 來統計嘛,Python 裡字典嘛,然後找統計數最大的五個嘛

追問:程式跑的時候 map 在記憶體吧,記憶體很小咋辦?

A:redis,本身就是個 map,能存很多資料嘛(redis 也不清楚底層,也不知道咋存的)

追問:從資料結構上優化?

A:想了許久,額,五個變量存五個最大的。。。尴尬了,意識到想偏了,我想的居然成了找 TOP5 的 article_id,我怕不是個智障。要是要找也是找統計數,那樣還是沒有解決記憶體放不下 map。

追問:你說的五個變量也可以,。。。

A:被我打斷了,說自己跑偏了。然後就莫名其妙的跑到了 TOP K 問題,最後我就以最大堆結束了這個尴尬的話題。

追問:說一下建堆的邏輯?

A:兩種方法,balabalabala,嗯,就這樣。

一開始說是場景題,也不知道是場景題還是算法題,最後也沒有寫代碼。

8、下一題,滑動視窗,面經裡有很多說過

A:最後是要得到滑動視窗最大值集合,想了個方法,說了一通。

追問:那你能實作一下嗎?

A:可以(其實我想說不能)。反反複複調整了幾次代碼結構,邏輯應該沒問題,就讓面試官看了(不用運作,因為題目也是面試官現場描述的,不然可能有問題),然後就給面試說了下詳細思路。

追問:你的算法複雜度怎麼樣?

A:最差情況,數組倒序,複雜度 O(n^2),好弱。然後就結束了。

9、你接觸過哪些技術?

A:也不知道說什麼。SqlServer?Mysql?Mongodb?Django?Flask?。。。

追問:你現在在關注什麼技術?

A:Docker、redis、。。。尴尬,我在學什麼,好弱。

以下來自yy要加油的頭條面經

連結:https://www.nowcoder.com/discuss/158034

崗位:背景研發

時間:一個小時

1.自我介紹

2.介紹一下自己做的比較好的一個項目

3.java中int和Integer的差別,為什麼有了int還要有設計Integer

4.java中hashmap的實作原理,講解一下哈希函數

5.手寫算法:判斷一個數是否為二叉樹的路徑節點值之和

6.作業系統中線程和程序的差別

  • 一個程序是不是可以建立無限數量的線程
  • 線程的數量會受到什麼限制
  • 線程在記憶體中會占用什麼資源

7. udp和tcp的差別

  • 講解udp的校驗和
  • 講解tcp的校驗和
  • tcp的四次揮手過程
  • 如果伺服器中含有大量一直處于close_wait的tcp連接配接,是為什麼?

8.講解算法:一個連連看小遊戲(二維數組存儲),如何判斷兩個點可以消去?時間複雜度?連線最多隻有兩個拐點,怎麼判斷? 

以下來自T.G.的頭條面經

  • 單連結清單的反轉,不用遞歸的方法。
  • 有序數組存在某個值,查找這個值的下标,有則輸出,無則輸出-1
  • 說說你的項目
  • 我挑的CTF
  • 然後你說阿裡巴巴的druid連接配接池對資料連接配接有安全,請問下為什麼
  • 然後你是信安專業的麼 -- 說下自己的經曆
  • 你說你學Java的,靜态變量的初始化和存在哪裡說一下
  • Java并發相關,線程通信
  • 說下JVM中堆和棧的差別
  • tcp/ip了解麼,說下tcp的三次和四次握手
  • tcp和udp的差別和各自的應用
  • http和https的差別,https加密的過程
  • Linux了解麼,MySQL了解麼,redis了解麼
  • hash表中的沖突是什麼産生的,用什麼解決方法
  • 在信安方面自己做過最自豪的事情
  • 有什麼問題想問我的

附上我的履歷,感覺面試官是圍繞着我履歷中寫的來問的,是以結合履歷來看問題比較實際點吧。

https://tugohost.github.io/resume/

以下來自SyndromePolynomial的頭條面經

一面,比較基礎

1. 自我介紹

2. 實習經曆

3. HashMap

4. 堆排,建堆的時間複雜度,O(n),為什麼是這個,我忘了公式怎麼推的了

5. 完全二叉樹和滿二叉樹的概念和差別

6. 資料庫:事務的概念,索引,B+樹講了一下。可能我回答的太不規範,然後也說了自己忘了資料庫的知識了,于是就沒往下問

7. TCP 和 UDP 的差別,為什麼是3次握手,4次揮手。4次揮手就是為了等待由一方還沒傳完,才有四次。

8. 程式設計題:建堆過程

9. 程式設計題:最小棧:在O(1)的時間複雜度内傳回棧的最小元素。思路:兩個棧,一個棧模拟普通的push、pop,getMin() 操作,一個棧用于存儲最小值序列。

10. ArrayList和LinkedList的差別

二面:

1. JUC聽過嗎,java.util.concurrent的縮寫。。。哭了,我說沒聽過,能不能不要什麼都用縮寫啊。。。。

2. 知道哪些垃圾回收器,CMS的優勢在哪。。。哎,真的是看過就忘啊。。。。

3. 不可變類,機制,實作原理。完全不知道。

4. 紅黑樹的特性,面試官說紅黑樹不是二叉搜尋樹,我懷疑人生了。

5. 程式設計題:數組中除了兩個數,其他樹都出現偶數次,找出這兩個隻出現一次的數。二面我就答上來這一道題,哭惹

6. 程式設計題:二叉樹轉雙端連結清單,半個小時沒寫出來,,,

哎,,自己真是太弱了啊,太弱了

TALK IS CHEAP, SHOW ME THE CODE