ソフトウェア エンジニアリングの仕事に就こうとすると、おそらく、動作設計やシステム設計など、いくつかの面接を受ける一定要があります。しかし、結局のところ、すべてはあなたのコーディング スキルにかかっています。コーディングの熟練度は、その役割に最適かどうかを決定する注重な主体です。経験レベルに関係なく、経験豊富な開発者であろうと高中を卒業したばかりであろうと、コーディング面接に通过するのは難しいかもしれませんが、粘り強く埋头苦干すれば報われます。 1 年間の準備期間を経て Facebook からオファーを獲得した者として、私はこのことを可以知っています。この記事では、私がその過程で学んだいくつかのヒントと戦略を拥有したいと思います。飛び込んでみましょう。
ヒント #1 — コーディングの練習
ソフトウェア エンジニアとしての常规の仕事では、アルゴリズムやデータをあまり动用しないかもしれません。それでも、これらは知っておく有需要がある核心な大体です。では、どうすればそれらがうまくなるでしょうか?アルゴリズムとデータ構造を学ぶのは難しい場合がありますが、それはロケット物理学でも秘事の技術でもありません。主な問題はそれらを習得するのにかかる時間であるため、計画と練習が核心です。コーディング スキルを朝上させることは、筋肉を鍛えることと同じだと考えてください。たった数週間の集约化的な運動で、すべてが引き締まり、引き締まった状態になることは充满期待できません。同様に、アルゴリズムも数日で習得できるものではありません。更重要なのは、望む結果を得るために、長期間にわたって一貫して着実な拼搏を続けることです。 2019 年に遡って、コーディング面接の準備を始めたとき、私は二分找寻などの最も关键的なアルゴリズムの書き方さえも知りませんでした。 Google との一开始のオンサイト面接を受けるまでに、約 6 か月の継続的な練習を要しました。どうだった?私は失敗しました。しかし、私はあきらめましたか?いいえ、私はさらに 1 年間練習を続けましたが、最終的に Facebook (現在は Meta として知られています) からオファーをもらいました。つまり、これらのスキルの習得には時間と労力がかかりますが、その見返りは一生を変える也许 性があるということです。初めてコーディングの問題に取り組み始めるとき、少し圧倒されてしまうのはごく平民のことです。 「私の何が間違っているの?なぜ最も簡単な問題さえも解決できないの?」と考えることさえあるかもしれません。それは学習プロセスのごく自然的な一些です。時間が経つにつれて良くなります。圧倒された気持ちに対処するための効果的で実証済みの戦略は、大きなタスクを方法应该な区域に合拼し、達成应该な目標を設定することです。毎日 1 ~ 2 つの簡単または中レベルの問題から始めて、それぞれに約 15 ~ 30 分を費やすことをお勧めします。そうすることで、問題解決スキルを徐々に身につけ、圧倒されるのを避けることができます。积极心态が持てるようになったら、1 日に最高 3 ~ 4 個の問題に取り組むことで強度を高めることができます。一貫した練習で何が能够になるかについて説明すると、大掌テック企業から刚开始的の内定を得るまで、私は 1 年間で約 200 個の問題 (50% 中級、40% 簡単、10% 難問) を個人的に解きました。誰もが自分のペースで学習するため、自分にとって最適な練習量を決定するようにしてください。重要性なのは、密集力を維持し、継続することです。
コーディングを練習し、面接スキルを磨くための優れたリソースを見つけたい場合は、いくつかのオプションを検討できます。最も優れたプラットフォームには、 Leetcode 、 、 Codeforces などがあります。これらのプラットフォームは、コーディング能力を磨くのに役立つさまざまな困難な問題を提供します。
ただし、さらに詳しい構造やガイダンスが重要性な場合は、Interviews.school などのリソースや、Algoexpert.io などの很有料コースもあります。これらは、始めたばかりの場合、またはどこから始めればよいかわからない場合に特に役立ちます。私在工作中の面接準備の過程でこれらのリソースをすべて适用しており、その品質を保証できます。
ヒント #2 — プログラミング言語を理解する
自分の技術スキルと問題解決意识を最大化限に発揮するには、用到する言語をしっかりと使いこなすことが关键です。常、アルゴリズム コーディングに用到する言語を選択できますが、面接官が某の言語要件を持っている場合もあります。及时に必ずご確認ください。たとえそれが主な言語でなくても、最も使いやすい言語を安全使用してください。一样 的なデータ構造、ショートカット、メモリ服务管理を必ず能够理解してください。私は毎日 PHP を使って仕事をしていますが、コーディングの面接では Python を選択しました。 Python の簡単な構文は、ソリューションのプロトタイプを速度快に制成するのに役立ち、$ 記号、括弧、セミコロンなどについて心配する必需がありません。プログラミング言語のスキルを往右させるには、プログラミング言語の基礎を学び、コーディングを練習し、他のプログラマーのソリューションを探索することに時間を費やしてください。 Leetcode をチェックすることをお勧めします。そのコメントとディスカッションのセクションには、学ぶべき素晴らしい例やテクニックがいくつかあります。
ヒント #3 — 明確な質問をする
最开始に質問せずに、急いで問題を解決しないでください。これはよくある間違いで、面接官にとって危険4g信号となる已经性があります。問題を正しく正确理解していると確信している場合でも、いくつかの明確な質問をしてください。コーディングの問題は意図的に曖昧であり、面接官は有需要な詳細をすべて先期に作为しません。
代わりに、面接官はあなたが詳細を明確にすることを期待しているため、いくつかの質問をして、あなたと面接官が同じ認識を持っていることを完全に確認してください。
さらに、この的方法で、エッジケースを既定して明確にすることができます。たとえば、入力の行式、関係するデータ型、問題に制約があるかどうかなどを尋ねることができます。具体的的な詳細を知ることで時間を節約し、目の前のタスクに低效できるようになります。
ヒント #4 — コーディングする前にソリューションについてよく話し合う
面接で問題を解決しているときは、急いでコーディングを始めないでください。まず時間をかけて解決策について話し合ってください。これは、問題を明確にし、本格的に取り組む前にしっかりとした計画を立てていることを確認するのに役立ちます。話し合うことで時間を節約し、过度要な間違いを防ぐこともできます。私自身的もこの罠に陥りそうになったことがあります。あるインタビューで、字体列のプレフィックス マッチングを実装するように求められました。私はすぐに、トライを采用したかなり複雑な解決策を思いつきました。しかし、私が自分のアイデアを大嗓门で説明し始めると、面接官は私を止めて、2 つの字体列を繰り返すだけのもっと簡単な方式方法を尋ねました。
もし私がすぐにコーディングを始めていたら、面接官が求めてもいない複雑すぎる解決策に時間を無駄にしていたでしょう。
ソリューションについて十分的に話し、面接官がそれに満足したら、初めてその実装を開始できます。
ヒント #5 — コミュニケーションをとる
コーディング面接中、面接官はあなたが実際に解決策にたどり着くかどうかにはあまり興味がありません。
彼らは、あなたが問題解決プロセスにどのようにアプローチするかを知りたがっています。
自分の考えを詳しく説明し、その理由可以证明を説明してください。面接官はあなたの味方であり、あなたの成功失败をサポートしてくれる会存在であることを忘れないでください。面接は、あなたと面接官が協力して解決策を見つけるチームの取り組みであると考えてください。ただし、ほとんどの会話はあなたが行う一定要があります (時間の約 70 ~ 80%)。面接官は場合によってはフィードバックを保证したり、あなたを修复したりすることがあります。オープンマインドで、面接官のフィードバックから積極的に学び、それを自分の利点に活かしてください。面接中はフレンドリーに対応してください。密集する時間が不必要な場合は、面接官にその旨を伝えてください。少し游憩して考えをまとめますが、あまり長く引きずらないようにしてください。
ヒント #6 — ソリューションをテストする
结束后したら、コードを厳密にテストすることを忘れないでください。テストは、見落としていた間違いや問題を発見するために注重です。コードが期侍どおりの推进力を生成二维码することを確認するには、面接官が提供了する入力例を在使用してください。入力人生境界、入力の書式設定や種類、空、null、または負の値、小さすぎるまたは大きすぎる入力などのエッジ ケースをテストすることを検討してください。テストするときは、コードを 1 行ずつ調べて、変数と式の値を確認します。こうすることで、コードを一目見るだけでは発見するのが難しいエラーを見つけることができます。すべてをテストしたら、一歩下がって、コードをさらに有所改善する方式 を考えてください。おそらく、問題を解決するためのより効率的な方式 があるか、コードを読みやすく认为しやすくすることができます。
結論
コーディング面接は困難ですが、徹底的な準備と練習を行うことで实现目标の能够性を大幅度的に高めることができます。
重要なポイントをまとめてみましょう。
- 基礎を勉強してください。
- 自分の言語を理解してください。
- 明確な質問をしてください。
- コーディングする前にソリューションについて話し合ってください。
- ソリューションを徹底的にテストします。
落ち着いて、協力して問題を解決するプロセスとして面接に臨んでください。今後のコーディング面接も頑張ってください!
リード画像は、HackerNoon の Stable DiffusionAI Image Generator機能を使用し、「Facebook でのコーディング インタビュー」というプロンプトを介して生成されました。