少し前に、私は CSDN から Java ナレッジ ベースの内容をレビューするよう招待されました。また、私自身の Java ナレッジ システムを整理する機会もありました。この記事が、これから始めようとしている、またはこれから始めようとしているプログラマに役立つことを願っています。 Javaの世界。
最初の写真、基本的な写真
私が Java を知り始めたのは 2003 年頃ですが (当時はまだ Delphi を使用していました)、正式に Java を学ぼうと決心したのは 2004 年に学部を卒業してからでした。 当時、Delphi を使って C/S アーキテクチャのプログラムを書くのは面白くないと感じていましたが、当時 Java が提唱していた J2EE 標準の概念やエンタープライズレベルのアーキテクチャは高級なものに感じられ、内なる欲求を抑えることができませんでした。それで私は Java の旅を始めました。 正直に言うと、私は Java の世界に入った瞬間にめまいを感じました。さまざまな仕様、概念、英語の略語は人をめまいさせることがあります。
J2SE
J2EE
J2ME
JSP
JDBC
JMS
EJB
JNDI
JDBC
JTA
入ったときに見たものを何気なく思い出しました。見慣れない英語の略語がたくさんありました(幸いなことに、当時はJavaにあらゆる種類のフレームワークが開花していませんでした。そうでなければ、私はさらにめまいがしたでしょう)。どこから学習を始めればよいかわかりません。 たまたまクラスメイトが JSP の本を持っていたので、JSP を始めました。正直に言うと、これは本当にひどい本でした。今ではその名前さえ覚えていません。おそらく、JSP デモ サイトを構築するためにいくつかのサンプルから始めたのを覚えています。 さまざまな環境やコンテナーの問題に何千回も悩まされた後、ついにサンプルを実行し、ローカル ブラウザーでサンプルのページを確認できました。一瞬達成感を感じましたが、その後、途方に暮れました。 仕組みが全く理解できないのですが、どういう原理なのでしょうか? 長い道のりであり、寄り道もたくさんありました。もう一度やり直す機会が与えられたら、Java 言語の基礎から始めるでしょう。
根拠は何ですか? Java はオブジェクト指向言語であり、最も重要な概念はオブジェクトであり、そのすべての構文はオブジェクトを中心に展開されます。 他のプログラムの基本構造と変数、シーケンス、ループ、分岐は以前の他の言語に基づいていますが、形式が異なるだけです。 オブジェクトを理解すると、オブジェクトを取り巻く概念、つまりクラスやインターフェイスはすべて自然に拡張されたものになります。 もちろん、核となる概念と基本的な文法をマスターすれば、Hello World を作成するだけです。しかし重要なのは、出発点が正しければ、旅は近づいているということです。
この段階では、良い本を読み、基本的な演習を行うことで、言語と関連ライブラリに慣れることができます。私の考えでは、『Thinking In Java』は Java を始めるのに適した本です (いや、この本に出会うまでにかなり遠回りしました)。もちろん、他にも『Java プログラミング入門』など、良い本はあります。 "、" コア Java》。 私の感覚としては、この種の入門書をもう少し入手して、各知識点を参考に読んでみるとよいでしょう。結局のところ、著者は 1 冊の本を最初から最後まで縦に読むのではなく、横に読んだほうがよいでしょう。 知識のポイントを 1 つずつ把握し、理解して、1 つのステップで深い足跡を作成します。
基本に関しては、私の目から見て、中核的で重要な部分はあまり多くありません。ここで簡単にリストします:
中核概念
コレクション フレームワークは、一般的に使用される多数のデータ構造のカプセル化を提供するため、基本的に Java プログラマは、データ構造のコースで学んだ一般的なデータ構造のほとんどを手動で実装する必要がなくなります。 さまざまなデータ構造の適用可能なシナリオを手動で実装するよりも、それらを正しく理解する方がはるかに便利です。何もすることがない場合は、コレクション内のコードを参照してください。これらはすべてマスターレベルの実装です。 私が Java を勉強していた頃はまだ JDK 1.3 だったと記憶していますが、私が働き始めてからは JDK 1.4 が主流で、当時は並行ライブラリはありませんでした。 スレッド間通信を自分で処理していると、さまざまな通知が漏れたり、早期に通知されたり、デッドロックが発生したりしました。 したがって、今日の Java プログラマーは、Concurrent がもう 1 つのマスターレベルのクラス ライブラリ実装であり、詳しく調べて理解することができます。 IO ライブラリは、ファイル IO であってもネットワーク IO であっても、Java プログラマが最も扱うものです。その API に慣れることは重要ですが、より重要なのは、IO 操作を抽象化およびモデル化する方法を理解し、その違いを理解することです。 IO モデルの背後にある本質と原則。
つまり、基礎は内部の強さのようなもの、フレームワークは武器のようなもの、そして使用法は動きのようなものであり、この 3 つが統合されれば、すでに Java の世界を支配することができます。 上で述べたように、これに基づいて 2 番目のマップが作成されます。
3枚目の写真、拡大写真
3枚目の写真に関しては、ちょっと普遍的かなと思う提案はもうできません。 この段階で、人それぞれの成長や発達の方向性は、その人の置かれている環境や現実の状況によって左右されます。私を例に少し説明してみます。 インターネット企業に入社してからのここ数年で、Java テクノロジーの開発は、J2EE コンテナー化された単一アプリケーションから SOA およびマイクロサービスへと進化し始めました。 大規模な分散システムが標準になっているため、私の関連業務はこの分野に集中しています。 一方で、知識の盲点を埋めるために徹底的な調査が続けられています。たとえば、分散プログラムの基礎は RPC 呼び出しであり、RPC の本質はネットワークとオブジェクトのシリアル化です。 したがって、TCP の原理、Unix/Linux でのネットワーク プログラミング モデル、およびいくつかの異なるネットワーク IO モデルを完全に理解する必要があります。 次に、これをベースにJavaが提供するネットワークプログラミングモデル、BIO(ブロッキング)、NIO(ノンブロッキング)、AIO(非同期IO)に進み、実際の業務実践と組み合わせて理解を深めます。
この過程で、Java 独自の RMI から WebService の技術仕様に至るまで、多数の異なる RPC テクノロジに触れました。 その後、Hessian、Thrift など、よりシンプルで強力な RPC フレームワークが次々に登場しました。 さまざまなフレームワークの本質は同じですが、サービス化の発展に伴い、Alibaba のオープンソース Dubbo など、RPC フレームワークに基づいて追加の付加価値機能を提供するサービス フレームワークがさらに派生しました。 作業の実践が深まるにつれて、JVM レベルまで下がって、オブジェクトのメモリ使用量、スレッドのスケジューリング、遅延を分析することが可能になります。 この段階でも中心的な役割を果たすのは、やはり迅速に学び、それを前述した仕事の実践に応用する能力です。
深さの反対側は水平方向の拡張です。仕事の性質が変化するにつれて、より広範な技術的知識も必要になる場合があります。 例えば、建築家になると、必要とされる技術的知識の幅がより広くなる面もあります。 体系的な技術学習と少しのスキルにより、技術の範囲をより迅速に拡大し、より高い観点からさまざまな技術的方向性と製品を検討し、適切な技術的決定を最も効果的に行うことができます。
この段階では誰もが異なる環境や実践に直面する可能性があるため、この段階で形成されるマップは大きく異なります。 以下は私の 3 番目の写真です。これはジャワ旅行の仲間の参考としてのみ使用してください。 そして、これらの大きく異なる地図に沿ってたどる道が、たまたまユニークなあなたを形成します。
まだ地図を持っていなくても、混乱して永遠に立ち止まらないでください。 前進し続ければ必ず道は見つかる。
上記は Java Journey: Walker's Map の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。