卒業後、大きな工場からオファーをもらいたいですか?あなたはこれらのコンピュータ知識システムを完全に所有しなければなりません!


著者|プログラミングガイドノース

作成|プログラミングガイド(ID:cs_dev)

ヘッド画像|ビジュアルチャイナからのCSDNダウンロード

序文

なぜ突然このトピックについて書きたいのですか?

最近、多くの新しい読者がバックグラウンドで質問しました:大学でJavaまたはC ++を勉強するとき、どちらが仕事を見つけるのに良いですか?フロントエンドまたはバックエンドを学ぶ方が良いですか?VueまたはReactを学ぶべきですか?

当時の自分の姿を見ているように、別の記事を書いて、コンピューターサイエンスの新卒者として話す必要があると感じました。4年間の大学のコンピューターサイエンスの学生が何を学ぶべきか、そしてそれがポイントだと思います。

同じ4年間の大学で、卒業後にオファーハーベスターになれる生徒がいるのはなぜですか?すべての種類のSPとSSPはソフトです。学校で多くのウェブサイトを作成している生徒もいます。彼らはプロジェクトの経験が豊富ですが、見つけました。仕事は難しいです。

後者が真剣に勉強しなかったとは言えず、努力の方向性が間違っているのかもしれません。

言うまでもありませんが、トピックに直接進みましょう。

テキスト

人間の知識の境界は拡大し続けています。言われているように、学習は無限です。これはコンピューターの分野にも当てはまります。コンピューター自体は人工科学であり、自然科学ではありません。

毎年、毎月でも、常に新しいプログラミングフレームワークがリリースされています。ハゲを学んだ後は学習を終えることができず、1つずつ学習する必要はありません。

また、多くの第1層および第2層の企業は、サービスディスカバリ、RPC、KV、DB、メッセージキュー、ログ、監視など、独自の内部機能を使用していることがわかります。

したがって、これらの大企業に採用する際には、一定の枠組みを学んでいないからといって、ハングアップすることはありません。とにかく、多くのことをもう一度学ばなければなりません。

彼らはあなたの基本的な知識、問題解決の経験、そしてより用途の広い賢さにもっと注意を払うでしょう。

代わりに、一部の小規模企業では、Spring、Vue、Redis ...これらのフレームワークまたはコンポーネントについて知っておく必要がある場合があります。

テンセントJD

アリJD

あるアウトソーシングJD

以上がテンセント、アリババ、アウトソーシング会社の採用JD(職務内容)ですが、テンセントアリババは確かな基礎プログラミングスキルと素早い学習能力に興味を持っており、育成の可能性を秘めています。

アウトソーシング会社では、xxデータベースやSpringなどを知っている必要があります。どちらが優れているかを評価しないでください。しかし、BATに行きたいのであれば、少なくとも彼らのJDに対する能力を向上させるための近道ですか?

ここでは、コンピュータープログラミングの知識を大まかに3つの部分に分けます。

  • 基本知識

  • ドメイン固有の知識

  • フレームワークと開発スキル

基本的な知識とは、データ構造、アルゴリズム、オペレーティングシステムなど、あらゆる方向に従事するソフトウェアエンジニアを指します。

ドメイン固有の知識とは、特定の細分化の方向に取り組むときに習得する必要のある知識です。たとえば、ゲームエンジンになるにはグラフィックを習得する必要があります。フロントエンドになるには、ブラウザレンダリングの原理と3つのフロントエンドコンポーネントを習得する必要があります。アルゴリズムエンジニアには、より数学的な知識が必要です。 。

結局のところ、コンピューターには多くの種類があり、勉強するために細分化の方向を選択する必要があります。すべてを学ぶと、何も得意になりません(大物を除く)。

基本知識

現在、大きな環境は比較的刺激的です。基本に気を配り、Pythonを直接学び、機械学習に従事し、フラッシュゲームを作成し、モールになることを好む人はほとんどいません。

仕事を探すときは、いつもインタビューを読んで、簡単な結果をまとめたいと思っています。

