Coinbaseがエンジニアリングの役割についてインタビューする方法

Coinbaseは、世界の経済的自由を高めるという使命を担っています。 この使命を達成するために、私たちは高性能のチームを構築する必要があります。 私たちの最優先事項は、優れた才能を引き付け、維持することです。 そして、私たちはすべての席に優秀な人々を配置するために特別な措置を講じています。 この投稿は、技術面接プロセスで私たちが探しているもののプレビューを候補者に提供することを目的としています。

この投稿では、エンジニアリング候補者に注目することに焦点を当てます。 このアドバイスの一部は他のポジションにも当てはまりますが、エンジニアとして参加したい場合に最も役立ちます。

面接プロセスに参加すると、一連の段階を経て進みます。 各段階で、面接対象の役割が相互に適切であることを確認するために、さまざまな方法であなたを評価します。 直面する演習や質問はさまざまですが、Coinbaseの文化的信条には常に注意を払っています。

  • 明確なコミュニケーション
  • 効率的な実行
  • 所有者のように振る舞う
  • トップタレント
  • チャンピオンシップチーム
  • 顧客重視
  • 繰り返し可能なイノベーション
  • 正のエネルギー
  • 継続的な学習

これらの信条についてもっと知る ここ。 面接のすべての段階でこれらすべての資質を示す機会が得られるとは限りませんが、これにより、私たちが何を求めているかについての良いアイデアが得られます。 私たちがあなたのパフォーマンスを評価するとき、私たちはこれらの信条のレンズを通してほとんど独占的に評価します。

面接の段階は(通常、常にではありませんが):

  • 役割についてのHRの誰かとの最初のチャット
  • 1つの60分のペアプログラミングの問題
  • 1つまたは2つの60分のエンジニアリングマネージャーのインタビュー
  • 1つまたは2つの60分または90分のペアプログラミングインタビュー
  • 1つまたは2つの60分のシステム設計インタビュー

オファーを受けるには、すべての段階でうまく機能する必要があるため、面接の各段階に備えることが重要です。 とはいえ、Coinbaseインタビューループで失敗したほとんどの人は、ペアプログラミングの段階で失敗します。 そこから始めましょう。

ペアプログラミング

ペアプログラミングの面接では、エンジニアの1人との問題を解決します。 まず、面接官が問題の簡単な説明を提供します。 問題の解決策をコーディングするのはあなた次第です。

この段階を通過するには、問題を解決するだけでは不十分です。 最小限のリートコードスタイルの最適なソリューションを探しているわけではありません。 プロダクショングレードのコードを作成できるという証拠を探しています。 その結果、私たちは評価します どちらも 最終結果 どのようにして結果に到達したか、両方のコンポーネントにクレジットを与えます。 バグに悩まされた場合、どのようにしてそれを克服しますか? あなたはあなたの工具をよく知っていますか? ブレークポイントを指定してデバッガーを使用しますか、それとも機能するまでコードのランダムな行を変更しますか? コーディングの問題にどのように取り組むかについての方法はありますか?

ソリューションの完全性と正確性を超えて検討します。 コードの品質と保守性も評価します。 あなたのコードはあなたが選んだ言語に特有のものですか? 読み通して理解するのは簡単ですか? 変数の命名はどうですか? IDEとターミナルで利用できるツールを活用していますか? コードが正しいことをどのように確信できますか? テストしましたか?

問題をどの程度理解していますか。 関連する明確な質問をしますか? 面接官のフィードバックをどの程度受け止めていますか?

問題の最後に到達しなくても落胆しないでください。 面接の問題は、割り当てられた時間を超えて満たされるように設計されています。 面接官は、90分が経過した後、または評価に自信がついたときに面接を停止します。 面接を早期に終了することは必ずしも悪い兆候ではありません。

面接に失敗するほとんどの候補者は、コードまたはプロセスが十分でないためにそうします。 通常、不完全な解決策で失敗することはありません。

実際の例を見てみましょう。 問題が次のとおりであるとします。

