socket 和多線程這兩部分選擇面試題, 哪些知識點比較能看出對方的水平?
面試多線程比較容易,線程安全性、mutex、條件變數、死鎖、race condition、false sharing、如何 debug、給一段代碼找錯/改錯,足夠撐滿一節 45 分鐘的面試。
面試 Sockets 比較難,因為現在很少直接用 Sockets API 開發,一般都基於現成的庫或框架,各種細節都屏蔽了,考 API 用法是沒意義的。不過可以結合 TCP/IP 問問在各種條件下的程序表現。
比如兩台機器上的A和B進程通過 TCP 通信:
- 進程 crash 會怎麼樣
- 進程 deadlock 會怎麼樣
- 進程或機器過載,反應變慢會怎麼樣
- 進程死循環,拚命發消息會怎麼樣
- 機器重啟會怎麼樣
- 機器死機會怎麼樣
- 機器網卡抽風,丟包嚴重會怎麼樣
- 交換機或路由器壞了或過載會怎麼樣
- 路由器過熱重啟會怎麼樣
- A和B之間的帶寬被別的服務佔用了會怎麼樣
如何診斷以上這些情況。如果A和B之間有防火牆,還會出哪些情況。
以上這些問題足夠撐滿 45 分鐘的面試,讓你獲得足夠的信息。
做一個非同步rpc的架構
多線程不說, @陳碩 就說的挺好了。
socket,應該是網路編程吧,涉及兩點:
1) 理論知識
握手和斷開的流程分別是什麼,為什麼?
backlog是什麼?為什麼?
什麼是擁塞控制?為什麼?
常見模型,reactor神馬總得知道吧?
等等......
2) 工程能力
追查網路問題的常用工具是什麼,分別用來追查什麼問題?@vczh 提到的非同步RPC框架,能說一個出來吧?
給幾個場景讓其分析,看看思路是否正確(例如socket寫阻塞,如何追查)
我也在找工作。。。。。。。。。。。。。。。。。。。。。求offer
寫一個web伺服器多線程的用c的socket,徒手寫出來發個小紅花,徒手寫不出來的是大多數,能講成啥樣可以看出水平。web伺服器有很多的改進型,你可以順路問了多進程程的。後面這些基礎知識都能融入這個web伺服器的例子。
計算機基礎知識就那幾部分。
1. 操作系統
進程 經典問題進程線程的區別
線程 生產者消費者模型
死鎖
內存
磁碟
網路
2. 數據結構
棧
隊列
二插樹
3. 演算法
動態規劃 背包 LCS
4. 計算機組成原理
5. 網路
不在於講定義 重點在拿他們做過啥
http
tcp udp
ip
arp
6. 特定方向的知識
那個平台的socket, 那個平台的多線程, 雖然語言不能體現水平,但是語言的熟練也是職業素養。能空手寫的估計評分是s, 大部分人能給你寫個大概齊的就不錯,你也不能要求太高不是,你自己能寫出來的話,你想想自己是做過什麼才能到這個水平,也不要太奢求小鮮肉不是。
你想問啥你自己考啥
iOS的socket
windows的socket
android的socket
不在於講定義 重點在拿他們做過啥
不在於講定義 重點在拿他們做過啥
不在於講定義 重點在拿他們做過啥
寫一個簡易多線程web server。
RPC的框架,貌似也不難吧?序列化、反射都是現成的
這個只能看出基礎是否牢靠,水平僅靠知識點量不出來。另外,想量別人深淺,首先水平要比對方深才行(杆子還沒水深怎麼量?)。輪子哥的答案是個好主意。RPC,還得非同步,我靠
小弟寫的iOS Socket介紹及其簡單應用
推薦閱讀:
※大學社團面試注意什麼?
※怎麼看待程序員普遍缺乏數據結構和演算法的知識?
※面試提問2的10次方是多少是否合適?
※一般在寫SQL時需要注意哪些問題,可以提高查詢的效率?
※當面試官說「你之前做的項目沒有什麼難度」,應聘者應如何應對?