面接プロセス#
Tencent の面接は 3 つの部分に分かれています:一次面接、二次面接、HR 面接。最初の 2 ラウンドは技術面接で、最後のラウンドは学生の個人的な理念、学習状況、家庭状況などを調査することが主な目的です。
3 回の面接を通過した後、数日以内に Tencent の HR アシスタントから送られてくるクラウド証明書のリンクが届きます。主な内容は、身分証明書と顔情報をアップロードして情報を確認することです。その後、静かに oc および意向書を待つだけです。
個人情報#
ブログ主は東北大学のコンピュータサイエンスと技術専攻の 3 年生で、Go、C++、Java、JavaScript などの言語を理解しています(主に Golang を使用)。成績は中下で、履歴書には Java の課題設計「Java 描画板」、Web プログラミング技術の課題「Java フォーラムシステム」、および大創のプロジェクト「ブロックチェーンに基づく電子カルテシステム」が記載されています。応募したポジションはバックエンド開発で、明確な部門の意向はなく、北京を拠点にしており、調整を受け入れます。
タイムライン#
時間 | イベント |
---|---|
3.17 | 履歴書を提出 |
3.18 | 面接の約束 |
3.22 | Tencent 深圳一次面 |
3.30 | Tencent 深圳二次面 |
4.1 | Tencent 深圳二次面不合格 |
4.7 | Tencent 北京からの連絡、面接の約束 |
4.8 | Tencent 北京一次面 |
4.12 | Tencent 北京二次面 |
4.14 | Tencent 北京 HR 面 |
4.15 | oc を受け取る(早期選考の最終日だったため、結果が比較的早かった) |
次は詳細な面接プロセスです。
第一次一次面接(1 時間 10 分)#
自己紹介#
プログラミング問題#
オープニングはプログラミングの問題で、二分木の中の 2 つのノードの最近の共通親ノードを見つけることです。
この問題は以前にやったことがありますが、印象が薄く、かなり長い間詰まってしまい、過程で小さなミスが多く出てしまいました。
面接官:
- Golang の命名規則を学ぶ必要があります。(しかし、私が関数名を test にしたのは、最近の共通親ノードの英語のスペルがわからなかったからです XD)
- 関数内の return 後の余分な else if と else を省略すること(ここは確かに自分の考慮が足りませんでした)
非プログラミング問題#
その後はすべて非プログラミングの問題になりました。以下に分類して記録します。
戦略問題#
合計 64 頭の馬があり、8 つのコースがあります。最少で何回のレースを通じて最速の 4 頭の馬を得ることができますか?(タイム計測は許可されず、馬の実力は固定されています)
個人的にはこの問題で少なくとも 20 分詰まったと感じましたが、結局思いつきませんでした。
二進法を考え始めましたが、以前に似たような毒薬を試すネズミの問題を見たことがあるからです。しかし、面接官はこの問題は二進法とは関係ないと言ったので、私の思考は混乱しました...
面接官は私がこの問題をすぐに解決できないのを見て、一時的にこの問題を保留して次のプロセスに進みました。後のプロセスが終わった後、彼は再びこの問題の考え方と答えを尋ねましたが、結局解決できませんでした。(面接官は常に私を正しい方向に導こうとしていましたが、残念ながら私はうまくいきませんでした)
オンラインの解答:https://blog.csdn.net/u013829973/article/details/80787928
言語関連の問題#
- Golang のスライスの実装方法は?スライスの底層は固定長の配列ですが、スライスに要素を挿入する際の具体的な処理はどのようになりますか?スライスを関数の引数として渡す際の考慮点は?
私の回答:Golang のスライスは、底層の配列を指すポインタ、容量、現在の長さから構成される構造体です。
スライスに要素を挿入する際、底層の配列の容量が十分であれば、直接 length+1 して新しい要素をスライスに追加します。底層の配列の容量が不足している場合は、元の容量の 2 倍の新しい底層の配列を再割り当てし、コピー後にスライスのポインタを新しい配列に指し直します。
スライスを関数の引数として渡す際、単にスライス内の要素を変更する場合、構造体の値コピー時に底層の配列を指すポインタを取得できるため、値渡しを使用できます。
スライスに要素を挿入する必要がある場合(つまり append する場合)、底層の配列のポインタが再指向される可能性があるため、元のスライスのポインタを渡す必要があります。
- Golang の map とは何ですか?ハッシュ衝突の処理方法は?
私の回答:Golang の map はハッシュテーブルです。
ハッシュ衝突が発生した場合、Golang は格納する必要のある value を key に対応する連結リストに書き込みます(つまり、一般的なハッシュ衝突解決のチェーン法を使用します)。
- Golang の構造体は interface を暗黙的に実装しています。構造体を interface に代入し、その interface を通じて構造体内のメソッドを呼び出すと、内部ではどのように実装されていますか?
この問題についてはあまり理解していなかったので、最初は構造体が interface 内のすべてのメソッドを実装する必要があると言いましたが、面接官は「内部実装」を強調しました。つまり、interface メソッドを呼び出す際、Golang 内部には実際に interface に代入された構造体内の対応するメソッドを見つけるメカニズムがあるはずです。
私は感覚で反射(reflect)を答えましたが、彼はさらに深く質問し、私はどうしようもなく、あまり理解していないと答えるしかありませんでした。
個人的な質問#
履歴書に web 開発の経験がいくつか書かれていますが、web 開発の経験があるのに、なぜバックエンド開発に応募したのですか?(彼は Tencent 内部にもフロントエンド開発やフルスタックなどのポジションがあると紹介しました)
私の回答:自分のフロントエンドのレベルはまだ限られていると感じており、書けるだけで書けるわけではありません。実際には、ほとんどのフロントエンドは Vue で書いているため、基本的な Javascript/Typescript などの理解が逆にあまり深くないと感じているので、そのようなポジションに十分な能力がないと思っています。
今振り返ると、面接官は私がバックエンド開発に対しても同様に能力がないと感じているかもしれませんね?(悲
基礎知識#
- Web 開発に比較的精通しているので、http プロトコルについて説明してください。
回答する際、少し混乱してしまい、http リクエストにはリクエストヘッダーとリクエストボディがあり、一般的なリクエストメソッド(Get/Post/Head)およびステータスコードについて説明しました。
- 履歴書に大創で RSA 暗号を使用したと書かれているのを見ましたが、https 暗号の実装方法について説明してください。最初のステップでは client が server に自分がサポートする暗号アルゴリズムを送信する必要がありますが、client がどの暗号アルゴリズムもサポートしていない場合、https の処理方法はどうなりますか?
https の対称暗号、非対称暗号の具体的な鍵交換プロセスについては説明できましたが、client がどの暗号アルゴリズムもサポートしていない場合の状況については全くわからず、正直に知らないと答えるしかありませんでした。(後で調べたところ、暗号スイートの不一致エラーが発生するはずですか?)
逆質問#
最後は私の質問のセクションで、主に 2 つの質問をしました:
- バックエンド開発の履歴書を提出した際、求人サイトには c/c++/java の 3 つの言語しか書かれていませんが、面接に通過した場合、言語を変更する必要がありますか?
面接官の答え:Tencent 内部には多くの言語のポジションがあり、彼らは Golang 部門であり、求人サイトの文言の誤りです。
- 履歴書を提出した際、選択した開始時期は 6.1 ですが、後で 1 つのコースが追加の時間を必要とすることに気づきました。インターンシップの開始時期を再調整できるか?
面接官の答え:インターンシップの開始時期はそれほど重要ではなく、再協議できるはずです。重要なのはインターンシップの期間です。
まとめ#
全体的に、私はこの面接に比較的満足しています。自分が面接中にどれだけ良いパフォーマンスを発揮したかではなく(実際のパフォーマンスは非常に悪かった)、面接プロセスを通じて多くのことを学ぶことができたからです。
一方で、これは私の人生で初めての面接であり、しかも最初から Tencent のような大企業であるため、緊張するのは避けられません。面接が始まったとき、私は自分が学んだすべてのことを忘れてしまったように感じました(最初の問題がうまくいかなかったのもこの部分の理由です)。幸いにも、私は優しい面接官に出会い、私が詰まった後も攻撃的ではなく、正しい方向に考えるように導こうとしてくれました。そのおかげで、私の緊張感が和らぎ、後のプロセスで自分の通常のレベルを発揮する機会を得ることができました。
もう一方で、この面接を通じて、私は大企業とのギャップを見つけました。今のうちにターゲットを絞って準備をすることができます。私の現在の感覚では、Tencent の面接はより基礎に偏っているため、もし二次面接に参加する機会があれば、Golang の底層データ構造、エスケープ分析、スケジューラ、ガーベジコレクション、並行モデルなどについてより詳細に理解する必要があります。
最後に、面接官の態度も私に深い印象を与えました。本来、面接官は家庭の事情で面接の時間を調整する必要がありましたが、私は最近ずっと空いていると言い、少し延長して彼が先に処理できるようにしましたが、私の時間を無駄にしないために、彼は翌日の夜に時間を約束しました。翌日、面接が終わった後に別れの挨拶をすると、私が感謝の言葉を言う前に、面接官が先に「今回の面接は 1 時間以上かかりました。お疲れ様でした」と言ってくれたので、私はとても感動しました。
結果#
翌日確認したところ、二次面接の状態に進んでいることがわかりました。
第一次二次面接(50 分)#
自己紹介#
プロジェクト#
- 大創プロジェクトの設計、アーキテクチャ、革新点、改善点、応用価値。
ここでは一生懸命回答しましたが、このプロジェクトがあまりにもシンプルだったため、私の説明があまりにも曖昧で、面接官が明らかに満足していないのを感じました。
- Java フォーラムシステムのデータベース設計、難点、認証方式など。
大体、ユーザーテーブル、投稿テーブル、投稿内容テーブルがあると言いました。難点は特にないので、言及しませんでした。認証方式は JWT を使用しています。
- JWT について詳しく説明してください。JWT 方式以外にどのような認証方式がありますか?JWT 方式の認証と Session-Cookie 方式の認証の比較とその長所と短所は?フロントエンドとバックエンドが分離されている場合、Session-Cookie は使用できないのですか?
しばらく復習していなかったので、JWT 内に一部のデータを保存できることしか言えませんでした(面接後に調べて、JWT のトークンには Header、Payload、Signature があることを思い出しました)。
JWT の他に Session-Cookie 方式もあります。
比較すると、JWT はサーバー側で無状態であるため、サーバークラスタなどの分散シナリオにより適しています。Session-Cookie は従来の方式で、Cookie に Session-id が保存されています。
当時、私はフロントエンドとバックエンドが分離されている場合、Session-Cookie は使用できないと考えていたので、そのように回答しました。
その他#
- あなたのブログはオリジナルですか?「同じ文字列を探す」ではいくつの方法を使用しましたか?
はい、しかしその記事は半年前のもので、少し思い出せません。
- プロセス、スレッド、コルーチンの違いは?マルチスレッドプログラミングを使用したことがありますか?
前の質問は一般的なもので、普通に回答すれば大丈夫です。
後の質問には、使用したことがあるがあまり多くはないと答えました。
- なぜ Go 言語を学びたいと思ったのですか?
個人的には新しい事物を知るのが好きで、Rust と Go に触れたことがあります。Golang は十分にシンプルなので、いくつかの学習をしました。その後、いくつかの求人を調べてみると、大企業には一般的に Golang 部門があることがわかり、この言語の発展の見通しが広いと感じたため、Golang に専念する考えが生まれました。
- 学校のインターンシップのアレンジ。勤務地の問題(意向は北京ですが、彼らは深圳にいます)。
インターンシップの開始時期を紹介し、勤務地は特に気にしないという考えを表明しました。
逆質問#
- 私を面接した部署は?
Tencent の情報流通部門です。
- 私に何かアドバイスはありますか?
実践を強化し、バックエンド開発の基本原理を理解することです。
結果#
二日半後、公式サイトがグレーになり、プロセスが終了したことを示しました(不合格でした)。
一週間後、北京から電話がかかり、相手は「私は北京 Tencent の者です。インターンシップの意向はありますか?」と尋ね、私が肯定的な返事をした後、一次面接の時間を約束しました。
第二次一次面接(50 分)#
以前に一次面接を通過したため、今回は基礎知識を尋ねられず、すべて Go 言語に関連する問題でした。
自己紹介#
口述#
- 使用している Go のバージョンは?Go のバージョンの変化について説明してください。
私は Arch Linux を使用しており、頻繁にローリングアップデートを行っているため、常に Go の最新版を使用しています。
バージョンの変化については、Golang 1.11 バージョンで go mod が追加され、1.16 バージョンで静的リソースのパッケージ化が追加されたことを述べました。
- Goroutine について理解していますか?スケジューリング方法について説明してください。
理解しています。GMP スケジューリングモデルについて説明しました。
しかし、面接官が G が M をブロックしているとき、P 内の G は飢え死にするかどうかを尋ねたので、私はそうだと答えました。(後で思い出したのですが、この時 M と P はバインディングを放棄し、他の M がその P を実行します)
- Go 言語の sync パッケージ内の型は?
sync.Map(スレッドセーフな map)、sync.Mutex(ミューテックス)、sync.RWMutex(読み書きロック)、sync.WaitGroup(シグナルのカウント)を答えました。
- Mutex と RWMutex の違いは?
Mutex はシーンを区別しない普通のロックで、RWMutex は複数の読み取りを許可し、単一の書き込みのみを許可するロックです。
プログラミング#
- m 個のタスクと n 個のワーカーのモデルを実装してください。
主に channel と routine の使用を評価します。
- 並行安全な map を実装し、Get/Set/Add メソッドを実装してください。
RWMutex の使用を評価します。
逆質問#
- 自分の面接のパフォーマンスについて。
かなり良かったと思います。私の Go 言語のスキルは比較的熟練していますが、より深い部分についての理解が不足しています。
私に「Effective Go」という本を推薦してくれました。
- 面接の部署の責任について。
前回の面接と同じく、情報流通に関するものでした。
第二次二次面接(24 分)#
自己紹介#
言語#
- 学校で Go 言語の授業があるのか、それとも独学なのか?なぜ独学で Go を学ぼうと思ったのですか?
独学で、理由は第一次二次面接と同じです。
- Go と C++ の違いは?Java とはどうですか?
Go と C++ はネイティブ言語であり、まず C++ は Go のすべての機能を実現できますが、Go のカプセル化のレベルは高く、使用も簡単です。
Java は仮想マシン上で実行される言語であり、個人的には性能面で Go には敵わないと思いますが、歴史が長く、成熟したソフトウェアライブラリやプロジェクト管理ツールがあるため、Go はこの点で劣ります。
基礎#
- コンピュータネットワークの 7 層モデル、TCP/UDP、ICMP、IP、ルーター、スイッチのレベル。
コンピュータネットワークをしばらく見ていなかったため、ネットワーク層を忘れてしまい、最後のルーターのレベルも間違えて答えてしまいました。(本当に良くないことです)
- オペレーティングシステムを学んだことがありますか?プロセスとスレッドの違いは?32 ビット Linux 機のプロセス ID の範囲は?
オペレーティングシステムは今学期学んでいます。プロセスとスレッドの違いは一般的なもので、後の質問には答えられませんでした。
- SQL で 18 歳から 25 歳の人をクエリし、年齢でソートするには?クエリ速度を上げるには、インデックスを追加しない場合、そのクエリの方法はどうなりますか?
前の質問は非常に簡単でした。
後の質問にはインデックスを作成すると答えました。インデックスを追加しない場合、クエリ方法は全体を走査することになります。
プロジェクト#
あなたのプロジェクトについて説明してください。設計と難点について話してください。
逆質問#
- 私のパフォーマンスはどうでしたか?何かアドバイスはありますか?
言語は単なるツールであり、最も重要なのは基礎です。基礎知識の習得を強化すべきです。
- インターンシップの時間に関する問題。
最低 3 ヶ月が必要で、具体的な時間は HR と話し合うことができます。
結果#
面接後、私は自分が不合格になると思っていたので、友人に愚痴を言っていたところ、調べてみたら自分が通過していたことがわかりました。(面接官に感謝!)
HR 面接(23 分)#
自己紹介#
その他#
- 前の面接官から、あなたは Go 言語をよく理解しているとフィードバックがありましたが、なぜ Go 言語を学ぶのですか?
- あなたの理想の仕事は?
- 家庭の状況、両親は何をしているのですか?兄弟姉妹はいますか?
- GPA のランキング、なぜ GPA が理想的でないのですか?将来の計画(大学院進学 / 就職)については?
- 他の大学院進学や就職を考えている同級生に比べて、あなたの長所は何ですか?
- あなたのプロジェクトについて紹介してください。主にプロジェクトの目的、機能、あなたの役割について話してください。
- 大創はどのようにチームを組んでいますか?大創で何を学びましたか?
- Tencent に直系の親族はいますか?インターンシップの期間は?