1からn—1までのすべての整数を含むリストがあるとします。リストはソートされません。 このリストでは、1つの整数が2回出現します。 どちらを決定する関数を記述します。

これが最初の解決策の例です(エラーがあります!):

def duplicates(integers):
"""duplicates takes a list of integers and returns the first duplicate value or None if all values are unique"""
 if not isinstance(integers, list):
  raise ArgumentError(“expected list as input”)
sorted_integers = integers.sort()
previous_value = nil
for x in sorted_integers:
 if x == previous_value:
  return x
 previous_value = x
 return None
def test_duplicates():
 assert duplicates([]) == None, "empty array is considered unique"
 assert duplicates([1, 2]) == None , "array of unique values returns None"
 assert duplicates([1, 2, 2]) == 2, "duplicate returns the duplicate integer"
 assert duplicates([1, 2, 2, 1]) == 2, "multiple duplicates returns the first duplicate"

そして2番目の解決策(ここにもエラーがあります!):

def dupilcateIntegers(l ):
 n = len(l)
 return sum(l) - ((len(l)+1) * len(l))/2

最初の解決策は実際には問題を解決しません。 しかし、作者はエラー処理と入力検証について考えたようです。 候補者は問題とそのエッジケースについて考えました。 さらに、このソリューションは、同じ問題のより大きく、より一般的なクラスも解決しようとします。 彼らは短いdocstringを追加し、コードは一般的に適切にフォーマットされた慣用的なpythonです。 最初の解決策をパスと見なす傾向があります。 実装にバグがあり、アルゴリズムは最適ではありませんが、コードは保守可能であり、一般的に適切に構造化されています(テストもあります!)。 この解決策は良いです。

2番目の解決策は正しく最適ですが、この候補者は面接に合格しません。 書式設定がずさんで、スペルミスや未使用の変数があります。 コード自体は簡潔で理解しにくいものです。 この候補者はおそらく拒否されます。

最後に、問題を完了するのに90分しかないことにも注意してください。 私たちの問題には実際にはトリックがなく、通常は素朴な解決策で十分です。 二分木を反転するように依頼することはありませんが、実際の問題の単純化されたバージョンを解決するように依頼します。 私たちは、ハッキーなソリューションではなく、本番環境のようなコードを探しています。

では、ペアプログラミングのインタビューにどのように備えるのが最善でしょうか。 Leetcodeの粉砕にあまり集中しないでください。 ファンダメンタルズに焦点を当てたほうがいいです。 エディター、デバッガー、および言語を学びます。 関連するメソッドと変数名、適切な状態管理、エラー処理を使用して、適切にフォーマットされ、適切に構造化されたコードを作成する練習をしてください。

システム設計

システム設計のインタビューでは、実際のサービスの一般的なアーキテクチャを設計するように求められます。 例えば: Twitterフィードをどのようにデザインしますか?

ブリーフは通常短いものであり、要件に関する説明を面接官に求めるのはあなた次第です。

デザインの特定の側面について深く掘り下げないでください(インタビュアーからの質問がない限り)。 それを一般的に保ち、よく知っているテクノロジーの具体例を挙げたほうがよいでしょう。それは、目前のユースケースに適しています。 例:「このサービスでは、クエリがどのように表示されるかが事前に正確にわからないため、RDBMデータベースが適しています。 MariaDBを選びます。」

問題全体に対処するようにしてください。すべてをカバーしたかどうかわからない場合は、インタビュアーに明確にするように依頼してください。

デザインの特定のコンポーネントの詳細がわからない場合は、インタビュアーに知らせて、答えを見つける方法を伝えるのが最善です。 翼を振らないでください。自信を持って間違っていることは否定的なシグナルですが、謙虚さは肯定的なシグナルです。 良い答えは次のようになります。「クエリパターンやその他の要件がここのSQLデータベースにうまく適合するかどうかはわかりませんが、MariaDBの経験が最も豊富なので、これがデフォルトの選択になります。 ただし、決定を下す前に、この特定のケースでそのパフォーマンスがどのように見えるかを調査する必要があります。 また、MongoDBのようなNoSQLの代替案や、Cassandraのような列全体のストアについても調査したいと思います。」

