JAVA中間開発者は少しの知識を持っている必要があります

悲観的ロック、オプティミスティックロックの違い:

ペシミスティック・ロックは:論理的な実行に加えて、いくつかの悲観的ロックは、異なるスレッドが同時にロックが解除されるまで、他のスレッドが入り口で待って実行することができる唯一つのスレッドを実行します。
オプティミスティック・ロック:楽観的ロックと相まって実行ロジックの期間、異なるスレッドが同時に実行するには、同時に新しいデータでこれらのデータは他のスレッドによって変更されているかどうか、前回のチェックイン時に実行入力でき
同じ初期のバージョンと実行するかどうか)、新しいで作られた無修正この操作を放棄しなければなりません。
// 0は、トランザクションが始まる
開始; /作業を開始; /開始トランザクションを、( 三つのAから選択することができる)
//アイテムの情報を確認します。
更新のためにID = 1 t_goodsからステータスを選択し;
// 2商品情報に応じて注文を生成する
;(1ヌル,.)t_orders(ID、goods_id)値。INSERT INTO
.. 2~3 //製品レビューステータス
更新が設定された状態= 2 t_goods;
// 4トランザクションがコミット。
コミット; /は、作業をコミット。


1.チェックアウト商品情報を
ID =#{ID} t_goodsから(状態、ステータス、バージョン)を選択する
ラインを生成2.製品情報
2に3.商品のレビューステータスを
更新t_goods
設定された状態= 2 ,. 1 +版版=
ID =#{ID}とバージョン =#{バージョン}。


 

二.mysqlの最適化:

1.およびORDER BYの後ろのインデックス、フルテーブルのクエリを避けるようにしてください

2.バックの条件を使用しないようにしてください!=と<>演算子、そうでない場合はあきらめるとフルインデックステーブルクエリを行くためにエンジンが発生します

3.これは、クエリおよびリンクパフォーマンスを削減し、ストレージコストを増加させます,,文字フィールドとして設計されていない、数値フィールドを利用する
クエリを処理するときにエンジンので、1つずつ、各文字列比較をリンクし、しばらく数値の場合、一度だけ


 

三つのスレッドプール:

マルチスレッドプログラム内のスレッドを作成するコレクションを初期化し、その後、あなたはこれらのスレッドを再利用するときに新しいタスクを実行するのではなく、新しいスレッドを作成する必要があります。

利点:
1、アプリケーションの応答時間を改善するためのスレッドプール。プール内のスレッドが準備してタスクを割り当てられるのを待っているように、アプリケーションは、新しいスレッドを使用せずに直接使用することができます。

2は、CLRスレッドプールのスレッドを保存することは、オーバーヘッド、各タスクのための完全な短いライフサイクルを作成するには、タスクが完了した後の資源を回収することができます。

図3に示すように、スレッドプールスレッドのタイムスライスは、現在システム上で実行されるプロセスに応じて最適化されます。

図4は、スレッドプールは、私たちは、各スレッドのプロパティを設定することなく、複数のタスクを開くことができます。

図5は、スレッドプールは、参照を実行しているタスクのプログラム・パラメータのステータス情報を含むオブジェクトを渡すために、私たちを可能にします。

図6に示すように、スレッドプールは、要求を処理する特定の問題を解決するためにスレッドの最大数を制限するために使用することができます。


 

コンセプト内部四.JVM:

1、Java仮想マシン・スタック:

プライベート糸;各メソッド実行スタックフレームを作成し、ローカル変数テーブルが格納され、オペランドスタック、動的リンク、リターンアドレス法、実行の完了から各メソッド呼び出し、
仮想マシン内の対応するスタックフレームプッシュとポップスタック。

2、ヒープ:
スレッド共有、オブジェクト・インスタンスを格納するために使用される仮想マシンの電源がオンされたときに作成されたメモリ領域内のすべてのスレッドで共有。

図3に示すように、メソッド領域:
スレッド間で共有、メモリ領域のすべてのスレッドによって共有さは、ロードされた仮想マシンを格納するための手段と、クラス情報、定数、静的変数等が挙げられます。

図4に示すように、プログラム・カウンタ:
プライベートスレッド、現在のスレッドを実行するバイトコード行番号指標は、各スレッドが別のプログラムカウンタを持っている必要があり、このタイプのメモリは、「スレッドプライベート」メモリと称されています。

