Google新卒SWE面接体験記:非情報専攻からL3内定を獲得

新卒採用特集著者: BeautyResume チーム

非情報専攻の修士がGoogle SWE新卒採用に挑んだ完全な面接体験記。Java基礎、Spring+MySQL、システム設計、HR面接を網羅し、出題問題まとめと非情報専攻向け対策アドバイス付き

背景紹介

まず私の状況から:非情報専攻の修士課程です。学部は数学専攻で、大学院で計算機科学に転向しました。2026年新卒です。秋採用でGoogleのSWE(ソフトウェアエンジニア)ポジションに応募しました。正直、とても不安でした——情報専攻の学生は基礎がはるかに強く、私は基本的に独学でした。でも最終的にL3の内定をいただき、この逆転劇を他の非情報専攻の学生の希望になればと思いシェアします。

タイムライン:8月20日にリファラルで応募 → 8月25日に筆記試験 → 9月2日に一次面接 → 9月8日に二次面接 → 9月15日に三次面接 → 9月18日にHR面接 → 9月22日内定。全体で約1ヶ月かかりました。二次面接の結果待ちの間は非常に不安で、落ちたと思い込んでいました。

面接プロセスの振り返り

筆記試験(8月25日)

Googleの筆記試験は3問のコーディング問題で、難易度は中〜高でした。私は2問を完全に解き、3問目は30%のテストケースしか通しませんでした。非情報専攻の方、焦らなくて大丈夫です——筆記試験の足切りは思ったほど高くありません。SWE職は2問解ければ基本的に面接に進めます。また、筆記試験のスコアは参考値に過ぎず、面接のパフォーマンスが決定的です。

一次面接:Java基礎(9月2日、約60分)

一次面接の面接官は真面目な中年エンジニアで、雑談はほとんどなく、すぐにJava基礎の質問に入りました。

1. HashMapの基盤実装は?JDK 1.7と1.8の違いは?

これはしっかり準備していました。配列+リンクリストの構造から、JDK 1.8の赤黒木最適化、ハッシュ衝突の解決方法、負荷係数とリサイズメカニズムまで説明しました。面接官はなぜ負荷係数が0.75なのか掘り下げ、時間と空間のトレードオフの観点から説明しました——小さすぎると空間の無駄、大きすぎると衝突確率が増加し、0.75は統計的に検証されたバランスポイントです。

2. ConcurrentHashMapとHashMapの違い?ConcurrentHashMapはどうスレッドセーフを保証する?

JDK 1.7のSegmentベースのロックとJDK 1.8のCAS + synchronized最適化について説明し、1.8ではロック粒度がSegmentからNodeに下がり、並行性が向上したことを強調しました。面接官はCASのABA問題について掘り下げ、AtomicStampedReferenceの解決策を説明しました。

3. JVMメモリモデルは?GCアルゴリズムには何がある?

JVMメモリ構造図を描き、ヒープ、スタック、メソッド領域、プログラムカウンタについて説明しました。GCアルゴリズムはマークスイープ、マークコンパクト、コピーアルゴリズム、世代別GCについて説明。面接官はG1コレクタの特徴を聞き、Regionパーティショニング、予測可能な一時停止時間、Mixed GCについて説明しました。

4. スレッドプールのコアパラメータは?適切に設定するには?

6つのコアパラメータを列挙:corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory、rejectedExecutionHandler。適切な設定について、CPU集約型タスクはCPUコア数+1、IO集約型タスクはCPUコア数×2という経験則を述べましたが、実際のシナリオで負荷テストして調整する必要があることも強調しました。

5. 手書き問題:スレッドセーフなシングルトンパターンを実装してください

ダブルチェックロッキング(DCL)の実装を書き、volatileの役割——命令の並べ替え防止——を強調しました。面接官は列挙型ベースの実装も求め、それも書けました。彼は「基礎は大丈夫ですね」と言いました——面接全体で聞いた唯一のポジティブなフィードバックでした。

二次面接:Spring + MySQL(9月8日、約70分)

