毎日の復習が必要な Java 8 部構成の基礎

1.ジャバ

(1) 収集

1.list:LinkedList、ArrayList、Vector

ArrayList、LinkedList、Vectorの違い、シナリオ、展開機構のソースコード

  • LinkedList インターフェイス実装クラス、リンク リスト、挿入と削除、同期なし、スレッド アンセーフ
  • ArrayList インターフェース実装クラス、配列、ランダムアクセス、同期なし、スレッドアンセーフ
  • ベクトル インターフェイスは、配列のような、同期された、スレッドセーフを実装します。
2.set: ハッシュセットとツリーセット
  • HashSet はハッシュ テーブルを使用して要素を格納します。要素は null にすることもできます
    • LinkedHashSet は、リンクされたリスト内の要素の挿入順序を維持します。
  • TreeSet の基礎となる実装は赤黒ツリーであり、要素は並べ替えられており、要素を null にすることはできません。
3.map:ハッシュマップ、ツリーマップ、ハッシュテーブル
  • スレッドの安全性
  • NULL値
    • HashMap には null キーと複数の null 値があります
    • TreeMap には null キーや複数の null 値を含めることはできません。
    • HashTable に null を含めることはできません
  • 継承とインターフェース
    • HashMap は AbstractMap を継承し、Map インターフェイスを実装します。
    • TreeMap は AbstractMap を継承し、NavigableMap インターフェイス (SortMap の一種) を実装します。
    • HashTable は Dictionary を継承し、インターフェイス Map を実装します。
  • 注文
    • HashMap のキーには順序がありません
    • TreeMap が注文されました
    • ハッシュテーブルは順序付けされていません
  • コンストラクタ
    • HashMap は初期容量と負荷率を調整しました
    • ツリーマップはそうではありません
    • ハッシュテーブルあり
  • データ構造
    • HashMap はリンクリスト + 配列 + 赤黒ツリー
    • TreeMap は赤黒のツリーです
    • HashTable はリンクされたリスト + 配列です
4.リスト、セット、マップの違い
  • list: 要素はエントリの順序に従って順番に保存され、繰り返し可能です
  • set: 反復不可能で内部的にソートされています
  • map: マッピング関係を持つセットを表します。そのすべてのキーは Set コレクションです。つまり、キーは順序付けされておらず、繰り返すことはできません。
5.HashMap展開機構
  • 配列の初期容量は 16 で、2 の累乗で容量が拡張されます。 1 つはパフォーマンスを向上させるために十分な大きさの配列を使用すること、もう 1 つはモジュロ バジェット (モジュロ バジェット) の代わりにビット演算を使用することです。 5~8倍に改善されました)。
  • 配列の拡張が必要かどうかは負荷率によって決まり、現在の要素数が配列容量の 0.75 であれば配列は拡張されます。この 0.75 はデフォルトの負荷係数であり、コンストラクターによって渡すことができます。また、配列が拡張されず、パフォーマンスが犠牲になり、メモリが節約されないよう、負荷係数を 1 より大きく設定することもできます。
  • 衝突を解決するために、配列内の要素は一方向リンク リスト型になります。リンク リストの長さがしきい値 (7 または 8) に達すると、パフォーマンスを向上させるためにリンク リストが赤黒ツリーに変換されます。リンク リストの長さが別のしきい値 (6) まで縮小すると、パフォーマンスを向上させるために、赤黒ツリーが一方向のリンク リストに変換されて戻ります。
  • 3つ目の補足説明ですが、リンクリストの長さをチェックして赤黒ツリーに変換する前に、まず現在の配列が閾値(64)に達しているかどうかもチェックし、この容量に達していない場合は、変換はあきらめられ、配列が最初に展開されます。したがって、変換を放棄する操作があるため、リンク リストの長さのしきい値は 7 または 8 であるとも上で述べられています。
6. HashMap の循環リンク リストはどのように生成されるか (jdk1.7)

HashMap では循環リンク リストはどのように形成されるのでしょうか?

  • jdk1.7では先頭挿入方式を採用しているため、マルチスレッドでは2つのスレッドが同時にリンクリストを展開する場合があり、転送関数(リンクリストデータ転送)を実行するとリンクリストデータが展開されます。 2 つのスレッドがこれを同時に実行すると、リンク リストで無限ループが発生します。
7. B ツリーと B+ ツリーの違い
  • B ツリーはバイナリ ソート ツリーから進化し、B+ ツリーはブロック検索から進化しました。
  • B+ リーフ ノードにはすべてのデータが含まれ、非リーフ ノードはインデックスとしてのみ機能します。B ツリーのターミナル ノード以上にはデータが含まれ、繰り返されません (リーフ ノードは単なる概念であり、存在しません)。
  • B+ リーフ ノードにはすべてのキーワードが含まれます
  • B+ ツリーは順次検索と多方向検索をサポートします。B ツリーは多方向検索のみをサポートします。
8. HashMap が AVL ツリーや B+ ツリーではなく赤黒ツリーを使用するのはなぜですか?
  • AVL ツリーはより厳密にバランスがとられているため、より高速な検索が可能です。したがって、検索集中型のタスクに AVL ツリーを使用することに問題はありません。ただし、挿入が集中するタスクの場合は、赤黒ツリーの方が適しています。
  • B/B+ ツリーのノードは複数のデータを保存できますが、データ量が十分に大きくないと、データが 1 つのノードに「密集」し、リンク リストのようにクエリ効率が低下します。
9.CopyOnWriteArrayListの原理

CopyOnWriteArrayList の使用法と原理分析

  • スレッドが読み取り操作のために同時にアクセスする場合、ロックの制限はありません。
  • 書き込み操作中は、最初にコンテナーのコピーを作成し、次に新しいコピーに対して書き込み操作を実行します。この時点で、書き込み操作はロックされます。終了したら、元のコンテナの参照を新しいコンテナに向けます。書き込み操作をロックして実行するプロセス中に読み取り操作が必要な場合、その操作は元のコンテナーに適用されることに注意してください。したがって、ロックされた書き込み操作は、同時にアクセスされる読み取り操作には影響しません。
10.BlockingQueue にはどのようなメソッドがありますか?

BlockingQueueとは何ですか?

  • 合計4グループの追加・削除API
    ここに画像の説明を挿入します
  • 例外をスローする: 操作をすぐに実行できない場合は、例外がスローされます。
  • 特定の値: 操作をすぐに実行できない場合は、特定の値 (通常は true / false) が返されます。
  • ブロック: 操作をすぐに実行できない場合、メソッド呼び出しは実行できるまでブロックされます。
  • タイムアウト: 操作をすぐに実行できない場合、メソッド呼び出しは実行できるまでブロックされます。ただし、指定された値を超えて待機することはなく、操作が成功したかどうかを示す特定の値 (通常は true/false) を返します。

(2) マルチスレッド化

1. Javaにおけるスレッドセーフの基本データ構造
  • ハッシュ表
  • 同時ハッシュマップ
  • CopyOnWriteArrayList
  • CopyOnWriteArraySet
  • ベクター
  • 文字列バッファ
2. スレッドを作成するにはどのような方法がありますか?

