Google SDE バーチャルインタビュー (VO)、インタビューと質問

この経験から、プログラミングのスキルは基本的なものであるが問題解決マインドと明確なコミュニケーション同じように重要だが、それ以上に好まれない部分もある。面接官は、あなたがどのように考え、どのように表現するかを重視します。プログラミングの問題の難易度は中~高程度なので、日頃からアルゴリズムの練習をしていれば対応できるはずだ。しかし、重要なのは、新しい問題に直面したときに素早くその意味を理解し、コードを書いた後に徹底的な複雑性の分析とエッジケースの議論を行えるかどうかにあります。

次に、この面接の実践的な経験と、いくつかのコアな試験問題を紹介するので、グーグルの面接を準備している人たちの参考になれば幸いである。

グーグル面接プロセスレビュー

このVOインタビューは、密接に関連した2つのパートに分かれている:

  • 第一部:行動面接(BQ) このセクションは、あなたの評価について焦点を当てる。コミュニケーション・スキルと構造的思考面接官は型にはまった答えに興味があるわけではありません。面接官は型にはまった答えではなく、あなたがどのように言葉を整理し、過去の経験を明確に述べているかに興味があるのです。プロジェクトに納期のプレッシャーがあるとき、効率と品質のバランスをどのようにとるか」「技術的な決定についてプロジェクトマネージャーと意見が対立したとき、どのように対処するか」といった質問をされるかもしれません。彼らは、あらかじめ決められた答えを復唱するだけでなく、あなたが整理され、自省し、成長していることを示したいのです。

  • パートII:アルゴリズム問題(コーディング) このセッションは通常、アルゴリズムに関する2つの質問と、それに続くいくつかの質問で構成される。問題自体は必ずしも複雑なものではなく、問題を素早く理解し、妥当な解決策を考え出し、実装後に詳細な複雑さの分析と最適化を行う能力に焦点が当てられます。フォローアップの質問の中には、そのソリューションがどのような機能を果たすのかについて考えさせるものもあります。スケーラビリティ もしかしたらエッジケース の下にある。面接官は、こうした反省点を論理的に明確にするために率先して付け加えることができれば、感心することが多い。

面接の思い出

インタビューは2部構成で、まず行動に関するインタビューがあり、その後すぐにプログラミングに関する質問があった。

行動面接コンポーネント

最初の質問でインタビュアーは、「技術的には賛成できないが、しばらく前から導入されているシステムにどう対処しますか?あなたならどう対処しますか?"

そのとき私が最初に考えたのは、先人の仕事を直接否定することを避けることだった。私は、理解し、尊重し、再提案するという戦略を強調した。私は、まずシステムの歴史的背景と当初の設計を掘り下げ、当初の開発者とコミュニケーションをとり、彼らの考察を理解すると答えた。そして、新しいソリューションを提案し、データやテスト結果を用いて、パフォーマンスや保守性などの観点から新旧のソリューションの比較を示し、議論を呼びかける。こうすることで、既存の結果に対する敬意を示すだけでなく、チームがより良い決断を下せるよう後押しするのだ。

質問2:「あなたが開発を主導したプロジェクトについて説明し、その中でどのような役割を果たしましたか?その成功をどのように評価しますか?"

という質問に答える代わりに、私はまずプロジェクトの背景と課題を説明した。そして、テクノロジーの選択、アーキテクチャーの設計から実装に至るまで、私がどのようにプロジェクトを一歩一歩前進させたかを説明した。成功を測る際には、技術的な指標(例えば、パフォーマンスがどれだけ向上したか)だけでなく、ビジネスへの影響(例えば、新機能によるユーザーの増加)やチームワークへの好影響も強調しました。こうすることで、私は技術的な実装者であるだけでなく、プロジェクトの推進者でありリーダーでもあることを示した。

プログラミングの質問コーナー

最初の質問だ: 「2分木が与えられたとき、与えられた配列がそのうちの1つの部分木であるかどうかを判定しなさい。階層走査."

私の最初の反応はブレッズ・ファースト・サーチ(BFS) 解決するにはツリー全体をトラバースして、すべてのノードで指定された配列との一致を試みる必要がある。具体的には、BFSがどこかのノードをトラバースしたら、そのノードをサブツリーのルートとしてBFSをやり直し、ターゲット配列と比較する。

サブツリーをコピーしてBFSを行うだけでは非常に効率が悪いと考えていた。メインのBFSがツリーをトラバースしている間に、配列の最初の要素と同じ値を持つノードに出会ったら、新しい別のBFSスレッドを立ち上げて、マッチングを同期させた。この新しいスレッドが配列を完全にトラバースし、階層トラバースで得られたノードの値が配列と完全に一致すれば、解決策が見つかったことになる。この「同期マッチング」のアイデアは、多くのダブルカウントと余分なスペース・オーバーヘッドを避けることができる。

二つ目の質問だ: 「を与えられた。 数値の配列。最小公倍数(LCM)."

配列のすべての要素で割り切れる最初の数を見つけるまで1から順にたどる。しかし、これでは明らかに遅すぎる。という数学的性質を使えばいいのではないかとすぐに思いついた。 どの であります最大公約数 GCD.

そこで、私は質問をこう分解した:

  1. の配列のすべての数字を探します。 .

  2. 公式を使えば、問題は次のようになる。 . 私はまず、2つの数字を求める方法を実装した。 ユークリッドのアルゴリズムの配列全体を繰り返し処理するループを使う。 .実装中、数値のオーバーフロー問題に注意する必要があったので、私は で割る前に すなわち .

進捗報告

インタビュアーは質問を追及した:

  1. "LCMアルゴリズムは大きな数を扱うときにどんな問題にぶつかりますか?どのように解決できますか?" 私はこう答えた:配列内の数値が非常に大きい場合、あるいは配列要素が多い場合、中間結果は標準的な整数型の範囲外になる可能性がある。解決策はBigInteger を処理し、計算が正しいことを確認する。

  2. "配列に0や負の数が含まれる場合、そのアルゴリズムはどのように処理するのですか?" 配列に0が含まれている場合、LCMは未定義であり、例外を投げるか特定の値を返すか、特別に処理する必要があります。配列に負の数が含まれている場合、LCMは通常正として定義されているので、計算する前にその絶対値を取ることができます。

気持ちをまとめる

行動面接では論理的思考とコミュニケーション能力が試され、プログラミングの質問では基本的なアルゴリズムの柔軟な応用と最適化がより重視された。ジレンマに直面したとき、最初の非効率的な考えに固執するのではなく、問題の本質を深く分析することで、よりエレガントな解決策を見つけました。

この経験から、面接は知識だけでなく、適応力や論理的表現力を総合的に試されるものだとさらに確信した。たとえ多くの質問をブラッシュアップしたとしても、面接で自分の考えを明確に説明できなければ、職を失うかもしれない。したがって、面接の準備をする際には、アルゴリズムの練習に加え、人とのコミュニケーションの取り方を分かりやすく整理して練習する必要があります。

oaassist-contact
WeChat お問い合わせ