二次面接の面接官は若く、リラックスしたスタイルで、私の思考を導いてくれました。

1. Spring IOCの原理は?Beanのライフサイクルは?

BeanDefinitionの読み込みから始め、インスタンス化、プロパティ設定、初期化、使用、破棄の完全なライフサイクルを説明しました。面接官は循環依存の問題を掘り下げ、Springの3レベルキャッシュメカニズム——singletonObjects、earlySingletonObjects、singletonFactoriesがどのように循環参照を解決するかを説明しました。

2. Spring AOPの原理は?JDK動的プロキシとCGLIBの違いは?

AOPの基盤実装が動的プロキシであることを説明——JDKプロキシはインターフェースベース、CGLIBは継承ベース。面接官はSpringのデフォルトプロキシを聞き、Spring Boot 2.xのデフォルトはCGLIBですが、ターゲットクラスがインターフェースを実装しproxyTargetClass=falseの場合はJDKプロキシを使用すると説明しました。

3. MySQLインデックスの基盤データ構造は?なぜB+木でB木ではない?

B+木のB木に対する利点を説明:葉ノードがリンクリストを形成し範囲クエリに効率的、非葉ノードがデータを保存しないため各ノードがより多くのインデックスエントリを保持でき、木の高さが低くなる。面接官はクラスタインデックスと非クラスタインデックスの違い、テーブルルックアップとカバリングインデックスの概念を掘り下げました。

4. トランザクションの隔離レベルは?MySQLのデフォルトは?ファントムリードをどう解決する?

4つのレベルを列挙:リードアンコミット、リードコミット、リピータブルリード、シリアライザブル。MySQLのデフォルトはリピータブルリード。ファントムリードの解決はNext-Key Lock(レコードロック+ギャップロック)について説明。面接官はMVCCの原理も聞き、隠し列、undo logバージョンチェーン、ReadViewメカニズムについて説明しました。

5. 手書き問題:LRUキャッシュを実装してください

HashMap + 双方向リンクリストの古典的な実装を使用し、putとgetはどちらもO(1)。面接官はなぜ片方向リンクリストを使わないのか聞き、ノードの削除には前駆ノードを見つけるためにO(n)が必要だが、双方向リンクリストでは直接操作できると説明しました。また、Javaに組み込みの実装があるかも聞かれ、LinkedHashMapのremoveEldestEntryをオーバーライドする方法を説明しました。

三次面接:システム設計(9月15日、約60分)

三次面接はシステム設計で、面接官はテクニカルディレクターレベルでした。

1. フラッシュセールシステムを設計してください——高並行性にどう対処する?

フロントエンドからバックエンドまでレイヤー別に設計:フロントエンドのレート制限(ボタンのデバウンス、CAPTCHA)、ゲートウェイ層のレート制限(トークンバケットアルゴリズム)、サービス層の在庫事前控除(Redis原子操作)、データベース層の楽観的ロック。面接官はRedisとデータベースのデータ整合性を掘り下げ、遅延二重削除 + Canal binlog監視について説明しました。

2. 分散トランザクションの整合性をどう保証する?

2PC、TCC、Saga、ローカルメッセージテーブルのアプローチを説明し、TCCのTry-Confirm-Cancelフローと適用シナリオに焦点を当てました。面接官はConfirmフェーズが失敗したらどうするか聞き、継続的なリトライ + 手動介入のフォールバックを説明しました。

3. プロジェクトでどんな技術的課題に遭遇した?どう解決した?

分散ロックの問題について説明——Redisで分散ロックを実装していたが、マスタースレーブフェイルオーバー時にロックが失われる可能性があった。解決策はRedlockアルゴリズムだったが、面接官はRedlockも議論の余地があると指摘し、etcdやZooKeeperの検討を提案しました。この交流で、技術選定はソリューション自体だけでなくコミュニティの議論も考慮すべきだと学びました。

HR面接(9月18日、約25分)

