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時需要注意哪些問題,可以提高查詢的效率?
當面試官說「你之前做的項目沒有什麼難度」,應聘者應如何應對?

TAG:程序員面試 | 面試問題 | Socket | 多線程 |