要件を調査する能力と、実際の生活で設計がどの程度うまく機能するかについて評価されます。 スケーラビリティを考慮していますか? エラー処理と回復はどうですか? あなたは変化のためにデザインしますか? 可観測性について考えたことはありますか? また、デザインや考えを面接官にどれだけうまく伝えているかについても評価されます。

一般的なヒント

面接の過程で、スキルの一致があるかどうかを理解するのに役立つシグナルを探しますが、より重要なのは文化的な適合性です。 私たちが探しているシグナルのいくつか:

  1. 正直に —正直は常に支払います。 以前に質問を見たことがある場合は、別の質問について話し合うことができるように、インタビュアーに知らせるのが最善です。 同様に、現在の範囲/責任を誇張することは危険信号と見なされます。
  2. あなたの心を話す—質問が難しいように思われる場合や、考える時間が必要な場合でも、面接官があなたを助けてくれるように、考えを声に出してください。 正しい答えを得るのは、合理的な思考プロセスを持つことほど重要ではありません。
  3. 応答する前に理解する—回答する前に、質問を聞いて理解するのが最善です。 確信が持てない場合は、仮定を明確にするか、述べるように依頼してください。 迅速な対応を求めているわけではありませんが、常に思慮深い対応に感謝しています。 質問が最初に明確でない場合は、インタビュアーに繰り返してもらうように依頼してください。
  4. 良いセットアップ—リモートファースト企業であるため、インタビューはGoogleMeetで仮想化されています。 インターネット接続とオーディオ/ビデオが良好な場所で会議に参加してください。 セットアップがチップトップでない場合は、事前にスケジュールを変更することをお勧めします。 最後に、通話に参加する1時間前にマイクとカメラをテストします。 私たちはインタビューの間ずっとカメラを持っていて、あなたが同じことをすることを期待しています。
  5. 準備して—面接の招待状の一部として、採用担当者があなたと共有しているリンクを確認することをお勧めします。 Coinbaseの全員がどのように運営し、何を大切にしているかについての情報が含まれています。
  6. 何を考えているのか聞いてください—私たちのパネリストは、候補者が質問する時間を常に残しています。一般的な質問をするのではなく、Coinbaseの旅を決定するのに役立つ質問をする機会を利用してください(ほとんどはブログで回答されています)。 エンジニアやマネージャーと面接するので、各役割が提供する独自の視点に合わせて質問を調整します。
  7. 暗号または業界の知識—暗号/ブロックチェーンに関する深い知識を必要とする役割について具体的に面接している場合を除きます(あなたのリクルーターはこれをあなたと共有することができるでしょう)、私たちはこの知識を必須のスキルとして探していません。 あなたが学ぶ気がある限り、たとえあなたが暗号に全く慣れていなくても、私たちはあなたと話したいです。 私たち全員も、ある時点で新しいものでした!

インタビューのプロセスについてもう少し学ぶために時間を割いていただきありがとうございます。 金融の未来を築くことに興味があるなら、 ここで私たちのオープンな役割を見てください幸運を!


Coinbaseがエンジニアリングの役割についてインタビューする方法 もともとで公開されました Coinbaseブログ ミディアムでは、人々はこの話を強調してそれに応答することによって会話を続けています。

Share:

Share on facebook
Facebook
Share on twitter
Twitter
Share on pinterest
Pinterest
Share on linkedin
LinkedIn

Related Posts

暗号市場のセンチメントがよりポジティブになる

出典:iStock / Easyturn ほとんどのトップ暗号資産がそれ以来彼らの地位を改善したので、暗号市場の感情は再びポジティブゾーンに傾いています 先週の月曜日。 10の主要な暗号資産の平均7日間の移動暗号市場セン