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

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

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)は私たちが住む世界を急速に変えています。医療から金融まで、人工知能は産業を変革し、私...

人工知能AIが創り出す素晴らしい「世界」を見に来てください

[[229314]]テキスト/ローリング1760 年代から 19 世紀半ばにかけての第一次産業革命に...

モデルもオンライン授業を受講できますか? !サービス指向の蒸留トレーニング プログラムを 1 つの記事で理解する

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

AIが機密情報を保護する5つの方法

人工知能(AI)は、業務の効率化に欠かせないツールであるだけでなく、機密情報の保護にも重要な役割を果...

CPUのみを使用して1000FPSで実行できます。これはオープンソースのC++クロスプラットフォーム顔検出プロジェクトです。

さまざまな依存環境によって常に荒廃していますか?コンピューターと携帯電話の両方で実行できる、C++ ...

AIを活用したBeike Real Estate:不動産サービス業界の新たなエコシステムの構築

[51CTO.com からのオリジナル記事] 人工知能は日常生活のあらゆる分野に大きな変化をもたらし...

新しいAIにより、教師はインテリジェントな個別指導システムを迅速に開発できる

インテリジェントな個別指導システムは、代数や文法などの特定の科目の指導に効果的であることが証明されて...

ビッグモデルの要約は信頼できるでしょうか? GPT-4を使用すると、人間の筆記よりも滑らかで、幻覚も少なくなります

自然言語生成 (NLG) のタスクとしてのテキスト要約は、主に長いテキストを短い要約に圧縮するために...

正義がアルゴリズムを採用したとき、最後に笑うのは正義か、それともテクノロジーか?

2017年4月11日、米国のロバーツ最高裁判所長官は、ニューヨークのレンセラー工科大学の学長との会...

...

あなたはまだ顔認識精度指標に騙されていませんか?

導入ハードウェアの性能向上と顔データ量の増加に伴い、顔認識はますます成熟し、商業的な用途もますます増...

...

歴史を作ろう!地球からのドローンが火星へ飛び立ち、NASAはこのようにライト兄弟に敬意を表す

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

HarmonyOS メタサービス開発実践: デスクトップカード辞書

1. プロジェクトの説明1.DEMOのアイデアはカード辞書です。 2. カードによって表示される内容...