プログラマはノートを取る習慣があるのでしょうか?しかし、私はまだ誰もがメモを収集するのが好きだと思います。
数日前に偶然、Javaに関するすべての知識ポイントが詳細にリストされた記事を見ました。カタログを見ると、Jvmから始まり、コレクション、マルチスレッドの同時実行性、Javaの基本、そしてSpringの原則、マイクロサービス、Netty、RPCなどについて説明しています。カタログだけでも18ページです。私の意見では、コレクションはシリーズを再び見ることはありません。
以下のコンテンツは長くなっています。ドキュメントが必要な場合は、[data]にプライベートメッセージを送信して、無料で受け取る方法を入手してください!
レベルはどのくらい詳細ですか?
たとえば、JVMランタイムのメモリは、新世代、旧世代、および永続世代について別々に話します。新世代も、Eden領域、SerivvorFrom、SerivorTo、MinorGCのプロセスに分割されます(コピー->空->スワップ)。
Java参照には、強参照、軟参照、弱参照、ファントム参照の4つのタイプがあります。
APIゲートウェイ:要求の転送、応答のマージ、プロトコル変換、データ変換、セキュリティ認証。
などなど。
真上:
……
このカタログを見て、とても興奮しました。そのようなメモのセットを用意することができます。通常の検査と漏れ、またはインタビューの襲撃のいずれであっても、完璧な参考資料を手に入れることができ、知識ポイントを本当に習得できます。円を描くと、ダースの本をめくる必要がなくなります。
検索を通して、私の柔らかくて難しいバブルの下で(実際、無料の方法は非常にシンプルで、バックグラウンドのプライベートメッセージ[データ]で十分です!)、ついにこの素晴らしい神レベルのメモができました。
コンテンツが長すぎるので、一部のコンテンツをみんなで共有しましょう!
JVM
(1)基本的な概念:
JVMは、バイトコード命令セット、レジスターセット、スタック、ガベージコレクション、ヒープ、ストレージメソッドドメインなどのJavaコードを実行できる架空のコンピューターです。JVMはオペレーティングシステム上で実行され、ハードウェアと直接対話することはありません。
(2)運用プロセス:
Javaソースファイルは、コンパイラを介して、対応する.Classファイル(バイトコードファイル)を生成でき、バイトコードファイルは、Java仮想マシンのインタープリターを介して特定のマシンのマシンコードにコンパイルされることは誰もが知っています。
それは次のとおりです。
①Javaソースファイル->コンパイラ->バイトコードファイル
②バイトコードファイル-> JVM->マシンコード
各プラットフォームのインタープリターは異なりますが、実装された仮想マシンは同じです。これが、Javaがクロスプラットフォーム化できる理由です。プログラムが最初から実行されると、仮想マシンがインスタンス化され始めます。プログラムの起動時には、複数の仮想マシンインスタンスが存在します。プログラムが終了または閉じると、仮想マシンインスタンスが停止し、複数の仮想マシンインスタンス間でデータを共有できなくなります。
2.1。スレッド
ここで言うスレッドとは、プログラム実行中のスレッドエンティティを指します。JVMでは、アプリケーションで複数のスレッドを同時に実行できます。
Hotspot JVMのJavaスレッドは、ネイティブのオペレーティングシステムスレッドと直接マッピング関係にあります。
スレッドローカルストレージ、バッファ割り当て、同期オブジェクト、スタック、プログラムカウンタなどの準備ができると、オペレーティングシステムのネイティブスレッドが作成されます。Javaスレッドが終了し、ネイティブスレッドがリサイクルされます。オペレーティングシステムは、すべてのスレッドをスケジュールし、それらを使用可能なCPUに割り当てます。ネイティブスレッドが初期化されると、Javaスレッドのrun()メソッドが呼び出されます。スレッドが終了すると、ネイティブスレッドとJavaスレッドのすべてのリソースが解放されます。
Hotspot JVMのバックグラウンドで実行されるシステムスレッドには、主に次のものが含まれます。
2.2。JVMメモリ領域
JVMメモリ領域は、主にスレッドプライベート領域[プログラムカウンター、仮想マシンスタック、ローカルメソッド領域]、スレッド共有領域[JAVAヒープ、メソッド領域]、およびダイレクトメモリに分けられます。
……
春の原則
...
6.1.10スプリングブートの原理
Spring BootはPivotalチームが提供する新しいフレームワークであり、その設計目的は、新しいSpringアプリケーションの初期設定と開発プロセスを簡素化することです。フレームワークは特定の構成方法を使用するため、開発者は定型構成を定義する必要がありません。このようにして、Spring Bootは急速なアプリケーション開発(迅速なアプリケーション開発)の急成長分野のリーダーになることを約束しています。その特徴は次のとおりです。
1.スタンドアロンのSpringアプリケーションを作成する
2.組み込みTomcat、WARファイルをデプロイする必要なし
3. Maven設定を簡素化する
4. Springを自動的に構成する
5.インジケーター、ヘルスチェック、外部設定などの生産準備の整った機能を提供する
6.絶対にコード生成もXMLの構成要件もありません[1]
...
6.1.11.1分散トランザクション
Java Transaction Programming Interface(JTA:Java Transaction API)およびJava Transaction Service(JTS; Java Transaction Service)は、J2EEプラットフォームに分散トランザクションサービスを提供します。分散トランザクションには、トランザクションマネージャ(トランザクションマネージャ)と、XAプロトコルをサポートする1つ以上のリソースマネージャ(リソースマネージャ)が含まれています。リソースマネージャは、あらゆるタイプの永続的なデータストレージと見なすことができます。トランザクションマネージャは、すべてのトランザクション参加ユニットの調整と制御を担当します。
public void transferAccount()
{ UserTransaction userTx = null;
Connection connA = null;
Statement stmtA = null;
Connection connB = null;
Statement stmtB = null;
try
{ // 获得 Transaction 管理对象
userTx = (UserTransaction) getContext().lookup("java:comp/UserTransaction");
connA = getDataSourceA().getConnection(); // 从数据库 A 中取得数据库连接
connB = getDataSourceB().getConnection(); // 从数据库 B 中取得数据库连接
userTx.begin(); // 启动事务
stmtA = connA.createStatement(); // 将 A 账户中的金额减少 500
stmtA.execute("update t_account set amount = amount - 500 where account_id = 'A'");
// 将 B 账户中的金额增加 500
stmtB = connB.createStatement();
stmtB.execute("update t_account set amount = amount + 500 where account_id = 'B'");
userTx.commit(); // 提交事务
// 事务提交:转账的两步操作同时成功(数据库 A 和数据库 B 中的数据被同时更新)
}
catch(SQLException sqle)
{
// 发生异常,回滚在本事务中的操纵
userTx.rollback(); // 事务回滚:数据库 A 和数据库 B 中的数据更新被同时撤销
}
catch(Exception ne)
{}
}
……
マイクロサービス
7.1.1サービス登録の発見
サービス登録は、システム内のすべてのサービスアドレスを管理するレジスタを維持することです。新しいサービスが開始されると、アドレス情報がレジスターに提供されます。サービスの依存パーティは、サービスプロバイダーのアドレスをレジスターに直接要求します。現在NetflixのZooKeeper、Consul、Etcd、eurekaなど、サービス登録に使用されている多くのツールがあります。サービス登録には、クライアント登録とサードパーティ登録の2つの形式があります。
...
7.1.6サービスヒューズ(Hystrix)
マイクロサービスアーキテクチャでは、通常、複数のサービスレイヤーコールがあります。基本的なサービスの障害により、カスケード障害が発生し、システム全体が使用できなくなる可能性があります。この現象は、サービス雪崩効果と呼ばれます。サービスなだれ効果は、「サービスプロバイダー」が利用できないために「サービスユーザー」が利用できなくなり、利用できなくなる状況が徐々に拡大するプロセスです。
ヒューズの原理は、電気的過負荷保護装置のように非常に簡単です。急速な障害を発生させる可能性があります。一定の時間内に多くの同様のエラーを検出すると、後続の複数の呼び出しがすぐに失敗し、リモートサーバーにアクセスできなくなり、アプリケーションが失敗する可能性のある操作の実行を絶えず防ぐ、アプリケーションがエラーの修正を待たずに実行を継続できるようにするか、長いタイムアウトが発生するまで待機するためにCPU時間を浪費します。ヒューズを使用すると、アプリケーションでエラーが修正されたかどうかを診断することもできます。修正されている場合、アプリケーションは操作の呼び出しを再試行します。
……
など...
長すぎるのを避けるために、あまり多くの章を付けていませんでした。ここでいくつかのカタログを紹介します。マインドマップのフルバージョンを作成して送信する時間があるとき!
マインドマップを作成することは、情報を取得してそれを奨励するための、そのような、転送、プライベートメッセージ(学習)のほんの始まりにすぎません!