一次失敗的網易C++面試經驗
5 人贊了文章
初面杭研院被刷。
扯七扯八的不提,畢竟我並不是計算機專業的,所以和考官扯了一堆理論化學用的上編程(也許也是敗筆)
然後也許未必回顧考點回顧得全,緊張什麼的,太影響發揮,尤其是知識掌握得不牢固的時候。
Q1.多線程處理隊列,含生產者與消費者,如何編程?
其實這並不是嚴格先入先出的隊列,然後實際上只需要設置一個生產位置的下標,一個消費位置的下標,用原子操作自加就好。扯了一堆臨界區什麼的,估計正確答案已經掩蓋在錯誤答案下了。
Q2.字元串排序
基數排序的變形啊……不幸回答桶排序和strcmp,還是心中想著基數排序的那種……估計面試官被我不精確的語言描述驚呆了
Q3.TCP/IP中對丟包的處理?
hmm 自作主張搶答了TCP/IP的三次握手兩次揮手(沒毛病,只是兩邊共3次握手,然而兩邊各兩次揮手),然後又開始似是而非了
TCP必須使用端到端的控制,因為網路層本身不提供關於網路阻塞的反饋。阻塞控制就是要使TCP發送數據包的速率有所限制。TCP是如何知道網路中發生了阻塞呢?超時很可能說明網路發生了阻塞,而且運用TCP進行通信的接收方的ACK是累加性的,即它只接收它認定的下一個數據包(假如接收方最近發送的ACK確認包序號為x,當前要接收的Seq序號為y的數據包,如果超前接受到大於y的,則接收方返回序號為x的ACK包),則當發送方收到重複ACK包時,網路也很有可能阻塞。TCP是通過阻塞窗口CongWin來進行阻塞控制的,就是網路中的未ACK的數據包最多有CongWin個。假設TCP最近接收到的ACK為lastByteAcked,最近發送的數據為lastByteSent,假如阻塞窗口大小為CongWin,則有lastByteSent - lastByteAcked <= CongWin。
TCP阻塞控制有AIMD(Additictive-Increase, Multiplicative-Decrease)演算法,就是當沒發生丟失(沒有超時和收到三次重複ACK)時,阻塞窗口大小是線性累加的(通常是每個RTT增加1MSS),當發生丟失現象時(超時和三次重複ACK),阻塞窗口大小減為原來的一半。
慢啟動就是開始時阻塞窗口大小由1MSS開始指數增長,當達到threshold之後開始線性增加。根據對Timeout事件反應的不同,TCP阻塞控制演算法有TCP Tahoe和TCP Reno。TCP Tahoe比較保存,發生超時或收到三次重複ACK後,阻塞窗口都減到1MSS大小,然後慢啟動,至於TCP Reno,只有超時現象發生時才減到1MSS,因此它認為收到三次重複ACK說明在那個丟失包的後面發送的數據包有些到達了接收方。當發生超時或三次重複ACK時,threshold變為當前窗口的一半,其餘時刻不變。
Q4 做過哪些圖像處理?
又是一堆扯,鬼知道是不是減分項
就醬紫╮(╯▽╰)╭
推薦閱讀:
※面試官技巧
※面試指導:提升面試成績的快捷方法
※職場人還記得那些年你經歷的求職面試套路嗎,推薦新人觀看
※男神集訓營 - 11款時尚髮型,讓你不再「灰頭土臉」參加面試
※男士面試著裝篇