Amazon SDE II面接の完全体験:オンライン評価からオファーまでの全プロセス振り返り

技術面接著者: BeautyResume チーム

4年経験バックエンド開発者のAmazon SDE II面接完全振り返り。オンライン評価、技術4ラウンド、LP行動面接の実際の問題を網羅。システム設計、アルゴリズム、Amazon Leadership Principles等の問題まとめと対策アドバイス付き

背景紹介

まずは私の基本的な背景から:学部と修士はどちらも中国でコンピュータサイエンスを専攻し、卒業後は中規模のインターネット企業で4年間バックエンド開発に従事していました。技術スタックは主にJavaとGoで、日常的にマイクロサービスアーキテクチャ、分散システム、メッセージキューなどに携わっていました。正直なところ、前の会社ではそれなりにやっていましたが、常にキャリアの天井を感じていました。それに、海外で働きたいという思いもずっとあったので、Amazonの機会を探し始めました。

2025年9月、LinkedInでAmazon上海オフィスのSDE IIポジションの募集を見つけ、同時にSeattleにもヘッドカウントがありました。少し迷った末、両方に応募することにしました——上海でも良ければいいし、Seattleならなおさら夢のようです。履歴書を提出してから約2週間後、リクルーターからメールが届き、書類選考を通過したのでOA(Online Assessment)を受けるようにと言われました。

正直に言うと、Amazonの面接準備は想像以上に時間がかかりました。アルゴリズムの対策、システム設計の練習、そして最も驚いたのはAmazon Leadership Principles(LP)行動面接の重みです——ほぼ毎ラウンドにLPの質問が織り込まれており、これは中国のテック企業の面接ではまず遭遇しないことでした。約6週間かけて準備しました。以下、時系列で面接プロセス全体を完全に振り返ります。

オンライン評価(OA、2問、120分)

OAのリンクを受け取った後、システムは120分以内に2問のアルゴリズム問題を完了するよう求めました。OAはHackerRankプラットフォームで実施され、言語を選択できました——私はJavaを選びました。

第1問:ログ集計・分析

問題の概要:サーバーログファイルが与えられ、各ログエントリにはtimestamp、serverId、responseTime、statusCodeの4つのフィールドが含まれています。指定された時間ウィンドウ内の各サーバーの平均応答時間を計算し、平均応答時間の降順で返す関数を実装してください。平均応答時間が同じ場合は、serverIdの昇順で並べてください。

この問題はそれほど難しくありません——本質的にはグループ集計+ソートの問題です。HashMapでserverIdごとにグループ化し、各サーバーの平均応答時間を計算し、カスタムComparatorでソートしました。約15分で書き終わり、テストケースはすべて通過しました。

第2問:依存関係付きタスクスケジューラ

この問題はLeetCode 621のバリエーションで、タスクリストとクールダウン時間nが与えられ、すべてのタスクを完了するための最短時間を求めるものです。ただし、この問題には追加の条件がありました——一部のタスク間には依存関係があり、あるタスクが完了した後でなければ別のタスクを実行できません。

この依存関係の処理で少し詰まってしまいました。まずトポロジカルソートで依存関係を処理し、タスクの実行順序の制約を確定してから、貪欲法で実行時間をスケジューリングしました。正直なところ、このアプローチは最初ははっきりと思いつかず、紙に数分間描いてようやく整理できました。最終的なコードはかなり長く、40行以上あり、テストケースの80%を通過しました——2つのエッジケースがうまく処理できず、時間が足りなくてそれ以上調整できませんでした。

OA結果:3日後、リクルーターからメールが届き、OAに通過したと通知されました。その後、バーチャルオンスサイト面接の日程が調整されました——全4ラウンドで、2日間に分けて実施されました。

第1ラウンド LP行動面接+アルゴリズム(約55分)

面接官はAmazonで5年働いているSDE IIIで、インド系アメリカ人でした。アクセントはかなり強めでしたが、話すスピードは適度で、コミュニケーションは比較的スムーズでした。

LPセクション(約20分)

まず2つのLP質問がありました:

