ソフトウェア デベロップメントのトピック
どのような技術的な質問に対する準備をする必要がありますか?
面接中に尋ねられるかもしれない技術的な話題を掘り下げる前に担当採用者に連絡し、議論とデモンストレーションを行う主な題材/スキルをご確認ください。通常、弊社の技術的な面接ではコードやシステムのデザインをホワイトボードを使用して演習して頂きます。また、発明することが私たちのDNAに組み込まれていることを心に留めて置いてください。テクノロジーは、私たちが顧客に提供する経験のあらゆる側面を進化させ、改善するために重要なツールです。顧客を念頭において、以下のトピックをお読みください。
技術的なトピック
プログラミング言語
技術職の面接の前に、特定のプログラミング言語を知っている必要はありません。しかし一般的には、主要な言語に精通していることは成功の必須条件となります。Java、Python、C#、C/C++、Rubyなどの言語の構文に精通している必要があります。またメモリ管理の仕組みや、最も一般的に使用されているコレクションやライブラリなど、言語のニュアンスをいくつか知っておく必要があります。
データ構造
弊社が行う仕事の大部分は、効率的な方法でデータへのアクセスを格納し提供することを含みます。これにはデータ構造に強い背景が必要です。一般的なデータ構造の内部の仕組みを理解し、さまざまなアプリケーションでその使用法を比較して対比させる必要があります。一般的な操作のランタイムと、メモリの使用方法を知っておく必要があります。
アルゴリズム
面接ではアルゴリズムの暗記能力に焦点を当てません。しかし、最も一般的なアルゴリズムをよく理解することで、いくつかの問題をさらに簡単に解決できるようになります。木構造、分割と征服、幅優先探索、深さ優先探索のような一般的なアルゴリズムを復習し、それぞれのトレードオフを理解してください。さまざまなクラスのアルゴリズムのランタイム、理論上の制限、基本的な実施戦略を知ることは、与えられたアルゴリズムの特定の詳細を暗記するより重要です。
コード
疑似的なコードではなく、構文として正しいコードを書くことを求められます。特定の言語のなかで統合開発環境を使わずともコードが非効率的であると感じたら、ペンと紙を使って快適なコードに作り変えることも可能です。Amazonでソフトウェア デベロップメント エンジニアが行う最も重要なことは、拡張性が高く、力強く、よくテストされたコードを書くことです。これらがコードの主な評価基準です。境界値でのチェックを行い想定外の入力が入り込まないことを確認してください。あなたのコード技術を披露するチャンスです。
オブジェクト指向のデザイン
優れたデザインには、拡張性が高く、バグのない、長く使えるコードが最も重要です。ソフトウェアの問題を解決する方法はほぼ無制限にありますが、ソフトウェアを拡張したり維持する必要がある場合、優れたソフトウェアデザインは成功に不可欠です。永続的なソフトウェアを構築する1つの方法は、オブジェクト指向のデザインの最善の措置を施すことです。いくつかの一般的で実用的なデザインパターンの実践的な知識、そしてオブジェクト指向の方法でソフトウェアを書く方法を知ることが必要です。特定のデザインパターンの詳細を説明するように求められることはありませんが、あなたのデザインのチョイスを守る必要があります。
データベース
弊社が書き込むソフトウェアのほとんどが、データー保存によりバックアップされています。将来の使用のためにデータを最も効率的に取り込み、格納する方法を考え出す際に、技術者は多くの課題に直面します。Amazonは、非リレーショナルデータベースを使う動きの最前線に立っています。弊社は開発者コミュニティに利用可能なDynamoDBなどのAmazon Web Servicesを製作し、非リレーショナルデータベースの利点を容易に活用できるようにしました。弊社は非リレーショナルデータベースの専門知識があることを期待していませんが、幅広いデータベースの概念とそのアプリケーションに精通している必要があります。リレーショナルデータベースと非リレーショナルデータベースのトレードオフについて精通しているほど、より良い準備ができます。
分散コンピューティング
Amazonのシステムは、高負荷で非常に厳しい公差の下で動作する必要があります。スケーリングに役立つ内部ツールがありますが、いくつかの基本的な分散コンピューティングの概念を理解することは重要です。サービス指向アーキテクチャ、マップリダクション、分散キャッシング、ロードバランシングなどのトピックを理解することは、遭遇する可能性のある複雑な分散アーキテクチャの質問の答えを導き出すのに役立ちます。
オペレーティングシステム
独自のオペレーティングシステムを一から構築する方法を知る必要はありませんが、コードのパフォーマンスに影響するいくつかのOSのトピックに精通している必要があります(例:メモリ管理、プロセス、スレッド、同期、ページング、マルチスレッド)。
インターネットのトピック
弊社のエンジニアは、インターネットの仕組みの基本に精通していることが期待されます。ブラウザがどのように高いレベルで機能するかについて、DNSルックアップやTCP/IPからソケット通信に至るまで知識に磨きをかけてください。世界的なウェブの仕組みの基本を確実に理解することが必要です。
一般的なマシン ラーニングとAI
データ駆動モデリング、プロトコル、エラー分析、統計的有意性について尋ねられることがあります。たとえば、問題の定義が与えられ、あなたはそれをマシン ラーニングの問題として仮説をたて、データソース、注釈、モデリング手法、潜在的な落とし穴などのアイデアを含む解決策を提案します。お気に入りのMLとAIの教科書を復習し、基本的なAI/MLの活用法とアルゴリズムを理解しましょう。
我々はこれが復習するべきトピックの中でも比較的長いリストになることを理解しています。。面接官はこれらのトピックのすべての詳細を暗記する能力を評価することはありません。面接官は問題を効率的かつ効果的に解決するために、あなたが知っている知識をどう適用するかをみています。技術職の面接の準備への時間は(時には)限られているため、コンピュータ科学の基礎を復習し、統合された開発環境の外部でコードを書く練習をすることをおすすめします。この方法がおそらく限られた時間の中で最良の結果をもたらすでしょう。