スレッドを作成する 4 つの方法

  • Thread クラスを継承し、run メソッドを書き換えて、start を呼び出します。 new MyThread().start();
  • Runnable インターフェイスを実装し、run メソッド new Thread(new MyRunnable()).start(); を書き換えます。
  • Callable インターフェイスを実装し、call メソッドをオーバーライドします (戻り値あり)。
  • スレッドプール
    • 7 つのパラメータ
      • コアスレッドの数
      • 最大スレッド数
      • アイドルスレッドの生存時間
      • 時間単位
      • タスクキュー
      • スレッドファクトリー
      • 拒否ポリシー
        • 拒否して例外をスローする
        • タスクの無視を拒否する
        • キューヘッドタスクを放棄する
        • 呼び出し元のスレッドに戻って実行します
3. スレッドのライフサイクル

スレッドのライフサイクルとは何ですか?

  • スレッドの状態には、新規 (new)、準備完了 (start())、実行中 (CPU に割り当て)、ブロック、デッドの 5 つの状態があります。
  • CPU は複数のスレッドを切り替えるため、スレッドのステータスは実行中と準備完了の間で複数回切り替わります。
  • 詰まりが発生する
    • スレッドは、sleep() メソッドを呼び出して、占有されているプロセッサ リソースを積極的に放棄します。
    • スレッドはブロッキング IO メソッドを呼び出し、そのメソッドが返されるまでブロックされます。
    • スレッドは同期モニターを取得しようとしましたが、同期モニターは別のスレッドによって保持されていました。
    • スレッドは通知を待っています (通知)
    • プログラムはスレッドのサスペンド() メソッドを呼び出してスレッドを一時停止します。ただし、この方法はデッドロックを引き起こしやすいため、できるだけ避けてください。
  • ブロックを解除して準備完了状態に戻す
    • sleep() メソッドを呼び出したスレッドが指定された時間経過しました
    • スレッドによって呼び出されたブロッキング IO メソッドが返されました。
    • スレッドは、取得しようとした同期モニターを正常に取得しました。
    • スレッドが通知を待っている間に、別のスレッドが通知を発行します。
    • 一時停止状態のスレッドには、resume() 回復メソッドが呼び出されます。
  • 死が起こる
    • run() または call() メソッドが実行され、スレッドは正常に終了します。
    • スレッドがキャッチされなかった例外またはエラーをスローしました。
    • スレッドの stop() メソッドを直接呼び出してスレッドを終了します。このメソッドはデッドロックを引き起こしやすいため、通常は推奨されません。
4. スレッド同期を実現する方法

スレッド同期を実現するためのいくつかの方法_スレッド同期を実現する方法

  • 同期方式(シンクロナイズド)
  • 同期されたコードブロック
  • リエントラントロック
  • 揮発性の
5.Javaマルチスレッド間の通信方法
  • wait()、notify()、notifyAll()。同期を使用してスレッドの安全性を確保する
  • await()、signal()、signalAll()。ロックを使用してスレッドの安全性を確保する
  • ブロッキングキュー。プロデューサ スレッドが BlockingQueue に要素を入れようとしたとき、キューがいっぱいの場合、スレッドはブロックされます。コンシューマ スレッドが BlockingQueue から要素を削除しようとしたとき、キューが空の場合、スレッドはブロックされます。
6.sleep()とwait()の違い
  • sleep() は Thread クラスの静的メソッドであり、wait() は Object クラスのメンバー メソッドです。
  • sleep() はどこでも使用できますが、wait() は同期されたメソッドまたは同期されたコード ブロック内でのみ使用できます。
  • sleep() はロックを解放しませんが、wait() はロックを解放するため、notify()/notifyAll() を通じてロックを再取得する必要があります。
7.同期とロックの違い
  • synchronized は JVM レベルでロックとロック解除を実装する Java キーワードであり、Lock はコード レベルでロックとロック解除を実装するインターフェイスです
  • synchronized はコード ブロックとメソッドで使用できますが、Lock はコード内でのみ記述できます。
  • synchronized はコードが実行されるか例外が発生したときに自動的にロックを解放しますが、Lock は自動的にロックを解放せず、最終的にロックを解放する必要があります。
  • synchronized を指定すると、スレッドはロックを取得できなくなるまで待機します。Lock は、ロックの取得に失敗した場合のタイムアウトを設定できます。
  • synchronized はロックの取得が成功したかどうかを知ることができませんが、Lock は tryLock を通じてロックが成功したかどうかを知ることができます。
  • 同期ロックは再入可能、中断不可能、不公平なものにすることができ、ロック ロックは再入可能、中断可能、公平/不公平にすることができ、読み取り/書き込みロックを細分化して効率を向上させることができます。
8. 楽観的ロックと悲観的ロックの違い
9. 公平なロックと不公平なロック
  • 不公平なロック: スレッドがロックを競合すると、まず CAS でロックの取得を試行します。失敗した場合は、acquire(1) 関数に入り、tryAcquire を実行して再度ロックの取得を試みます。再び失敗すると、addWaiter を使用して現在のロックを追加します。スレッドはノード ノードにカプセル化され、同期キューに追加されます。この時点で、スレッドは自分の順番が来る前に、前のスレッドの実行が完了するまで待つことしかできません。
  • 公平なロック: スレッドがロックを取得すると、まず、同期キュー内でリソースの取得を待機しているスレッドがあるかどうかを判断します。そうでない場合は、ロックの取得を試みます。ロックを取得している場合は、addWaiter を通じて現在のスレッドをノードノードにカプセル化し、それを同期キューに追加します。
10.揮発性
  • 可視性は保証されるが、アトミック性は保証されない
  • コマンドの再配置を無効にする

(3) その他

1. オブジェクト指向の3大特徴
  • カプセル化: (外部干渉を防ぐためにデータとコードを一緒にバンドルする) 客観的なものを抽象クラスにカプセル化し、クラスは独自のデータとメソッドを信頼できるクラスまたはオブジェクトでのみ操作できるようにし、信頼できないクラスまたはオブジェクトからは情報を隠します。
  • 継承: (ある型のオブジェクトに別の型のオブジェクトのプロパティを持たせる方法) 既存のクラスのすべての機能を使用し、元のクラスを書き直すことなくこれらの機能を拡張します。
  • ポリモーフィズム: (つまり、物体はさまざまな形式を持つことができます) 親クラスの参照は子クラスのオブジェクトを指すため、複数の形式を持ちます。
2. オブジェクトクラスの共通メソッド
  • 等しい()
  • ハッシュコード()
  • toString()
  • getClass()
  • 待って()
  • 通知()
  • 通知すべて()
  • クローン()
  • ファイナライズ()
3.文字列、文字列バッファ、文字列ビルダー
4. 抽象クラスとインターフェースの違い
  • 抽象クラスは継承に属し、継承できるのは 1 つだけですが、インターフェイスは複数の実装が可能です。
  • 抽象クラスにはコンストラクターがありますが、インターフェイスにはコンストラクターがありません。
  • 抽象クラスのメンバー変数は変数または定数にすることができます。インターフェイスのメンバー変数は定数のみにすることができ、デフォルトの修飾子は public static Final です。
  • 抽象クラスのメンバー メソッドは抽象実装または具象実装できます。インターフェイスは jdk1.7 では抽象メンバー メソッドのみになれますが、jdk1.8 以降は具象実装ができるため、デフォルトで変更する必要があります。また、インターフェイスには静的メソッドと静的変更を含めることもできます。
  • 抽象クラスとインターフェイスの選択: トランザクションの本質に重点を置く場合は、抽象クラスを使用し、操作に重点を置く場合は、インターフェイスを使用します。たとえば、男性または女性に焦点を当てた場合、このときに焦点を当てたものが本質となるため、抽象クラスを使用します。人間のタイプごとに異なる食事と睡眠の行動に注意を払うため、インターフェイスを使用し、テンプレートを定義し、それらを個別に実装する必要があります。
