Java の基本と複数の「比較」
1.Collections.sort ソート内部原則
Java 6では、Arrays.sort()とCollections.sort()はMergeSortを使用しますが、Java 7では、内部実装がTimSortに置き換えられ、オブジェクトを比較します。実装要件はより厳格です
2. HashMap の原則、java8 による変更
構造実装の観点から見ると、HashMap は配列リンク リストの赤黒ツリーです (JDK1.8 で赤黒が追加されました)ツリー部分)が実装されました。 HashMap では、1 つのレコードのキーのみを null にすることができ、複数のレコードの値を null にすることができます。
HashMap はスレッドセーフではありません。 ConcurrentHashMap はスレッドセーフです。競合を解決する: 競合が発生した場合は、ジッパー メソッドを使用して、単一のリンク リスト内の同義語であるキーワードでノードをリンクします。ハッシュ テーブルの長さが m の場合、m 個のヘッド ポインターで構成されるポインター配列 T を定義します。ノード アドレスは次のようになります。 i. 点は、T(i) を先頭ポインタとして単一リンク リストに挿入されます。 Java 8 では、競合する要素が制限 (8) を超え、リンク リストが赤と黒のツリーに置き換えられます。
3. String と StringBuilder の違い
1) 変数と不変: 文字列は不変であり、「」が実行されるたびに新しいオブジェクトが生成されます。したがって、メモリを節約するために文字列を頻繁に変更する場合は、文字列は使用されません。
2) マルチスレッド セーフですか: StringBuilder はメソッドに同期ロックを追加しないため、スレッド セーフではありません。 StringBuffer と String はどちらもスレッドセーフです。
4. Vector と Array の違い
1) ArrayList はメモリ不足時にデフォルトで 50% 拡張され、Vector はメモリ不足時に 1 倍拡張されます。デフォルト。
2) Vector はスレッド セーフですが、スレッド セーフにはより大きなシステム オーバーヘッドが必要となるため、Vector はほとんどの場合使用されません。
5. HashMap と Hashtable の違い
1) 歴史的な理由: Hashtable は Dictonary クラスを継承し、HashMap は abstractMap を継承します
2) HashMap null のキーと値のペアは許可されますが、空のオブジェクトは 1 つまでしか存在できませんが、これは HashTable では許可されません。
3) HashTable は同期されますが、HashMap は非同期であり、HashTable よりも効率的です
6. ConncurrentHashMap と hashtable の比較 (2 つのスレッドが同じエントリに同時にアクセスします)マップチェーンでは、1 つのスレッドが最後に削除し、1 つのスレッドが先頭でトラバースして検索し、後で別のスレッドによって削除されたノードを前のスレッドがなぜ正しく見つけることができるのかを尋ねます)
ConcurrentHashMap はハッシュテーブルとハッシュマップを組み合わせますアドバンテージ。ハッシュテーブルは同期されます、つまりスレッドセーフですが、ハッシュマップは同期を考慮しません。したがって、ハッシュマップはシングルスレッドの状況でより効率的です。ハッシュテーブルのマルチスレッドの場合、同期操作によりプログラム実行の正確性を保証できます。しかし、ハッシュテーブルはブロックされており、同期的に実行されるたびに構造全体をロックする必要があります。この問題を解決するために ConcurrentHashMap が生まれました。
ConcurrentHashMap を使用すると、複数の変更操作を同時に実行できます。重要なのは、ロック分離を使用することです。テクノロジー (配列は複数のオブジェクトを保存し、これらのオブジェクトのロックを個別のロックとして使用し、get/put 中にランダムにいずれかを使用します)。複数のロックを使用して、ハッシュ テーブルのさまざまな部分への変更を制御します。 JDK 1.6 には HashEntry 構造があり、新しく追加されたノードが挿入されるたびに、それがチェーンのヘッド ノードとして使用され (HashMap と同じ実装)、ノードが削除されるたびに、そのノードより前のすべてのノードが削除されます。削除されたノードはコピーされて新しいチェーンを形成し、現在のノードの前のノードの次のノードを現在のノードの次のノードにポイントするため、削除後に 2 つのチェーンが存在し、同じチェーンでもチェーン、一方のスレッドは削除中、もう一方のスレッドはすべて正常に動作します。これは、スレッドがトラバースしているときは、トラバースしているスレッドが元のチェーンを引き続き使用できるためです。
Java8 では、データの保存に volatile HashEntry が使用され、テーブル要素がロックとして使用され、テーブル配列から一方向リンク リストに赤黒ツリーが追加されます。赤黒ツリーは、次の特性を持つ特殊な二分探索ツリーです。 1. ノードは赤または黒 2. ルート ノードは黒 3. 葉ノードは黒 4. 1 つのノードが赤の場合、葉ノードは黒black 5. ノードからその子孫ノードまでのすべてのパス上の黒いノードの数は同じです。
7. ArrayList と LinkedList の違いは何ですか?
最も明らかな違いは次のとおりです。
ArrrayList の基礎となるデータ構造は配列であり、ランダム アクセスをサポートしますが、LinkedList の基礎となるデータ構造はリンク リストであり、ランダム アクセスをサポートしません。ランダムアクセス。添え字を使用して要素にアクセスする場合、ArrayList の時間計算量は O(1) ですが、LinkedList の時間計算量は O(n) です。 LinkedList は二重にリンクされたリストです。
8. Java では、Comparator と Comparable の違いは何ですか?
Comparable インターフェイスはオブジェクトの自然な順序を定義するために使用され、並べ替えインターフェイスです。一方、comparator は通常、ユーザーがカスタマイズした順序を定義するために使用され、比較インターフェイスです。特定のクラスの順序を制御する必要があり、クラス自体が並べ替えをサポートしていない (つまり、Comparable インターフェイスを実装していない) 場合は、並べ替えを実行するために「このクラスのコンパレーター」を作成できます。 Comparable は常に 1 つだけですが、オブジェクトの順序を定義するために複数のコンパレータが存在する場合があります。
9. 抽象クラスとは何ですか?インターフェースとどう違うのですか?なぜ抽象クラスを使用するのでしょうか?
抽象クラスは、インスタンス化が許可されていないクラスを指します。クラスは継承関係を 1 回しか使用できません。ただし、クラスは複数のインターフェイスを実装できます。
抽象クラスとインターフェイスは、さまざまな設計概念を反映しています。実際、抽象クラスは「である」関係を表し、インターフェイスは「似た」関係を表します。
抽象クラスとインターフェイスを実装するクラスは、その中のすべてのメソッドを実装する必要があります。抽象クラスには非抽象メソッドを含めることができます。インターフェース内に実装メソッドを含めることはできません。しかし、Java8 では、インターフェイス内で静的なデフォルト メソッドが許可されます。
インターフェースで定義された変数はデフォルトでは public static Final であり、初期値を与える必要があるため、実装クラスで再定義したり、値を変更したりすることはできません。抽象クラスの変数はデフォルトでフレンドリーであり、その値はサブクラスで再定義したり、再割り当てしたりできます。
サブクラスが親クラスの抽象メソッドを実装する場合、可視性は親クラスの可視性以上にすることができますが、インターフェイス実装クラスのインターフェイス メソッドの可視性は同じにすることしかできません。インターフェース(パブリック)のものと同様です。
再利用には抽象クラスを使用します。コーディングの量を減らし、結合を減らします。
10.Java でのオーバーロードと書き換えについて説明しますか?
オーバーロードと再書き込みの両方で、同じ名前を使用して異なる関数を実装できますが、オーバーロードはコンパイル時のアクティビティであり、再書き込みは実行時のアクティビティです。同じクラス内のメソッドをオーバーライドできますが、サブクラス内のメソッドのみをオーバーライドできます。書き換えには継承が必要です
書き換え: 1. サブクラスでは、基本クラスから継承されたメソッドを必要に応じて書き換えることができます。 2. オーバーライドされるメソッドとオーバーライドされるメソッドは、同じメソッド名、パラメーター リスト、戻り値の型を持つ必要があります。 3. オーバーライドするメソッドは、オーバーライドされるメソッドよりも制限の厳しいアクセス許可を使用できません。
オーバーロードする場合、メソッド名は同じである必要がありますが、パラメーターの型と数は異なり、戻り値の型は同じでも異なっていても構いません。戻り値の型は、オーバーロードされた関数を区別するための基準として使用できません。
11.コレクションとコレクションの違いは何ですか?
Collection は、Java コレクション フレームワークの基本インターフェイスです。
Collections は、Java コレクション フレームワークによって提供されるツール クラスであり、操作または返すための多数の静的メソッドが含まれています。コレクション。
12. Java におけるポリモーフィズムの実装原理
いわゆるポリモーフィズムとは、サブクラス オブジェクトを指す親クラスの参照を指し、メソッドを呼び出すときに、サブクラスが呼び出されます。親クラスの実装ではなく実装です。ポリモーフィズム実装の鍵は「動的バインディング」にあります。
13.オブジェクトにはどのようなメソッドが定義されていますか?
clone()、equals()、hashCode()、toString()、notify()、notifyAll()、
wait()、finalize()、getClass()
14.Java ジェネリックスと型消去?
ジェネリクスはパラメータ化された型です。コレクションを作成するときに、コレクション要素の型を指定します。このコレクションは、この型のパラメータのみを渡すことができます。型の消去: Java コンパイラーによって生成されたバイトコードにはジェネリック情報が含まれていないため、コンパイル時に消去されます: 1. ジェネリックは最上位の親クラスに置き換えられます; 2. 削除されます。
15. JDK 1.8 で導入された 5 つの新機能を挙げてください。
Java 8 は Java の歴史の中で画期的なバージョンです。JDK 8 の 5 つの主な機能は次のとおりです:
ラムダ式。匿名関数 Stream を関数のように渡すことができます。オブジェクト API では、最新のマルチコア CPU を最大限に活用して、非常に簡潔なコードを作成できます。日付と時刻 API では、最後に、拡張メソッドを使用するための安定したシンプルな日付と時刻ライブラリが提供されます。インターフェイスの静的メソッドとデフォルト メソッド; アノテーションを繰り返すことで、同じ型に対して同じアノテーションを複数回使用できるようになりました。
16. Java の public、private、protected、default キーワードのアクセス範囲:
Protected はパッケージ内およびパッケージ外のサブクラスにアクセスでき、default はのみアクセスできます。同じパッケージ内でのアクセス、プライベートは同じクラスのもののみ可能です
17. 一般的に使用されるデータ構造:
セット、線形構造 (配列、キュー、リンク リスト)およびスタック)、ツリー形状 構造、グラフ構造
18. Java で TreeMap を実装するにはどのツリーが使用されますか? (回答)
Java の TreeMap は、赤黒ツリーを使用して実装されています。
19. 匿名内部クラスとは何ですか?外部で定義された変数にアクセスするにはどうすればよいでしょうか?
匿名内部クラスは、名前のない内部クラスです。匿名内部クラスは 1 回のみ使用できます。通常、コード記述を簡素化するために使用されます。
匿名の内部クラスは外部クラスの Final 変数にのみアクセスできます。Java 8 はより賢明です: ローカル変数が匿名の内部クラスによってアクセスされる場合、ローカル変数は最終的な変更を自動的に使用するのと同等です。
20. シングルトン パターンを作成するにはどうすればよいですか?二重チェックについて話すと、それはスレッドセーフではないと彼は言いました。スレッドセーフなシングルトンを効率的に作成するにはどうすればよいでしょうか?
1 つは列挙によるもの、もう 1 つは静的内部クラスによるものです。
21.poll() メソッドとremove() メソッドの違いは何ですか?
poll() と
remove() は両方ともキューから要素を取り出しますが、poll() は要素の取得に失敗すると空を返しますが、remove()失敗すると例外がスローされます。
22. ArrayList を走査するときに要素を削除するコードを作成します。
イテレータを使用します。
イテレータ itr = list.iterator();
while(itr.hasNext()) {if(…) { itr.remove();} }
JVM
1. JVM はどのようにクラスをロードしますか? 親委任モデルのメソッドとは何ですか?
クラスロードプロセス: ロード、検証 (検証フェーズの目的は、クラスファイルのバイトストリームに含まれる情報が JVM 仕様に準拠し、JVM に害を及ぼさないことを確認することです)、準備 (準備フェーズではメモリが割り当てられます)変数の場合、クラス変数の初期化を設定します)、解析 (解析プロセスでは、定数プール内のシンボル参照を直接参照に置き換えます)、初期化します。
親委任モデルのメソッド: 親委任とは、クラスがクラス ロード リクエストを受信した場合、最初にそれを自分でロードしようとするのではなく、最初に親クラス ローダーを見つけてリクエストを完了することを意味します。最上位の起動クラス ローダーがクラスをロードできないことを示すと、サブクラスはそれを単独でロードしようとします。元のイニシエーター ローダーをロードできない場合、下方検索は行われませんが、ClassNotFound 例外がスローされます。
メソッド: 開始 (ブートストラップ) クラス ローダー、標準拡張 (Extension) クラス ローダー、アプリケーション クラス ローダー (Application)、コンテキスト (カスタム) クラス ローダー。その意味は、同じバイトコードの複数のコピーがメモリ内に現れるのを防ぐことです。
2.GC アルゴリズム (どのような種類のオブジェクトがリサイクル可能オブジェクトとみなされるか、到達可能性分析)、CMS コレクター
jvm はオブジェクトがリサイクル可能になったことをどのように判断しますか「ガベージ」には、大きく分けて参照表記法とルート探索アルゴリズムの 2 つの方法があります。参照表記では循環参照の問題を解決できないため、ルート検索が使用されます。一連の「GC ルート」オブジェクトから開始して下方向に検索する、検索によってたどられるパスは参照チェーンと呼ばれます。オブジェクトと「GC ルート」の間に参照チェーンがない場合、それは参照に到達できないと言われます。参照できないオブジェクトは、リサイクル可能なオブジェクトとみなされます。
数種類のガベージ コレクター: 1、Serial New/Serial Old (シリアル)、2、Parralel New (並列)、3、Parralel Scavenge、4、Parralel Old、5、CMS (CMS コレクターはコレクターです)最短の回復一時停止時間を取得することを目的としています。これは、マークスイープ アルゴリズムを使用する同時コレクターです。)、6. G1 (並列および同時コレクターであり、予測可能な一時停止時間を確立できます。一時停止時間モデルは、通常、マークに基づいています)クリーニングと部分的にレプリケーションを使用します)
3. JVM はどの領域に分割されており、各領域は何を行うのでしょうか?
1) メソッド領域 (メソッド): すべてのスレッドで共有されます。メソッド領域には、すべてのクラス情報と静的変数が含まれます。
2) ヒープ: すべてのスレッドによって共有され、オブジェクトのインスタンスと配列が保存されます。Java ヒープは GC の主要領域です。
3) スタック: 各スレッドには、いくつかのローカル変数などを保存するスタック領域が含まれています。
4) プログラム カウンター: 現在のスレッドによって実行されるバイトコードの行インジケーターです。
4. JVM の新世代、旧世代、永続世代には何が格納されますか?
永続生成には主に Java クラスのクラス情報が格納され、ガベージ コレクションで収集される Java オブジェクトとはほとんど関係がありません。新しく生成されたすべてのオブジェクトは最初に若い世代に配置され、古い世代にはライフサイクルの長いオブジェクトが格納されます。
5. メモリ オーバーフローとメモリ リーク:
メモリ オーバーフロー: プログラムがメモリを適用するとき、十分なメモリがない、またはメモリが不足しています。メモリ リークの値ガベージ オブジェクトはリサイクルできないため、メモリ アナライザ ツールを使用してリークを確認できます。
6. プロセスとスレッド:
プロセスは実行中のプログラム (独立性、ダイナミクス、同時実行性) を指し、スレッドは一連の実行フローを指します。プロセス。違いは次のとおりです: 1. プロセス間でメモリが共有されない 2. リソース割り当てのためのプロセスを作成するコストがはるかに高くなるため、同時実行性の高い環境ではマルチスレッドの方が効率的です。
7. シリアル化と逆シリアル化:
シリアル化とは、Java オブジェクトをバイト シーケンスに変換することを指し、逆シリアル化はその逆です。主に Java スレッド間の通信とオブジェクト転送に使用されます。 Serializable または Externalizable インターフェイスを実装するクラス オブジェクトのみをシリアル化できます。
8.64 ビット JVM では、int の長さの大部分はどれくらいですか?
Java では、int 型変数の長さはプラットフォームに関係なく固定値であり、常に 32 ビットです。これは、int 型の長さが 32 ビットと 64 ビットの Java 仮想マシンで同じであることを意味します。
9. Java における WeakReference と SoftReference の違いは何ですか?
Java には 4 種類の参照があります。 StrongReference、SoftReference、WeakReference、および PhantomReference。
StrongReference は、Java のデフォルトのリファレンス実装です。これは、可能な限り JVM 内で存続します。オブジェクトがそれを指していない場合、GC によってリサイクルされます。
WeakReference、名前が示すように、は弱参照であり、参照されたオブジェクトが
JVM で強参照を持たなくなった場合、GC
によってリサイクルされます。WeakReference と SoftReference は GC とメモリの効率を向上させるのに有益ですが、 WeakReference、最後の強い参照が失われると、それは GC によってリサイクルされ、SoftReference は JVM がメモリを使い果たすまで可能な限り長く参照を保持します (仮想マシンの保証)。この機能により
SoftReference が作成されます。非常に適したキャッシュ アプリケーション
10.Java ヒープ スペースと GC について説明しますか?
Java コマンド経由で起動した場合
Java プロセスが開始されると、そのプロセスにメモリが割り当てられます。メモリの一部はヒープ領域の作成に使用され、プログラム内でオブジェクトが作成されると、ヒープ領域からメモリが割り当てられます。 GC は、将来の割り当てのために無効なオブジェクトのメモリを再利用する JVM 内のプロセスです。
11.Java のヒープとスタックの違いは何ですか?
JVM のヒープとスタックは異なるメモリ領域に属し、異なる目的に使用されます。スタックはメソッド フレームやローカル変数を保存するためによく使用されますが、オブジェクトは常にヒープ上に割り当てられます。スタックは通常、ヒープよりも小さく、複数のスレッド間で共有されませんが、ヒープは JVM 全体のすべてのスレッドによって共有されます。
同時実行性、ロック
1.volatile キーワード、ロック
同時プログラミング: アトミック性の問題、可視性問題、注文の問題。
volatile キーワードは可視性を確保でき、単語は命令の並べ替えを禁止できますが、アトミック性は保証できません。可視性は常に最新の値が読み取られることを保証することしかできませんが、揮発性は変数に対する操作のアトミック性を保証できません。生成された変数ステートメントに Lock キーワードとメモリ バリアを追加します。
Lock 実装は、同期されたメソッドやステートメントを使用した場合よりも幅広いロック操作を提供し、スレッド同期の問題をより洗練された方法で処理します。同期された変更されたメソッドまたはステートメント ブロックを使用すると、コードの実行後に自動的にロックが解放されますが、Lock を使用するには手動でロックを解放する必要があります。
2. MYSQL の共通最適化 (SQL 最適化、テーブル構造の最適化、 etc.)
SQL の最適化、テーブル構造の最適化、インデックスの最適化、キャッシュ パラメータの最適化
3. Java を変更するたびに、再コンパイル、パッケージ化、および再コンパイルする必要があります。より良い方法はありますか
ホットリロードを使用できます
##4. プロセス間通信の方法は何ですか?
1) パイプ、2) 名前付きパイプ、3) シグナル、4) メッセージ キュー、5) 共有メモリ、6) メモリ マッピング (マップされたメモリ)、7) セマフォ、8) ソケット (ソケット) )5.Sychronized は静的メソッドを変更し、インスタンスではなくクラス自体をロックし、非静的メソッドはインスタンスをロックします。
6. オペレーティング システムはどのような状況でデッドロックしますか?
いわゆるデッドロック: 動作中に複数のプロセスがリソースを獲得するために競合することによって引き起こされるデッドロックを指します。原因: リソースの競合: システム内の複数のプロセスが共有リソースを使用し、リソースがニーズを満たすのに十分ではない場合、プロセスがリソースを求めて競合し、デッドロックが発生します。プロセス間の進行順序が不正です: リソースの要求と解放の順序が不適切であり、これもプロセスのデッドロックにつながります##7. デッドロックの 4 つの条件:1. 排他条件(プロセスの排他的リソース) 2. 要求と保持(リソースの要求によりプロセスがブロックされた場合、取得したリソースは保持される) 3. 非剥奪条件(プロセスが取得したリソースは使用される) 4. 循環待機 (複数のプロセス間で先頭から末尾までの循環待機リソース関係が形成されます)
8. 分散ロックをどのように理解するか?日常業務では、オンライン サーバーが複数の分散サーバーに展開されるため、分散シナリオではデータの一貫性の問題に直面することが多く、その問題を解決するには分散ロックを使用する必要があります。
9. スレッドの同期とブロックの間にはどのような関係がありますか?同期は必ずブロックされますか?ブロッキングは同期する必要がありますか?スレッドが同期されているかどうかは、ブロッキングか非ブロッキングとは関係ありません。同期はプロセスであり、ブロッキングはスレッドの状態です。複数のスレッドが共有変数を操作する場合、競合が発生する可能性があります。このとき、3 つ以上のスレッドが同時にクリティカル エリアに入らないように同期する必要があります。この処理中、後からクリティカル エリアに入ったスレッドはブロックされ、最初に入ったスレッドがクリティカル エリアから出るのを待ちます。エリア。
10.同期と非同期の違いは何ですか?同期と非同期の最大の違いは次のとおりです。一方は待つ必要がありますが、もう一方は待つ必要はありません。同期により、デッドロックやダーティ データの読み取りを回避できます。通常、特定のリソースを共有するときに使用されます。全員が変更権限を持ち、同時にファイルを変更すると、ある人が削除したコンテンツを別の人が読み取ることができます。エラーが発生し、同期が順番に変更されます。
11. スレッド プールシステム自体の環境条件に従って、実行スレッドの数を効果的に制限し、最良の動作結果を達成します。主に実行スレッド数を制御するのはスレッドであり、その数を超えたスレッドは一列に並んでタスクの実行を待ち、キューの先頭からタスクを取り出して実行します。 . wait() メソッドを呼び出すにはどうすればよいですか? if ブロックまたはループを使用しますか?なぜ?
wait() メソッドはループ内で呼び出す必要があります。スレッドが CPU を取得して実行を開始するとき、他の条件がまだ満たされていない可能性があるため、ループして条件が満たされているかどうかを確認することをお勧めします。処理前に満たされています。wait()、notify()、およびnotifyall()メソッドは、スレッド間通信を実装するためにスレッド用にjava.lang.Objectクラスによって提供される同期制御メソッドです。待機中または起動中
13. スレッドを実装するいくつかの方法
(1) Thread クラスを継承し、run 関数を書き換えます(2) Runnable インターフェースの実装、run 関数の書き換え
(3) Callable インターフェースの実装、call 関数の書き換え14. マルチスレッド環境におけるフォールス シェアリングとは何ですか?
フォールス シェアリングは、マルチスレッド システム (各プロセッサが独自のローカル キャッシュを持つ) におけるよく知られたパフォーマンスの問題です。キャッシュシステムはキャッシュライン単位でデータを格納します。キャッシュ ラインは、連続する 2 バイトの整数乗であり、通常は 32 ~ 256 バイトです。最も一般的なキャッシュ ライン サイズは 64 バイトです。複数のスレッドが独立変数を変更するときに、これらの変数が同じキャッシュ ラインを共有すると、意図せずに相互のパフォーマンスに影響を与えることになります。これは誤った共有です。
#ネットワーク、データベース
1. TCP はどのようにして信頼性の高い送信を保証しますか?スリーウェイハンドシェイクプロセス?
TCP 接続では、データ ストリームが正しい順序で相手に配信される必要があります。 TCP の信頼性は、シーケンス番号付けと確認応答 (ACK) によって実現されます。 TCP 接続は 3 ウェイ ハンドシェイクで初期化されます。 3 ウェイ ハンドシェイクの目的は、双方のシーケンス番号と確認番号を同期し、TCP ウィンドウ サイズ情報を交換することです。 1 回目はクライアントが接続を開始したとき、2 回目はサーバーがクライアントのリクエストを受信したこと、3 回目はクライアントがサーバーからフィードバックを受信したことを意味します。2. Linux でよく使用されるコマンドは何ですか?
1. ディレクトリを変更するには cd コマンドを使用します。 cd / ルート ディレクトリに移動します cd ~ ユーザー ディレクトリに移動します 2. ls コマンドは、ディレクトリの内容を表示するために使用されます。 3. cp コマンドは、ファイル cp4.mv コマンド mv t.txt Document をコピーするために使用されます。 ファイル t.txt をディレクトリ Document に移動します。3. 一般的に使用されるハッシュ アルゴリズムは何ですか?
1. 加算ハッシュ: いわゆる加算ハッシュは、入力要素を 1 つずつ追加して最終結果を形成します。 2. ビット演算ハッシュ: このタイプのハッシュ関数は、さまざまなビット演算 (通常はシフトと XOR) を使用して入力要素を完全に混合します 3. 乗算ハッシュ: 33 *hash key.charAt (i)4. コンシステント ハッシュとは何ですか?
設計目標は、インターネットのホット スポット問題を解決することです。一貫性のあるハッシュ アルゴリズムでは、動的に変化するキャッシュ環境におけるハッシュ アルゴリズムの品質を決定するための 4 つの定義が提案されています。 ) 2. 単調性 (Monotonicity) 3. 分散 (Spread) 4. 負荷 (Load)5. データベースのパラダイムとは何ですか?
第一正規形 - データベース内のテーブル (すべてのフィールド値) は分割不可能なアトミック データ項目です。 第 2 正規形 - データベース テーブルの各列は主キーに関連付けられており、主キーの特定の部分のみに関連付けることはできません。 第 3 正規形----データベース テーブル内のデータの各列は主キーに直接関連付けられており、間接的に関連付けることはできません。正規化とは、データの冗長性を減らすことです。6. データベースのインデックスの構造は何ですか?どのような状況でインデックスを作成するのが適切ですか?
データベースのインデックス構造はソートされたデータ構造であり、B ツリーおよび変形された B ツリーを通じて実装されます。インデックスの作成が適さない状況は次のとおりです: 1. クエリ中にほとんど使用または参照されない列、データ値がほとんどない列、イメージ、テキスト、およびビット データ型として定義された列、パフォーマンスを大幅に変更する場合検索パフォーマンスを上回ります。 システム自体の環境条件に従って、実行スレッドの数は効果的に制限され、最良の運用効果が得られます。主にスレッドの実行数を制御し、スレッド数を超えたスレッドは一列に並んでタスクの実行を待ち、キューの先頭からタスクを取り出して実行します。 . 同時実行パッケージで以下で使用されます。java.util.concurrent、java.util.concurrent.atomic、および java.util.concurrent.lock
8. 一般的に使用されるデータベースは何ですか? Redisを使ったことがありますか?MySQL、SQL Server、Oracle データベース。
9. どのようなオープンソース プロトコルを知っていますか?GPL (GNU General Public License): GNU General Public License LGPL (GNU Lesser General Public License): GNU Lesser General Public License
BSD
(Berkeley Software Distribution): バークレー ソフトウェア配布ライセンス契約
MIT (マサチューセッツ工科大学): MIT の名前は、マサチューセッツ工科大学に由来しています
Apache (Apache License) ): Apache ライセンス契約
MPL (Mozilla Public License): Mozilla パブリック ライセンス契約
10. フォーム送信における get と post# の違い## 1. get はサーバーから情報を取得し、post はサーバーに情報を送信します。2.get は比較的少量のデータを送信しますが、post はより大きくなる可能性があります
3.get比較的低いセキュリティ11. TCP プロトコルと UDP プロトコルの違いは何ですか? (回答回答)
TCP (Tranfer Control Protocol) の略称は、伝送を保証するコネクション型のプロトコルであり、データストリームを伝送する前に、まず双方が仮想的な通信チャネルを確立します。エラーが少なくデータを送信できます。UDP (User DataGram Protocol) の略語は、コネクションレス型プロトコルです。UDP を使用してデータを送信する場合、各データ セグメントは、完全な送信元アドレスと宛先を含む独立した情報です。したがって、宛先に到達できるかどうか、宛先に到達するまでの時間やコンテンツの完全性は保証できません。
つまり、TCP は UDP よりも接続の確立に時間がかかります。 TCP は UDP と比較して、セキュリティと信頼性が高くなります。
TCP プロトコル送信のサイズに制限はありません。接続が確立されると、双方は特定の形式で大量のデータを送信できますが、UDP はサイズ制限がある信頼性の低いプロトコルです。一度に 64K を超える
以上が2020 年の JAVA 面接で最も一般的な質問のまとめ (コレクション)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。