頭條學長分享
從開始面試 到現在已經大半年了 和大家分享一下研發崗的履歷審查和面試考察點:
一、研發崗呢 大家都還是希望要科班的學生(計算機 & 軟體)的 , 如果不是科班的同學, 會關注項目經驗和崗位的比對程度, 以及學習能力和潛力 (是否有技術部落格, 對知識點是否會主動深挖) 履歷中關于項目的描述是會重點看的,如果對項目的背景,目标,結果有好的描述的(STAR原則:,即Situation(情景)、Task(任務)、Action(行動)和Result(結果)), 這樣是會加分的,對項目有描述和技術架構的, 在後面面試的時候會重點考察技能,判斷候選人在項目裡的真實性和參與度。然後是大家寫的技能樹的部分,除了希望對技術的描述準确之外, 描述是否有體系性的思維也是非常重要的。
二. 說完履歷 然後說說面試時候的考察要點
- 計算機的基礎知識 計算機四大專業課 資料結構 : 圖、hashmap, 算法原理, 對時間複雜度和空間複雜度的推算 計算機網絡 : 通信基本原理,如TCP/IP協定,三次握手四次揮手、TCP/UDP差別,DNS屬于哪層協定 作業系統知識 : 程序和線程了解,IPC方式和原理 資料庫相關概念 : 三範式, 事務 四大專業課之外(加分項) : 程式設計語言特性, 設計模式的了解
- 工程能力 編碼能力 : 如實作一個多元數組的快排 (都是簡單的算法題, leetcode難度為簡單的那些) 架構能力 : 對技術選型了解, 對開源元件的解讀
- 邏輯思維 一般是一些小的數學題,如機率論的小題目, 看反應能力
- 項目經驗 業務了解 : 對項目的整體背景, 目标, 方案 , 結果的了解 (STAR原則) 遇到問題的解決思路 : 描述一兩個難點, 如何克服
- 軟素質
-
- 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