昨日の午後、2 つの面接に参加しました。そのうち、クアイショウの一面は順調に通過しましたが、バイトダンスの二面もそんなに難しくないだろうと思っていましたが、結果的に閉じ込められました... ここに、自分がわからなかった / 十分に理解していなかった内容を記録しておきます(悲しい
コンピュータの構成原理に関連する#
CPU のキャッシュ構造について知っていますか?#
参考記事:
コンピュータネットワークに関連する#
TIME_WAIT 状態が多すぎると問題が発生する?解決策は?#
ポートの範囲は 0 から 65535 であり、システムや他のサービスが使用している部分を除外すると、TCP で使用できるポートは実際にはあまり多くありません。このような状況では、大量の接続が TIME_WAIT 状態になっていると、他の HTTP リクエストが到着したときにこれらのポートを使用できなくなります。つまり、一定量の高並行短接続が継続すると、サーバーはポートリソースが不足して一部のクライアントにサービスを拒否することになります。
解決策:
HTTP の長期接続について知っていますか?#
参考記事:
HTTP の一般的なリクエストヘッダーは?#
参考記事:
一般的な HTTP リクエストヘッダーとレスポンスヘッダーの詳細 - 掘金
cookie の書き込み方法は?#
サーバーは、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]
参考記事:
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 コマンドを知っていますか?#
参考記事:
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 が必要です。