プログラマーがアルゴリズムを本当に習得したら、どれほど強くなるでしょうか?

プログラマーがアルゴリズムを本当に習得したら、どれほど強くなるでしょうか?

2020 = 1024 + 996... 2020 はプログラマーにとってあまり「フレンドリー」には見えません。

[[314898]]

しかし、外部環境がどのようなものであっても、自分自身の内面的なスキルを向上させることは、すべての働く人にとって必要なことです。今の時代、理想の仕事に転職したいなら「タイミングを見計らってチャンスを掴む」ことが必要です。もちろん、面接前の準備も欠かせません。 Geek University は、アルゴリズム トレーニング キャンプのティーチング アシスタントを招待し、面接官が応募者にどのような能力を求めたがるのか、またどのような「アルゴリズム面接の厳選質問」を持っているのかを共有してもらいました。私たちのティーチングアシスタントは、Meituan、Baidu、または海外の一流インターネット企業出身です。彼らの経験が皆さんのお役に立てれば幸いです。

元美団のシニアエンジニア、ウィンディ

面接官として、私は候補者の業界での経歴、専門的なスキル、そしていくつかのソフトな資質に特に注意を払います。具体的には:

  • 業界経歴とは、電子商取引、ソーシャルネットワーキングなど、以前の仕事の分野を指します。
  • 専門的なスキルには、主に言語の基礎、高並行性、分散、ミドルウェアに関する知識、トラブルシューティング、運用と保守、設計の能力が含まれます。ここで最も重要なのはプログラミング能力であり、上級職の場合はアーキテクチャ能力も審査されます。
  • ソフト面の資質には、候補者のコミュニケーション能力、プロジェクト管理能力、リーダーシップなどが含まれます。

面接官として、私は面接プロセス中に筆記試験問題を使用して候補者の論理的思考能力を調べます。通常調べられる具体的な知識ポイントには、リンク リスト、ツリー、ソート、バイナリ検索などがあります。候補者は、さまざまなアルゴリズムの時間計算量と空間計算量を分析できることが求められます。 LeetCode から簡単から中程度の難易度の質問を選択します。一般的な質問には次のものがあります:

  • 単一リンクリストの反転(再帰またはループ)
  • ツリーのフロント-ミドル-ポスト順のトラバース
  • 動的計画法(階段登りと変形問題、フィボナッチ数列、株価問題)
  • バイナリ検索(およびそのバリエーション)
  • ソート(クイックソート)

アルゴリズムの面接の質問を検討することで、候補者がプログラミング能力を発揮できるだけでなく、質問を詳細に理解することでコミュニケーション能力と推論能力(質問のアイデアをどのように構築するか)も発揮できることを願っています。最も重要なプログラミング能力は、候補者が問題の境界についての考えを示し、さまざまな方法のパフォーマンスと効率を比較し、問題を解決するための複数の方法を提供できることです。

私の注目のアルゴリズム面接の質問は、 「2Dマトリックスの検索」です。

mxn 行列にターゲット値が存在するかどうかを判断するための効率的なアルゴリズムを記述します。このマトリックスには次のプロパティがあります。

各行の整数は左から右へ昇順に並べられます。

各行の最初の整数は、前の行の最後の整数よりも大きくなります。

例1:

  1. 入力:
  2. マトリックス = [
  3. [1, 3, 5, 7],
  4. [10、11、16、20]、
  5. [23、30、34、50]
  6. ]
  7. ターゲット = 3
  8. 出力: true  

例2:

  1. 入力:
  2. マトリックス = [
  3. [1, 3, 5, 7],
  4. [10、11、16、20]、
  5. [23、30、34、50]
  6. ]
  7. ターゲット = 13
  8. 出力: false  

Baidu のシニア R&D エンジニア、Kimze 氏

面接官としては、候補者のレベルに応じて必ず異なる焦点を当てることになります。アルゴリズム研修キャンプには多くの受講生がいます。新卒者の場合は、主に姿勢、プログラミングの基礎、データ構造とアルゴリズムの基礎スキルを審査します。経験豊富な学生の場合、履歴書のスキルとプロジェクト経験を組み合わせて、分野の能力の幅と深さを調べ、候補者の上限を探り、お互いにコミュニケーションを取り、学ぶこともできます。

