昨日の午後に 2 つの面接に参加しました。そのうち、クアイショウの一面は順調に通過しましたが、バイトダンスの二面もそんなに難しくないだろうと思っていましたが、結果的には自己封鎖されました... ここに自分がわからない / 十分にはっきりしていない内容を記録しておきます(悲しい
コンピュータの構成原理に関連する#
CPU のキャッシュ構造について知っていますか?#
参考記事:
コンピュータネットワークに関連する#
TIME_WAIT 状態が多すぎると問題が発生する?解決方法は?#
ポートの範囲は 0 から 65535 であり、システムと他のサービスが使用する部分を除外すると、TCP で使用できるポートは実際にはそれほど多くありません。このような状況では、大量の接続が TIME_WAIT 状態になっていると、他の HTTP リクエストが到着したときにこれらのポートを使用できなくなります。つまり、一定量の高並行短接続が継続すると、一部のクライアントに対するサーバのポートリソースが不足し、サービスを拒否することになります。
解決方法:
長い 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 コマンドは、指定されたプロセス 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 の位置を選択することが比較的簡単だからだと思います。リストの順序に沿って連続的に操作するだけです。
個人的な理解と同じです。
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 が必要です。