Huawei Java開発者新卒面接:オンライン試験から内定までの完全ガイド
985大学の新卒がHuawei Java開発者新卒採用の全プロセスを共有。オンライン試験3問、技術1次面接のJava基礎とJVM、技術2次面接のSpringとデータベース、HR面接を網羅し、最終的に内定を獲得。
背景紹介
私は某985大学の新卒学部生で、専攻はソフトウェア工学です。3年生の時にJavaバックエンド方向に進むことを決め、中規模インターネット企業でのJava開発インターンシップの経験があります。富士通の新卒採用は秋採用における最優先事項でした——富士通の待遇とプラットフォームは業界でもトップクラスですし、先輩方が多く在籍しているため、事前に内部情報を得ていました。
富士通の新卒採用プロセスは他の多くのテック企業とは異なり、まずオンライン試験があり、その後に面接が行われます。9月に履歴書を提出し、Java開発エンジニアのポジションに応募しました。オンライン試験から内定獲得まで約1ヶ月半かかりました。正直、この過程は本当に苦しく、特にオンライン試験の結果を待つ間は、毎日掲示板で他人の面接体験記をチェックしていました。
以下、プロセス全体を詳細に振り返り、富士通の新卒採用を準備している方の参考になればと思います。
面接プロセスの振り返り
オンライン試験(3問、2時間)
オンライン試験は最初の必須関門です。3問で合計600点満点、通常150点以上で面接の機会が得られます(部門により要件は異なり、200点以上を要求する場合もあります)。試験プラットフォームは富士通独自のシステムで、Java、C++、Pythonなどの言語に対応しています。
第1問(100点):文字列処理
文字列内の特定パターンの出現回数を数える問題でした。比較的簡単で、StringのindexOfメソッドを使ってループで検索し、約15分で解けました。
第2問(200点):スライディングウィンドウ
配列とウィンドウサイズが与えられ、スライディングウィンドウ内の最大値を求める問題。LeetCode 239と同じ問題で、以前練習していたため、両端キューを使って解きました。ただし、試験中は少し緊張して小さなバグがあり、デバッグに約10分かかりました。
第3問(300点):動的計画法
経路計画に関する問題で、LeetCodeのUnique Pathsの変種に似ていますが、障害物と重みが追加されていました。この問題は部分点しか取れず、最終的に約60%のテストケースを通過しました。DPの状態遷移方程式が十分に明確ではなく、境界条件の処理も不十分でした。
最終的なオンライン試験のスコアは約400点で、無事に面接に進むことができました。
技術面接1回目(約50分)
1次面接は富士通のオフィスでの対面面接でした。面接官は30代半ばのシニアエンジニアで、とても親切な方でした。
Java基礎:
面接官はまずJavaの基礎から聞き、この部分はかなり詳しく掘り下げられました。
1. HashMapの内部実装?JDK 1.8の配列+リンクリスト+赤黒木構造について説明し、リサイズメカニズムと負荷係数にも触れました。面接官はHashMapがなぜスレッドセーフでないかを深掘りし、マルチスレッドでのputがデータの上書きを引き起こす可能性や、JDK 1.7での並行リサイズがリンクリストの循環を引き起こす可能性について説明しました。
2. ConcurrentHashMapの実装?JDK 1.8のCAS+synchronizedアプローチについて説明し、Node配列の各バケットがsynchronizedでロックされるため、JDK 1.7のSegmentベースのロックよりも細粒度であると述べました。
3. JVMメモリモデル?スレッドプライベート領域(プログラムカウンタ、VMスタック、ネイティブメソッドスタック)とスレッド共有領域(ヒープ、メソッド領域)の両方について説明しました。面接官はガベージコレクションアルゴリズムについて深掘りし、マークスイープ、マークコンパクト、コピーアルゴリズム、および世代別GC理論について説明しました。
4. volatileキーワードの役割?可視性の保証と命令の並べ替え防止について説明し、happens-before原則にも触れました。volatileが原子性を保証できるかと聞かれ、できないと答え、i++の例を挙げました。
プロジェクト:
面接官はインターンシップのプロジェクトについて聞きました。Spring Boot + MyBatisアーキテクチャと、Redisを使ったキャッシュ最適化について主に説明しました。キャッシュペネトレーションとキャッシュアバランシェの解決策について深掘りされ、それぞれブルームフィルターとランダムな有効期限について述べました。
コーディング:
面接官はDCL(ダブルチェックロッキング)シングルトンの実装を求めました。書きましたが、volatileを付け忘れ、面接官に指摘されました。重要:DCLシングルトンにはvolatileが必須です。そうしないと、命令の並べ替えにより未初期化のオブジェクトを取得する可能性があります。
技術面接2回目(約60分)
2次面接の面接官はより上位の役職で、質問はアーキテクチャとシステム設計に重点を置いていました。
Spring:
1. Spring IOCの原理?BeanDefinitionの解析から始め、Beanのインスタンス化、プロパティ注入、初期化の完全なライフサイクルについて説明し、循環依存を解決するための3レベルキャッシュにも触れました。
2. Spring AOPの実装方式?JDK動的プロキシとCGLIBプロキシの違い、およびSpringのデフォルト選択戦略(インターフェースがある場合はJDKプロキシ、ない場合はCGLIB)について説明しました。
3. Spring Bootの自動設定原理?@EnableAutoConfigurationアノテーションがSpringFactoriesLoaderを使ってMETA-INF/spring.factoriesから設定クラスを読み込み、条件アノテーションに基づいてフィルタリングすると説明しました。
データベース:
1. MySQLインデックスの内部データ構造?B+木について説明し、B木に対する利点を述べました:葉ノードがリンクリストを形成し範囲クエリに有利、非葉ノードがキーのみを保存するため各ノードにより多くのキーを格納でき木の高さが低くなる。
2. トランザクションの隔離レベル?Read Uncommitted、Read Committed、Repeatable Read、Serializableについて説明し、各レベルで発生する可能性のある問題(ダーティリード、非再現リード、ファントムリード)について述べました。MySQLのデフォルト隔離レベルについて聞かれ、Repeatable Readだと答え、MVCCの実装原理について説明しました。
3. スロークエリの最適化方法?実行計画の確認、インデックスの追加、フルテーブルスキャンの回避、ルックアップの削減などを挙げました。
システム設計:
面接官はシナリオを提示しました:URL短縮サービスを設計してください。IDジェネレータによるショートコード生成、データベースでのマッピング保存、キャッシュによるクエリ高速化、301/302リダイレクトの選択について説明しました。高並行下でIDジェネレータの一意性を保証する方法について深掘りされ、SnowflakeアルゴリズムやRedisのインクリメントを使えると述べました。
HR面接(約20分)
HR面接は比較的リラックスしており、主に以下の質問がありました:
1. なぜ富士通を選んだのか?
2. 最大の挫折は?どう克服したか?
3. 残業についてどう思うか?
4. 希望年収は?
5. 他に内定はあるか?
これらの質問は事前に準備していたため、自然に答えられました。残業については、拒否するのではなく、プロジェクトに必要な場合は残業を受け入れつつ、作業効率の向上にも注力すると答えました。他の内定については、他社の結果待ちであると正直に答えました。
全問題一覧
1. HashMapの内部実装とスレッドセーフティの問題
2. ConcurrentHashMapの実装原理
3. JVMメモリモデルとガベージコレクションアルゴリズム
4. volatileキーワードの役割と原子性の問題
5. シングルトンパターンDCL実装(手書き)
6. Spring IOCの原理と3レベルキャッシュ
7. Spring AOPのJDK動的プロキシとCGLIB
8. Spring Boot自動設定の原理
9. MySQL B+木インデックス構造
10. トランザクション隔離レベルとMVCC
11. スロークエリ最適化戦略
12. URL短縮サービスのシステム設計
13. オンライン試験:文字列処理、スライディングウィンドウ最大値、DP経路計画
学びとアドバイス
1. オンライン試験の前に必ず問題を練習しましょう。富士通のオンライン試験はそれほど難しくありませんが、準備なしでは第2問と第3問でつまずきやすいです。LeetCode Hot 100を少なくとも完了し、文字列、スライディングウィンドウ、動的計画法に重点を置いて練習することをお勧めします。試験スコアが高いほど、その後の面接での主導権が増します。
2. Java基礎を体系的に復習しましょう。富士通のJava基礎のカバー範囲は非常に包括的で、コレクションフレームワークから並行プログラミング、JVMまでほぼすべてのモジュールが問われます。面接問題集を読むだけでなく、「Java並行プログラミングの芸術」と「JVMの理解」を使って体系的に復習することをお勧めします。
3. Springエコシステムの原理を理解しましょう。Spring BootでCRUDを書くだけでなく、IOC、AOP、自動設定の基礎原理を理解してください。面接官は「何」の背後にある「なぜ」を理解しているかを重視します。
4. データベースの知識を疎かにしないでください。MySQLのインデックス、トランザクション、ロックは高頻出トピックです。「High Performance MySQL」の核心章を一通り読むことをお勧めします。面接で実際のプロジェクトの最適化経験を組み合わせて話せると、大きく加点されます。
5. HR面接を軽視しないでください。多くの人はHR面接が形式的なものだと思いがちですが、富士通のHR面接にもスクリーニングがあります。誠実に答えつつも、特に残業や給与のような敏感な話題には配慮しましょう。
6. プロセス全体で忍耐を持ちましょう。富士通の新卒採用プロセスはかなり長く、履歴書提出から内定まで1ヶ月以上かかる場合があります。長期間連絡がないこともありますが、焦らず待ちましょう。
FAQ
Q:オンライン試験は何点で合格できますか?
A:通常150点以上で面接の機会がありますが、部門により要件は異なります。200点以上を目指すことをお勧めします。
Q:オンライン試験はどの言語を使うべきですか?
A:Javaのポジションに応募する場合はJavaをお勧めします。Pythonの方が書きやすいですが、面接官がコーディングスタイルを見る可能性があります。
Q:面接はオンラインですか、対面ですか?
A:私は富士通のオフィスでの対面面接でした。バッチにより異なる場合がありますので、通知を確認してください。
Q:技術2次面接でアルゴリズムの問題は出ますか?
A:2次面接では独立したアルゴリズム問題はありませんでしたが、システム設計セクションで論理的思考力が評価され、本質的にはアルゴリズム的思考の表れです。
Q:HR面接で落とされることはありますか?
A:はい。合格率は比較的高いですが、極端に悪い成績や価値観の明らかな不一致がある場合は、不合格になることがあります。全ての面接を真剣に受けましょう。