5. Javaの基本的なデータ型
  • byte: 1 バイト (8 ビット)、データ範囲は -2^7 ~ 2^7-1 です。
  • short: 2 バイト (16 ビット)、データ範囲は -2^15 ~ 2^15-1 です。
  • int: 4 バイト (32 ビット)、データ範囲は -2^31 ~ 2^31-1 です。
  • long: 8 バイト (64 ビット)、データ範囲は -2^63 ~ 2^63-1 です。
  • float: 4 バイト (32 ビット)、データ範囲は約 -3.4 10^38 ~ 3.4 10^38 です。
  • double: 8 バイト (64 ビット)、データ範囲は約 -1.8 10^308 ~ 1.8 10^308 です。
  • char: 2 バイト (16 ビット)、データ範囲は \u0000 ~ \uffff です。
  • boolean: Java 仕様には明確な規定はなく、JVM ごとに実装メカニズムが異なります。
6.Javaコードブロックの実行順序
  • 親クラスの静的コード ブロック
  • サブクラスの静的コード ブロック
  • 親クラス構築コードブロック
  • 親クラスのコンストラクター
  • サブクラス構築コードブロック
  • サブクラスコンストラクター
  • 通常のコードブロック
7.静的キーワード
  • 変更されたメンバー変数: この静的変数はメモリ内にコピーが 1 つだけあります。静的変数が配置されているクラスがロードされている限り、この静的変数にはスペースが割り当てられます。
  • 変更されたメンバー メソッド: このメソッドを呼び出すには、クラス名とメソッド名のみが必要です。静的メソッドはオブジェクトに依存せずにアクセスできるため、静的メソッドの場合はこれがありません。非静的メンバー メソッド/変数は呼び出される特定のオブジェクトに依存する必要があるため、クラスの非静的メンバー変数および非静的メンバー メソッドには静的メソッドではアクセスできません。
  • 変更されたコード ブロック: クラスが初めてロードされるとき、各静的ブロックは静的ブロックの順序で順番に実行され、一度だけ実行されます。
  • 内部クラスの変更: 静的内部クラスは外部クラスの非静的メンバーに直接アクセスできませんが、新しい外部クラス () を介してアクセスできます。
8. 上書き(書き換え)とオーバーロードの違い
  • 書き換えは通常、サブクラスが親クラス メソッドをオーバーライドする (1 対 1)、垂直関係です。オーバーロードは通常、クラス内の複数メソッドの (複数間で) オーバーロードする、水平関係です。
  • オーバーライドされたメソッド間のパラメーターは同じですが、オーバーロードされたメソッド間のパラメーターは異なります
  • オーバーライドでは戻り値の型を変更できませんが、オーバーロードでは戻り値の型を変更できます。
9.java 4 つのアクセス修飾子
  • プライベート: このクラス内
  • デフォルト: このパッケージ内
  • 保護: さまざまなパッケージのサブクラス
  • パブリック: すべて
10. グローバル変数とローカル変数の違い
  • メンバー変数:

    • メンバー変数は、クラスのスコープ内で定義される変数です。

    • メンバー変数にはデフォルトの初期値があります。

    • 静的に変更されないメンバー変数はインスタンス変数とも呼ばれ、オブジェクトが配置されているヒープ メモリに格納され、そのライフ サイクルはオブジェクトと同じです。

    • static によって変更されたメンバー変数はクラス変数とも呼ばれ、メソッド領域に格納され、現在のクラスと同じライフサイクルを持ちます。

  • ローカル変数:

    • ローカル変数はメソッド内で定義された変数です。

    • ローカル変数にはデフォルトの初期値はありません。

    • ローカル変数はスタックメモリに格納され、効果範囲が終了すると変数空間は自動的に解放されます。

11.hashCode()とequals()の関係
  • hashCode はオブジェクトのハッシュ コード (通常はオブジェクトのストレージ アドレス) を検索し、equals はアドレスに基づいてオブジェクトが同じかどうかを比較します。
  • 2 つのオブジェクトが等しい場合、それらは同じハッシュ コードを持つ必要があります
  • 2 つのオブジェクトが同じハッシュ コードを持つ場合、それらは必ずしも等しいとは限りません
12. なぜhashCode()とequals()を書き直す必要があるのか
  • Object クラスによって提供される equals() メソッドは、デフォルトで比較に == を使用します。これは、2 つのオブジェクトが同じオブジェクトである場合にのみ、等しい結果が返されることを意味します。実際のビジネスでは、2 つの異なるオブジェクトの内容が同じであれば、それらは等しいとみなされます。
13. リフレクション
  • JAVA リフレクション メカニズムでは、実行状態では、どのクラスについても、このクラスのすべてのプロパティとメソッドを知ることができます。また、どのオブジェクトについても、そのメソッドやプロパティのいずれかを呼び出すことができます。この動的に取得された情報と動的呼び出しは、関数を動的に呼び出します。オブジェクトのメソッドの仕組みは、Java 言語のリフレクション機構と呼ばれます。
14.Cookieとセッションの違い
  • 保存場所は異なります。Cookie はクライアント側に保存され、セッションはサーバー側に保存されます。
  • プライバシー ポリシーは異なります。Cookie はクライアントに表示され、不純な動機を持つ人がローカルに保存されている Cookie を分析して Cookie スプーフィングを実行できるため、安全であり、機密性がない 情報漏洩のリスク。
  • ライフ サイクルは異なります。Cookie の属性を設定して、Cookie の長期有効性を実現します。ウィンドウが閉じられている限りセッションは無効になるため、セッションは長期間有効にすることはできません。
  • Cookie には約 3K のストレージ制限がありますが、セッションには制限がありません
15.get リクエストと post リクエストの違い
  • URL の可視性: get、パラメータ url は表示されます; post、url パラメータは表示されません
  • データ送信: URLを結合して取得、パラメータを送信、投稿、ボディを介してパラメータを送信
  • キャッシュ可能性: get リクエストはキャッシュできますが、post リクエストはキャッシュできません
  • ページが戻った場合の応答: リクエストの取得ページが戻っても、影響はありません。リクエストの投稿ページが戻った場合、リクエストは再送信されます。
  • セキュリティ: これも解析が最も難しく、原理的には get より post の方が確実に安全ですが結局のところ、パラメータを送信する際に URL は見えません。
  • get によって送信されるデータのサイズは通常 2k ~ 4k を超えませんが、post リクエストによって送信されるデータのサイズは php.ini 設定ファイルに従って設定され、無限にすることもできます。
16. フロントエンドとバックエンドのデータ対話
  • フォームフォーム

  • HttpServletRequest/HttpServletResponse

  • @RequestParam

    • データは URL の後の path?id=1 です
      ここに画像の説明を挿入します
    • @PathVariable
      • データは URL の後の path/{id} です

    ここに画像の説明を挿入します

    • @RequestBody
      • jsonデータを例にとると、まずクラスがあります
        ここに画像の説明を挿入します
      • 次に、フロントエンドがデータを渡します
        ここに画像の説明を挿入します
      • バックエンド受信

