昨天下午參加了兩場面試,其中快手一面很順利就通過了,本以為字節二面也不會太難,結果被面到自閉... 在此記錄一下自己不會 / 不夠清楚的內容以便複習(悲
計算機組成原理相關#
有了解 CPU 的緩存結構嗎?#
參考博文:
計算機網絡相關#
time wait 狀態過多會導致的問題?如何解決?#
端口的範圍是 0-65535,去掉系統和其他服務佔用的部分,TCP 可用的端口其實並不多。在這種情況下,如果有大量連接停留在 TIMEWAIT 狀態,會導致其他 HTTP 請求來臨的時候無法使用這些端口。即:持續的到達一定量的高並發短連接,會使伺服器因端口資源不足而拒絕為一部分客戶服務。
解決方法:
了解 http 長連接嗎?#
參考博文:
HTTP 的常見請求頭?#
參考博文:
cookie 的寫入?#
伺服器通過發送一個名為 Set-Cookie 的 HTTP 頭來創建一個 cookie,作為 Response Headers 的一部分。每個 Set-Cookie 表示一個 cookie(如果有多個 cookie,需寫多個 Set-Cookie),每個屬性也是以名 / 值對的形式(除了 secure),屬性間以分號加空格隔開。格式如下:
Set-Cookie: name=value[; expires=GMTDate][; domain=domain][; path=path][; secure]
參考博文:
Linux 相關#
使用 kill 命令殺死進程的原理是什麼?#
kill 命令會向指定進程號的進程發送信號,其可發送的信號列表如下:
❯ kill -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM
TERM STKFLT CHLD CLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF
WINCH IO POLL PWR SYS RT<N> RTMIN+<N> RTMAX-<N>
有了解網絡相關的 Linux 命令嗎?#
參考博文:
Golang 相關#
Golang 垃圾回收從根節點開始掃描物件,根結點指的是什麼?#
參考自博文:golang 垃圾回收 - 知乎
root set:根物件,垃圾回收器最先檢查的物件。包括程式在編譯期就能確定的那些存在於程式整個生命週期的變數、每個 goroutine 執行堆疊上的變數及指向堆區的指標、執行過程中指向堆內存的某些指標。
Golang 並發控制可以使用 WaitGroup 和 Channel,兩者有什麼區別?#
深入到底層實現,WaitGroup 的本質是信號量,對信號量的修改使用的是atomic
內的原子操作。而 channel 本身是一個線程安全的環形隊列,其內部的生產、消費過程是需要加鎖的。即:WaitGroup 無鎖,channel 有鎖。(個人理解)
Golang 的 channel 為什麼會使用環形隊列?#
沒有找到標準答案,參考自博文圖解 Go 的 channel 底層實現 - 菜剛 RyuGou 的博客的內容:
至於為什麼 channel 會使用循環鏈表作為緩存結構,我個人認為是在緩存列表在動態的 send 和 recv 過程中,定位當前 send 或者 recvx 的位置、選擇 send 的和 recvx 的位置比較方便吧,只要順著鏈表順序一直旋轉操作就好。
博主個人理解與其相同。
Golang 垃圾回收是在什麼時候 STW 的?#
參考自博文:
Go: How Does the Garbage Collector Mark the Memory? - Medium
To tackle that potential issue, an algorithm of write barrier is implemented and will allow Go to track any pointer changes. The only condition to enable write barriers is to stop the program for a short time, also called “Stop the World”:
即執行標記前需要打開寫屏障,此時需要 STW。