web-dev-qa-db-ja.com

インタビューで発生した問題を解決するアルゴリズムは、実際のソリューションにどのように変換されますか?

私は最近、コンピュータサイエンスの学部課程を修了しており、仕事を探しています。検索中に、解決するために巧妙なアルゴリズムを必要とするいくつかの興味深い(そして難しい)問題に遭遇しました。また、練習セットとしてgoogle code jamを使用しています。

これらのソリューションが実際の問題を解決するのにどのように役立つか理解できません。多くの問題が(私には)人為的で幻想的であるだけでなく、汎用ソリューションになるために非常に具体的にも現れます(ただし、工夫を使ってそれらを拡張することは不可能ではありません)。

これらの問題は、問題解決スキルをテストするためだけのものですか、それともこれらの現実世界の問題の一部が偽装されていますか?

7
josh88

通常、面接の問題は実際の問題よりも簡単ですジョブで発生します。インタビューの問題は、基本的なアルゴリズムとデータ構造(ハッシュ、ツリートラバーサル、グラフ検索、動的プログラミングなど)に精通しているかどうかを確認するために設計されています。

9
kevin cline

一般に、これらの質問は、問題の解決スキルをテストするためにのみ存在します。特に、ご存知のように、不自然なシナリオの解決策を求められた場合にそうです。

ただし、場合によっては、会社が自社のフィールドの例を使用することもありますが、これは通常、自社のコードベースから例を引き出すことができるため、すでに優れたソリューション(または少なくとも有効なソリューション)を持っているためです。あなたが似たようなものを思いつくことができるかどうかを確認してください。しかし、このような場合でも、特定の問題を解決できる人を探しているわけではありません。

一般的な問題解決能力に集中してください。それは、運転することを学ぶようなものです...頻繁に、そして十分に長く練習すれば、それは第二の性質になります。幸運を!

6
Ashley Mills

時には彼らは会社のコアビジネスにまったく翻訳されません。あれは事実です。

ただし、少なくとも一部の場合、それらは、チームまたは面接対象の会社が直面する主要なビジネス問題に関連しています。

私がインタビューしたある会社で、ユーザーが費用対効果の高いフライトを見つけるのを助けることでよく知られている、私は組み合わせの複雑さとルーティングのルーツに関するいくつかの問題を尋ねられました。それらの1つはn選択k問題でした。これは、多数のセットがあり、たとえば1、2、または3要素のすべてのサブセットを列挙する必要がある場合に必ず発生します。すべてのノンストップ、ワンストップ、および2ストップのフライトを見つけることは、抽象的な問題を解決する方法を知ることから利益を得る可能性があるという、少なくとももっともらしいケースがあります。これとは別に、2D凸包の問題を尋ねられました。これは、コンピュータグラフィックスでの衝突検出、いくつかのクラスの画像認識およびグラフィックスからテキストへの変換の問題、そして実際には、ルーティング問題のクラス;電話会社が電柱やスイッチなどをほぼ最適に配置する場所を見つけるために以前使用していた最小のスパニングツリーの問題についても質問された可能性があり、輸送の問題も発生します。 。

この特定のチームでは、ルーティングの問題の解決に関与することはなかったでしょう。私は主に国際化の仕事に集中していたでしょう。しかし、おそらく組織の文化とその主要なビジネス上の問題のために、これらのタイプの問題は、実際に何に取り組むかに関係なく、ソフトウェア開発者のインタビュープロセスに広がっています。

私はこれらの問題を特にうまく解決することはしませんでしたが、ソフトウェアの非常に非アルゴリズム的で非学問的なバックグラウンドを考えると、どういうわけか仕事を与えられました。一部の組織では、汗をかいて、プレッシャーのかかっている快適ゾーンから問題にどのように対処するかを見たいと思っているのではないかと思います。一部のチームでは、単に思考プロセスを示すだけでなく、問題をうまく解決することが実際に重要であったかもしれません。

これは優れた開発者を特定するための最良の戦略ではないと思いますが、Google、Amazon、Microsoft、および他の数十の有名な会社がアルゴリズムを多用した儀式化されたヘイズインタビュープロセスを採用しているため、場所によっては避けられない場合があります。あなたは働きたいです。 SkienaのAlgorithm Design Manualを読むことで、それらの準備をすることができます。これは、具体的な問題を抽象的な問題にパターンマッチングし、1時間で実装できない場合でも適切な解決策を提案するのに役立ちます。長いコーディングのインタビュー。

