Oracle OCI IC2/IC3 面接体験談 — バンガロール、2022年
更新日: 2026年7月17日
候補者はシニアソフトウェアエンジニア兼テックリードとして働いており、インドのトップクラスの大学でコンピュータサイエンスの学位を取得していた。バンガロールのOracle Cloud Infrastructure(OCI)チームのICレベル職に応募した。投稿のタイトルではレベルがIC2と記載されているが、本文ではIC3と記載されており、原文でもこの食い違いは解消されていないため、ここでは両方を併記する。
選考プロセスは5ラウンドで構成されており、ハイレベル設計とローレベル設計を組み合わせたシステム設計、過去のプロジェクトとデータベースの基礎知識を中心としたハイアリングマネージャーとの会話、そしてコーディング問題と行動面接を組み合わせた複数のラウンドが含まれていた。最終的にオファーを獲得した。
選考プロセス
ラウンド1 — HLD/LLD(高レベル設計/低レベル設計)
60分のシステム設計ラウンド。Uberに似た駐車場システムを設計する課題で、ユーザーが現在地に基づいて近隣の駐車場の空きスペースを確認できるようにするというもの。早期予約、ジオフェンシング、障がい者向けスペースの割り当て、ピーク時のトラフィック対応、データベース選定まで、すべてがスコープに含まれていた。ローレベル設計も求められ、面接官は途中で要件を変更した。
ラウンド2 — ハイアリングマネージャー
面接官のチームや手掛けているプロダクト、入社後に候補者が携わることになりそうな業務についての会話、そして候補者の直近のプロジェクト(設計、課題設定、API成功率、効率改善)についての詳細な説明。データベース選定、ACID特性、プロジェクトマネジメント、転職理由についても扱われた。
ラウンド3 — DSA(データ構造とアルゴリズム)/プロジェクトディスカッション
候補者はSTAR法を用いて現在のプロジェクトを説明し、その後LeetCode形式の文字列問題を2問解いた。最後にいくつかの行動面接の質問があった。
ラウンド4 — DSA/HLD/行動面接
候補者の現在のプロジェクトにおけるマイクロサービス構成と処理フロー全体についての質問、チームを率いた経験に関する行動面接の質問、そして条件付きディレクティブ処理をスタックを使って解くコーディング問題があった。
ラウンド5 — DSA/システム設計/行動面接
技術スタックの選定、CAP定理、ACIDの分離性(アイソレーション)に関する質問に加え、順列の部分文字列を数えるスライディングウィンドウのコーディング問題があった。
結果
候補者はオファーを獲得した。
ラウンド1 — HLD/LLDラウンド
位置情報を活用した駐車場プラットフォームのシステム設計。ハイレベル設計とローレベル設計の両方が求められた · 60分
- Uberに似た駐車場システムを設計してください。ユーザーは現在地に基づいて近隣の駐車場の空きスペースを確認できるようにします。
- 駐車スペースの早期予約をどのようにサポートしますか?
- ジオフェンシングを使って、空きスペースがある最寄りの駐車場をユーザーにどう表示しますか?
- 障がいを持つユーザー向けに特定のスペースをどのように割り当てますか?
- ピーク時のトラフィックをどう処理しますか(例:ロードバランサー、最適化されたアルゴリズムなど)?
- トラフィックが多い状況で、障がい者用スペースに空きがある場合、その割り当てをどう処理しますか?
- 入場してきた利用者が予約をした本人であることをどう確認しますか?
- 駐車場のプロセス全体をどのようにエンドツーエンドで自動化しますか?
- どのデータベースを使いますか、その理由は?
面接官はディスカッションの途中で機能要件を変更したため、候補者は新たな変更に対応できる柔軟性を持たせて設計しておくとよいと述べている。
ハイレベル設計に加えてローレベル設計も求められた。
ラウンド2 — ハイアリングマネージャーラウンド
チームやプロジェクトとのフィット、候補者の直近のプロジェクトの深掘り、データベースの基礎知識
- 直近のプロジェクトについて、設計、課題設定、API成功率、システムの効率をどう改善したかを含めて詳しく説明してください。
- プロジェクトのデータベースをどう選定しますか?(CAP定理に基づいた説明が求められた。)
- ACID特性とは何ですか?分離性(アイソレーション)と永続性(デュラビリティ)について説明してください。
- 決められた期間内に完了できないほど大規模なプロジェクトをどうマネジメントしますか?
- これまでどのような言語を使ってきましたか?
- なぜ転職を考えているのですか?
面接官は自身のチームや手掛けているプロダクト、入社後に候補者が携わることになりそうな業務についても説明した。
原文には詳細が記載されていない追加の行動面接の質問もあった。
ラウンド3 — DSA/プロジェクトディスカッションラウンド
候補者のプロジェクトの構造立てた説明と、文字列を扱う2問のコーディング問題
- STAR法を用いて現在のプロジェクトを説明してください。
- Valid Parentheses(有効な括弧)(leetcode.com/problems/valid-parentheses/)
- Longest Valid Parentheses(最長の有効な括弧)(leetcode.com/problems/longest-valid-parentheses/)
ラウンドの最後にいくつかの行動面接の質問があった。
ラウンド4 — DSA/HLD/行動面接ラウンド
候補者の現在のプロジェクトのアーキテクチャ、リーダーシップに関する行動面接の質問、コーディング問題
- 現在のプロジェクトにはどのようなマイクロサービスがありますか?
- 処理フロー全体を説明してください。
- チームを率いることや問題への対処に関する行動面接の質問。
- 文字列の並びと、フラグのマップ(#ifdef/#ifndef/#endif形式のディレクティブを含む。例:{FOO: true, BAR: true}のようなマップ)が与えられたとき、それを囲む条件がtrueと評価される文字列だけを出力してください。
候補者は、ネストされた各if文ブロックで有効なフラグを追跡するためにスタックを使い、この条件付きディレクティブの問題を解いた。
ラウンド5 — DSA/システム設計/行動面接ラウンド
技術スタックの選定、データベース理論、スライディングウィンドウのコーディング問題
- 新しく始めるアプリケーションの技術スタックをどう決定しますか?
- CAP定理について説明してください。
- ACIDの分離性(アイソレーション)について説明してください。
- 文字列'logs'と文字列'password'が与えられたとき、logsの部分文字列のうちpasswordの順列になっているものの数を求めてください。
候補者はスライディングウィンドウ法を用いてこの部分文字列の順列問題を解いた。
候補者は、OCIの面接官は最適でなくても動作する解法を評価しているようだと述べ、時間が限られている場合はまず動く解法を書いてから最適化することを勧めている。
学びのポイント
- 自由度の高いシステム設計ラウンドでは、最初の要件リストを最終形として扱うのではなく、議論の途中で新しい要件が加わった場合に設計を調整できる余地を残しておくこと。
- 過去のプロジェクトについて、ハイレベルなアーキテクチャの概要だけでなく、API信頼性の数値や具体的な効率改善といった具体的な詳細まで深く説明できるように準備しておくこと。
- CAP定理やACID特性といった分散システムの基礎知識は、複数のラウンドで異なる角度から繰り返し問われたため、事前に復習しておくこと。
- コーディングラウンドでは、面接官が最も効率的でなくても動作する解法を評価することがあるため、まず動く解法を書いてから最適化すること。
- 自分のプロジェクトを、技術的な判断とその成果の両方が明確に伝わるよう、STAR法のような明確な構造で説明する練習をしておくこと。
出典
質問と選考プロセスの事実は、下記リンクの候補者本人の公開投稿に基づきます。本文は当サイトによる再構成です。
候補者本人による英語の公開体験談を翻訳(出典: LeetCode Discuss)