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

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

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コンセンサスアルゴリズムについての簡単な説明

ブログ    
ブログ    

推薦する

企業は顧客サービスロボットをどのように選択すべきでしょうか?

現在、カスタマーサービス業界は質的な変化を遂げており、AIインテリジェントテクノロジーがカスタマーサ...

人工知能アプリケーションのための6つの主要技術、ついに誰かがわかりやすく説明

01 ロボティックプロセスオートメーション(RPA) RPA (ロボティック プロセス オートメーシ...

...

AIとGo言語をシームレスに統合する方法を学ぶ

今日のアプリケーション開発分野では、OpenAI API などの生成 AI 技術の活発な開発により、...

次回の組み込み設計に人工知能を使用する4つの理由

次のプロジェクトに機械学習を取り入れるべき 4 つの理由をご紹介します。 理由その1 – マーケティ...

Alibaba の軽量オープンソース Web サーバー Tengine 負荷分散アルゴリズム

序文Alibaba レイヤー 7 トラフィック エントリ アクセス レイヤー (アプリケーション ゲ...

ゲームにおけるディープラーニングと AI

[[190049]]この記事は、4月27日にBig Data Talk WeChatコミュニティで...

Python コードを書くことができる人工知能 Kite が Linux のサポートを発表。プログラマーは職を失うことになるのでしょうか?

[[264788]]プログラマーが Python コードを書くという反復的な作業を軽減するのに役立...

学者がインテリジェンス、モデルとデータAI、デジタルトランスフォーメーションについて語る。このAIイベントには技術的な内容が含まれている。

2022年、学者たちは人工知能の将来の発展をどのように見ているのでしょうか?将来、AI はモデル駆...

AIの時代において、従来の検索エンジンはどこへ向かうのでしょうか?

こんにちは、皆さん。私は Luga です。今日は、人工知能 (AI) エコシステムに関連するテクノロ...

...

データセンターから発電所まで: 人工知能がエネルギー利用に与える影響

人工知能 (AI) は急速に現代生活に欠かせないものとなり、産業を変革し、私たちの生活、仕事、コミュ...

感情 AI はデジタルヘルスケアの未来となるでしょうか?

進化するヘルスケアとテクノロジーの世界では、「感情 AI」と呼ばれる画期的なイノベーションが変化の兆...

Mac専用の大型モデルフレームワークが登場! 2行のコードでデプロイでき、ローカルデータとチャットでき、中国語もサポートしています

Mac ユーザーは、ついに、RTX を使用した独自の大型モデル チャットを持つ N カード プレーヤ...

...