高可用性、高パフォーマンス、高スケーラビリティは、一般的なバックエンド テクノロジーです。さまざまなテクノロジー スタックについて、次の点を検討します。

  • 分散階層化アーキテクチャ設計の理解
  • LB ロードバランシング、フロントエンド圧縮/CDN キャッシュ/DNS 関連の知識
  • マルチレベルキャッシュ、MQ非同期分離
  • ステートレスな設計 -> 急速な拡大と縮小
  • DB シャーディング、読み取り/書き込み分離、データベースとテーブルのシャーディング、SQL と低速クエリの最適化、JVM の最適化など。
  • ES 検索、データの異質性、ビッグデータ処理
  • 一貫性設計: バッチ非同期、シリアルからパラレル、同期から非同期
  • データプロトコル、通信プロトコル
  • 容量の見積もりと計画、フルリンクのストレステスト、グレースケールリリース設計、劣化/ヒューズ/電流制限設計、RPC サービスガバナンス
  • 分散構成、登録、監視
  • CI/CD: 「Docker + Kubernetes」アーキテクチャ

データ構造とアルゴリズムの試験では、クイックソート、マージ、バイナリ検索などのより基本的な質問に対して、受験者は時間と空間の複雑さを分析し、関連する推論プロセスを実証できなければなりません。より高度なコンテンツの場合、最低限必要なのは、アイデアがあること、どのような状況でどのようなデータ構造とアルゴリズムを使用するかを知っていること、そしてテンプレートを書くことです。たとえば、私はこう尋ねます:

Redis の基盤となるデータ構造の設計はスキップ テーブルの原則につながり、それがハッシュの実装と拡張にまで拡張されます。候補者がスキップ テーブルの利点と欠点を理解しているかどうか、また Redis がこのように設計されている理由を調査したいと考えています。

MySQL B+ ツリー インデックス構造の時間計算量とその選択理由。赤黒木やハッシュ テーブルの代わりに B+ ツリーが使用される理由を調べたいと思います。

答えるべき具体的な質問は多くなかったが、最も良い質問の一つは「コイン交換」だったと思う。

異なる額面の硬貨と合計金額が与えられます。合計金額を構成するために必要な最小のコイン数を計算する関数を記述します。コインの組み合わせで合計金額を構成できない場合は -1 を返します。

例1:

  1. 入力: コイン = [1, 2, 5]、金額 = 11
  2. 出力: 3

説明: 11 = 5 + 5 + 1

例2:

  1. 入力: コイン = [2]、金額 = 3
  2. 出力: -1

例:

各種類のコインは無限に存在すると想定できます。

Serko のシニア ソフトウェア エンジニア、Xu 氏

企業や職種、レベルによって求められる能力、範囲、深さは異なります。海外企業と国内インターネット企業のビジネスニーズも大きく異なりますが、プログラマーには一般的に以下の能力が求められると思います。

  • プログラミングスキル(コーディング、データ構造とアルゴリズム、数学)
  • クリーンなコード
  • 優れたプログラミングプラクティス
  • ソフトウェア設計
  • システム設計
  • ソフトウェアアーキテクチャ
  • システムアーキテクチャ
  • 分析力と問題解決能力
  • リーダーシップ
  • コミュニケーションスキル
  • コラボレーション
  • 共有能力
  • 継続的な学習能力

面接を受ける必要があるほとんどのジュニアおよび中級プログラマーの場合、技術面接の第 1 ラウンドのホワイトボード アルゴリズムの質問として、私は通常、LeetCode で簡単から中程度の質問をします。これらの質問は通常、力ずくで解決でき、最適化できます。複数のソリューションとアイデアがあります。同時に、候補者が何らかのソフトウェア エンジニアリング能力を発揮できることが最善です。

質問を行う際に注意すべき点がいくつかあります。

  • すぐにプログラムを書き始めるのではなく、質問を理解し、その過程で面接官とコミュニケーションを取り、質問の要件と関連する質問を明確にします。
  • アルゴリズムを設計し、その過程で面接官と常に対話し、一人で黙々と作業するのではなく、段階的に最適なソリューションを探ります。
  • アルゴリズムを実装し、そのプロセスにおけるソフトウェア開発とテストに関する理解を示します。
  • コードが完成したら、TDD、BDD、CI/CD など、関連する事項について面接官と適宜話し合うことができます。

私の注目のアルゴリズム面接の質問は、二分探索木の検証です。