ここに画像の説明を挿入します
- ModelAndView (データをフロントエンドに送信するだけ)
- ビューリゾルバーを構成する
ここに画像の説明を挿入します
- ModelAndView オブジェクトを作成し、返されたデータとアドレスを追加する
ここに画像の説明を挿入します
- モデル
ここに画像の説明を挿入します

  • jqueryで実装されたajax
    • フロントエンド
      ここに画像の説明を挿入します
    • 例えば:
      • データ伝送キャリアクラス
        ここに画像の説明を挿入します

      • フロントエンド部分ここに画像の説明を挿入します

      • バックエンド部分
        ここに画像の説明を挿入します

17.IO分類
  • 流れの方向に応じて: 入力フロー、出力フロー
  • データ単位に応じて: バイトストリーム、文字ストリーム
  • 機能別:ノードフロー、処理フロー
18. ハッシュ衝突に対処する方法
  • オープンアドレッシング方式(リハッシュ方式)
    • 線形プローブとその後のハッシュ
    • 2 番目の検出とハッシュ
    • 擬似ランダムプローブとその後のハッシュ
  • 焼き直し
  • ジッパー方式
19.投げと投げの違い
  • throws はメソッド宣言の後に例外クラス名が続き、throw はメソッド内にあり、その後に例外クラスのインスタンスが続きます。
  • throw の後には複数の例外クラスを続けることができます。throw は 1 つの例外オブジェクトのみをスローできます。
  • throws 例外をスローします。例外は呼び出し元によって処理されます。throw はメソッド本体のステートメントによって処理されます。
20.23 デザインパターン
  • 作成タイプ (5): ファクトリ メソッド パターン、抽象ファクトリ パターン、シングルトン パターン、ビルダー パターン、プロトタイプ パターン。
  • 構造タイプ (7): アダプター モード、デコレーター モード、プロキシ モード、アピアランス モード、ブリッジ モード、コンビネーション モード、フライウェイト モード。
  • 行動 (11): 戦略パターン、テンプレートメソッドパターン、オブザーバーパターン、反復サブパターン、責任連鎖パターン、コマンドパターン、メモパターン、状態パターン、ビジターパターン、メディエーターパターン、インタープリターパターン。
21. デザインパターンのいくつかの原則
  • 単一責任の原則
  • インターフェース絶縁原理
  • リヒター置換原理
  • 開閉原理
  • ディミット原則
  • 依存関係逆転の原理
  • 合成再利用の原則
22. 春にまつわるデザインパターン
  • ファクトリ パターン: オブジェクトを作成するための BeanFactory および ApplicationContext
  • シングルトン モード: Bean はデフォルトでシングルトン モードになります
  • プロキシ モード: AOP ダイナミック プロキシ
  • テンプレートメソッド: jdbcTemplete、restTemplete (http リクエストツール)
  • アダプター パターン: mvc でのプロセッサー適応
  • オブザーバーパターン: 春の時間駆動

おすすめコンテンツ

編集編集編集

2.JVM

1.JVM にはどのような部分が含まれていますか?

  • クラスローダー
  • ランタイムデータ領域(ヒープ、スタック、メソッド領域、ローカルメソッドスタック、プログラムカウンター)
    • メソッド領域: 静的変数、定数、クラス情報、実行時定数プール
    • プログラム カウンター: 各スレッドにはプログラム カウンターがあり、メソッド内のメソッド バイトコードを指すポインターのようなものです (たとえば、次の命令が読み取られるたびに +1 が与えられます)。
    • ネイティブ メソッド スタック: エンジンの実行時にネイティブ メソッドを登録し、ローカル ライブラリをロードします。
    • スタック: ライフサイクルとスレッドの同期、ガベージ コレクションの問題なし、8 つの基本型、オブジェクト参照変数名、およびインスタンスを格納するメソッド
    • ヒープ: クラスのインスタンス、文字列定数プール
      • 新エリア:エデンエリア、サバイバルエリア0、サバイバルエリア1
      • 退職者エリア
      • 永続領域(メソッド領域の具体的な実装。jdk1.8以降はメタ空間に変更されました。ヒープに分割すべきではないという意見もあれば、ヒープに分割すべきという意見もある)
  • 実行エンジン
  • ネイティブライブラリインターフェース
    ここに画像の説明を挿入します

2. 保護者の委任メカニズム

  • クラスローダーはクラスロード要求を受け取ります
  • この要求を親クラス ローダーに委任して完了させ、クラス ローダーが開始されるまで上向きに委任し続けます。
  • 起動クラス ローダーは実行可能になると終了します。それ以外の場合は例外がスローされ、サブクラスに順番にロードするように通知されます。
  • アドバンテージ:
    • 最内層からロードが開始されるため、外側の同名の悪意のあるクラスはロードできず、使用できません。
    • アクセス ドメインはパッケージによって厳密に区別され、悪意のある外部クラスは組み込みコードを通じて内部クラスにアクセスできません。

3. オブジェクトメモリ解析の作成

(このケースは、「Meeting the Crazy God」の Java コース ビデオから取られています)
ここに画像の説明を挿入します

ここに画像の説明を挿入します

4.JAVAオブジェクトのインスタンス化プロセス

  • クラスロードの初期化
    • ロード: クラス オブジェクトをロードします。これは、必ずしもクラス ファイルから取得される必要はありません。jar パッケージまたは動的に生成されたクラスの場合があります。
    • 接続する
      • 検証: クラスのバイト ストリームが現在の JVM 仕様に準拠しているかどうかを検証します。
      • 準備:クラス変数にメモリを確保し、変数の初期値(デフォルト値)を設定します。最終的に変更されたオブジェクトの場合、値が割り当てられ、宣言されます。
      • 解析: 定数プールのシンボル参照を直接参照に置き換えます。
    • 初期化
    • 使用
    • アンインストール
  • オブジェクトの初期化
    ここに画像の説明を挿入します

5. GC 中にリサイクルする必要があるものは何ですか?

  • 参照カウントアルゴリズム
  • 到達可能性分析アルゴリズム

6. 3 つの基本的な GC アルゴリズム

  • マーククリア アルゴリズム
    メモリ内のオブジェクトはツリーを形成します。有効なメモリが使い果たされると、プログラムは停止し、2 つのことを実行します。1 つ目は、ツリーのルートから到達可能なオブジェクトにマークを付けることです。2 つ目は、到達不能をクリアすることです。オブジェクト。マークがクリアされるとプログラムの実行が停止します
    短所: 再帰効率が低く、パフォーマンスが低い; スペースが不連続に解放されるとメモリの断片化が起こりやすくなります; プログラム全体の実行が停止します。
  • コピー アルゴリズムでは
    、メモリを空き領域とアクティブ領域の 2 つの領域に分割します。最初のステップはマークです。マーク後、到達可能なオブジェクトが空き領域にコピーされ、空き領域がアクティブ領域に変わります。時間に応じて、以前のアクティブ領域にあったオブジェクトはクリアされ、空き領域になります。
    短所: 高速ですがスペースが必要です
  • マーク スイープ アルゴリズムは
    、マーク スイープ アルゴリズムの後にリサイクル可能なオブジェクトを直接クリーンアップしませんが、生き残ったすべてのオブジェクトを一方の端に移動してから、端の境界の外側のメモリをクリーンアップします。
  • 世代別収集アルゴリズム、つまり新世代、旧世代、永続世代
  • メモリ効率: コピー アルゴリズム > マークおよびスイープ アルゴリズム > マーク圧縮アルゴリズム (時間計算量)
  • メモリの整頓性: コピー アルゴリズム = マーク圧縮アルゴリズム > マーク クリア アルゴリズム
  • メモリ使用率: コピー アルゴリズム < マーク スイープ アルゴリズム = マーク圧縮アルゴリズム

