amtoaer

晓风残月

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

字节跳動二次面接の質問記録

昨日の午後、2 つの面接に参加しました。そのうち、クアイショウの一面は順調に通過しましたが、バイトダンスの二面もそんなに難しくないだろうと思っていましたが、結果的に閉じ込められました... ここに、自分がわからなかった / 十分に理解していなかった内容を記録しておきます(悲しい

コンピュータの構成原理に関連する#

CPU のキャッシュ構造について知っていますか?#

参考記事:

  1. プログラムの最適化:CPU キャッシュの基礎知識 - 知乎

  2. プログラマに関連する CPU キャッシュの知識 - 酷壳

コンピュータネットワークに関連する#

TIME_WAIT 状態が多すぎると問題が発生する?解決策は?#

ポートの範囲は 0 から 65535 であり、システムや他のサービスが使用している部分を除外すると、TCP で使用できるポートは実際にはあまり多くありません。このような状況では、大量の接続が TIME_WAIT 状態になっていると、他の HTTP リクエストが到着したときにこれらのポートを使用できなくなります。つまり、一定量の高並行短接続が継続すると、サーバーはポートリソースが不足して一部のクライアントにサービスを拒否することになります。

解決策:

  1. TIME_WAIT が多すぎる問題の解決策 - 博客园

  2. Linux の TCP 状態 TIME_WAIT が多すぎる場合の処理 - 知乎

HTTP の長期接続について知っていますか?#

参考記事:

HTTP の長期接続と短期接続 - 博客园

HTTP の一般的なリクエストヘッダーは?#

参考記事:

一般的な HTTP リクエストヘッダーとレスポンスヘッダーの詳細 - 掘金

サーバーは、Set-Cookie という名前の HTTP ヘッダーを送信して、cookie を作成します。これは Response Headers の一部です。各 Set-Cookie は 1 つの cookie を表し(複数の cookie がある場合は、複数の Set-Cookie を書く必要があります)、各属性も名前 / 値のペア形式で表されます(secure を除く)。属性はセミコロンとスペースで区切られます。形式は次のようになります:

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

参考記事:

よく使われるローカルストレージ - cookie 編

Linux に関連する#

プロセスを kill するための kill コマンドの原理は?#

kill コマンドは、指定したプロセス ID のプロセスにシグナルを送信します。送信できるシグナルのリストは次のとおりです:

❯ 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 を使用できますが、2 つの違いは何ですか?#

低レベルの実装に深く入り込むと、WaitGroup の本質はセマフォであり、セマフォの変更はatomic内のアトミック操作を使用して行われます。一方、チャネルはスレッドセーフなリングバッファであり、内部のプロデュースとコンシュームのプロセスはロックが必要です。つまり、WaitGroup はロックなしで、チャネルはロックありです。(個人の理解)

Golang のチャネルはなぜリングバッファを使用しているのですか?#

公式の回答は見つかりませんでしたが、Go のチャネルの低レベルの実装を図解する - 菜刚 RyuGou のブログの内容を参考にしました:

チャネルがリングバッファを使用している理由は、動的な send と recvx のプロセスで、現在の 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

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。