HR面接ではなぜ情報に転向したか、Javaをどう学んだか、他の内定の有無、希望給与を聞かれました。数学から計算機科学に転向した経緯を正直に話し、学習能力と技術への情熱を強調しました。HRは「非情報専攻で三次面接まで進んだということは、技術力に問題ないということです」と言ってくれ、安心しました。

出題問題まとめ

1. HashMapの実装とJDKバージョンの違い

2. ConcurrentHashMapのスレッドセーフメカニズム

3. JVMメモリモデルとGCアルゴリズム

4. スレッドプールのコアパラメータと設定

5. スレッドセーフシングルトンパターンの手書き実装

6. Spring IOCの原理とBeanライフサイクル

7. Spring AOPと動的プロキシ

8. MySQLインデックスとB+木

9. トランザクション隔離レベルとMVCC

10. LRUキャッシュの手書き実装

11. フラッシュセールシステム設計

12. 分散トランザクションソリューション

アドバイス

1. 非情報専攻でも劣等感を持たず、ただ差を認めよう。情報専攻の学生は4年間の基礎蓄積が確かに強いですが、面接で問われる知識点は有限です。的を絞って補強すれば差は縮まります。私は3ヶ月でゼロからJavaを学び、毎日6時間以上勉強し、最終的に基礎面接も通過しました。

2. Java基礎が最も重要。Googleの一次面接はほぼJava基礎でした。HashMap、ConcurrentHashMap、JVM、スレッドプールは必出問題です。「JVMの理解」と「Java並行プログラミングの芸術」を徹底的に理解することをお勧めします。

3. プロジェクトにはハイライトが必要だが、偽装はしない。面接官はプロジェクトの詳細を掘り下げます。プロジェクトで分散ロックを実装していなければ、書かないでください。しかし、シンプルなプロジェクトでも深く説明できます——CRUDシステムなら、クエリパフォーマンスの最適化やキャッシュ戦略について語れます。

4. システム設計問題にはフレームワークが必要。すぐにコーディングを始めないでください。まず面接官と要件を確認し、アーキテクチャ図を描き、トレードオフを議論しましょう。面接官が評価するのは思考プロセスであり、完璧な答えではありません。

5. 非情報専攻の学生はリファラルを活用すべき。リファラルは一部の履歴書スクリーニングをバイパスでき、リファラル者が進捗を追跡してくれます。私は先輩のリファラルで面接の機会を得ました。

FAQ

Q: 非情報専攻が面接レベルに達するまでどのくらいかかりますか?

A: 人によります。数学専攻からJavaへの転向は約6ヶ月かかりました(3ヶ月基礎学習+3ヶ月プロジェクト構築と演習)。プログラミングの基礎があれば、3-4ヶ月で十分かもしれません。重要なのは毎日の学習時間を確保し、断続的にしないことです。

Q: Google SWE面接の難易度は?

A: 一次面接は基礎中心で中程度、二次面接はフレームワークとデータベースで中〜高、三次面接はシステム設計でかなり難しいです。全体として、基礎がしっかりし、プロジェクトにハイライトがあれば、通過の確率は悪くありません。

Q: 大企業のインターン経験がない場合は?

A: オープンソースプロジェクトに貢献したり、コンペティションに参加したりできます。私はGitHubで100+ starのプロジェクトがあり、面接官もそれについて聞きました。また、深く取り組めば、学校のプロジェクトも面接素材になります。

Q: L3の報酬は概ねどのくらい?

A: 2026年新卒の場合、L3の総報酬は約15万〜19万ドルで、勤務地と交渉力によります。Googleの新卒報酬は比較的透明で、levels.fyiで参考データを確認できます。

Q: 面接に落ちたら再応募できますか?

A: はい、但し6ヶ月待つ必要があります。一次面接に落ちた場合は、うまく答えられなかった部分を振り返り、強化してから再応募することをお勧めします。私の同級生は最初の一次面接で落ちましたが、2回目は準備を整えて内定を獲得しました。

#Alibaba#Java開発#新卒採用#秋採用#非CS出身#システム設計