7.jdk、jre、jvm

  • jdk: Java 開発キット。Java ランタイム環境 (jre)、Java ツール、および Java 基本クラス ライブラリを含む
  • jre: Java 実行環境。JVM標準実装とJavaコアクラスライブラリを含む
  • jvm: Java 仮想マシン、抽象コンピュータ

3.mysql

1. 3 つの主要なデータベースパラダイム

  • 第一正規形: 列の原子性を強調します。つまり、列を他の列に分割できません。
  • 第 2 正規形: 第 1 正規形に基づくと、主キーが存在する必要があり、他のフィールドは主キーの一部だけでなく、完全に主キーに依存する必要があります。
  • 3 番目の正規形: 最初の 2 つの正規形に基づくと、非主キー列は主キーに直接依存する必要があり、推移的な依存関係は存在できません。

2. SQL インジェクションを防止する

  • コード層で SQL インジェクション攻撃を防ぐ最良のソリューションは、SQL プリコンパイル (preparedstatement クラス) です。
  • データ長を指定することでSQLインジェクションをある程度防ぐことができる
  • データベース権限を厳密に制限すると、SQL インジェクションの被害を最小限に抑えることができます。

3.インデックス

  • インデックスは、 MySQL がデータを効率的に取得するのに役立つデータ構造であり、一般的に言えば、データベースのクエリを高速化する本の目次のようなものです
  • 分類
    • 機能ごとに論理的に分割
      • 主キーインデックス: クエリの高速化 + 一意の列値 (null は不可) + テーブル内に 1 つだけ
      • 一意のインデックス: クエリ + 一意の列値 (null を含めることも可能) を高速化します。
      • 通常のインデックス: クエリのみを高速化します
      • 結合インデックス: 複数の列値がインデックスを形成し、特に結合検索に使用され、その効率はインデックスの結合よりも優れています。
      • 全文インデックス作成: テキスト内容の単語分割と検索
    • 身体構造に応じて
      • クラスター化インデックス
      • 非クラスター化インデックス

4.アシッド

  • 原子性: すべてが起こるか、何も起こらないかのどちらかです。
  • 一貫性: トランザクションの前後でデータの整合性が一貫している必要があります。
  • 分離: トランザクションは他のトランザクションの操作データによって干渉されることはできません。また、複数の同時トランザクションは相互に分離されている必要があります。
  • 耐久性: トランザクションがコミットされると、データは復元できません。

5. トランザクションの同時実行によって引き起こされる 3 つの問題

  • ダーティ リード: あるトランザクションが別のトランザクションからコミットされていないデータを読み取る
  • ファントム読み取り:同一トランザクション内で、同じ操作で2回読み取りを行い、取得されるレコード数(データ数)が異なります。
  • Non-Repeatable Read:同一トランザクション内で同じデータを2回読み出し、取得される内容(データ内容)が異なります。

6.mysqlトランザクション分離レベル

  • コミットされていない読み取り: トランザクションがコミットされていない場合、トランザクションが行った変更は他のトランザクションから参照できます。
  • コミットされた読み取り: トランザクションがコミットされた後、その変更は他のトランザクションによって認識されます。
  • 反復可能な読み取り: トランザクションの実行中に表示されるデータは、トランザクションの開始時に表示されるデータと常に一致します。コミットされていない変更も他のトランザクションには表示されません。
  • シリアル化可能: レコードの同じ行に対して、書き込みでは「書き込みロック」が追加され、読み取りでは「読み取りロック」が追加されます。ロックの競合が発生した場合、後でアクセスされるトランザクションは、前のトランザクションが完了するまで待つ必要があります。実行を続けます。
    ここに画像の説明を挿入します

7.データベースロック

  • 粒度によると:
    • 行ロック
    • ページロック
    • テーブルロック
    • グローバルロック
  • ロックレベル
    • 共有 (読み取り) ロック(S)
    • 排他的(書き込み)ロック(X)
    • 意図的な共有ロック
    • インテント排他ロック

8.Mysqlトランザクションの分類

  • フラットトランザクション
  • セーブポイントを使用したフラット トランザクション
  • チェーントランザクション
  • ネストされたトランザクション
  • 分散トランザクション

9.結合テーブルクエリ

ここに画像の説明を挿入します

10.innodbとmyisamの違い

  • innodb はトランザクションをサポートしますが、myisam はトランザクションをサポートしません
  • innodb は外部キーをサポートしますが、myisam は外部キーをサポートしません
  • Innodb はクラスター化インデックスであり、データとインデックスは一緒にバンドルされていますが、myisam は非クラスター化インデックスであり、データとインデックスが分離されているため、基礎となる B+ ツリー構造も異なります。
    • innodb の各テーブルの下には 2 つのファイルがあります。.frm ファイルにはテーブルの構造が保存され、.ibd ファイルにはデータとインデックス メソッドが保存されます。
    • 各 Myisam テーブルの下には 3 つのファイルがあります。1 つのファイルはテーブル構造の保存に使用され、1 つのファイルはデータの保存に使用され、もう 1 つのファイルはインデックスの保存に使用されます。

11.mysqlチューニング

  • mysqlのチューニング
    • ハードウェア レベルのチューニング: ハードウェアに関連するチューニングは、通常、運用および保守エンジニアによって実行されます。
    • MySQL自体に基づいたSQL ステートメントのチューニング : 効果を向上させるために、SQL ステートメントを可能な限り「インデックス化」します。
      • 3 つの主要なパラダイムに従ったテーブル設計の最適化
      • インデックスを設定する
      • クエリに関しては、* を選択する代わりにインデックスを使用してみてください。
        • インデックスの失敗
          • like クエリは % で始まります
          • 複合インデックスが左端の一致を満たしていません
          • or キーワードの前後にはインデックス列を指定する必要があります
          • where のインデックス列は関数を使用します
      • データ量が多すぎる場合は、データベース シャーディングとテーブル シャーディング (水平シャーディングと垂直シャーディング) を実行します。

4.コンピュータネットワーク

1.OSI 7層モデル

  • (物) 物理層: データエンドデバイスにオリジナルのビットストリームの伝送パスを提供します。
  • (接続済み) データリンク層: 通信エンティティ間のデータリンク接続の確立
  • (ネットワーク)ネットワーク層: ノード間のデータ伝送のための論理リンクを作成し、グループ (IP、IPX) でデータを転送します。
  • (Shu) トランスポート層: アプリケーションプロセス間の論理通信を提供します (TCP、UDP)
  • (利点) セッション層: エンド接続を確立し、アクセス検証とセッション管理を提供します。
  • (試行)プレゼンテーション層:データフォーマット変換サービスを提供
  • (用途)アプリケーション層:ネットワークサービス(DNS、HTTP、FTP)にアクセスするためのインターフェース