5、ネイティブメソッドは、スタック:
プライベートスレッド、主にネイティブサービスのメソッドを使用するように仮想マシンのために。


 

ファイブ.TCPスリーウェイハンドシェイク

TCP 3ウェイハンドシェイク:
3ウェイハンドシェイクは、TCP接続、接続を確立するかどうかを決定するために3つのパケットの合計を送信し、クライアントとサーバーを確立することです。ソケットプログラミングでは、クライアントによって実行される
接続トリガします。

TCPスリーウェイハンドシェイクの.png
(1)最初のハンドシェーク:クライアントSYNフラグビット= J 1にランダムに生成された値の配列を設定し、パケットがサーバーに送信され、クライアントは、SYN_SENT状態に入り
肯定応答サーバを待っ。

(2)第二のハンドシェイクは:サーバが接続を確立するためにフラグビットSYN = 1クライアント要求を知っているからパケットデータを受信し、サーバSYNとACKフラグビットが1に設定され、ACK = J + 1は、
=ランダム値の配列を生成しますK、およびクライアントに接続要求を確認するためにデータパケットを送信し、サーバーがSYN_RCVD状態に入ります。

(3)第三のハンドシェーク:クライアントがACK J + 1か否かを確認する、確認応答を受信し、ACK 1、正しいACKフラグが1に設定されている場合、ACK = K + 1、及びデータである
パケット送信正しい場合は、接続が確立されるサーバー、サーバーをチェックしたack K + 1かどうかに、ACKが1で、クライアントとサーバーは、確立された状態になり、
3ウェイハンドシェイクを完了し、その後、クライアントとサーバー間のデータ転送を開始することができます。

簡単に言えば、

図1に示すように、接続が確立され、クライアントは、サーバが確認するのを待つ、SYN-SEND状態にサーバーにSYNパケット(SYN = i)を送信し、移行

図2に示すように、サーバ自体は、サーバ状態SYN-RECVに入り、SYNパケット(SYN = K)、すなわち、SYN + ACKパケットを送信しながら、顧客のSYN(ACK = I + 1)を確認する必要があり、SYNパケットを受信します

クライアントがサーバにSYN + ACKパケットを受信し、サーバが確認メッセージACK(ACK = K + 1)を送信3、 、このパケットは、確立状態にクライアントとサーバに送信され
スリーウェイハンドシェイクを完了し、クライアントとサーバは、送信を開始しますデータ。


 

四つの.png 6振っ.TCP

TCP接続は全二重であるため、このように、各方向は別々に停止する必要があり、この原理は、1つのタスクは、この方向終了するFINを送信し、データの送信を完了したとき
の接続のみFINを受信しますその方向に流れに関するデータは、それがデータを受信し、それでも、TCP接続を介してデータを送信することができなくなった、ありません
。この方向はまた、FINを送信するまで。他方は閉じ受動を実行しながら、最初のアクティブ近いのいずれかをシャットダウンするために、説明は、図3の場合です。

(1)まずウェーブ:クライアントは、データ転送クライアントサーバー入札を閉じるため、FINを送信し、クライアントがFIN_WAIT_1状態になります。

(2)第二波:サーバーはFINを受信し、ACKクライアントを送信するために、受付番号+1のための確認応答番号は、(同じSYN、FINシーケンス番号を占有する)、
サーバーはCLOSE_WAIT状態になります。

(3)第三の波:サーバーはクライアントサーバーのデータ転送を閉じるため、FINを送信し、LAST_ACKサーバーは状態になります。

(4)第4の波:クライアントは、FINを受信し、クライアントは確認応答番号の数+ 1を受信するために、TIME_WAIT状態に入り、その後、サーバにACKを送信し、サーバーが入る
CLOSED状態は、4人の完全な波。


七.Kafka、ActiveMQの、RabbitMQの、RocketMQ

、コミュニティは非常にアクティブなMQを導入するための一般的なビジネスシステム、我々はすべてのActiveMQを使用しますが、今はあまり使用しない早い、無実績のある大規模なスループットのシーンをではない、
ので、我々はまだそれを忘れて、私は個人的にしないでください私たちは、これを使用することをお勧めします。

その後、それはRabbitMQのを使うようになったが、それは、Javaエンジニアは綿密な調査を行って、それを制御する、企業のために、ほとんど制御不能な状態で、Erlangの言語の多くを防ぐない
が、人々はまた、本当にオープンソース、比較的安定した支援活動です高;

