sdet interview questions
テストインタビューのソフトウェア開発エンジニア向けのこの完全なガイドを読んで、さまざまなラウンドで尋ねられるSDETインタビューの質問の形式と回答方法を確認してください。
このチュートリアルでは、SDETの役割についてよく寄せられる面接の質問について学習します。また、一般的に、面接の一般的なパターンを確認し、面接で優れているためのいくつかのヒントを共有します。
このチュートリアルのコーディングの問題にはJava言語を使用しますが、SDETチュートリアルのほとんどは言語にとらわれず、面接官は一般的に候補者が使用することを選択した言語に柔軟に対応します。
学習内容:
SDET面接準備ガイド
SDETインタビューは、ほとんどのトップ製品企業で、開発の役割のためにインタビューが行われる方法と非常によく似ています。これは、SDETも、開発者が知っているほとんどすべてのことを広く知って理解することが期待されているためです。
異なるのは、SDETインタビュー対象者が判断される基準です。この職種の面接担当者は、批判的思考スキルと、面接対象者がコーディングの実務経験を持ち、品質と詳細に目を向けているかどうかを確認します。
SDET面接の準備をしている人が主に焦点を当てるべきいくつかのポイントは次のとおりです。
javaは配列を値でメソッドに渡します
- ほとんどの場合、これらの面接はテクノロジーや言語に依存しないため、候補者は必要に応じて新しいテクノロジーを積極的に学習する(そして既存のスキルを活用する)必要があります。
- 最近のSDETの役割には、複数の利害関係者とのさまざまなレベルでのコミュニケーションとコラボレーションが必要であるため、優れたコミュニケーションとチームスキルが必要です。
- さまざまなシステム設計の概念、スケーラビリティ、同時実行性、非機能要件などの基本的な理解が必要です。
以下のセクションでは、いくつかのサンプル質問とともに、インタビューの一般的な形式を理解しようとします。
テストインタビューにおけるソフトウェア開発エンジニアのフォーマット
ほとんどの企業は、SDETの役割の候補者に面接する形式を好みます。その役割はチームに非常に固有であり、その人は採用されているチームに最適であると評価されることが期待されます。
しかし、インタビューのテーマは一般的に以下の点に基づいています。
- 電話での話し合い: マネージャーやチームメンバーとの会話。通常はスクリーニングラウンドです。
- 書かれたラウンド: テスト/テストケーシング固有の質問。
- コーディング能力ラウンド: 簡単なコーディングの質問(言語にとらわれない)と候補者は、本番レベルのコードを書くように求められます。
- 基本的な開発コンセプトの理解: OOPSの概念、SOLIDの原則などのように。
- テスト自動化フレームワークの設計と開発
- スクリプト言語: Selenium、Python、Javascriptなど
- カルチャーフィット/人事の議論と交渉
SDETインタビューの質問と回答
このセクションでは、SDETの役割を採用しているほとんどの製品会社が尋ねるさまざまなカテゴリについて、いくつかのサンプルの質問と詳細な回答について説明します。
コーディング能力
このラウンドでは、選択した言語で書くための簡単なコーディングの問題が与えられます。ここで、インタビュアーは、コーディング構造の習熟度を測定し、エッジシナリオやヌルチェックなどを処理したいと考えています。
時折、インタビュアーは書かれたプログラムの単体テストを書き留めるように頼むかもしれません。
いくつかのサンプル問題を見てみましょう。
Q#1)3番目の(一時)変数を使用せずに2つの数値を交換するプログラムを作成しますか?
回答 :
2つの数値を交換するプログラム:
public class SwapNos { public static void main(String() args) { System.out.println('Calling swap function with inputs 2 & 3'); swap(2,3); System.out.println('Calling swap function with inputs -3 & 5'); swap(-3,5); } private static void swap(int x, int y) { System.out.println('values before swap:' + x + ' and ' + y); // swap logic x = x + y; y = x - y; x = x - y; System.out.println('values after swap:' + x + ' and ' + y); } }
上記のコードスニペットの出力は次のとおりです。
上記のコードスニペットでは、インタビュアーが3番目の一時変数を使用せずに2つのnoを交換するように特に要求していることに注意することが重要です。また、ソリューションを送信する前に、少なくとも2〜3回の入力についてコードを確認(またはドライラン)することを常にお勧めすることが重要です。正の値と負の値を試してみましょう。
正の値: X = 2、Y = 3
// swap logic - x=2, y=3 x = x + y; => x=5 y = x - y; => y=2 x = x - y; => x=3 x & y swapped (x=3, y=2)
負の値: X = -3、Y = 5
// swap logic - x=-3, y=5 x = x + y; => x=2 y = x - y; => y=-3 x = x - y; => x=5 x & y swapped (x=5 & y=-3)
Q#2)数字を逆にするプログラムを書いてください。
回答: これで、問題の説明は最初は威圧的に見えるかもしれませんが、インタビュアーに質問を明確にするように依頼することは常に賢明です(ただし、詳細はそれほど多くありません)。面接官は問題についてのヒントを提供することを選択できますが、候補者が多くの質問をする場合、それは候補者が問題をよく理解するのに十分な時間を与えていないことも示します。
ここで、問題は候補者がいくつかの仮定をすることも期待しています– 例えば、 数値は整数にすることができます。入力が345の場合、出力は543(345の逆)になります。
このソリューションのコードスニペットを見てみましょう。
public class ReverseNumber { public static void main(String() args) { int num = 10025; System.out.println('Input - ' + num + ' Output:' + reverseNo(num)); } public static int reverseNo(int number) { int reversed = 0; while(number != 0) { int digit = number % 10; reversed = reversed * 10 + digit; number /= 10; } return reversed; } }
入力に対するこのプログラムの出力 :10025- 期待される :52001
Q#3)数の階乗を計算するプログラムを作成しますか?
回答: 階乗は、ほとんどすべてのインタビュー(開発者インタビューを含む)で最もよく聞かれる質問の1つです。
開発者のインタビューでは、動的計画法、再帰などのプログラミングの概念に重点が置かれますが、テストの観点からソフトウェア開発エンジニアからは、最大値、最小値、負の値などのエッジシナリオとアプローチ/効率を処理することが重要です。重要ですが、二次的になります。
再帰とforループを使用して負の数を処理し、階乗関数を呼び出すプログラムで処理する必要がある負の数に対してたとえば-9999の固定値を返す階乗のプログラムを見てみましょう。
以下のコードスニペットを参照してください。
public class Factorial { public static void main(String() args) { System.out.println('Factorial of 5 using loop is:' + factorialWithLoop(5)); System.out.println('Factorial of 10 using recursion is:' + factorialWithRecursion(10)); System.out.println('Factorial of negative number -100 is:' + factorialWithLoop(-100)); } public static long factorialWithLoop(int n) { if(n <0) { System.out.println('Negative nos can't have factorial'); return -9999; } long fact = 1; for (int i = 2; i <= n; i++) { fact = fact * i; } return fact; } public static long factorialWithRecursion(int n) { if(n < 0) { System.out.println('Negative nos can't have factorial'); return -9999; } if (n <= 2) { return n; } return n * factorialWithRecursion(n - 1); } }
の出力を見てみましょう–ループを使用した階乗、再帰を使用した階乗、および負の数の階乗(デフォルトの設定値-9999を返します)
Q#4)特定の文字列にバランスの取れた括弧があるかどうかをチェックするプログラムを作成しますか?
回答:
アプローチ– これは少し複雑な問題であり、インタビュアーはコーディング構造の知識よりも少し多くを探しています。ここでは、目前の問題に対して適切なデータ構造を考えて使用することが期待されています。
聞いたことがない人もいるので、多くの人はこの種の問題に恐れを感じるかもしれません。したがって、単純であっても複雑に聞こえるかもしれません。
しかし、一般的にそのような問題/質問の場合:たとえば、 現在の質問では、バランスの取れた括弧が何であるかわからない場合は、インタビュアーに質問して、盲点にぶつかる代わりに解決策に取り組むことができます。
ソリューションへのアプローチ方法を見てみましょう。 バランスの取れた括弧とは何かを理解した後、適切なデータ構造の使用を検討し、ソリューションのコーディングを開始する前にアルゴリズム(ステップ)の作成を開始できます。多くの場合、アルゴリズム自体が多くのエッジシナリオを解決し、ソリューションがどのように見えるかについて多くの明確さを提供します。
解決策を見てみましょう:
バランスの取れた括弧は、括弧(または角かっこ)を含む特定の文字列をチェックするためのものであり、開始数と終了数が等しく、位置的に適切に構成されている必要があります。この問題のコンテキストでは、バランスの取れた括弧を– ‘()’、 ‘()’、 ‘{}’として使用します。つまり、指定された文字列はこれらの括弧の任意の組み合わせを持つことができます。
問題を解決する前に、文字列に角かっこ文字や数字などが含まれるかどうかを明確にすることをお勧めします(これによりロジックが少し変わる可能性があるため)
例: 与えられた文字列– '{() {}()} –は構造化されているためバランスの取れた文字列であり、閉じ括弧と開き括弧は同じではありませんが、文字列–' {(}) {}() '–この文字列–開き括弧と閉じ括弧の数が等しい場合、これはまだバランスが取れていません。これは、閉じない '('が閉じた '}'であることがわかるためです(つまり、外側のブラケットを閉じる前に、すべての内側のブラケットを閉じる必要があります)
この問題を解決するために、スタックデータ構造を使用します。スタックの基本についてもっと知りたい場合は、を参照してください。 ここに
スタックはLIFO(後入れ先出しタイプのデータ構造)であり、結婚式でのプレートのスタック/パイルと考えてください。使用するときはいつでも一番上のプレートを拾います。
アルゴリズム:
#1) 文字スタックを宣言します(文字列内の文字を保持し、ロジックによっては、文字を押してポップします)。
#2)入力文字列をトラバースし、いつでも
- 開き角かっこ文字があります。つまり、 ‘(‘、{‘または‘( ‘–文字をスタックにプッシュします。
- 終了文字があります–すなわち ')'、 '}'、 ')' –スタックから要素をポップし、それが終了文字の反対と一致するかどうかを確認します–つまり、文字が '}'の場合、スタックポップでは 'を期待する必要があります{'
- ポップされた要素が閉じ括弧と反対に一致しない場合、文字列はバランスが取れておらず、結果を返すことができます。
- それ以外の場合は、スタックプッシュアンドポップアプローチを続行します(ステップ2に進みます)。
- 文字列が完全にトラバースされ、スタックサイズもゼロの場合、指定された文字列はバランスの取れた括弧文字列であると言う/推測できます。
この時点で、アルゴリズムとして使用しているソリューションアプローチについて話し合い、インタビュアーがそのアプローチに問題がないことを確認することもできます。
コード:
import java.util.Stack; public class BalancedParanthesis { public static void main(String() args) { final String input1 = '{()}'; System.out.println('Checking balanced paranthesis for input:' + input1); if (isBalanced(input1)) { System.out.println('Given String is balanced'); } else { System.out.println('Given String is not balanced'); } } /** * function to check if a string has balanced parentheses or not * @param input_string the input string * @return if the string has balanced parentheses or not */ private static boolean isBalanced(String input_string) { Stack stack = new Stack(); for (int i = 0; i 上記のコードスニペットの出力:

以前のコーディングの問題で行ったように、少なくとも1〜2個の有効な入力と1〜2個の無効な入力を使用してコードをドライランし、すべてのケースが適切に処理されるようにすることをお勧めします。
注意: 解決策を(頭の中でだけでなく)大声で考えることは常に良いことです。驚くべきことに、これはインタビュアーが探している重要な特性です。多くのインタビュアーは、アルゴリズムを廃止して、次の問題ステートメントに進むことができます。
上記のコーディングソリューションでは、開発者インタビューの場合、インタビュアーは直接スタックではなく配列を使用して(つまり、配列をスタックとして使用して)解決するように求める場合がありますが、一般的には、概念的に明確であり、すべての有効な無効な入力。
テスト自動化フレームワーク関連
インタビューのこのセクションでは、テストとSDETの責任についてより具体的に説明します。自動化フレームワークの設計と開発に関連する質問、さまざまなアプローチを使用することの長所と短所などを期待してください。
同じ質問と解決策の例をいくつか見てみましょう。
Q#5)Webアプリケーションの自動化フレームワークのコンポーネントを説明および設計しますか?
回答: この質問は少し主観的であり、面接官は候補者がフレームワークの設計と開発についてどれだけ知っているかを測定するつもりです。この質問への回答は、面接官が候補者がカスタムフレームワークを最初から構築または作成できるかどうかを理解するのに役立ちます。
この質問の解決策を構築するのに役立ついくつかのポイントを見てみましょう。
- データ駆動型、キーワード駆動型、ハイブリッドフレームワークなどのさまざまなタイプのフレームワークについて話すことができます。
- Webアプリケーションのさまざまなページ/モジュールにさまざまな要素の詳細を格納するためのページオブジェクトモデル。
- ヘルパー関数、ユーティリティ、ロガーなどの一般的なモジュール。
- テスト実行のレポートの生成、電子メールとのレポートの統合、テスト実行のスケジューリングなどのレポートモジュール。
推奨読書=> 最も人気のあるテスト自動化フレームワーク
Q#6)モバイルアプリケーションのテスト戦略について説明してください。
回答: これらの質問は通常、役割に応じて尋ねられます。役割が主にモバイルアプリで機能することである場合、質問はより関連性があります。現在または以前の役割の一部としてモバイルテストを計画している場合は、経験から話すことができます。
この質問への答えを構成するためのいくつかの指針は、
- デバイスとエミュレーターでのテスト。
- さまざまな画面上のオブジェクト/要素の識別と保存– 例: ページオブジェクトモデル。
- モバイルアプリケーションの負荷テスト。
- ネイティブアプリ、ハイブリッドアプリなど、さまざまな種類のモバイルアプリケーションについて話し、それらをテストするために使用する戦略/アプローチについて話し合うことができます。
推奨読書=> モバイルアプリテストチュートリアル
Q#7)REST APIをテストするための自動化フレームワークを設計しますか?
回答: これも主観的な質問であり、インタビュアーがAPIの機能動作をテストするためのフレームワークを開発することを望んでいるか、負荷/パフォーマンステストなどの非機能要件を開発することを望んでいるかを明確にする質問をすることができます。
あなたは以下の点をカバーするあなたの答えを始めることができます:
- ローカルセットアップ、APIのモックセットアップ、ホステッドAPIテストなどのAPI自動化フレームワークコンポーネント。
- API自動化に使用されるツール。 RESTベースのAPIの機能面を検証するために、すぐに使用できるさまざまなツールがあります。そのようなツールには、Postman、Rest Assuredなどがあります。さまざまなツールの詳細については、当社の記事を参照してください。 ここに 。
- APIの非機能的自動化。
- 自動化テストのスケジュールされた実行。
- APIの自動化テストの統合。
Q#8)フレームワーク固有の質問。
回答: 面接対象のプロフィールによっては、候補者が特定のフレームワークに習熟している必要がある場合があります。 Selenium、JMeterなど。
推奨読書=> 郵便配達員 、 Mockito 、 Specflow 、 セレン 、 JMeter
テスト関連
まれですが、プロファイルによっては、バグの重大度、優先度、テスト計画、テストケーシングなど、一般的なテストプラクティス、用語、テクノロジーに関する質問がある場合があります。SDETは、すべての手動テストの概念を理解している必要があり、精通している必要があります。重要な用語で。
このセクションでは、次のような質問を期待できます。
Q#9)テスト計画のさまざまなコンポーネントは何ですか?
回答: これらは通常、基本的なテストの概念と考え方を検証するように求められます。これらの用語とドキュメントは、すべての手動QAおよび自動化SDETが知っておくべきものです。
ここでは、次のようなテスト計画のさまざまなコンポーネントについて話し合うことができます。
- 入退場基準
- 範囲: 範囲内にあるテスト機能と、すべてが自動化されるものについて話し合います。それは、単なる機能機能なのか、スケーラビリティやパフォーマンスなどの非機能要件なのか。
- タイムライン
- 使用するツール
- リソースの割り当てなど
推奨読書=> 良いテスト計画を書く方法
Q#10)バグの優先度と重大度を定義および決定するものは何ですか?
回答: 欠陥の優先度と重大度は、例を使用して簡単に説明できます。サインアップなどの機能が壊れていて、ユーザーがアプリケーションにアクセスできないと仮定します。これは、優先度が高く、重大度が高い問題です。同様に、重大度が低い/優先度が高い欠陥やその他のさまざまな組み合わせの例があります。
一般に、
- 優先度 問題の重要性を示します。
- 重大度 問題がアプリケーションの顧客またはユーザーに与える影響を示します。
推奨読書=> 欠陥の優先度と重大度
Q#11)等価パーティショニングとは何ですか?例を挙げて説明します。
回答: 等価パーティショニングは、特定のフィールドに対して入力のさまざまな組み合わせをテストするために、主にブラックボックステストに使用される手法です。
例えば、 トレーディングアプリケーションをテストしていて、「数量」フィールドのすべてのテストシナリオを記述したい場合、このフィールドでテストするさまざまな入力は何でしょうか。
機能要件として、数量は1〜100000の正の整数値である必要があります。したがって、さまざまな入力(有効と無効の両方)をテストするために、そのような各カテゴリから1つの入力をテストできます。
- 有効な値: 1から100000の間-> x> 1およびxとなるような有効な値xをテストします<100000.
- 境界値: 許可された境界値、つまり1と100000をテストします。
- 無効な値: 許容範囲外の値-つまり、x100000などのxの値を1つテストします。
推奨読書=> 等価分割戦略
システム設計関連
システム設計の質問は通常、スケーラビリティ、可用性、フォールトトレランス、データベースの選択、スレッド化など、さまざまな一般的な概念を広く理解して開発者が判断される開発者のインタビューに適しています。簡単に言うと、全体を使用する必要があります。そのような質問に答えるための経験とシステム知識。
しかし、コーディングに何年もの経験と何百人もの開発者が必要なシステムだと感じているかもしれませんが、人は約45分でどのように質問に答えることができますか?
答えは: ここでの期待は、候補者の理解と、複雑な問題を解決する際に適用できる幅広い知識を判断することです。
今日、これらの質問はSDETインタビューでも投げられ始めています。ここでの期待は開発者の面接と同じですが、判断基準が緩和され、候補者の回答に応じて、候補者が次のレベルに検討されるか、より低いレベルに移動される可能性があるバーレイザーラウンドがほとんどです。
一般的に、システム設計面接の質問の場合、候補者は以下の概念に精通している必要があります
- オペレーティングシステムの基本: ページング、ファイルシステム、仮想メモリ、物理メモリなど。
- ネットワークの概念: HTTP通信、TCP / IPスタック、ネットワークトポロジ。
- スケーラビリティの概念: 水平および垂直スケーリング。
- 並行性/スレッド化の概念
- データベースの種類: SQL / SQLデータベースなし、どのタイプのデータベースをいつ使用するか、さまざまなタイプのデータベースの長所と短所。
- ハッシュ手法
- の基本的な理解 キャップ 定理、シャーディング、パーティショニングなど。
いくつかのサンプル質問を見てみましょう
Q#12)次のようなURL短縮システムを設計する 小さなURL ?
回答: 多くの受験者は、一般的なURL短縮システムについてさえ知らないかもしれません。その場合、理解せずに飛び込むのではなく、問題の説明についてインタビュアーに尋ねてもかまいません。
そのような質問に答える前に、候補者は解決策を構成し、箇条書きを書いてから、面接官と解決策について話し合う必要があります。
ソリューションについて簡単に説明しましょう
a)機能要件と非機能要件を明確にする
機能要件: 機能要件は、単に顧客の観点からのものであり、大きな(長い)URLが供給されるシステムであり、出力は短縮URLである必要があります。
短縮URLにアクセスすると、ユーザーを元のURLにリダイレクトする必要があります。 例えば - https://tinyurl.com/ Webページで実際のURLを短縮してみて、www.softwaretestinghelp.comのような入力URLをフィードすると、https://tinyurl.com/shclcqaのような小さなURLが得られるはずです。
非機能要件: システムは、ミリ秒の遅延でリダイレクトするという点でパフォーマンスが高い必要があります(元のURLにアクセスするユーザーの追加ホップとして)。
- 短縮URLには、設定可能な有効期限が必要です。
- 短縮URLは予測できないはずです。
b)容量/トラフィックの見積もり
これは、すべてのシステム設計の質問の観点から非常に重要です。容量見積もりは、基本的に、システムが取得しようとしている予想負荷を決定します。仮定から始めて、インタビュアーと話し合うことは常に良いことです。これは、システムの読み取りが多いか書き込みが多いかなど、データベースのサイズ設定を計画するという観点からも重要です。
URL短縮サービスの例で容量の数値をいくつか見てみましょう。
1日あたり10万件の新しいURL短縮リクエストがあるとします(読み取り/書き込み比率が100:1の場合、つまり、短縮URLが1つごとに、短縮URLに対して100件の読み取りリクエストがあります)。
だから私たちは、
100k write requests/day => 100000/(24x60x60) => 1.15 request/second 10000k read requests/day => 10000000/(24x60x60) => 1157 requests/second
c)ストレージとメモリに関する考慮事項
容量の数値の後で、これらの数値を推定して、
- 予想される負荷に対応するために必要なストレージ容量、 例えば、 最大1年間のリクエストをサポートするストレージソリューションの設計を計画できます。
例: すべての短縮URLが50バイトを消費する場合、1年間に必要となるデータ/ストレージの合計は次のようになります。
=> total write requests/day x 365 x 50 / (1024x1024) => 1740 MB
- 読者の観点からシステムを計画するには、メモリに関する考慮事項が重要です。つまり、私たちが構築しようとしているシステムのように、読み取りが多いシステムの場合(URLは一度作成されますが、複数回アクセスされるため)。
読み取りが多いシステムでは、通常、キャッシュを使用してパフォーマンスを向上させ、永続ストレージからの読み取りを回避して読み取りI / Oを節約します。
読み取り要求の60%をキャッシュに保存したいとします。そのため、1年間で、各エントリに必要なxバイトの合計読み取りの60%が必要になります。
=> (60/100) x 100000 x 365 x (50/1024x1024) => 1045 MB ~ 1GB
したがって、容量の数値によると、このシステムには約1GBの物理メモリが必要です。
d)帯域幅の見積もり
帯域幅の見積もりは、システムの実行に必要な読み取りおよび書き込み速度をバイト単位で分析するために必要です。取得した容量の数値に対して見積もりを行いましょう。
例: すべての短縮URLが50バイトを消費する場合、必要な読み取りと書き込みの合計速度は次のようになります。
WRITE - 1.15 x 50bytes = 57.5 bytes/s READS - 1157 x 50bytes = 57500 bytes/s => 57500 / 1024 => 56.15 Kb/s
e)システム設計とアルゴリズム
これは基本的に、機能要件を満たすために使用される主要なビジネスロジックまたはアルゴリズムです。この場合、特定のURLに対して一意の短縮URLを生成する必要があります。
短縮URLを生成するために使用できるさまざまなアプローチは次のとおりです。
ハッシュ: 入力URLのハッシュを作成し、そのハッシュキーを短縮URLとして割り当てることで、短縮URLを生成することが考えられます。

このアプローチでは、サービスのユーザーが異なる場合にいくつかの問題が発生する可能性があり、同じURLを入力すると、同じ短縮URLが取得されます。
事前に作成された短縮文字列サービスが呼び出されたときにURLに割り当てられます: 別のアプローチは、すでに生成された文字列のプールから事前定義された短縮文字列を返すことです。

サービスAPI: URL短縮システムは、次のエンドポイントを持つRESTベースのAPIのセットと考えることができます。
- createUrl(String Url、DateTime expiryTime): このエンドポイントは、入力で指定された有効期限が設定された短縮URLを作成して返します。
- retrieveUrl(String ShortedUrl): このエンドポイントは、指定された短縮URLに対してリダイレクトされるURLを取得します。
f)スケーリングと並行性
スケーリングは、非機能要件の観点から重要な考慮事項です。
それはどのようにシステムを扱うことができますか
- 負荷がかかった状態でのスケール: システムは、予期しない負荷の急上昇が発生した後に動作を停止するだけでなく、負荷がかかった状態で適切に拡張できる必要があります。
推奨読書=> スケーリング手法
- システムのパフォーマンスはどの程度か、 例えば: システムを長期間持続的に使用した場合、システムのパフォーマンスは低下しますか、それとも安定したままですか?
以下のようなさまざまなシステム設計の質問がありますが、一般的に言えば、これらはすべて、URL短縮システムのソリューションで説明したさまざまな概念についての候補者の幅広い理解をテストします。
Q#13)Youtubeのようなビデオプラットフォームを設計します。
回答: この質問には、上記のTinyUrlの質問と同様の方法でアプローチすることもできます(これは、ほとんどすべてのシステム設計インタビューの質問に当てはまります)。差別化要因の1つは、設計するシステムの外観/詳細です。
したがって、Youtubeの場合、私たちは皆、そのビデオストリーミングアプリケーションを知っており、ユーザーが新しいビデオをアップロードしたり、ライブWebキャストをストリーミングしたりできるようにするなど、多くの機能を備えています。したがって、システムを設計する際には、必要なシステム設計コンポーネントを適用する必要があります。この場合、ビデオストリーミング機能に関連するコンポーネントを追加する必要があるかもしれません。
次のような点について話し合うことができます。
- ストレージ: ビデオコンテンツ、ユーザープロファイル、プレイリストなどを保存するためにどのような種類のデータベースを選択しますか?
- セキュリティと認証/承認
- キャッシング: YouTubeのようなストリーミングプラットフォームはパフォーマンスが高いはずなので、キャッシュはそのようなシステムを設計するための重要な要素です。
- 並行性: 何人のユーザーがビデオを並行してストリーミングできますか?
- ユーザーが次に見ることができるビデオを推奨/提案するビデオ推奨サービスなどの他のプラットフォーム機能。
Q#14)6台のエレベータを操作するための効率的なシステムを設計し、リフトが到着するのを待つ間、人が最小時間待つ必要があることを確認します ?
回答: これらのタイプのシステム設計の質問はより低レベルであり、候補者は最初にエレベータシステムを検討し、サポートする必要のあるすべての可能な機能をリストし、ソリューションとしてクラスとDB関係/スキーマを設計/作成することを期待します。
SDETの観点からは、インタビュアーは、アプリケーションまたはシステムにあると思われるメインクラスを期待し、基本的な機能は提案されたソリューションで処理されます。
期待されるエレベータシステムのさまざまな機能を見てみましょう
次のような明確な質問をすることができます
- 何階ありますか?
- エレベーターはいくつありますか?
- すべてのエレベーターはサービス/乗客用リフトですか?
- すべてのエレベータは各フロアで停止するように構成されていますか?
単純なエレベータシステムに適用できるさまざまな使用例を次に示します。

このシステムのコアクラス/オブジェクトに関しては、次のことを検討できます。
- ユーザー: ユーザーのすべてのプロパティと、ユーザーがエレベータオブジェクトに対して実行できるアクションを扱います。
- エレベーター: 高さ、幅、elevator_serial_numberなどのエレベータ固有のプロパティ。
- エレベータードア: ドアがない、ドアの種類、自動または手動など、ドアに関連するすべてのもの。
- Elevator_Button_Control: エレベータで使用可能なさまざまなボタン/コントロールと、それらのコントロールを使用できるさまざまな状態。
クラスとその関係の設計が完了したら、DBスキーマの構成について話すことができます。
エレベーターシステムのもう1つの重要なコンポーネントは、総合馬術システムです。キューの実装について、またはより複雑なセットアップで、Apache Kafkaを使用してイベントストリームを作成し、イベントがそれぞれのシステムに配信されて処理されるようにすることについて話すことができます。
リフトを同時に使用する複数のユーザー(異なるフロア)がいるため、イベントシステムは重要な側面です。したがって、ユーザーの要求はキューに入れられ、Elevatorコントローラーで構成されたロジックに従って処理される必要があります。
Q#15)Instagram / Twitter / Facebookをデザインします。
回答: これらのプラットフォームはすべて、ユーザーが何らかの方法で接続し、メッセージ/ビデオやチャットなどのさまざまなメディアタイプを介して物事を共有できるようにするため、何らかの形で関連しています。
したがって、これらのタイプのソーシャルメディアアプリケーション/プラットフォームについては、そのようなシステムの設計について説明する際に、以下の点を含める必要があります(URL短縮システムの設計について説明した内容に加えて)。
- 容量の見積もり: これらのシステムのほとんどは読み取りが多いため、容量の見積もりが必要であり、必要な負荷に対応するために適切なサーバーとデータベースの構成を確保できます。
- DBスキーム: 議論する必要がある主な重要なDBスキーマは、ユーザーの詳細、ユーザーの関係、メッセージスキーマ、コンテンツスキーマです。
- ビデオおよび画像ホスティングサーバー: これらのアプリケーションのほとんどには、ユーザー間で共有されるビデオと画像があります。したがって、ビデオおよびイメージホスティングサーバーは、必要に応じて構成する必要があります。
- セキュリティ: これらのアプリはすべて、保存するユーザーのユーザー情報/個人情報により、高レベルのセキュリティを確保する必要があります。ハッキングの試みは、何百万もの顧客のデータを失うコストがかかる可能性があるため、これらのプラットフォームでは成功しないはずです。
シナリオベースの問題
シナリオベースの問題は、一般的に上級レベルの人々を対象としています。そこでは、さまざまなリアルタイムシナリオが与えられ、候補者はそのような状況にどのように対処するかについての考えを尋ねられます。
Q#16)重要な修正プログラムをできるだけ早くリリースする必要があるとすると、どのようなテスト戦略を立てますか?
回答: さて、ここでインタビュアーは本質的に理解したいと思っています
- どのように、そしてどのようなテスト戦略を考えることができますか?
- ホットフィックスに対してどのようなカバレッジを行いますか?
- 展開後の修正プログラムをどのように検証しますか?等
そのような質問に答えるために、 問題に関連することができれば、実際の状況を使用できます。また、適切なテストがなければ、コードを本番環境にリリースすることをいとわないことにも言及する必要があります。
重要な修正については、常に開発者と協力して、影響を受ける可能性のある領域を理解し、シナリオを複製して修正をテストするための非実稼働環境を準備する必要があります。
ここで重要なのは、展開後も(監視ツール、ダッシュボード、ログなどを使用して)修正を監視し続け、本番環境での異常な動作を確認し、修正による悪影響がないことを確認することです。完了しました。
自動化テスト、納期などに関する候補者の視点を理解することを主な目的とする他の質問もあるかもしれません(これらの質問は、会社ごとに、また役割の年功序列によって異なる場合があります。通常、これらの質問は上級/リードレベルで尋ねられます役割)
Q#17)製品を迅速にリリースするために、完全なテストを犠牲にしますか?
回答: これらの質問には通常、インタビュアーがリーダーシップの観点からあなたの考えを理解し、妥協することは何であるかを理解することが含まれます。時間の代わりにバグのある製品をリリースしてもかまいません。
これらの質問への回答は、候補者の実際の経験に照らして実証する必要があります。
例えば、 以前は、修正プログラムをリリースするために電話をかける必要がありましたが、統合環境が利用できないため、テストできませんでした。そのため、制御された方法でリリースしました。より小さな割合にロールアウトしてから、ログ/イベントを監視してから、完全なロールアウトを開始しました。
Q#18)自動化テストがまったくない製品の自動化戦略をどのように作成しますか?
回答: これらのタイプの質問は自由形式であり、一般的に、あなたが望む方法で議論を行うのに適した場所です。また、自分の強みであるスキル、知識、テクノロジー分野を紹介することもできます。
例えば、 これらのタイプの質問に答えるために、過去の役割で製品を構築する際に採用した自動化戦略の例を引用できます。
たとえば、次のような点について言及できます。
- 製品は自動化を最初から開始する必要があるため、新しいツールの導入を避け、既存の知識を活用するために、ほとんどの人が知識を持っている言語/テクノロジーを選択する適切な自動化フレームワークを考えて設計するのに十分な時間がありました。
- あなたは、P1と見なされた最も基本的な機能シナリオを自動化することから始めました(それなしではリリースは通過できませんでした)。
- また、JMETER、LoadRunnerなどの自動テストツールを使用して、システムのパフォーマンスとスケーラビリティをテストすることについても考えました。
- あなたは、にリストされているように、アプリケーションのセキュリティ面を自動化することを考えました OWASP セキュリティ基準。
- 早期フィードバックなどのために、自動テストをビルドパイプラインに統合しました。
チームフィット&カルチャーフィット
このラウンドは通常、会社によって異なります。しかし、このラウンドの必要性/必要性は、チームと組織文化の観点から候補者を理解することです。これらの質問の目的は、候補者の性格や仕事や人などに対する彼らのアプローチを理解することでもあります。
一般的に、このラウンドを実施するのは人事マネージャーと採用マネージャーです。
このラウンド中に通常出てくる質問は次のとおりです。
Q#19)現在の役割内の競合をどのように解決しますか?
回答: ここでの詳細な説明は次のとおりです。上司または直属のチームメンバーと対立している場合、それらの対立を解決するために実行する手順は何ですか。
このタイプの質問については、現在または以前の組織でのキャリアの中で起こった可能性のある実際の例を使用して、できる限り多くのことを実証します。
あなたは次のようなことを言うことができます:
- あなたは、職業上の理由の結果として生じる対立をできるだけ早く整理したいと思っています(そして、これらのためにあなたの個人的な関係に影響を与えたくないです)。
- あなたは一般的に効果的にコミュニケーションを取り、違い/問題を解決するためにその人と個別に話したり話し合ったりしようとしていると言うことができます。
- 事態が悪化し始めたら、先輩/上司の助けを借りて、彼/彼女の意見を聞くと言うことができます。
チーム適合/文化適合の質問の他の例を以下に示します(それらのほとんどは、上記の質問で説明したのと同様のアプローチで回答する必要があります。実際のシナリオについて話すことは、インタビュアーがより良い方法でそれを関連付けることができるため、ここで重要です。上手。
Q#20)採用されると考えられる新しい役割に、どのようなワークライフバランスを期待していますか?
回答: 採用マネージャーは役割が何を要求するかを知っている人なので、時にはどれだけの余分な労力が必要になるかを知っているので、一般的に面接官はあなたの期待が役割の期待と根本的に異なるかどうかを判断しようとします。
あなたが言うとしましょう 夜の会議に出席することを好まないこと、および役割が異なるタイムゾーンにあるチーム間の主要なコラボレーションを期待している場合、インタビュアーはこれらが役割からの期待であるという議論を開始する可能性があります–あなたはできるでしょうか適応する?等
繰り返しになりますが、これはカジュアルな会話ですが、面接官の観点からは、面接対象のポジションの候補者を評価するためのあなたの期待を理解したいと考えています。
Q#21)仕事以外の趣味は何ですか?
回答: これらの質問は純粋に主観的で個人固有のものであり、これらの質問は一般に、候補者がリラックスして簡単に感じ、カジュアルなディスカッションを開始するのに役立ちます。
一般に、これらの質問への回答は次のようになります。特定のジャンルを読みたい、音楽が好き、自主的/慈善活動に対して賞を受賞したなど。また、これらの質問は通常、人事ラウンドで尋ねられます(および技術者からの質問が少ない)。
Q#22)新しいツールやテクノロジーの学習に積極的に費やす時間はどれくらいですか?
回答: ここで、インタビュアーは、何か変わったものや新しいものがあなたに投げかけられた場合に、新しいことを学ぶ意欲を測定しています。また、インタビュアーにあなたが積極的であることを知らせますか?あなたはあなた自身とあなたのキャリアに投資する気がありますか?等
したがって、そのような質問に答えるときは、正直になり、例を挙げて答えを実証してください。 例えば、 あなたは昨年Java認定資格を取得し、毎週数時間かけて仕事以外の準備をしたと言えます。
結論
この記事では、テスト面接プロセスのソフトウェア開発エンジニアと、さまざまな組織やプロファイルの候補者から一般的に尋ねられるサンプルの質問について説明しました。一般的に、SDETの面接は本質的に非常に幅広く、会社ごとに大きく依存します。
ただし、面接のプロセスは、品質と自動化のフレームワークに重点を置いた開発者プロファイルの場合と似ています。
現在、企業は特定の言語やテクノロジーに重点を置いているのではなく、概念の幅広い理解と、企業が必要とするツールやテクノロジーに適応する能力に重点を置いていることを理解することが重要です。
SDETインタビューをお祈りします!
推奨読書