2.3回の握手

  • A はフラグ SYN を 1 に設定し、値 seq=x をランダムに生成し、データ パケットを B に送信します。A は SYN_SENT 状態に入り、B の確認を待ちます。
  • B がデータ パケットを受信すると、フラグ ビット SYN=1 から A が接続の確立を要求していることがわかります。B はフラグ ビット SYN と ACK を 1 (ack=x+1) に設定し、値 seq=y をランダムに生成します。データ パケットを送信し、A への接続要求を確認するために、B は SYN_RCVD 状態に入ります。
  • A は確認を受信した後、ack が x+1 であるかどうか、および ACK が 1 であるかどうかを確認します。それが正しければ、フラグ ACK を 1 (ack=y+1) に設定し、データ パケットを B に送信します。 ack は y+1、ACK が 1 かどうか、正しければ接続は正常に確立され、A と B は ESTABLISHED 状態になり、スリーウェイ ハンドシェイクが完了します。
    ここに画像の説明を挿入します

3. 4回手を振る

  • 最初のウェーブ: A は FIN を送信して A から B へのデータ転送を終了し、A は FIN_WAIT_1 状態に入ります。
  • 第 2 波: B は FIN を受信した後、A に ACK を送信します。確認シーケンス番号は受信したシーケンス番号 + 1 (SYN と同じ、1 つの FIN が 1 つのシーケンス番号を占有します) となり、B は CLOSE_WAIT 状態に入ります。この時点では、TCP リンクは半クローズ状態にあります。つまり、クライアントには送信するデータがありませんが、サーバーがデータを送信した場合、クライアントはそれを受信する必要があります。
  • 3 番目の波: B は FIN を送信して B から A へのデータ転送を終了し、B は LAST_ACK 状態に入ります。
  • 4 番目のウェーブ: A が B を受信した後、A は TIME_WAIT 状態に入り、ACK を B に送信します。確認シーケンス番号は、受信したシーケンス番号 + 1 です。B は CLOSED 状態に入り、4 つのウェーブが完了します。
    ここに画像の説明を挿入します

4.httpとHTTPPSの違い

  • httpsプロトコルでは証明書の申請が必要です
  • http はハイパーテキスト転送プロトコルであり、情報は平文であり、https は SSL 暗号化後に送信されます。
  • ポートが異なります。http は 80、https は 443
  • http 接続はシンプルでステートレスであり、https は SSL+http であり、暗号化と本人確認が可能であり、より安全です。

5.TcpとUdpの違い

  • TCP はコネクション指向であり、UDP はコネクションレス型です
  • TCP は信頼性が高く、損失もエラーもありません。UDP は信頼性が低く、ベストエフォート型の配信です。
  • TCP は 1 対 1 のみ可能ですが、UDP は 1 対 1 と 1 対多をサポートします
  • tcp はバイトストリーム指向、udp はメッセージ指向

6. ページを表示するプロセス全体への URL を入力します

  • URLを入力
  • キャッシュにドメイン名が存在するか確認し、存在する場合は直接IPアドレスを取得し、存在しない場合はDNS解決を行ってプロトコル名、ホスト番号、ポート番号を取得します。
  • TCP 3 ウェイ ハンドシェイクにより、クライアントとサーバーが接続を確立できるようになります。
  • クライアントは http リクエストを送信してリソースを取得します
  • サーバーの http 応答メッセージ、クライアントがリソースを取得する
  • tcp は 4 回手を振って接続を閉じます
  • ブラウザ解析リソースレンダリングインターフェース

7.DNSプロセス

  • ユーザーのコンピュータはドメイン名解決要求を作成し、それをローカルドメイン ネームサーバーに送信します。
  • ローカル キャッシュに存在する場合は、直接返されます。
  • そうでない場合、ローカルドメインネームサーバーはリクエストをルート ドメイン ネーム サーバーに直接送信し、ルートドメインネームサーバーは、クエリされたドメイン (ドメインのサブドメイン) のプライマリドメイン ネームサーバーのアドレスをローカル ドメイン ネーム サーバーに返します。根)。
  • 次に、ローカル サーバーは、前の手順で返されたドメイン ネームサーバーにリクエストを送信し、リクエストを受け入れたサーバーは自身のキャッシュを照会します。そのようなレコードがない場合、関連する下位レベルのドメイン ネームサーバーのアドレスは次のようになります。戻ってきた;
  • 正しいレコードが見つかるまで 4 番目の手順を繰り返します。ローカルドメイン ネームサーバーは返された結果をキャッシュに保存し、クエリ結果を返します。

8. プロセスとスレッド

  • プロセス: オペレーティング システムのリソース割り当ての最小単位
  • スレッド: オペレーティング システムの動作スケジュールの最小単位
  • 違い:
    • 所属関係は異なります。プロセスにはスレッドが含まれており、スレッドはプロセスに属しています。
    • オーバーヘッドは異なります。プロセスの作成、破棄、切り替えのオーバーヘッドは、スレッドのオーバーヘッドよりもはるかに大きくなります。
    • リソースを持つことは異なります。各プロセスには独自のメモリとリソースがあり、プロセス内のスレッドはこれらのメモリとリソースを共有します。
    • 制御機能と影響力の機能は異なります。子プロセスは親プロセスに影響を与えることはできませんが、子スレッドは親スレッドに影響を与えることができます。メインスレッドで例外が発生すると、そのプロセスと子スレッドに影響します。
    • CPU 使用率は異なります。プロセスの CPU 使用率はコンテキスト切り替えのオーバーヘッドが大きいため低くなりますが、スレッドの CPU 使用率は高くコンテキストの切り替えが高速です。
    • 演算子は異なります。通常、プロセスの演算子はオペレーティング システムであり、スレッドの演算子は通常プログラマです。

5. Javaフレームワーク

(1)スプリングブーツ

1.スプリングに対するスプリングブーツの利点
  • Tomcat、Jetty Undertow が組み込まれており、デプロイする必要はありません
  • Maven 構成を簡素化するために提供される「スターター」poms
  • 依存関係を開始すると、プロジェクトの作成時に必要な依存関係を確認できます
  • すべてアノテーションを使用し、面倒な XML 構成は不要

(2)スプリング

1.IOC
  • 制御の反転は設計上のアイデアです。元々プログラム内で手動で作成したオブジェクトの制御はSpringフレームワークのコンテナに渡されて管理されており、作成するオブジェクト間の関係をコンテナに知らせるための記述が必要となる。つまり、IOC コンテナはオブジェクトとその依存関係を管理します。
2. 依存性注入の実装方法