バイナリ ツリーが与えられた場合、それが有効なバイナリ検索ツリーであるかどうかを判断します。

二分探索木には次のような特性があると仮定します。

ノードの左のサブツリーには、現在のノードより小さい数値のみが含まれます。

ノードの右サブツリーには、現在のノードより大きい数値のみが含まれます。

すべての左および右のサブツリー自体もバイナリ検索ツリーである必要があります。

例1:

  1. 入力:
  2.  
  3. 2
  4. / \
  5. 1 3
  6.  
  7. 出力: true  

例2:

  1. 入力:
  2. 5
  3. / \
  4. 1 4
  5. / \
  6. 3 6
  7. 出力: false  
  8. 説明: 入力は [5,1,4, null , null ,3,6] です。
  9. ルート ノードの値は 5 ですが、その右の子の値は 4 です。

上記の質問にはすべて答えましたか?

え?やり方が分からない?心配しないでください。他のプログラミングスキルと同様に、一般的なアルゴリズムとデータ構造の知識を効率的に習得し、実際の仕事や面接で対応するアルゴリズムを使用してアルゴリズムの問​​題を解決することを学ぶことで、学習とトレーニングを通じて向上できます。

<<:  人工知能は神経技術をどのように進歩させるのでしょうか?

>>:  CAPとPaxosコンセンサスアルゴリズムについての簡単な説明

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

小井ロボットの華蔵エコシステムの出現は、大型モデルの商業化の始まりを示しています

10月26日、「人工知能分野での中国初の上場企業」であるXiaoi RobotがHuazang Un...

Xing Bo 氏のチームの LLM360 は、大規模なモデルを真に透明化する総合的なオープンソース プロジェクトです。

オープンソース モデルは、数だけでなくパフォーマンスも増加しており、活発な活力を示しています。チュー...

DALL·E 3のベンチマーク!メタ最強の文豪エミュの技術レポートを公開

数日前、OpenAIはDALL·E 3をリリースしたばかりで、ビジュアルイメージは再び新たな段階に上...

顔認識は常に私たちのそばにあり、中秋節は「ハッピースキャン」から始まります

[[424699]]中秋節が近づいており、旅行の計画を立てている方も多いと思います。この特別な期間中...

人工知能の登場で、自動化は恐怖に震えるべきでしょうか?

歴史は、人々に気づかれずに何度も同じ冗談を繰り返す、昔のいたずらっ子のようなものです。歴史は単なるジ...

ディープラーニングが世界に浸透し、世界を変えるほど強力なのはなぜでしょうか?

[[190140]]子供の頃、果物、動物、車、その他のものを認識することを学び始めたときのことを覚...

サイバー犯罪者はAIを利用してマルウェア攻撃ソフトウェアにサンドボックスを作成

2020 年に世界中の企業の 42% がサイバー攻撃を受けたことをご存知ですか? サイバー犯罪者が...

研究者らは、キーボードの打鍵音からデータを盗むためのディープラーニングモデルを最大95%の精度で訓練することに成功した。

8月7日のニュース、キーボードで入力した内容が他人に聞かれる可能性があることをご存知ですか?英国の...

アップル、シアトルのAI研究開発施設を拡張へ

海外メディアの報道によると、アップルは最近シアトルの人工知能研究開発センターのオフィススペースを拡大...

AIを活用してパイロットプロジェクトを計画する方法

人工知能 (AI) は、あらゆる業界の企業にビジネス運営の成長と改善の機会を提供します。 Fortu...

Facebook が ICCV 2021 で 2 つの 3D モデルを公開。自己監督が究極の答えか?

長い間、CV トレーニングは 2 次元データに限定されてきました。3 次元データのラベル付けにはコス...

データサイエンスにおける ML+ と DL+ の時代へようこそ

企業のデジタル変革は、次々と熱狂の波をもたらしました。国際的な権威ある組織は、今後数年間の企業のデジ...

AI 主導のビジネス変革を通じてデジタル成熟を達成するにはどうすればよいでしょうか?

[[388979]]デジタル時代においては、情報の流れがあらゆるものの中心となります。すべてが感知...

AIと子ども経済が出会うとき、どうすれば中心的ポジションにデビューできるのか?

[[248753]]児童市場は非常に特殊で、この層は購買力がないにもかかわらず、消費市場の価値は数...