しかし、優れたコンピューターサイエンスの学生として、さまざまなプログラミングフレームワーク(フレームワークの構築を除く)にどのように関与でき、SpringBootとSSHのどちらを学ぶのでしょうか。

彼はアルゴリズムや基本的な主題に時間を費やすことを楽しんでいませんか?実用主義の観点から、報酬はより大きくなります。

また、コンピューター分野では、基礎理論があまり進んでおらず、コア知識を身につけることができます。

1.数学

まず第一に、ここにリストされている数学はハイエンドに見えることではなく、数学の喪失に苦しんでいることです。

あなたが独学で転職してプログラマーになるのであれば、私は確かに数学をお勧めしません。転職の可能性が高いのはJavaやフロントエンドなどを学ぶことだからです。基本的に数学の要件はありません。

ただし、この記事は主にまだ大学に通っている学生を対象としています。学生のこの部分は、アルゴリズム(CV、NLPなど)、ゲームエンジン、情報セキュリティコーディングなどを行う場合があります。

これらの方向性には、数学に対するより高い要件があります。コンピューターの分野では、線の生成、確率理論、統計などの数学的な分岐が比較的重要です。コンピューターは本質的に離散的です。

たとえば、機械学習やデータマイニングでは、データの次元数を減らすために線形代数がよく使用されます。多くの問題は、最終的には線形方程式の解法に変換できます。

ですから、将来これらの方向に進みたいときに数学にとらわれないようにするために、1年生と2年生の数学のクラスにいるときにそれを勉強する必要があります。