依存性注入 (DI) は IOC を実装する方法です

  • コンストラクターインジェクション
  • セットメソッドインジェクション
  • その他のメソッド (インターフェイス インジェクション、アノテーション インジェクション)
    注: Spring 4.0 以降、プロパティ インジェクションは推奨されません (つまり、@Autowride の下に波線が表示されます)
    理由: 1. 不変フィールドは宣言できません。フィールドベースの依存関係の注入は、final/immutable として宣言されたフィールドでは機能しません。これらのフィールドは、クラスのインスタンス化時にインスタンス化する必要があるためです。不変の依存関係を宣言する唯一の方法は、コンストラクターベースの依存関係注入を使用することです。2. 依存関係注入コンテナーと密接に結合されています。このようなクラスは、リフレクション以外に必要な依存関係をクラスに提供する方法がないため、DI コンテナの外部で再利用することはできません。3. 単一責任の原則に違反する。新しい依存関係を追加するのは非常に簡単です。追加しすぎると発見が難しくなりますが、コンストラクターを使用するとコンストラクターのパラメーターが多すぎるため、問題が明確に発見されます。依存関係が多すぎるということは、通常、クラスの責任が多すぎることを意味します。これは単一責任の原則に違反する可能性があります。4. 依存関係を非表示にします。依存関係を効果的に指定できない
3.AOP
  • アスペクト指向プログラミングは、プリコンパイルと実行時の動的エージェントによってプログラムの機能の一元的な保守を実現する技術です。動的プロキシ、oop (オブジェクト指向プログラミング)、リフレクションに基づく
4.AOPの用語
  • アスペクト: アスペクトは通常、クロスビジネス ロジックを指します。たとえば、宣言型トランザクション処理とログ処理は、側面として理解できます。
  • 通知: 欲しい機能、つまり局面でのメソッドです
  • 接続ポイント: 通知を使用できる場所。各メソッドの前後など
  • エントリーポイント: アスペクトが実際に切り込む場所
  • Target: 通知されるオブジェクト
5.AOPの実装
  • ネイティブ Spring API インターフェイスを使用します (事前通知、事後通知、サラウンド通知などのインターフェイスを実装します)。
  • カスタムクラス
  • アノテーションの実装 (@Aspect)
6.IOCコンテナ
  • BeanFactory: 最も単純なコンテナ関数を提供します。オブジェクトのインスタンス化とオブジェクトの取得の関数のみを提供します。
  • ApplacationContext: Spring のより高度なコンテナであり、より便利な機能を提供する BeanFactory インターフェースを継承します。
    • グローバリゼーション
    • URLやファイルなどのリソースにアクセスする
    • イベント配信: ApplicationContextAware インターフェイスの実装による
7. ApplacationContextの作成方法
  • FileSystemXmlApplicationContext: ファイル システムまたは URL で指定された XML 構成ファイルから作成され、パラメーターは構成ファイル名またはファイル名の配列です。
  • ClassPathXmlApplicationContext: クラスパスの xml 構成ファイルから作成され、jar パッケージから構成ファイルを読み取ることができます
  • WebApplicationContextUtils: Web アプリケーションのルート ディレクトリから構成ファイルを読み取ります。最初に web.xml で構成する必要があります。これを実現するためにリスナーまたはサーブレットを構成できます。
8.Beanスコープ
  • singleton: Spring コンテナにはインスタンスが 1 つだけ存在します。つまり、Bean はシングルトンの形式で存在します。
  • プロトタイプ: 各 Bean リクエストのインスタンスを提供します。
  • request: HTTP リクエストごとに新しい Bean が作成されます。
  • session: 同じ HTTP セッションは Bean を共有し、異なる HTTP セッションは異なる Bean を使用します。
  • globalSession: 同じグローバル セッションが Bean を共有し、通常はポートレット環境で使用されます。
9.Beanのライフサイクル
  • インスタンス化 (コンストラクターまたはファクトリ メソッド経由)
  • プロパティの割り当て (依存関係の注入)
  • 初期化
  • 破壊する
10.Bean自動アセンブリ
  • @Autowried: byType を通じて実装され、このオブジェクトが存在する必要があります
  • @Resouce: デフォルトでは、byName を通じて実装されますが、名前が見つからない場合は、byType を通じて実装されます。

(3)SpringMVC

1.SpringMVCの概念
  • MVCとは、ソフトウェアをModel、View、Controllerの3つの層に分割した設計パターンです。
2. Spring MVCの実行処理

参考ブログ
ここに画像の説明を挿入します

  • ユーザーがフロントエンド コントローラー DispatcherServlet にリクエストを送信します。

  • DispatcherServlet はリクエストを受信し、ハンドラー マッパー HandlerMapping を呼び出します。

  • 処理マッパーはリクエスト URL に従って特定のプロセッサを見つけ、プロセッサ実行チェーン HandlerExecutionChain (プロセッサ オブジェクトとプロセッサ インターセプタを含む) を生成し、それを DispatcherServlet に返します。

  • DispatcherServlet はプロセッサ ハンドラに基づいて対応するアダプタを取得します

  • HandlerAdapter はプロセッサの Handler を呼び出します

  • ハンドラー(コントローラー)は実行完了後にModelAndViewに戻ります。

  • HandlerAdapter は ModelAndView を返します

  • DispatcherServlet は、返された ModelAndView を分析のために ViewResolve (ビュー リゾルバー) に均一にディスパッチします。

  • View パーサーは解析後に View を返します

  • ビューをレンダリングする

  • ユーザーに応答する

3. インターセプターとフィルターの違い
  • 実装原理は異なります。インターセプターの実装原理はリフレクション メカニズムであり、フィルターは関数コールバックです。
  • 使用範囲は異なります: フィルターはサーブレット内で定義され、Tomcat などのコンテナーに依存し、Web プログラム内でのみ使用できます; インターセプターは Spring のコンポーネントであり、単独で使用でき、また使用することもできますWeb プログラムやその他のプログラムで。

6. レディス

1. 永続的RDBとAOFの違い

  • RDB の永続性とは、指定された時間間隔内にメモリ内のデータ セットのスナップショットをディスクに書き込むことを指します。実際の操作プロセスでは、子プロセスをフォークし、最初にデータ セットを一時ファイルに書き込み、その後、以前のファイルを置き換えます。書き込みは成功しました。バイナリ圧縮を使用して保存されています
    • アドバンテージ:
      • パフォーマンスを最大化します。Redis サービス プロセスの場合、永続化を開始するときに必要なのは、子プロセスをフォークアウトすることだけであり、その後、子プロセスが永続化作業を完了するため、サービス プロセスによる IO 操作の実行を大幅に回避できます。
      • AOF機構と比較して、データセットが大きい場合にはRDBの起動効率が高くなります
      • 災害復旧には、RDB が非常に良い選択です。単一のファイルを簡単に圧縮して、他の記憶メディアに転送できるためです。
    • 欠点:
      • スケジュールされた永続化の前にシステムがクラッシュすると、ディスクに書き込まれる時間がなかったすべてのデータが失われます。
  • AOF 永続性は、サーバーによって処理されたすべての書き込み操作と削除操作をログの形式で記録します。クエリ操作は記録されませんが、テキストで記録されます。ファイルを開いて詳細な操作記録を確認できます。
    • アドバンテージ:
      • これにより、より高いデータセキュリティ、つまりデータの永続性が実現されます。Redis は 3 つの同期戦略、つまり 1 秒ごとの同期、変更ごとの同期、および同期なしを提供します。
      • ダウンタイムが発生した場合でも、ログ ファイル内の既存の内容は破壊されません。この操作でデータの半分しか書き込まず、システム クラッシュが発生した場合は、次回 Redis を起動する前に、redis-check-aof ツールを使用してデータの整合性の問題を解決してください。
    • 欠点:
      • 同じ数のデータ セットの場合、通常、AOF ファイルの方が RDB ファイルよりも大きくなります。大規模なデータセットを復元する場合、RDB は AOF よりも高速です
      • 同期戦略によっては、動作効率の点で AOF は RDB よりも遅くなることがよくあります。