アルゴリズムに関する深い知識が必要な職種の候補者に面接していた場合、アルゴリズムツールキットから引き出す必要のある問題を提案することで精査する傾向があります。ただし、私の仕事のほとんどでは、ネストされたループの3つのレイヤーを実行して、一度に1つのIDで外部ソースに個別のクエリを発行することが悪い考えであることに気づく候補者を見つけることに主に焦点を当て、彼らがその方法を知っている証拠を見つけようとしますそれよりも上手に。私は、彼らが保守可能なコードを書くためのいくつかの賢明な戦略を理解していること、彼らが知的好奇心を持っていること、そして彼らが基本的な社会的スキルを持っていることの証拠を探すことに焦点を当てています。私は彼らが地元の専門家になるために十分に学んだいくつかの問題を通して彼らが十分に深く働いたことを確認しようとします。

ビジネスがスマートアルゴリズムの助けを借りて難しい問題を解決することを中心に構築されている会社で面接を終えた場合、彼らもあなたがスマートアルゴリズムの助けを借りて問題を解決できるという証拠を見つけようとする可能性が高いです。また、「退屈な」エンタープライズソフトウェアを作成することになったとしても、アルゴリズムの全体像をしっかりと把握することは価値があると思います。より良いソリューションを考え出す。私は今、問題に適用された基本的なコンピューターサイエンスによって妨げられていた、くだらないプロダクションコードをたくさん見ました。

そのため、アルゴリズムを多用したインタビューは一部の企業のようには役に立たないと思いますが、抽象的なアルゴリズムと実際のビジネス上の問題との関連性がわからない場合、問題は次のとおりです。少なくとも部分的には。 Skienaの本の助けを借りて、解決したい現実的な問題について考え、防御可能なソリューションを実装することで、パターンマッチングの練習をすることができます。

2
JasonTrue

時には、従業員が異常な問題にどのように反応するかをテストすることは単に有用です。きっと、あなたがWeb開発者のポジションに応募するなら、wordpressブログを設定するか、自分でブログを書くことができます。しかし、それらは日常的な問題です。

そのためには、境界を少し押し広げて、候補者のバランスを崩す必要があります。彼に難しい問題を与えて、彼がどのように反応するか見てください。彼はそれを自分ですばやく解決できるでしょうか?それとも彼は「ねえ、グーグルでググって、すぐに使えるソリューションがあると確信している」とだけ言うでしょうか。どちらのアプローチにもそれは浮き沈みがあり、どちらの答えも受け入れられます。ほとんどの場合、それは問題になりませんが、候補者が問題を解決できるようになるでしょうが、問題への対処方法は重要です。

2
v-star

それはすべて、作業しているソフトウェアに依存します。 CRUDソリューションは、さまざまな分析専門職の専門家をソフトウェアに置き換えようとしない限り、通常はあまり賢明ではありません。統計分析を使用してデータマイニングを行う場合、データを構造化するさまざまな方法を理解しておくと役立ちます。グラフィックを操作する場合は、ジオメトリ操作を知っておく必要があります。精度と速度が重要なエンジニアリングまたは財務分野に行く場合、さまざまな数値アルゴリズムを理解することは非常に重要です。アルゴリズムは、別のレポートソリューションでの作業とは対照的に、特定の領域で限界を押し広げる領域で探索および作業できるようにするスキルの1つです。

1
Peter Smith

面接の対象となるプログラミングジョブの種類と、面接を行う人によって異なります。

潜在的な雇用主が、既存のフレームワークやライブラリがない組み込みシステムで作業する人を雇っている場合、彼らは賢いアルゴリズムをコーディングできる人を必要とするかもしれません。この場合、質問することは有効です。

しかし、彼らが5年前の企業のCRUDまたはレポートアプリを維持および強化するための誰かを探している場合、おそらく彼らの時間の無駄であり、彼らがすでに使用しているフレームワークにあるアルゴリズムをコーディングするように依頼するのはあなたの無駄です(たとえば、誰かに ソートされたリスト をC#で最初からコーディングするように依頼します)。修正/強化が必要なものの例を彼らに示し、彼らがそれにどのように取り組むかを彼らにあなたに教えさせることは、はるかに価値があります。

多くの面接担当者にとって、応募者のスキルレベルを評価するのではなく、応募者よりも自分が優れていると感じられるようにするために、彼らがしている仕事に関係のない複雑なプログラミングパズルやその他の類のものを使用するのは私の意見です。他の人たちは、Google/Facebook/Microsoft /などのためにそれらを使用します。それらを使用して、彼らが「クール」になるためにそれらも同様にすべきであると考えます。

問題解決の質問をするのは立ち入り禁止であるべきだと言っているのではありませんが、良い質問はその仕事に合うか、または策略や落とし穴がなく、かなり単純で一般的であるべきです。 FizzBu​​zz 代わりに 小林丸

だから、私の経験では、そのような質問は目前の仕事とはほとんど関係がなく、いくつかは間違った理由で尋ねられます。

1
jfrankcarr