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

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

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

ブログ    
ブログ    
ブログ    

推薦する

...

...

...

C言語の非数値計算でよく使われる5つの古典的なソートアルゴリズム

概要: ソートとは、一連の「順序付けられていない」レコードシーケンスを「順序付けられた」レコードシー...

...

Llama2がオープンソース化された後、国内の大型モデルはどのような展開を見せるのでしょうか?

7 月 19 日、オープン ソース コミュニティの最も強力な大規模モデルが Llama から Ll...

表形式データでの機械学習に特徴抽出を使用する方法

データ準備の最も一般的なアプローチは、データセットを調査し、機械学習アルゴリズムの期待値を確認し、最...

AI業界の「第2の成長曲線」を牽引する清華大学傘下のRealAIが第3世代のAI製品をリリース

12月9日、清華大学人工知能研究所、北京市知源人工知能研究所、北京市瑞来スマートテクノロジー株式会社...

アリババ、AI研究所、清華大学が共同でAIに認知能力を与える新しいAIモデルを発表

1月12日、アリババ、AI研究所、清華大学などの共同研究チームが、新たな超大規模認知事前トレーニング...

...

量子機械学習変分量子分類器 (VQC) の紹介

変分量子分類器 (VQC) は、量子コンピューティング技術を使用して分類タスクを実行する機械学習アル...

超人工知能を巡る究極の議論 ― 人間とどう共存するか?それとも人類に対する完全な脅威でしょうか?

[[386332]] 1950 年代に、SF 作家のフレドリック・ブラウンは超知能機械についての物...

AI のブラックボックスを開く: 「説明可能な」人工知能 (XAI) への認知ガイド!

今日、企業組織は意思決定に人工知能や機械学習モデルをますます頼りにしており、こうした意思決定は私たち...