しかし、今より多くの企業が実際にRocketMQで行くだろう、本当に良い、(現在RocketMQすべての後、アリは生産が、リスクのコミュニティは急に黄色を失っている可能性があり
アパッチに寄贈されましたが、活動はGitHubの上で実際に高くありません)自分の技術力が絶対的に確信してい、RocketMQをお勧めします、それ以外で背中と正直に行く
RabbitMQのそれを、他の人がアクティブなオープンソースコミュニティを持って、黄色ではないでしょう。

だから、良い選択、中小企業、技術力がより一般的で、技術的な課題が特に高くはない、RabbitMQのとされ、大企業、インフラ、強力なR&D強度、
RocketMQでは良い選択です。

それはリアルタイムビッグデータフィールドで計算されている場合は、カフカで収集し、他のシーンを、ログの業界標準であり、間違いなく問題ありません、コミュニティの活動度の高い、黄色のではないでしょう、ではないに言及し
、ほぼ全世界では、この分野での性的規範という事実です。


 

八の.HashMapソースの解析(jdk1.8):

HashMapの構造はJDK1.2に表示されるようになった、jdk1.7が1.8にあまりにも多くの変化にされていない大きな変更があり
jdk1.7は:配列+(高効率の追加と削除)リスト
jdk1.8:配列+ +赤と黒のリスト(クエリの効率も速くなります)

以下8以上の鎖長、配列、長さのみ赤黒木は、赤黒木64を変換することができる未満でありません

赤黒木は何されて:自動平衡二分探索木、それはより効率的なクエリ赤黒木であります


ナインシングルトン:

例怠惰な単一

パブリック クラスシングルトン{
 プライベート 静的シングルトンシングルトン= nullをプライベートシングルトン(){ 
} 
パブリック 同期 静的シングルトンgetSingleton(){
 場合(シングルトン== NULL ){ 
シングルトン = 新しいシングルトン()。
} 
戻りシングルトン。
} 
}

 

シングル飢え例:

パブリック クラスシングルトン{
 プライベート 静的 最終シングルトンシングルトン= 新しいシングルトン()。
プライベートシングルトン(){ 
} 
パブリック 静的シングルトンgetSingleton(){
 戻りシングルトン。
} 
}

 

Javaのシングルトンパターンの主な役割は、Javaアプリケーション、存在の唯一のインスタンスのクラスのことを確実にするためです。また、メモリを節約するためにされたシングルトンを使用することのメリット
、それはインスタンスの数を制限しているためには、Javaのガベージコレクションを助長しています


存在しない.SQLテンは、使用中に存在します。

存在:結果セットが返されるかを知るために要求せずに返されたことを強調するために(どのようなリターン気にしない句を存在しますが、注意が返された結果セットではありません)

:最大の違いに存在するガイド句のみなど、フィールドを返すことができることである
セックス=「M」とマークには、(SELECT ...グレード1,2,3から)学生からSELECT名

サブにおいて、文は真ではない三つのフィールドは、句が許可されて存在して戻ったが、見返りに二つのフィールド2、3に、ちょうどに行く、一方のフィールドのみを許可します。


セブンイレブン.SOA:SOAもアップガバナンスのシステム間のサービスコールに私たちを助け、サービス管理として知られています

統一基準:対話形式で、各システムのプロトコル、アドレス、。
新しいインタラクティブな方法:登録データバス、様々なサブシステムが他のサブシステムを呼び出すとき、それは他のサブシステムを見つけた場合、我々は、気にしないの統一基準に基づいて個別のシステム
統一基準に従って他見つける私たちは、その後、データバス、データバスを募集し、サブシステム、通行人のみの役割として動作するデータバス、。

SOAのメリット:

1は、ユーザーのコストを削減し、ユーザーはあなたがそれらを呼び出すかどうかを知る必要はありませんさまざまなサービスとの間にどのような言語、気にしない、ちょうどそれを統一規格のデータバスを見つける必要があります。

2、サービス間の単純な関係

3、問題(ハング)を持っているプログラムを特定します

短所:対応するには、システムの複雑さ、パフォーマンスに影響を与えるヒント。

現在、アプリケーション・データ・バスアリダボは飼育係が、そこにあります。

 

 

 

おすすめ

転載: www.cnblogs.com/Cjx-605/p/11422435.html