アルゴリズムテストの面接には参加しません

公開されました。 最終更新日
Tomasz Nurkiewicz アルゴリズムテスト

一般の人はどうやって一流のテーラーを雇うのでしょうか?候補者に今までに縫ったものを見せてもらい、早速縫ってもらいます。そして、その結果を観察し、ミシンの操作方法や仕事場の整理整頓、細部へのこだわりなどを評価します。生地を無駄に使いすぎていないか、単に仕事がうまくいっていないのか。

ソフトウェア開発者はどうやって一流のテーラーを雇うのか?それはおそらく、次のようなものだろう。の違いを描いてください。 ギョルドスとセネの結び目.糸の長さを生地の表面積の関数として導き出す」。

正直なところ、一流のテーラーはその違いを知っているはずだと思っていますが、ここで本当に検証しているのは何でしょうか?エレガントなジャケットが欲しいのか、それともホワイトボードに書かれたエレガントな方程式が欲しいのか。

サーチ会社と投資銀行での経験

私が2つの大企業でインタビューを受けたときの経験を紹介しましょう。前者は実際のオーガニック検索結果に時折挟まれる広告を販売しており、後者は大企業の銀行でした。前者では、自明ではないアルゴリズム上の課題に対する解決策を考えることに数時間を費やしました。後者も似たようなものでしたが、大西洋の反対側に座っている人に電話で自分のアルゴリズムを説明したところ......それ以上に変なことになってしまいました。

アルゴリズムテストのつぶやき

検索会社では、何かをするリンクリストの最も長い接尾辞を探していました...。正直なところ、あまり覚えていません。リンクリストを最後に使ったときのことを覚えていないのと同じです。はい、配列との違いは理解しています-パフォーマンスへの影響、異なる使用例など。なぜなら、この質問はすべての面接で聞かれるからです。しかし、実際の仕事では、これらを利用する機会がなかったのです。また、奇妙な方法で木のバランスを取ったり、木を横断したりする問題もありました。正直なところ、あまり印象に残らない経験でした。実はこの問題、正直に言うと、事前に知っていたんです。アルゴリズムについての本ではなく、この会社に採用されるためのガイドを読んでいたのです。詳しくは後述します。

投資銀行で、私は最初に、ある要素のリストに可能なすべての順列を生成するよう求められました。これは大陸を越えた電話で行われたことを覚えておいてください。さて、お遊びで、この種の質問を自分にしてみます。想定される答えは、悪い方から順に以下の通りです。

  • インターネットで解決策を探し、自分のものだと主張し、キーボードを叩く音が聞こえないと思い込む。
  • 狂ったように準備して、幸運にも頭の中で解答を知っていたので、解答を一行ずつ記憶してください。そして、それ以上のことはしない。
  • 入力を反復する複雑なコードが必要です。i、j、kのような変数を使うのが好ましい。
  • 候補者はこの問題が分解できることに気付いたため、クリーンで再帰的なソリューションを提供しました。
  • 手書きのコードにうんざりして、もう少し探してみて、まさにそれを実現するライブラリを見つけてください(e.g. グァバからのコレクション2)
ホワイトボードのアルゴリズムテスト

真面目な話、あなたはおそらく新しいチームメイトを探しています。エレガントで再帰的なコードのプルリクエストと、1つのライブラリ呼び出しのどちらを見たいですか?何百万人もの開発者に試されたライブラリは、ドナルド・クヌースの「」に基づいています。コンピュータ・プログラミングの技術"?また、ライブラリを探すのに時間がかかったのに対し、手作りの入れ子式ループはインターネット上にあふれています。あなたはどのような姿勢を求めていますか?インターネットからコードを暗記して盲目的にコピーするのか、それとも実際にリサーチをして実戦的なソリューションを見つけるのか?

また、ランダムにコインを投げるだけで、配列をランダムにシャッフルするという課題もありました。これはそれなりに面白い問題なのですが、労働条件とは全く関係ありません。どうにかしてアルゴリズムを考え出したものの(それはそれで楽しかったのですが)、数ヶ月後には、私がやっていたのはXMLの断片を銀行の片側から反対側に渡すことだけでした。1秒間に何百回ものありふれた変換を行い、ところが、すべての主要な言語が シャッフルに対応: [1], [2], [3], [4]または、パッケージ [5].

アルゴリズムテストの面接質問:採用活動の悩みの種

コンピュータサイエンスの学位を持っている私にとって,アルゴリズムテストは威圧的で無意味なものではありません。むしろ逆で,数独やブリッジを解くように脳を鍛えるには最適なのです。私は複数のアルゴリズム・コンペティションに参加しました(例. コードの登場)で、いつも楽しんでいました。でもそれは私の趣味であって、あなたはDDDや高度なSQLを勉強する方が好きかもしれません。また、純粋なアルゴリズムやデータ構造が、大多数の採用プロセスに特に適しているとは思えません。候補者の抽象的な分析能力や、しっかりとしたCSと数学のバックグラウンド(これらはどちらもソフトウェアエンジニアリングにおいて重要な特性です)を確認することはできますが、他の重要な特性を把握できなかったり、結論を出すには複雑すぎたりします。