2.redis データ型

  • 5 つの主要なデータ型: String、List、Set、Hash、Zset (並べ替え用のスコア フィールドを追加)
  • 3 つの特別なデータ タイプ: Geospatial (地理的位置)、Hyperloglog (カーディナリティ統計、Web サイト訪問に適用)、BitMaps (ビットマップ、チェックインおよびステータス統計に適用)

3.redisの高可用性

  • センチネルモードとスウォームモード

4. キャッシュの侵入、キャッシュの破壊、キャッシュなだれ

  • キャッシュの侵入: クライアントはまったく存在しないデータをクエリするため、リクエストがストレージ層に直接送信され、過剰な負荷が発生したり、ダウンタイムが発生したりすることがあります。この状況の理由としては、ビジネス層がキャッシュおよびライブラリ内のデータを誤って削除したことが考えられます。あるいは、誰かが悪意を持って攻撃し、ライブラリに存在しないデータに特別にアクセスした可能性があります。
    • 解決策: 空のオブジェクトをキャッシュし、ブルーム フィルターを使用します。
  • キャッシュの内訳: 非常に多くのアクセスがあるホット データ。キャッシュの有効期限が切れた瞬間に、大量のリクエストがストレージ層に直接送信され、サービスがクラッシュします。
    • 解決策: ホットスポット データは期限切れになりません。ミューテックス ロックを追加します。
  • キャッシュ雪崩
    • 解決策: 有効期限を設定するときに、同時にデータの有効期限が切れることを避けるために乱数を追加します。

7. 一般的な Linux コマンド

1. ディレクトリの切り替え

  • cd /: ルートディレクトリに切り替えます
  • cd .../: 上位ディレクトリに切り替えます
  • cd ~: ホームディレクトリに切り替えます

2. ディレクトリビュー

  • ls: 現在のディレクトリ内のすべてのディレクトリとファイルを表示します
  • ls -a: 現在のディレクトリ内のすべてのディレクトリとファイルを表示します (隠しファイルを含む)
  • ls -l: 現在のディレクトリ内のすべてのディレクトリとファイルを表示するリスト (リスト表示、詳細情報を表示)

3. ディレクトリ操作

  • 作成する
    • mkdir ディレクトリ名
  • 削除
    rm -f: 確認なしで強制削除
    rm -r ディレクトリ名: ディレクトリを再帰的に削除します
  • 改訂
    • mv 現在のディレクトリ 新しいディレクトリ
  • 探す
    • ディレクトリパラメータファイル名を検索
    • 例: find /usr/tem -name 'a*' /usr/tmp ディレクトリ内で a で始まるすべてのディレクトリまたはファイルを検索します

4. ファイル操作

  • 作成する
    • ファイル名をタッチする
  • 消去
    • rm -rf
  • 改訂
    • vi または vim、3 つのモードに分かれています
      • コマンドラインモード
      • 編集モード
      • 最下段モード
  • チェック
    • 猫: 最後の画面を見てください
    • 詳細:パーセンテージ表示
    • 以下: ページめくり表示
    • tail: 行数を指定するか、動的に表示します

5.許可操作

chmod (ugoa) (+ - =) (rwx) (ファイル名)

  • u: ファイルの所有者
  • g: オーナーと同じグループ内
  • o:他のユーザー
  • a: 上記 3 つすべて
  • +: 権限を増やします
  • -: 許可を取り消します
  • =: 権限を設定する
  • r: 読み取り権限
  • w:書き込み許可
  • x: 実行可能 (そうでない場合は、このディレクトリに cd できないことを意味します)

6. 梱包と圧縮

  • パッケージ化ファイル: tar -cvf パッケージ化ファイル.tar パッケージ化されたファイル/パス...
  • ファイルを解凍します: tar -xvf package file.tar
  • パラメータの説明
    • c: アーカイブ ファイルを生成し、パッケージ ファイルを作成します。
    • x: アーカイブファイルのロックを解除します
    • v: 表示処理
    • f:アーカイブファイル名を指定
  • 圧縮ファイル: tar -zcvf 圧縮ファイル.tar.gz 圧縮ファイル/パス...
  • ファイルを解凍します: tar -zxvf package file.tar.gz

7. 指示を見つける

  • grep: 文字列照合 (ファイルの内容から文字列を照合)
  • 例: ps -ef | grep sshd -c は、指定されたプロセス内の SSH の数を確認します。
    • -c: 一致した行数のみを出力します。
    • -i: 大文字と小文字は区別されません。
    • -h: 複数のファイルをクエリするときにファイル名を表示しません。
    • -l: 複数のファイルをクエリする場合、一致する文字を含むファイル名のみが出力されます。
    • -n: 一致する行と行番号を表示します。
    • -s: 存在しない、または一致するテキストがないエラー メッセージを表示しません。
    • -v: 一致するテキストを含まないすべての行を表示します。
  • find: 指定されたディレクトリからファイルまたはディレクトリを検索します。
  • 使用法: パスパラメータファイル名の検索
  • 例: find /home/ygt -name test.txt アカウントの下で test.txt という名前のファイルを見つけます。
    • ファイル名で検索: find ディレクトリ名 "ファイル名またはディレクトリ名"
    • ファイルの種類で検索: ディレクトリの種類を検索 d (ディレクトリ ファイル)/f (通常のファイル)
    • ファイルサイズで検索: ディレクトリを検索 -size +nk (nk以上)/-n (nk未満)
    • 分ごとに検索: ディレクトリを検索 -amin/-bmin/-mmin +n (n 分外)/-n (n 分以内)
    • 日による検索: ディレクトリを検索 -atime/-ctime/-mtime +n (n 日外)/-n (n 日以内)
  • 検索: ファイルをより速く見つけます。(デフォルトでは、1 日に 1 回自動的に更新されます。最近変更されたファイルをクエリする場合は、まず updatedb を使用して検索データベースを更新する必要があります)
  • 例:locate /etc/sh は、etc ディレクトリ内の sh で始まるすべてのファイルを検索します。
  • locate pwd は pwd に関連するすべてのファイルを検索します

8. ユーザーの切り替え

  • sudo (root 権限を使用したいすべての一般ユーザー向けに設計)

9. 現在のディレクトリを表示する

  • 障害者

10. プロセスを表示する

  • ps -ef

11. プロセスを終了します

  • 殺す

8. 分散型

1.CAPの原則

  • 一貫性 (C): 分散システム内のすべてのデータ バックアップが同時に同じ値を持つかどうか。
  • 可用性 (A): クラスター内の一部のノードに障害が発生した後でも、クラスター全体がクライアントの読み取りおよび書き込みリクエストに応答できるかどうか。
  • パーティショントレランス (P): システム内の情報の損失または障害は、システムの継続的な動作には影響しません。

2. なぜ 3 つを両方とも満たすことができないのですか?

参考コピー

3.RPC

  • リモートプロシージャコール
  • 2 つのコア: 通信とシリアル化

おすすめ

転載: blog.csdn.net/qq_40453972/article/details/133018811