この本を使うと、嫌いになることは少なくなります。役に立たなくなった今、学ぶのは簡単ではないと思います。必要なときに後悔するでしょう。(無知の沈黙の涙は┭┮﹏┭┮

何?将来は間違いなく開発の方向性をするということですか?

確かに少し後で数学を優先することができ、あまり使われていませんが、数学の授業では常に注意深く耳を傾ける必要があります。高得点を取得しても害はありません。アルゴリズムチームに再び参加したい日がわかりませんか?

2.C言語

あなたは疑問に思うかもしれません、ここに基本的な知識があります、なぜプログラミング言語は別々にリストされるべきですか?

私の意見では、コンピュータシステムを理解するのに適したC言語は他にありません。

後で説明するオペレーティングシステムとアーキテクチャは、C言語での理解または実践に非常に適しています。

また、C言語自体は言語機能が少ないのですが、なかなか習得できず、C言語が難しいと感じる方も多いのですが、その難しさは何ですか?新入生の1年間にどのように感じたかを思い出してください。

  • シンプルな標準ライブラリ、利用可能なデータ構造とアルゴリズムはほとんどありません。すべて自分で行う必要があります

  • ポインタは理解して使用するのが難しい

  • C言語を有効に活用するには、アセンブリ、リンク、ロード、メモリなどを理解する必要があります

残念ながら、これらはコンピューターシステムの知識の一部であるため、コンピューターシステムの知識を学ぶための最も効率的な方法としてC言語を使用します。

JavaやPythonを使用して他の人にメモリを説明することを想像するのは本当に難しいです。これらの言語は、Cよりも抽象的であり、コンピュータシステムから遠く離れていることを意味します。

TIOBEプログラミング言語リストでは、ほとんどの場合C言語が上位3位を占めており、そのステータスは当然のことながら疑いの余地がありません。

TIOBE-2020ランキング

また、開発で使用するもののほとんどは、C言語、Linux、Nginx、Redis、MySQL、Gitで記述されています...原則を調べて、これらのオープンソースソフトウェアのソースコードを読みたいと思うかもしれません。次に、C言語はあなたの不可欠なスイス軍のナイフでもあります。

コンピュータの基本的な実行原理を理解できるC言語の詳細な研究は、プログラムの動作メカニズムを理解するための優れた言語であり、比類のないものです。

ここで、C言語の最も古典的な要約を引用する必要があります。

C言語よりも低い言語は、コンピューターシステムを完全に抽象化するのに十分ではありません。Cよりも高い言語は、Cで実装できます。

これは本当に非常に高く適切な評価です!

したがって、コンピュータサイエンスのクラスでは、フロントエンドかバックエンドか、アルゴリズムか開発かを問わず、一生懸命勉強するためにC言語をお勧めします。これは方向性に関係のない言語であり、基盤です!

3.オペレーティングシステム

私たちがプログラムするIDEと私たちが作成するプログラムはすべてオペレーティングシステム上で実行する必要があります。オペレーティングシステムがコンピュータソフトウェアの基礎であると言っても過言ではありません。

プログラムを実行するときは、オペレーティングシステムのプロセス管理を含むプロセスを作成する必要があります。プログラムを作成するには、変数を定義してデータを保存する必要があります。これには、メモリ管理に対応するメモリが含まれます。場合によっては、ファイルの読み取りと書き込みも必要になります。これは分離できません。ファイルシステムを処理するために開きます。同時実行中にプログラムが混乱しないように、ロック、条件変数、および重要なセクションの使用方法を学ぶ必要があります。

システム呼び出しは、ファイルの読み取りと書き込み、およびメモリの割り当てと切り離せません。

実際にプロジェクトを開始すると、多くの問題がオペレーティングシステムに密接に関連していることがわかります。オペレーティングシステムを理解していないと、問題の原因を分析することすらできません。

たとえば、しばらく前に、coroutine(libco)に基づくフレームワークに登場し、マルチスレッドロックを使用して同期相互除外の偶発的なデッドロックを実行しましたが、後の分析で次の理由が見つかりました。

コルーチンはアプリケーション層に実装されているため、スレッド内の複数のコルーチンはオペレーティングシステムに認識されません。

コルティンモデル

次に、Aと呼ばれるプロトコルがロックされてネットワークIO要求を開始すると、この時点で別のプロトコルBに切り替えられ、プロトコルBが再びロックを要求します。

このとき、オペレーティングシステムはロックがすでにオンになっていると見なすため、コルーチンBに対応するスレッドを待機キューに一時停止します。このように、コルーチンAは実行されず、ロックを解除できず、デッドロックが発生します。

解決策も非常に簡単で、ロックをリエントリーロックとして設定します。リエントリーとは、同じスレッドがハングを発生させることなく同じロックを複数回要求することを意味します。このように、コルーチンBが再度ロックを要求すると、オペレーティングシステムは、コルーチンBがすでにロックを保持しているスレッドを認識し、直接戻って実行を続行します。

要するに、私たちは常にオペレーティングシステムと相互作用するプログラムを作成します。よく学ばない理由はありません。

4.コンパイルの原則

コンパイルの原則は、私たちが通常接触することが最も少ないかもしれません。新しいプログラミング言語を作成してコンパイルの原則を学ぶ必要はないと感じるかもしれません。

コンパイルの原則を学ぶことの用途は何ですか?

これらのプログラミング言語をより高い視点から見ると、表面的な文法は見えなくなりますが、文法の背後にある実装についても考えるようになります。

オペレーティングシステムとアーキテクチャを理解しているのと同じように、この感覚は非常に徹底的です。マウスをダブルクリックするだけでプログラムがどのように実行されるかを理解できます。すべての詳細と徹底性を習得するこの感覚は本当に素晴らしいです。信じられません。やってみます。

英語を話す!

コンパイルの原則を学んだ後、あなたは何ができますか?

有限状態マシンの学習を終了すると、以前は非常に優れていた通常の式をDFAとNFAで実装できるように見えることがわかります。ステートマシンのアイデアは、プログラミングの多くの場所で使用できます。

たとえば、HTTPプロトコルを解析するために、ステートマシンの概念を学習していない場合は、if / elseで1行ずつ解析を行うことができます。ここで最も厄介なのは、if / elseがすべてのHTTPヘッダーフィールドを事前に受信してから判断する必要があることです。 HTTPはTCPに基づいており、TCPはストリーミングであることがわかっているため、複数の文字のグループで受信する可能性があります。現時点では、if / elseが書き込まれていると、読みにくくなります。

ステートマシンで書かれたコードはとてもエレガントです。状態遷移はルールによって駆動され、1文字を受け取ってから判断すると非常に便利です。

文法分析の学習を続けます。再帰降下分析の非常に重要なアイデアを習得します。再帰降下を使用して、4つの算術計算機をすばやく実装できます。

再帰を使用して下降しない場合は、最初にinfix式をサフィックスに変換してから、それを評価する必要があります。これは、新入生のデータ構造クラスで記述されていました。当時は、スタックで記述されていました。その後、コンパイルの原則を学んだ後、再帰降下を使用して、数十行のコードを何度も繰り返して書き直しました。

実際の開発でよく使われるシナリオもあります。たとえば、タオバオやジンドンなどのeコマース企業には、フルリダクション、ダイレクトリダクション、クロスストアなど、多くのマーケティングルールがあります。そのようなルールを書くことは不可能です。コード内。

それはどのように行われますか?

一般に、構成システムが実装され、DSL(ドメイン固有の言語)がこれらのルールを表現するように設計され、ルールがシステムに直接構成されます。これは、変更するのに非常に便利です。次に、コード内のDSLによって定義されたルールを解析する方法を教えてください。これには、DSLの構文パーサーを作成する必要があり、ここでは構文分析の方法を使用します。

DSL(ドメイン固有言語)は、特定の分野で使用されるプログラミング言語です。この特定のフィールドは、C、C ++、Pythonの共通言語に関連しています。共通言語はさまざまなフィールドで使用できます。私たちが精通しているプログラミング言語のほとんどは共通言語であり、すべてTuringに対応しています。の。

私たちが通常使用するJSON、SQL、およびHTMLはすべて一種のDSLです。再帰降下を使用して、eコマースWebサイトを作成するよりも価値のあるJSON、XMLパーサーを作成することもできます。

学習を続けて、抽象構文ツリーASTが生成される方法、それを中間コードに変換する方法、中間コードを最適化する方法、そして最後に機械命令を生成する方法を学習します。

レジスタ割り当てでの貪欲なアルゴリズムの適用を確認し、グラフ理論での到達可能性分析がデッドコードの除去をどのように達成するかも確認します。

IDEの緑色のコンパイルボタンは、もはやあなたにとって黒い魔法ではありません。

ワンクリックで実行可能なプログラムを生成できるのはなぜですか?

あなたが書いた英字はどのようにしてバイナリ命令に変わりましたか?

コンパイルの原則を学んだ後、これらはすべて問題ではありません。ママはもうあなたの研究について心配する必要はありません〜

もちろん、GCCやClangのようなコンパイラを完成させることの難しさは高すぎます。コンパイルの原則を学ぶ目的は、そのようなホイールを構築することではなく、プログラミング言語をよりよく理解して使用することです。

5.システムの構造と構成の原則

上記はすべてソフトウェアレベルに関するものであり、アーキテクチャはコンピュータの動作に関するものです。一般的な保存プログラムコンピュータの動作を理解できます。

ナンタ大学の先生が「私たちはコンピューターの使い方を学んでいるのではなく、コンピューターの作り方を学んでいる」と言ったのを覚えています。コンピューターの作り方は少し誇張されていますが、少なくともコンピューターの実装の原則とCPUによるコードの実行方法を理解する必要があります。 ?そうでなければ、非常に混乱するでしょう。CPUのような回路でたくさんの英字が実行されることは明らかです。私は、作曲とデジタルロジックの原理を学ぶまで、1年生のときにC言語に戸惑いました。

コンピューター内のすべてが0、1、0と1は高低レベルで表現され、バイナリ数値演算はAND、OR、NOTなどの論理ゲート回路で表現され、これらの単純な回路が統合されます。 、ALUなどの計算能力を備えたプロセッサを形成します。

CPUによって命令がどのように実行されるかがわかります。CPUはメモリまたはキャッシュから命令をフェッチし、それを命令レジスタに入れて、命令をデコードします。デコードとは、命令のエンコード規則に従って、命令を一連のマイクロオペレーションとオペランドに分割することです。次に、さまざまな機器制御命令を発行して、マイクロオペレーションを実行します。これで命令の実行は完了です。

コンパイルの原理を学んだ後、書かれた英語のコードがどのようにバイナリ命令に変換されるかを理解できると言います。オペレーティングシステムを学んだ後、バイナリプログラムがどのようにリンクされ、オペレーティングシステムによってどのようにロードおよび実行されるかを理解できます。構成原理は、バイナリ命令が実行するCPUをどのように制御するかを示します。私たちのオペレーティングシステムは本質的にバイナリプログラムです。

コンピューターのストレージ階層とマルチレベルキャッシュを理解すると、データアクセス方法を最適化することで、より高速なプログラムを作成できます。

基盤となるアーキテクチャがスタックフレームとCなどの言語でのパラメータの受け渡しをどのようにサポートするかを学習します。パラメータはどのように別の関数に渡されますか?関数の戻り値を取得するにはどうすればよいですか?

これは、コードを書くための構成原則を学ぶことの意味です。

これを学ぶ意味は何ですか?

書かれたコードがどのようにバイナリ命令になり、さまざまなゲート回路を制御し、最終的に画面上でカラフルなプログラムになるかを完全に理解できます(もちろん、表示の原理を学ぶ必要があるかもしれません)、これは私たちです多くの場合、「基本」および「原則」と呼ばれます。

また、コンピュータアーキテクチャの多くのアイデアは、最新のソフトウェア開発で広く使用できます。たとえば、CPUのマルチレベルキャッシュのアイデアは、キャッシュ置換戦略など、サーバー開発の同時実行性を向上させるために使用するキャッシングテクノロジです。

コンピューターがブラックボックスではなくなったら、コードの記述から実行までのすべてのステップを理解し、これが将来のコア競争力にもなります。メジャーの卒業生として、Java、Redis、Mysql、Springだけを使用する必要はありません。さまざまなウェブサイトを書くため。

途中で転職したり、トレーニングコースをやめたりする読者がいらっしゃる場合は、時間を割いてこれらのベーシックコースを補っていただき、プログラミングの道をどんどん進んでいきたいと思います。

6.データ構造とアルゴリズム

アルゴリズムを最後に置くことが重要でないのはなぜですか?それどころか、それはあまりにも重要なので、それをフィナーレにしましょう。

大学で何を後悔しているのか聞いてみませんか?ACMをプレイするために新入生の年からアルゴリズムを学ばなかったからでしょう。

まだ1年生と2年生の学生は、チャンスをつかむことはありません。後で後悔するのを待つ必要はありません。もちろん、ACMがなければ、データ構造とアルゴリズムをうまく学ぶことができます。

データ構造とアルゴリズムはどのコンピュータ分野でも見ることができます。たとえば、コンパイルの原則では、レジスタの割り当てには貪欲が使用され、デッドコードの検出と削除にはグラフ理論の到達不能な知識が使用されます。オペレーティングシステムプロセス、スレッドスケジューリング会議マルチレベルのキューとスケジューリングアルゴリズムが使用されます。構成原理でのキャッシュの置き換えには、LRUやFIFOなどのアルゴリズムが使用されます。必要なデータベースの開発も、データ構造やB +ツリーやLSMなどの検索アルゴリズムから切り離せません。

多くの場合、必要なアルゴリズムはプログラミング言語の基本ライブラリにカプセル化されているため、多くの学生はアルゴリズムが私たちから遠すぎると感じていますが、そうではありません。

アルゴリズムを習得しないと、Map(赤黒の木で実装)をいつ使用するか、HashMapをいつ使用するかさえわかりません。

したがって、学習アルゴリズムは、アプリケーションのシナリオに応じて最適なデータ構造を選択するのに役立ちます。

アルゴリズムは日常の開発でも切り離せません。たとえば、Xiaobeiの最近の作業に含まれる特定のネストされたTLV(Tag-Length-Value)構造コードの分析には、再帰やマルチブランチツリーなどの知識が必要です。アルゴリズムを学ばない場合は、プログラム内で/ forの間、多くのif / elseしか見ることができません。

アルゴリズムを知らないエンジニアは間違いなく優秀なエンジニアではないと言えます。

7.コンピューティングネットワークやデータベースなどについて話してみませんか。

多くの人がコンピューターネットワークとデータベースの原則をコンピューターの基礎として分類することを好みます。もちろん、完全な知識構造を持つコンピューターサイエンスクラスの学生はこの知識を理解する必要があるため、私も同意します。

しかし、個人的には、コンピューターネットワークとデータベースは、オペレーティングシステム、コンパイルの原則、および構成の原則に基づいて構築されたアプリケーションレイヤーソフトウェアにすぎないと思います。

データベースとは何ですか?データベースが存在する前は、ファイルを使用してデータを保存していましたが、検索や変更などが不便でした。データベースによって、このプロセスの効率が向上しただけです。

ネットワークは何をしますか?ネットワークは、同じコンピューター上にないプログラムが相互に通信できるようにするためのものであり、これは本質的にプロセス間通信の手段です。

スタンドアロンの産業用ソフトウェアのみを開発している場合は、ネットワークを学ぶ必要すらありませんが、ほとんどのプログラマーはフロントエンドとバックエンドに関係なくインターネット企業で働いているため、HTTPなどのネットワークプロトコルを処理せずに行うことはできません。

繰り返しになりますが、ネットワークとデータベースが重要ではないというわけではありませんが、それらはオペレーティングシステム上に構築されたソフトウェアに属し、基盤には含まれていないと思います。

領域知識

いろいろな分野のことをよく知らないので、あえてあまり言いません。少しだけ言うと、それはコメントにすぎません。

TencentまたはNetEaseにアクセスしてゲームエンジンの開発を行う場合、グラフィックは避けられない知識である必要があります。さらに、レンダリングパイプライン、シェーダー、物理学、照明などを学ぶ必要があります。

PingCapのような会社に行って分散ストレージを実行する場合、分散理論知識は、CAPの定理、Paxosアルゴリズム、Raftアルゴリズム、ZABプロトコルなど、回避できないゲートウェイである必要があります。

データベースを作成する場合は、ディスク、インデックスの実装、SQL解析(コンパイルの原則)、トランザクション、MVCCを使用して読み取りと書き込みの競合を解決する方法など、多くのプログラミング言語レベルを理解する必要があります。ロック、セマフォ、同時プログラミングスキルなど、データベースの構築は汚い仕事であり、疲れる仕事であると言わざるを得ません。

さらに、分散データベースを構築する場合は、データシャーディングの知識、クエリタスクの実行方法、集中的に実行するか、ロジックを各ノードにプッシュダウンするか、分散トランザクションの実装方法などを学習する必要があります。

大きな工場のCRUDに行きたいとおっしゃいましたか?何も悪いことはありません、古い鉄!

次に、コンパイルされた言語(C / C ++、Java、Go)に精通し、C ++などの言語の基本原則を理解する必要があります。STLとオブジェクトモデルを確認する必要があります。仮想関数テーブルとスマートポインタが何であるかがわかりません。 Tencentに行ってC ++を作成したいですか?Javaの場合、JVM、どのガベージコレクションアルゴリズムを覚えておく必要があります。ConcurrentHashMapを見てみませんか。つまり、Javaを実行しているということですか。

CRUDの目的はデータベースですよね?そうすると、データベースの使い方をうまく学ぶことができなくなります。ユーザーはHTTPを介してサービスにアクセスします。HTTPを理解する必要がありますか?ちなみに、TCPのスリーウェイハンドシェイクやフォーウェーブハンドは見ないでください。コンピューターを学んでいると言って恥ずかしいですか?

ユーザーはここにお金と情報を入れるので、ユーザーデータのセキュリティを確保する必要がありますよね?XSS、SQLインジェクション、CSRFなどの一般的なWeb攻撃方法を理解する必要がありますか?HTTPS、RSA、署名、デジタル証明書などのセキュリティ方法を知っている必要があります。

Double Elevenのトラフィックが多すぎて、上司はそれでも耐えなければなりません。次に、キャッシュ、非同期、メッセージキュー、NoSQL、これらの数千万のQPSの必需品を理解する必要があります。

見てください!CRUDをうまく行うのはそれほど簡単ではありません。

(上記の段落は、バックエンドの学生が学ぶ必要がある知識を書き出すための単なる別の方法です。それは不満や冗談ではなく、純粋な娯楽です。

スキル

これには、VSCodeやJetbrainsなどのIDEや、ドキュメント作成用のMarkdownやGitなどのバージョン管理ツールが含まれます。SSHリモートログイン、ポート転送、Ngrokイントラネットペネトレーションなど。開発効率を向上させるためのこれらのツールはすべてスキルです。これについては何も言うことはありません。通常、詳細を学び、蓄積する必要があります。

一つだけ申し上げますが、できるだけ早くメインの開発コンピュータとしてLinuxとUnix-like(Mac)を使用してください。2年生のとき、WangYingの「WorkingwithLinux」を読み、SSDを購入してUディスクシェルに入れてブートディスクを作成しました。その後、コースの選択でのみ、Ubuntuを1年近く使用しました。宿題などを提出するためにIEブラウザが必要な場合にのみWindowsが開きます(古い学校のウェブサイトについて文句を言う必要があります!)

もちろん、私は熱心なLinuxファンではありません。開発は、さまざまな環境でのインストールやコマンドラインの使用と切り離せないものだと感じています。上記のUnixのようなシステムには、当然の利点があります。誰でも知っているはずです。

総括する

書き終えた後、この記事の長さが「基本:ドメイン知識:スキル」で7:2:1に近いことを発見しました。

これは、大学時代に、少なくとも50%以上の基礎知識を学ぶための学習時間を割り当てることをお勧めする時間の割合でもあります。もちろん、これらのことを学び終えたら、興味のある方向性を見つけることができます。

1年生と2年生の年にJavaWebとPythonのクローラーに参加しないでください。これらは学ぶことができますが、重要ではありません。

では、どのように学習をテストしますか?

おそらく、コンピュータネットワークでこのインタビューの質問を聞いたことがあるはずです。「URL入力からページ表示まではどうなりますか?」

この質問を別の言い方をすれば、「データパケットはどのようにして別のコンピューターに送信されるのか」です。

プロセス全体を完全に伝えることができれば、あなたはジワンについて学んだに違いありません!これが、インタビューがこの質問をとても好む理由です。

それでは質問しましょう

「コードが書かれてからプログラムが実行されるまでに何が起こったのですか?」

この質問に対する答えは詳細であればあるほどよいのですが、基本的には、明確に説明できれば、コンパイルの原則、オペレーティングシステム、構成の原則を理解できます。

この質問もここに置かれ、フォローアップの投稿の要約は、プログラミングガイドに引き続き注意を払ってください。

悲しいかな、そのような思いやりのある先輩が私にこれを言ったとしたら、Andorid開発、Java Web、およびPythonクローラーで遊んで半年以上はなかっただろう。

しかし幸いなことに、後で基本の重要性に気づき、アセンブリを学び始め、Cを再学習し、ミニOSに取り組み、Linuxカーネルの実装原則を検討しました。最後に、私は首尾よく髪を失いました。

最後に、私はあなたに私が好きなものを与えたいと思います:

浮かぶ砂の上に高いプラットフォームを構築しないでください。


更多精彩推荐
☞本周六定位上海!解析百度文心(ERNIE)如何助力快速定制企业级NLP模型
☞头发越秃程序员就越厉害?| 每日趣闻
☞独家对话谢宝友:做一款类似于 Linux 的国产操作系统  | 人物志
☞DeepFashion实现服装检测搭配
☞蓝色巨人IBM全力奔赴的混合云之旅能顺利吗?
☞区块链赋能供应链金融|应用优势与四类常见模式
点分享点点赞点在看

おすすめ

転載: blog.csdn.net/csdnsevenn/article/details/109252064