私は最近、Baidu と MiHoYo の 2 つの企業で go
の技術職に面接しました。面接の状況はあまり楽観的ではありませんでした。次に、面接中に聞かれた質問を共有しましょう。
両社ともオンライン面接でしたが、当時は録画もありませんでしたので、今では完全に自分の記憶に頼って見直しています。
baidu 側
Baidu の面接ステップは、コンピューターの基本、go
関連、mysql
関連、 に分かれています。 redis
関連、linux
関連の問題。いくつかの分岐した問題もあります。
基本的な関連アルゴリズム
- 赤黒ツリー、バイナリ ツリーなどを含む (ただしこれらに限定されない) アルゴリズム。
- データ構造 (リンク リスト、配列などを含みますが、これらに限定されません)。
-
tcp
、ip
に関連するいくつかの問題 (スリーウェイ ハンドシェイク、4 ウェイ ウェーブ、time_wait
など)。
- ブラウザにアドレスを入力し、プロセスを詳しく説明します。 (基本的に聞かれそうな気がします、ははは)。
このセクションに関しては、私の答えはまばらでした。アルゴリズムとデータ構造のいずれにも答えていませんでした。後の 2 つは、以前のインタビューで質問されていたので、いくつか確認して、かなりうまく答えました。 。 できる。
関連する
-
GC
、(GO
の必須質問)、GC
中stw
タイミング、各ステージの解き方。
-
gpm
(GO
の必須質問)、プリエンプティブ スケジューリングがどのようにプリエンプトするのか、goroutine
をスケジュールする方法を十分に理解する必要があります。 、M
と P
の数。
-
goroutine
プールをエレガントに実装する方法 (この回答はスパースです)
- メモリ エスケープについて話します
- メモリ管理 (この回答もスパースです)壊れた)
mysql 関連
- mysql ロック、ロック粒度とロック アルゴリズム (ギャップ ロック、レコード ロック、一時キー ロック)、および以下ロック アルゴリズムはどのような状況で使用されますか?一般的な意味は、正確に一致できる場合はレコード ロックが使用され、そうでない場合はギャップ ロックに退化するということです。
- mysql mvvc 実装原則。
- mysql インデックス、インデックス作成タイミング、作成ルール。
- Mysql のサブデータベースとテーブルのルール、実践したことがありますか?
- mysql インデックス タイプとインデックス データ構造
- mysql トランザクションの特性と分離レベル。
redis
- redis のデータ型とは何か、また使用シナリオについて説明します。
- redis zset には 2 つのエンコード方法があるはずです。設定ファイルで設定されます。デフォルトの 128 要素は ziplist (圧縮テーブル) で、128 より大きい場合はスキップリストです。
- Redis メモリ削除戦略
- Redis 永続化戦略
- redis 分散ロック
- Redis 分散アーキテクチャとは
- ランキング リストがある場合は、zset を使用します。に基づいてポイントと時間で並べ替えます。最も高いポイントを持つものと最も近い時間が最初に採用されます。これを実現するにはどうすればよいですか?
linux
- どのコマンドに精通していますか?
- オンライン トラフィックが急増すると、すべてのコマンドが送信されます。はい、確認方法です。
- nginx アクセス ログでリクエストされた上位 10 の IP を確認する方法
面接が終わった後、私は通常、面接官に質問します。 、このインタビューに基づいて、私の技術スキルに関して何か良い提案や意見があれば、私に対する面接官の答えは次のとおりです: コンピューターの基礎は比較的弱いですが、ビジネス能力は非常に強いです。これは私の現在の状況でもあります(笑)。それで、最近はハルビン工業大学の先生が教えるコンピューター理論やオペレーティングシステムを読んでいます。私の努力が私の欠点を補ってくれることを願っています。
MiHoYo のインタビューは通常 4 つのパートに分かれており、
go 関連、
mysql 関連です。 、
redis 関連、
linux 関連。
最初の質問には困惑しました。コードは次のとおりです。 -
...m := make(map[int]int, 10)for i := 1; i<= 10; i++ {
m[i] = i}for k, v := range(m) {
go func() {
fmt.Println("k ->", k, "v ->", v)
}()}...
何が起こるか、なぜ、どのように解決するかを尋ねます。外部変数を使用するためにクロージャを直接使用しないでください。パラメータを渡すことで解決できます。
- メモリ リーク。どのような状況でメモリ リークが発生するか。
- チャネルの基本的な実装原則 (実際、これは buf が循環リンク リストのデータ構造であることを要求することを意味します)
- 延期、これは慎重に答える必要があります。いつ延期するか変更します。戻り値。複数の順序は延期されます。
- make と new の違い
- チャネルが閉じられてからデータが送信されると何が起こるか、また閉じられたチャネルが閉じられると何が起こるか。
- マップはスレッドセーフですか? マップ展開ルール。
- 配列とスライスの違い。
- GC
- GPM モデル
- プロセス、スレッド、コルーチンの違い。 (これはとても重要です)
他にも忘れていることがあります。
redis
は、Baidu に似ています。
mysql
は Baidu とほぼ同じです。
linux
ほとんど同じなので、プロセス名に基づいてプロセスの ID を確認する方法を尋ねました。
インタビューのフィードバックによると、MiHoYo は Go の基礎は貧弱でしたが、強力なビジネス能力を示しました。これが以前のアウトソーシングの特徴なのかもしれません。
MiHoYo の 2 面目は主にビジネス面とアルゴリズム面に関する質問で、主に 3 つのパートで構成されています。
マイクロサービス関連 (マイクロサービスの登録と検出、マイクロサービスの監視、マイクロサービスの電流制限など)、およびマイクロサービスのプロセスを保護する方法。私の答えはスーパーバイザーです。また、そうではありません。それが正しいかどうかを知ってください。 - 特定のビジネスの実現、引き換えコードの実現、高い同時実行性の下で、数十万または数百万の引き換えコードをバッチ生成する方法 (私の答えは、これを実装するためにスノーフレーク アルゴリズムを使用することです)。 1 つの引き換えコードについて 1 人が 1 回のみ引き換えることができること、および複数人が引き換えコードを引き換えることができる方法について説明します。 (この質問に答えるのに 30 分かかりました。以前に関連するビジネスを行ったことがあるため、少し自信がありません。)
- アルゴリズムの質問が 3 つあります。
解くメソッドを書きます: 4 つの数値を入力し、加算、減算、乗算、除算を通じて期待値を出力します。 - 幅優先アルゴリズム: 各レイヤーの値を出力する方法。
- ステップ問題、1段ずつ上がりたい場合は1段ずつ上がってもいいし、2段ずつ上がってもいいです ステップ数を入力して出力するメソッドを書いてください上に行く方法は何通りありますか。
-
推奨: 「golang チュートリアル 」
以上がリリースされたばかりの Go インタビューの質問 (Baidu と MiHoYo)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。