質問1:Tell me about a time when you went above and beyond for a customer.(LP:Customer Obsession

この質問は準備していました。以前の会社でB2Bプロジェクトに携わっていた時、顧客から緊急のデータ移行リクエストがあり、それは現在のスプリントのスコープ外でした。しかし、私は自ら週末に残業し、日曜日までに移行スクリプトを書き上げてテストを通過させ、月曜日の朝に納品しました。顧客は非常に満足し、後に契約も更新してくれました。STARメソッドで回答し、なぜ顧客がこれを必要としていたか私の行動が顧客満足度にどう直接影響したかを強調しました。

質問2:Tell me about a time when you had to make a decision without having all the information you needed.(LP:Bias for Action

これについては、本番環境のインシデントについて話しました——午前2時にアラートを受け取り、データベース接続プールが枯渇していましたが、ルート原因を特定するのに十分なログがありませんでした。経験に基づいてスロークエリが接続リークの原因だと判断し、まずレート制限とサーキットブレーカーを実装してから調査を開始する決断を下しました。私の推測は正しく、15分でサービスが復旧しました。面接官は「もし判断が間違っていたらどうしていましたか?」とフォローアップしました。私は、まずデグレード戦略自体が安全でロールバック可能であることを確認し、その後迅速に仮説を検証すると答えました。

アルゴリズムセクション(約30分)

問題:insert、delete、getRandomをサポートするデータ構造を設計してください。3つの操作はすべてO(1)の時間計算量である必要があります。

これはLeetCode 380の原題で、以前に練習していました。HashMap + ArrayListのアプローチ——insert時に要素をリストの末尾に追加し、mapにインデックスを記録;delete時に削除対象の要素とリスト末尾の要素を交換し、末尾を削除して、mapのインデックスを更新します。コードを書いた後、面接官はいくつかのテストケースをトレースさせ、その後スレッドセーフティについて質問しました——複数のスレッドが同時に操作したらどうなるか。ReentrantLockを使うか、CopyOnWriteArrayListを使うと提案すると、面接官は頷き、それ以上深掘りしませんでした。

このラウンドは全体的に良い感触でした——LPの回答もスムーズで、アルゴリズムでも詰まることはありませんでした。

第2ラウンド システム設計(約55分)

面接官はSenior SDEで、中国系アメリカ人、AmazonのAWS部門で働いていました。このラウンドは純粋なシステム設計で、LPの質問はありませんでした。

問題:Design a URL Shortener(bit.lyのようなもの)

これはシステム設計の古典的な問題ですが、面接官の要求は想像以上に深いものでした。標準的なシステム設計フレームワークに従って展開しました:

1. 要件の明確化:読み書きの比率(面接官は10:1で読みが多いと回答)、カスタムエイリアスの必要性、分析統計の必要性、QPSの見積もりなどを質問しました。面接官が明確に回答した後、設計に移りました。

2. API設計:createShortUrl(longUrl, customAlias?)getLongUrl(shortUrl)の2つのエンドポイントを定義しました。

3. コアアプローチ:短縮URL生成について2つの方法を提案しました——base62エンコーディングとMD5ハッシュの切り詰め。面接官はトレードオフの比較を求めました。base62は読みやすいがグローバルカウンターが必要(分散環境ではボトルネックになる)、MD5ハッシュは調整が不要だが衝突のリスクがあると分析しました。最終的に事前生成バッチIDのアプローチを選択しました:DynamoDBのアトミックカウンターを使ってID範囲を一括取得し、ローカルで割り当てた後にbase62でエンコードします。

4. ストレージ層:DynamoDBでマッピングテーブルを保存し、shortUrlをパーティションキーにしました。面接官がキャッシュ戦略について質問した際、ElastiCache(Redis)でホットな短縮URLをキャッシュし、LRUで退去させると提案しました。

5. スケーラビリティ:パーティションとリードレプリカの追加による水平スケーリングについて議論しました。

詰まったところ:面接官が準備していなかった質問をしました——「ある短縮URLが突然ホットスポットになったら(例えば有名人がシェアした場合)、キャッシュスタンピードをどう防ぎますか?」少し考えてから、リクエストコアレッシング(request coalescing)を使うと提案しました——複数の並行リクエストのうち1つだけをDBに送り、残りは結果を待つというアプローチです。実装について深掘りされた際、並行マーカー(AtomicBooleanなど)を使うと述べましたが、正直なところ説明がかなり曖昧でした。この部分は準備不足が明らかでした。

全体的にはこのラウンドはまずまずでしたが、キャッシュスタンピードの部分は確かに準備の甘さを露呈してしまいました。

第3ラウンド LP行動面接+アルゴリズム(約55分)

面接官はAmazonで3年働いているSDE IIで、白人アメリカ人、非常にフレンドリーで、このラウンドの雰囲気はかなりリラックスしていました。

LPセクション(約20分)

質問1:Tell me about a time when you disagreed with a colleague's technical approach. How did you handle it?(LP:Have Backbone; Disagree and Commit

技術選定での同僚との意見の相違について話しました——彼はRabbitMQを希望し、私はKafkaを主張しました。私たちのユースケースにおけるKafkaの利点(高スループット、永続化、再生可能な消費)を列挙しつつ、RabbitMQの低遅延シナリオでの強みも認めました。最終的にベンチマーク比較を行い、データが私の提案を支持し、チームはKafkaを採用することになりました。面接官は「最終的な決定があなたの提案ではなかったらどうしましたか?」とフォローアップしました。私は「Disagree and Commit——チームの決定を全力で実行し、消極的な抵抗はしない」と答えました。

質問2:Tell me about a time when you delivered a result under a tight deadline.(LP:Deliver Results

大規模なショッピングフェスティバル(ブラックフライデーに類似)の期間中、私たちのチームの注文サービスが3日以内に新機能をリリースする必要があった状況について話しました。タスクを分解し、コアでないロジックはフィーチャートグルの後ろに実装して最初はオフにし、クリティカルパスを先にリリースしてから段階的に有効化しました。結果として半日前倒しで完了し、本番環境でのインシデントはゼロでした。

アルゴリズムセクション(約30分)

問題:二分木が与えられたとき、ルートから葉までのすべてのパスのうち、ノード値の合計が与えられたtargetSumに等しいものをすべて見つけてください。

LeetCode 113の原題——古典的なDFSバックトラッキングです。素早く再帰解を書きました。面接官は時間計算量の説明を求めました——最悪の場合O(N * H)で、Nはノード数、Hは木の高さ(各パスをコピーする必要があるため)と答えました。木が非常に大きく再帰スタックがオーバーフローしたらどうするかと聞かれ、明示的スタックを使った反復アプローチに変換するか、最大深度を制限すると提案しました。このラウンドは全体的に順調でした。

第4ラウンド LP行動面接+アルゴリズム(約55分)

面接官はPrincipal Engineerで、Amazonで8年働いており、非常に威厳がありました。このラウンドは間違いなく最もプレッシャーの大きいラウンドでした。

LPセクション(約25分——全ラウンドで最も深いLPの掘り下げ)

質問1:Tell me about a time when you took ownership of a problem that wasn't technically your responsibility.(LP:Ownership

クロスチームのインシデントについて話しました——フロントエンドチームがAPIタイムアウトを報告しましたが、根本原因は私たちのチームのデータベースクエリの問題でした。フロントエンドチームが最初に私に来た時、DBAチームにチケットを提出するよう誘導することも簡単にできました。しかし、私は自分で調査することを選び、インデックスの欠落したスロークエリを見つけ、インデックスを追加してSQLを最適化し、30分で解決しました。面接官は「それは本当にあなたの責任だと思いますか?」と問い詰めました。私は「Amazonの文脈では、Ownershipとは問題を見たら解決することで、他人に押し付けることではない」と答えました。

質問2:Tell me about a time when you had to learn something new quickly to solve a problem.(LP:Learn and Be Curious

gRPCが必要なプロジェクトについて話しました——私はgRPCの経験が全くありませんでした。週末を使って公式ドキュメントとサンプルコードを読み、月曜日にはproto定義とサーバー/クライアントコードを書けるようになりました。面接官は「新しい技術を学ぶ際の最大の課題は何だと思いますか?」とフォローアップしました。私は「構文ではなく、その背後にある設計哲学と適用場面を理解することです」と答えました。

フォローアップ(面接全体で最も難しいLP質問):面接官は「インデックスを追加してスロークエリを解決したとおっしゃいましたが、そのインデックスが他の問題——例えば書き込みの遅延やストレージの増加——を引き起こしたらどうしますか?」と言いました。

この質問には数秒言葉に詰まりました。まずステージング環境でインデックスの影響を評価すると答えました——書き込みレイテンシの増加やストレージの増加などのメトリクスを確認し、DBAチームとレビューする。影響が許容範囲であればデプロイを進め、そうでなければ代替の最適化アプローチ(クエリの書き換えやデータベースのシャーディングなど)を検討すると述べました。面接官はこの回答にまあまあ満足しているようでしたが、表情は読み取りにくかったです。

アルゴリズムセクション(約25分)

問題:getとput操作をサポートするLRUキャッシュを設計してください。両方の操作はO(1)の時間計算量である必要があります。

LeetCode 146の原題——HashMap + 双方向リンクリストです。この問題は完璧に知っていて、約10分でコードを書き終えました。しかし、面接官はフォローアップを追加しました:スレッドセーフなLRUキャッシュをどう実装しますか?

このフォローアップには少し慌てました。2つのアプローチを提案しました:第一に、粗粒度ロック(シンプルだが性能が悪い)、第二に、セグメントロック(ConcurrentHashMapのアプローチに似て、キャッシュを複数のセグメントに分割し、各セグメントに独自のロックを持たせる)。面接官はセグメントロックの疑似コードを書くよう求めました。大まかなフレームワークをスケッチしましたが、セグメント数の決定方法やリサイズ時の処理など、いくつかの細かい部分は確信が持てませんでした。面接官はそれ以上深掘りせず、「interesting approach」とだけ言いました。

このラウンドの後、気持ちは複雑でした。LPのフォローアップは激しく、アルゴリズムのフォローアップも完全には答えきれませんでした。4ラウンドの中で最も不確実なラウンドだったと感じました。

面接問題まとめ

Amazon SDE II面接で遭遇したすべての問題を、ラウンドごとに整理します:

オンライン評価(OA)

第1問:ログ集計・分析
ポイント:HashMapグループ集計、カスタムソート
難易度:Medium

第2問:依存関係付きタスクスケジューラ
ポイント:トポロジカルソート+貪欲スケジューリング
難易度:Medium-Hard

第1ラウンド:LP行動面接+アルゴリズム

LP1:Customer Obsession — 顧客の期待を超える経験
LP2:Bias for Action — 情報が不十分な状態での意思決定の経験
アルゴリズム:Insert Delete GetRandom O(1)
ポイント:HashMap + ArrayList複合データ構造設計
難易度:Medium

第2ラウンド:システム設計

Design a URL Shortener
ポイント:分散ID生成、DynamoDBストレージ設計、キャッシュ戦略、キャッシュスタンピード防止
難易度:Medium-Hard

第3ラウンド:LP行動面接+アルゴリズム

LP1:Have Backbone; Disagree and Commit — 技術的な意見の相違の処理
LP2:Deliver Results — タイトな期限下での成果交付
アルゴリズム:Path Sum II(二分木パス合計)
ポイント:DFSバックトラッキング
難易度:Medium

第4ラウンド:LP行動面接+アルゴリズム

LP1:Ownership — 自身の責任範囲を超えた問題の所有
LP2:Learn and Be Curious — 新技術の迅速な学習経験
フォローアップ:Ownershipの境界とトレードオフ
アルゴリズム:LRUキャッシュ+スレッドセーフティフォローアップ
ポイント:HashMap + 双方向リンクリスト、並行制御(セグメントロック)
難易度:Medium(原題)/ Hard(フォローアップ)

気づきとアドバイス

面接終了から約5営業日後、リクルーターから電話があり、オファーを受け取ったと通知されました——SeattleのSDE IIで、総報酬パッケージは予想を上回るものでした。プロセス全体を振り返って、Amazon面接を準備している方々にいくつかアドバイスを共有します:

1. LPは単なる形式ではない——Amazon面接の核心である
以前はLP行動面接は形式的なものだと思っていましたが、面接官は深く掘り下げ、すべての詳細についてフォローアップしました。少なくとも6〜8個の異なるシナリオのストーリーを準備し、それぞれが2〜3のLP原則をカバーするように、STARメソッドで整理することをお勧めします。特にインパクトの定量化に注意してください——「応答時間を30%改善した」は「応答時間を改善した」よりはるかに説得力があります。

2. アルゴリズム問題はLeetCode Medium程度だが、フォローアップの準備を
Amazonのアルゴリズム問題は極端に難しいものではありませんが、面接官はほぼ必ずフォローアップを追加します——スレッドセーフティ、空間最適化、エッジケースなど。練習の際はACを目指すだけでなく、各データ構造のバリエーションと拡張を理解してください。

3. システム設計ではAmazonの技術スタックの嗜好を反映する
面接中にDynamoDB、ElastiCache、CloudWatchなどのAWSサービスに言及するとボーナスポイントになります。無理に押し込むのではなく、AWSエコシステムに慣れていれば、設計でこれらのコンポーネントを自然に取り入れることで、面接官によりフィットしていると印象付けられます。

4. 面接は双方向の選択——ありのままの自分で
第4ラウンドのLPフォローアップへの回答は完璧ではありませんでしたが、すべて実際の経験と真の考えに基づいていました。Amazonの面接官はauthenticity(真正性)を重視します——捏造されたストーリーは深い掘り下げに耐えられません。テンプレートを暗記するより、自分自身の実際のプロジェクト経験をしっかりと整理する時間を費やしてください。

FAQ

Q1:Amazon SDE II面接は通常何ラウンドありますか?
通常、OA + 4ラウンドのバーチャルオンスサイトです。4ラウンドのうち、1ラウンドは純粋なシステム設計で、3ラウンドはLP+アルゴリズムです。一部の候補者には追加のbar raiserラウンドがある場合もありますが、私の面接では遭遇しませんでした。

Q2:Amazon LP行動面接は本当にどれくらい重要ですか?
非常に重要です。Amazonでは「LPは面接の50%」と言われています。正確な重み付けではありませんが、私の経験ではLPと技術スキルの比重はほぼ半々でした。LPの回答が弱ければ、アルゴリズムを全問正解してもリジェクトされる可能性があります。Amazonの16のLeadership Principlesをすべてしっかりと研究し、それぞれについて少なくとも1〜2のストーリーを準備することをお勧めします。

Q3:OAで満点でなくても通過できますか?
はい。私のOAの第2問はテストケースの80%しか通過しませんでしたが、それでも通過しました。Amazonは単なる通過率よりも問題解決のアプローチとコード品質を重視します。もちろん、両方の問題で半分しか通過していない場合は少し厳しいかもしれません。

Q4:面接中にLP質問に日本語で答えてもいいですか?
上海オフィスの面接を受ける場合、一部の面接官は中国語を話す可能性があり、中国語でコミュニケーションできるかもしれません。しかし、Seattleオフィスの面接官はほぼ例外なく英語を話します。完全に英語で準備し、回答することをお勧めします。面接官が中国系であっても、英語で質問された場合は英語で回答すべきです。

Q5:面接からオファーまで通常どれくらいかかりますか?
私の場合、面接後5営業日で結果が出ました。しかし、私の理解では、Amazonのdebrief meetingは通常面接後1〜2週間以内に開催され、その後リクルーターが結果を通知します。2週間以上連絡がない場合は、メールで積極的にフォローアップしても問題ありません。

関連テンプレート

#Amazon#SDE面试#システム設計#Leadership Principles#面试 Real Questions