amtoaer

晓风残月

叹息似的渺茫,你仍要保存着那真!
github
x
telegram
steam
nintendo switch
email

字節跳動二面題目記錄

昨天下午參加了兩場面試,其中快手一面很順利就通過了,本以為字節二面也不會太難,結果被面到自閉... 在此記錄一下自己不會 / 不夠清楚的內容以便復習(悲

計算機組成原理相關#

有了解 CPU 的緩存結構嗎?#

參考博文:

  1. 程序優化:CPU 緩存基礎知識 - 知乎

  2. 與程序員相關的 CPU 緩存知識 - 酷殼

計算機網絡相關#

time wait 狀態過多會導致的問題?如何解決?#

端口的範圍是 0-65535,去掉系統和其他服務佔用的部分,TCP 可用的端口其實並不多。在這種情況下,如果有大量連接停留在 TIMEWAIT 狀態,會導致其他 HTTP 請求來臨的時候無法使用這些端口。即:持續的到達一定量的高並發短連接,會使伺服器因端口資源不足而拒絕為一部分客戶服務。

解決方法:

  1. 解決 TIME_WAIT 過多造成的問題 - 博客園

  2. Linux TCP 狀態 TIME_WAIT 過多的處理 - 知乎

了解 http 長連接嗎?#

參考博文:

HTTP 長連接和短連接 - 博客園

HTTP 的常見請求頭?#

參考博文:

關於常用的 http 請求頭以及響應頭詳解 - 掘金

伺服器通過發送一個名為 Set-Cookie 的 HTTP 頭來創建一個 cookie,作為 Response Headers 的一部分。每個 Set-Cookie 表示一個 cookie(如果有多個 cookie,需寫多個 Set-Cookie),每個屬性也是以名 / 值對的形式(除了 secure),屬性間以分號加空格隔開。格式如下:

Set-Cookie: name=value[; expires=GMTDate][; domain=domain][; path=path][; secure]

參考博文:

常用的本地存儲 ——cookie 篇

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 命令嗎?#

參考博文:

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。

image

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。