最近のIT業界では、APIやフレームワークを縫い合わせる仕事がほとんどです。私たちは生地を作るというよりも、仕立て屋のようなものです。アルゴリズムに精通していることは、システムの1つの機能を拡張する際に役立ちますが、分散システムに特化した経験の方がより効果的でしょう。例えば、グラフ理論や離散関数を知っていることは貴重です。しかし、複製されたデータベースの大規模ネットワークでの実践的な経験や、ハッシュ関数がなぜ危険なのかを理解することは、日々の仕事に大きな影響を与えます。

ホワイトボードのアルゴリズムテスト

確かに、再帰とは何かを理解することは必須です。ちょうど、なぜ ハッシュマップ はJavaではとても速いのです。しかし、その理由を理解すると 辞書 は、C#が次のレベルではさらに高速です。ヒント:メモリのレイアウト、理論的な計算の複雑さとは関係のないもの。しかし、多くの人は、純粋にアルゴリズムに関する質問をすることが、優れた訓練を受けた開発者を見つける最もシンプルな方法だと信じています。このような信念は非常にロマンティックですが、しばしば極めてナイーブなものです。Googleの面接で成功するための本がどれだけあるか見てみましょう。これらの本はCSの基礎を教えているわけではなく、Googleスタイルの特定のクラスの問題を解決する方法をかろうじて説明しているだけです。

ソートはアルゴリズムの面接で最もよく(ab)使われる質問の一つです。を知ることは クイックソート の作品は価値がありますが、例えばJava 使っていない を10年近く使っています。また、O(nlogn)が何であるかを理解することも役に立つかもしれません。しかし、多くの場合、システムが停止する原因はアルゴリズムの複雑さではありませんでした。私が苦労して見つけたのは、CS教育ではほとんど触れられていなかったN+1問題でした。ソートについて質問したい衝動を抑えられない場合は、少なくともアルゴリズムが安定しているとはどういうことかを議論してください。あなたはほとんどの場合、既製の高速なアルゴリズムを使用するでしょう。安定しているかどうか、不安定かどうかが唯一の関心事であろう。ヒント:Javaのソートは安定していますが、C#では安定していません。

ホワイトボードのアルゴリズムテスト

アルゴリズムの質問は、それが本当に日常的に必要なものであれば、素晴らしいものであることを覚えておいてください。機械学習の専門家は、何を理解する必要があるのでしょうか? 勾配降下法 があり、それには相当なMathのバックグラウンドが必要です。また、統計学、研究、コンピュータグラフィックス、ゲーム開発などでは、ある程度のCSの知識が必要になります。その他、採用活動の時間を賢く使い、適切な質問をしてください。

より良いアプローチのための アルゴリズム・テスト: デザインと仕事の両立

私はキャリアの中で何人もの人を面接しました。これは仕事の一部であり、特に上級職ではそうです。多くの面接は忘れられたものでしたが、時折、仕事を得られなかったにもかかわらず、候補者が非常に満足していることがありました。これは素晴らしい関係を築き、会社のブランドにもなります。私はどうやってこのような素晴らしい経験を作ったのでしょうか?

  • 現実の問題解決を好む。ツイッターのような建築物を設計したり、インスタグラムのようなウェブサイトをスケールアウトしたりすることは、最短経路や最長回文を見つけることよりもずっと楽しいことです。
  • ホワイトボードを使ったスケッチよりも、ペアプログラミングのほうがいいでしょう。候補者がどのように仕事をしているのか、コードをどのように操作しているのか、答えをどのように探しているのか、障害物にどのようにアプローチしているのか、これらを見ることで多くのことがわかるはずです。また、一緒に作業することでストレスが軽減され、より人間らしい作業ができるようになります。
  • 空のエディタよりも、既存のコードベースが好き。しかし、既存のコードベースを修正することは、実際の仕事に近いものがあります。
  • 純粋なプロダクションコードよりもテストを好む。コーディングは素晴らしいものですが、候補者は実装と一緒にテストを探したり、開発したりしますか?アルゴリズムを使ったテストでは、この点が見落とされることがほとんどです。
アルゴリズムテスト

一緒に仕事をするといっても、その場で会う必要はありません。最近では、画面共有やリアルタイムの共同作業が非常にシームレスになりました。 デブスキラー.

概要

面接でアルゴリズムに関する質問をするのは悪いことではありません。これは私たちの分野では重要なことです。しかし、採用活動に時間を割くことができない場合、次のベストエンジニアを選ぶためのより賢明な方法があります。実際のスキルを試すことで、候補者が本当に必要としているものに精通していることを確認できます。また、ストレスを軽減し、候補者の会社に対するイメージを向上させることができます。

シェアポスト

トマシュ・ヌルキェヴィッチ より多くの記事をチェックする トマシュ

技術者の採用についてはこちら

ラーニングハブに登録すると、有益な情報をメールで受け取ることができます。

シームレスにコーディングスキルを検証&開発

DevSkillerの製品をご覧ください。

セキュリティ認証とコンプライアンス。お客様のデータの安全性を確認します。

DevSkillerのロゴ タレントブーストのロゴ タレントスコアのロゴ