プログラマーのJava Cribs 9:Java SE-インタビューと繰り返しのためのチートシート

この記事の主な目的は、Java開発者の立場に関するインタビューの準備をすることです(実際、これは長年にわたって自分で書いたチートシートであり、すべての新しい求人検索で繰り返します)。

想定される。 Java SEの多くの機能に精通しているため、基本的に簡単に情報を提供します。 もちろん、Java SEプラットフォームの基本を教えるためだけにこの記事を使用できます(ただし、この場合、記事を読んだ後は、他のソースに目を向ける必要があります)。

画像

ですから、面接前に知っていることをすべて覚えようとしているのです。何年の経験でも構いません。準備ができていなくても、覚えているように思われる質問に答えることができますが、面接中に忘れられました。 このチートシートを使用すると、知識の一部を更新できます。

注意 :Java言語自体に関する質問には触れません(finalという言葉の目的、またはオーバーライドとオーバーロードの違いのようです)。これには別の記事が必要になります。これらはJava SE(6-9)プラットフォームに関する質問です。

I.コレクション


あなたのレベルに関係なく、コレクションに関する質問は常にたくさんあります。 したがって、コレクションに関するすべての機能を簡単に思い出しましょう。

コレクションに関する多くの情報
初心者向けコレクションノート
初心者にとって(特に他のプログラミング言語から切り替えた場合)、Javaコレクションに保存されるのはリンク/ポインターのみであり、それ以上ではないことを理解するのが非常に難しい場合があります。 addまたはputを呼び出すと、オブジェクトは実際にはコレクション内のどこかに格納されているようです。これは、プリミティブ型で動作する配列にのみ当てはまりますが、リンクのみを格納するコレクションには当てはまりません。 そのため、「ArrayListコレクションの正確なサイズに名前を付けることはできますか?」などのインタビューの質問に対して、初心者は「保存されているオブジェクトのタイプに依存する」などの回答を始めます。 コレクションはオブジェクト自体を保存せず、オブジェクトへのリンクのみを保存するため、これは完全に間違っています。 たとえば、リストに同じオブジェクトを100万回追加できます(より正確には、1つのオブジェクトに100万のリンクを作成します)。

1)JDKコレクションインターフェイス
JDKコレクションインターフェイス
収集インターフェース
役職説明
反復可能コレクションにイテレータがあり、for(Type value:collection)でバイパスできることを意味するインターフェース。 ほとんどすべてのコレクション(マップを除く)
収集ほとんどのコレクションのメインインターフェイス(マップを除く)
一覧リストは順序付けられたコレクションであり、シーケンスとも呼ばれます。
(シーケンス)。 ほとんどの実装で要素の重複は許可されています。 アクセスを許可します
要素インデックス。 コレクションインターフェイスを拡張します。
セットセットでの作業を実装するインターフェース(数学セットに類似)、複製
アイテムは禁止されています。 注文する場合としない場合があります。 コレクションインターフェイスを拡張します。
キューキューは、コレクションに対する通常の操作とは異なり、処理前にオブジェクトを格納するように設計されたコレクションです;キューは、追加、受信、表示のための追加のメソッドを提供します。 原則として、要素インデックスによるクイックアクセスには含まれません。 コレクションインターフェイスを拡張
デケ双方向キュー。両端からの要素の追加と削除をサポートします。 展開する
キューインターフェイス。
地図キーと値のマッチングで動作します。 各キーは1つの値にのみ対応します。 で
他のコレクションとは異なり、インターフェイス(CollectionおよびIterableを含む)は拡張されません。
ソート済みセット自動的にソートされたセット、または自然順(詳細については、
比較可能なインターフェース)、またはComparatorを使用します。 セットインターフェイスを拡張
ソート済みマップこれは、キーが種類ごとまたは使用して自動的にソートされるマップです
コンパレータ Mapインターフェースを拡張します。
ナビゲーション可能セット
これは、指定された検索値に最も近い値を見つけるためのメソッドが追加されたSortedSetです。 NavigableSetにアクセスしてバイパスまたは順番に実行できます
値の降順または昇順。
ナビ可能マップ
これはSortedMapであり、特定の検索値に最も近い値を見つけるためのメソッドを追加しました。 降順または
昇順。

java.util.concurrentパッケージのインターフェース
役職説明
ブロッキングキュー
キューのサイズ、条件付きロック、受信時のデータの追加時またはデータの不足時のオーバーフローを処理するさまざまなメソッドを設定する機能を含むマルチスレッドキューの実装(例外をスローする、スレッドを永続的または一時的にブロックする、falseを返すなど)
TransferQueue
このマルチスレッドキューは、受信スレッドが要素をキューからプルするまで挿入スレッドをブロックできるため、スレッド間の同期および非同期メッセージ転送の実装に使用できます。
Blockingdeque
BlockingQueueに似ていますが、双方向キュー用です
コンカレントマップ
インターフェース、Mapインターフェースを拡張します。 多数の新しいアトミックメソッドを追加します:putIfAbsent、remove、replace。マルチスレッドプログラミングを簡単かつ安全にします。
並行ナビゲーション可能マップ
マルチスレッドバージョン用にNavigableMapインターフェースを拡張

java.util.concurrentのインターフェースおよびコレクションに関する詳細情報に興味がある場合は、
こちらの記事をご覧ください

2)すべてのコレクションの非常に簡単な説明を含む表
すべてのコレクションの非常に簡単な説明を含む表
種類シングルスレッドマルチスレッド
リスト
  • ArrayList-配列に基づくメインリスト
  • LinkedList-まれなケースでのみ有用です。
  • ベクトル-非推奨

  • CopyOnWriteArrayList-まれな更新、頻繁な読み取り

キュー/
Deques
  • ArrayDeque-配列に基づくメイン実装
  • スタック-非推奨
  • PriorityQueue-ソートされたキュー

  • ArrayBlockingQueue-ブロッキングキュー
  • ConcurrentLinkedDeque / ConcurrentLinkedQueue-関連ノードのキュー
  • DelayQueue-各アイテムの遅延キュー
  • LinkedBlockingDeque / LinkedBlockingQueue-関連ノードのブロッキングキュー
  • LinkedTransferQueue-要素の転送に使用できます
  • PriorityBlockingQueue-マルチスレッドPriorityQueue
  • SynchronousQueue-シンプルなマルチスレッドキュー

地図
  • HashMap-メインの実装
  • EnumMap-キーとして列挙
  • ハッシュテーブル-非推奨
  • IdentityHashMap-キーは==を使用して比較されます
  • LinkedHashMap-広告掲載オーダーを保存します
  • TreeMap-各種キー
  • WeakHashMap-キャッシュに役立つ弱いリンク

  • ConcurrentHashMap-メインのマルチスレッド実装
  • ConcurrentSkipListMap-ソートされたマルチスレッド実装

セット
  • HashSetは多くの主要な実装です
  • EnumSet-多くの列挙
  • BitSet *-多くのビット
  • LinkedHashSet-挿入順序を保持
  • TreeSet-ソートセット
  • ConcurrentSkipListSet-ソートされたマルチスレッドセット
  • CopyOnWriteArraySet-まれな更新、頻繁な読み取り


*-実際には、BitSetはSetと呼ばれますが、Setインターフェイスは継承しません。

3)JDKの非推奨のコレクション
非推奨のJavaコレクション
廃止(レガシー)と見なされる汎用ユニバーサルコレクション
説明
ハッシュテーブル
当初はHashMapの同期アナログとして考えられていましたが、まだ可能ではありませんでした
Collecions.synchronizedMapを使用してコレクションのバージョンを取得します。 現時点では、原則として
ConcurrentHashMapを使用します。 HashTableは同期よりも遅く、スレッドセーフではありません
HashMap。完全なレベルではなく、個々の操作のレベルで同期を提供します。
コレクション。
ベクトル以前はArrayListの同期バージョンとして使用されていましたが、次の理由と同じ理由で廃止されました
ハッシュテーブル
スタック以前はキューの構築に使用されていましたが、ベクターに基づいて構築されているため、
また、道徳的に時代遅れと見なされます。

従来のコレクションに基づいて構築された特殊なコレクション
に基づいて説明
物性
ハッシュテーブルHashtableに基づいて構築されたデータ構造として、Propertiesはかなり時代遅れの構造です。
文字列を含むマップを使用することをお勧めします。 プロパティの詳細
この議論で推薦されない使用を見つけることができます。
UIDefaults
ハッシュテーブルSwingコンポーネントのデフォルト設定を保存するコレクション


4) リストインターフェイスを実装するコレクション
Listインターフェースを実装するコレクション
リストを実装する汎用ユニバーサルコレクション:
役職によって設立されました

説明サイズ*
配列リスト
一覧動的に変化する配列に基づいたListインターフェイスの実装。 ほとんどの場合、Listインターフェイスの最適な実装は、メモリ消費とパフォーマンスです。 非常にまれなケースで、リストの先頭または中央に非常に小さい文字列を頻繁に挿入する必要がある場合
リスト上の移動回数により、LinkedListはパフォーマンスの向上につながります(ただし、これらの場合は、ApacheのTreeListを使用することをお勧めします)。 詳細が興味深いArrayListである場合、この記事を参照することをお勧めします。
4 * N
LinkedList
一覧双方向リンクリストに基づいたListインターフェイスの実装。つまり、各要素が前の要素と次の要素を指している場合。 原則として、ArrayListよりも多くのメモリとパフォーマンスが必要です。リスト内の最小の移動でリストの中央での挿入/削除が必要になることが多いまれな場合にのみ使用するのが理にかなっています(ただし、これらの場合はApacheからTreeListを使用することをお勧めします。 Dequeインターフェイス。 Queueインターフェイスを介して作業する場合、LinkedListはFIFOキューとして機能します。 LinkedListの詳細に興味がある場合は、この記事を参照することをお勧めします。
24 * N

java.util.concurrentパッケージのコレクション
役職によって設立されました

説明
CopyOnWriteArrayList
一覧ArrayListに似たListインターフェイスの実装ですが、リストが変更されるたびに作成されます
コレクション全体の新しいコピー。 これには、コレクションが変更されるたびに非常に大きなリソースが必要です。
ただし、このタイプのコレクションでは、コレクションが
反復時間。

リストに基づく高度に専門化されたコレクション。
役職に基づいて説明
役割リスト
配列リストロール(ロール)のリストを保存するためのコレクション。 に基づいた高度に専門化されたコレクション
いくつかの追加メソッドを持つArrayList
RoleUnresolvedList
配列リスト未解決のロール(未解決のロール)のリストを保存するためのコレクション。 高度に専門化された
ArrayListベースのコレクションといくつかの追加メソッド
AttributeList
配列リストMBean属性を格納するためのコレクション。 ArrayListに基づく高度に専門化されたコレクション
いくつかの追加の方法で

*-サイズは32ビットシステムおよび圧縮Oopsのバイト単位で指定されます。Nはリストの容量です

5) Setインターフェースを実装するコレクション(多く)
Setインターフェイスを実装するコレクション(多く)
役職によって設立されました

説明サイズ*
ハッシュセットセットハッシュテーブルを使用したSetインターフェイスの実装。 ほとんどの場合、Setインターフェイスの最適な実装が可能です。
32 * S + 4 * C
LinkedHashSet
ハッシュセットハッシュテーブルとリンクリストに基づくSetインターフェイスの実装。 HashSetとほぼ同じ速度で動作するアドオンセット。 一般に、HashSetとほぼ同じです。セットに対する反復の順序のみが、要素を追加する順序によって決定されます
初めて設定します。
40 * S + 4 * C
ツリーセットナビゲーション可能セット
赤黒木を使用したNavigableSetインターフェイスの実装。 コンパレータまたは自然順序を使用してソートされます。つまり、ソート規則に応じて複数のトラバーサル/反復が発生します。 HashMapに基づくHashSetのようなTreeMapに基づく
40 * S
Enumsetセットビットベクトルに基づくSetベクトルインターフェイスの高性能実装。 EnumSetオブジェクトのすべての要素は、1つの単一の列挙型に属している必要があります
S / 8

*-サイズは、32ビットシステムおよび圧縮Oopsのバイト単位で指定されます。Cはリストの容量、Sはリストのサイズです

セットに基づく特殊コレクション
役職によって設立されました

説明
JobStateReasons
ハッシュセット印刷ジョブに関する情報(印刷ジョブの属性セット)を保存するためのコレクション。
いくつかの追加メソッドを備えたHashSetに基づく高度に専門化されたコレクション

java.util.concurrentパッケージのコレクション
役職によって設立されました

説明
CopyOnWriteArraySet
セット同様に、CopyOnWriteArrayListは変更ごとにセット全体のコピーを作成するため、
非常にまれなコレクションの変更およびスレッドセーフ要件に推奨
ConcurrentSkipListSet
セットTreeSetのマルチスレッドアナログです。


6) Mapインターフェイスを実装するコレクション(連想配列)
Mapインターフェースを実装するコレクション
Mapを実装する汎用汎用コレクション:
役職によって設立されました

説明サイズ*
ハッシュマップ地図ハッシュテーブルを使用したMapインターフェイスの実装(非同期Hashtableとして機能し、
キーとnull値のサポート)。 ほとんどの場合、最高のパフォーマンスと
Mapインターフェイスのメモリ実装。 HashMapデバイスの詳細が興味深い場合は、この記事を参照することをお勧めします。
32 * S + 4 * C
LinkedHashMap
ハッシュマップハッシュテーブルとリンクリスト、つまりマップ内のキーに基づいたMapインターフェイスの実装
追加された順に保存およびバイパスされます。 このコレクションはほぼ同じくらい高速です
ハッシュマップ また、キャッシュの作成にも役立ちます(
removeEldestEntry(Map.Entry))。 LinkedHashMapデバイスの詳細に興味がある場合は、この記事を参照することをお勧めします。
40 * S + 4 * C
ツリーマップナビ可能マップ
赤黒ツリーを使用したNavigableMapの実装、つまりコレクション、キーをトラバースするとき
同じNavigableMapを使用すると、キーに最も近い値を検索できます。
40 * S
弱点マップ
地図HashMapと同様ですが、すべてのキーは弱いです
弱い参照、つまりガベージコレクションにより、オブジェクトのキーとオブジェクトが削除される
これらのオブジェクトへの他の参照が存在しない場合の値。 WeakHashMapは最も簡単なものの1つです
弱いリンクを最大限に活用する方法。
32 * S + 4 * C
Enummap地図単純な配列に基づいたMapインターフェースの高性能実装。 すべてのキー
このコレクションは、1つの列挙型にのみ属することができます。
4 * C
IdentityHashMap
地図HashMapのようなIDベースのマップはハッシュテーブルに基づいていますが、HashMapとは異なり、
等しいオブジェクトを比較することはありません。実際に同じかどうかのみを比較します
メモリ内のオブジェクト。 第一に、コレクションの作業を大幅に高速化し、第二に、
等しいが別のオブジェクトによって意図的に生成される場合の「スプーフィング攻撃」に対する保護。
第三に、このコレクションには、グラフをトラバースするときに多くの用途があります(ディープコピーなど)
1つのオブジェクトを複数回処理することを避ける必要がある場合。
8 * C

*-サイズは、32ビットシステムおよび圧縮Oopsのバイト単位で指定されます。Cはリストの容量、Sはリストのサイズです

java.util.concurrentパッケージのコレクション
役職によって設立されました

説明
並行ハッシュマップ
コンカレントマップ
HashMapのマルチスレッドアナログ。 すべてのデータは個別のセグメントに分割され、ブロックされるのみ
変更時の個々のセグメント。マルチスレッドでの作業を大幅に高速化します
モード。 イテレータは、このタイプのコレクションに対してConcurrentModificationExceptionをスローすることはありません。
ConcurrentSkipListMap
並行ナビゲーション可能マップ
TreeMapのマルチスレッドの類似物です


7) キュー/デキューインターフェイス (キュー)に基づくコレクション
キュー/デキューベースのコレクション
役職によって設立されました

説明サイズ*
配列
デケ動的配列に基づくDequeインターフェースの効率的な実装、類似
配列リスト
6 * N
LinkedList
デケ双方向リンクリストに基づくList and Dequeインターフェイスの実装、つまり、各要素が前の要素と次の要素を指す場合、Queueインターフェイスを介して作業する場合、LinkedListはFIFOキューとして機能します。
40 * N
PriorityQueue
キューヒープ(ヒープ)に基づく無制限の優先度キュー。 ソートされたアイテム
わかりましたまたはコンパレータを使用して。 null要素を含めることはできません。

*-サイズは、32ビットシステムおよび圧縮Oopsのバイト単位で指定されます。Cはリストの容量、Sはリストのサイズです

java.util.concurrentで定義されているマルチスレッドキューとデックは、個別の記事を必要とするため、それらに関する情報に興味がある場合はここでは説明しません。この記事を読むことをお勧めします


8)その他のコレクション
その他のコレクション
役職説明サイズ*
ビットセット
その名前にもかかわらず、BitSetはSetインターフェイスを実装しません。 BitSetは、ビット配列のコンパクトな記録に使用されます。
N / 8


9)コレクションを操作する方法
コレクションメソッド
アルゴリズム-コレクションクラスには、多くの便利な統計手法が含まれています。
コレクションを操作するには:
方法説明
頻度 (コレクション、オブジェクト)
指定されたコレクション内のこの要素の出現回数を返します。
disjoint (コレクション、コレクション)2つのコレクションに共通の要素がない場合、trueを返します。
addAll (コレクション<?スーパーT>、T ...)指定された配列(またはパラメーターにリストされている)のすべての要素を指定されたコレクションに追加します
min (コレクション)コレクションから最小アイテムを返します
max (コレクション)コレクションから最大のアイテムを返します


リストを使用するには:
方法説明
ソート (リスト)ほとんどの場合、パフォーマンスが高品質のクイックソートのパフォーマンスに近いマージソートアルゴリズムを使用したソートにより、O(n * log n)パフォーマンス(クイックソートではなく)と安定性(クイックソート)。 安定したソートは、ソート時に同じ要素の順序を変更しないものです
binarySearch (リスト、オブジェクト)バイナリ検索アルゴリズムを使用して、リスト内のアイテムを検索します。
リバース (リスト)すべてのリストアイテムを並べ替える
シャッフル (リスト)リスト内のすべてのアイテムをランダムにシャッフルします
fill (リスト、オブジェクト)リスト内の各アイテムを値で上書きする
コピー (リスト送信先、リスト送信元)あるリストを別のリストにコピーする
回転 (リストリスト、int距離)リスト内のすべてのアイテムを指定された距離だけ移動します。
replaceAll (リストリスト、オブジェクトoldVal、オブジェクトnewVal)ある値のすべての出現を別の値に置き換えます
indexOfSubList (リストソース、リストターゲット)ソースリストでターゲットリストが最初に現れるインデックスを返します
lastIndexOfSubList (リストソース、リストターゲット)ソースリスト内のターゲットリストの最後の出現のインデックスを返します
スワップ (リスト、int、int)指定された位置にある要素を交換します

Java 8では、ストリームApiなどのコレクションを操作する方法も導入されましたが、その使用例についてはセクション5で後述します。

10)さまざまなタイプのJDKコレクションは内部でどのように配置されますか
さまざまなタイプのJDKコレクションは内部でどのように配置されますか
収集内部デバイスの説明
配列リストこのコレクションは、配列の設定+リストのサイズを格納する変数です。 中だけ
新しい要素を追加する場所がないたびに再作成される配列。 で
コレクション内の要素を追加または削除する場合、メモリ全体でテール全体がシフトされます
新しい場所。 幸いなことに、容量を増やしながら、または追加/削除するときにアレイをコピーします
高速なネイティブ/システムメソッドによって生成される要素。 詳細が興味深い場合
この記事をご覧になることをお勧めします。
LinkedListコレクション内では、前の要素へのリンクを含む内部Nodeクラスが使用され、
次の要素と要素自体の値。 コレクションインスタンス自体にサイズとリンクが格納されます
コレクションの最初と最後の要素。 オブジェクトを作成することは、
パフォーマンスとメモリを集中的に使用するLinkedList
アナログよりもはるかに多くのメモリ。 通常、ArrayList、ArrayDequeryはパフォーマンスとメモリの最適なソリューションですが、まれなケース(リストの中央に頻繁に挿入され、リスト内のまれな動きが発生する)が役立つ場合があります(ただし、この場合はapacheからTreeListを使用する方が便利です)。 詳細が興味深い場合は、この記事をご覧になることをお勧めします。
ハッシュマップこのコレクションは、ハッシュテーブル上に構築されます。つまり、コレクション内には、コレクションの容量に等しい内部クラス(バケット)ノードの配列があります。 新しい要素を追加すると、そのハッシュ関数が計算され、キャパシティHashMapモジュロで除算されるため、配列内の要素の位置が計算されます。 この場所に要素がまだ保存されていない場合、追加された要素へのリンクを含む新しいNodeオブジェクトが作成され、配列内の目的の場所に書き込まれます。 この場所に既に要素が存在する場合(ハッシュ衝突が発生する場合)、Nodeは基本的に単純にリンクされたリストです。つまり、次の要素へのリンクが含まれます。リスト内のすべての要素をバイパスし、追加された要素と等しいかどうかを確認できますそのような一致が見つからなかった場合、新しいNodeオブジェクトが作成され、リストの最後に追加されます。 リンクリスト(バケット)の要素の数が8個を超える要素になると、代わりにバイナリツリーが作成されます。 ハッシュテーブルの詳細については、 wikiを参照してください(HashMapはチェーンメソッドを使用して衝突を解決します)。 HashMapデバイスの詳細が興味深い場合は、この記事を参照することをお勧めします。
ハッシュセットHashSetは単なるHashMapであり、値の代わりに偽のオブジェクトが書き込まれ、キーのみが重要です。 HashSet内には、HashMapコレクションが常に保存されます。
IdentityHashMapIdentityHashMapはHashMapに類似していますが、要素が等しいかどうかをチェックする必要がないため、
2つの要素の違い。 異なるオブジェクトを指します。 これのおかげで、
内部クラスNodeを取り除き、すべてのデータを1つの配列に格納し、衝突が発生する
適切な空きセルが見つかるまで検索されます( メソッド
オープンアドレッシング )ハッシュテーブルの詳細については、 wikiを参照してください
(IdentityHashMapはオープンアドレッシングメソッドを使用して衝突を解決します)
LinkedHashMap / LinkedHashSet内部構造はHashMapとほぼ同じですが、代わりに
内部クラスNode、TreeNodeを使用します。TreeNodeは前の値と次の値を知っています。
これにより、キーを追加する順序でLinkedHashMapをバイパスできます。 基本的にLinkedHashMap =
HashMap + LinkedList。 LinkedHashMapデバイスの詳細に興味がある場合は、この記事を参照することをお勧めします。
TreeMap / TreeSetこれらのコレクションの内部構造は、バランスの取れた赤黒のツリー上に構築され、
wikiで詳細を読む
弱点マップ内部では、通常のリンクではなく、すべてがHashMapのように整理されています
WeakReferenceが使用され、削除に必要な別のReferenceQueueキューがあります
弱いエントリ
EnumSet / EnumMapEnumSetとEnumMapは、HashSetやHashMapとは異なり、ビットベクトルと配列を使用して
データストレージをコンパクトにし、パフォーマンスを向上させます。 これらのコレクションの制限は
EnumSetとEnumMapは、1つのEnumの値のみをキーとして保存できます。


11)標準コレクションライブラリの他の有用なエンティティ
標準コレクションライブラリの他の有用なエンティティ
公式のコレクションガイドに含まれる他の有用なエンティティを見てみましょう
1) ラッパー実装 -機能を追加し、他の実装の動作を変更するためのラッパー。 統計的手法のみを使用してアクセスします。
  • Collections.unmodifiableInterface-指定されたコレクションに基づいて変更不可能なコレクションを作成するためのラッパー。このコレクションを変更しようとするとUnsupportedOperationExceptionがスローされます
  • Collections.synchronizedInterface-指定されたコレクションに基づいて同期コレクションを作成します。ベースコレクションへのアクセスがこの関数によって返されるコレクションラッパーを介している限り、スレッドセーフが保証されます。
  • Collections.checkedInterface-型チェック付きのコレクションを動的に返します
    (実行時)、つまり、指定されたコレクションのタイプセーフビューを返します。
    間違った型の要素を追加しようとすると、ClassCastExceptionがスローされます。 使用する場合
    汎用JDKメカニズムは、コンパイルレベルで型のコンパイルをチェックしますが、このメカニズム
    バイパスすることができ、動的な型チェックではこの機会を利用できません。


2) アダプタの実装 -この実装は、1つのコレクションインターフェイスを別のコレクションインターフェイスに適合させます
  • newSetFromMap(Map)-Setインターフェースの実装からMapインターフェースの実装を作成します。
  • asLifoQueue(Deque)-Dequeからのビューを、Last In First Out(LIFO)の原理に基づいたキューとして返します。

3) 便利な実装 -コレクションインターフェイスの高性能な「ミニ実装」。
  • Arrays.asList-配列をリストとして表示できます
  • emptySet、emptyList、およびemptyMap-空のセット、リスト、または空の未変更の実装を返します。
    地図
  • singleton、singletonList、singletonMap -1つの指定されたオブジェクト(または1つのキーと値の関係)を含む変更不可能なセット、リスト、またはマップを返します
  • nCopies-指定されたオブジェクトのn個のコピーを含む変更不可能なリストを返します

4) インターフェイスの抽象的な実装 -コレクションの特定の実装の作成を簡素化するための共通機能(コレクションのスケルトン)の実装。
  • AbstractCollection-セットでもリストでもないコレクション(「バッグ」やマルチセットなど)のCollectionインターフェイスの抽象実装。
  • AbstractSet -Setインターフェイスの抽象的な実装。
  • AbstractList-配列などのランダムアクセスを許可するリストのListインターフェイスの抽象的な実装。
  • AbstractSequentialList-リンクリストなどのシーケンシャルアクセスベースのリスト用のListインターフェイスの抽象的な実装。
  • AbstractQueue-抽象キューの実装。
  • AbstractMap-抽象マップの実装。

4) インフラ
  • イテレータ -通常の列挙インターフェイスに似ていますが、優れた機能を備えています。
  • Iterator -Enumerationインターフェイス機能に加えて、コレクションからアイテムを削除する機能が含まれます。
  • ListIteratorはリストに使用されるイテレーターで、双方向の反復、要素の置換、要素の挿入、インデックスによる取得など、通常のイテレーターインターフェイスの機能を追加します。

5)注文
  • 比較可能 -それらを実装するクラスの自然なソート順を定義します。 この順序は、ソート方法で使用するか、ソートされたセットまたはマップを実装するために使用できます。
  • Comparator-順序関係を表します。これは、ソートされたセットまたはマップ内のリストまたはメイン順序をソートするために使用できます。 型の自然な順序をオーバーライドしたり、Comparableインターフェイスを実装していない型のオブジェクトを順序付けたりできます。

6)ランタイム例外
  • UnsupportedOperationException-このエラーは、コレクションが呼び出された操作をサポートしていない場合にスローされます。
  • ConcurrentModificationException-イテレータまたはリストイテレータをスローします。イテレータが基づいているコレクションが(アルゴリズムの場合)反復中に予期せず変更された場合、メインリストが予期せず変更された場合はリストに基づくビューもスローします。

7)パフォーマンス
  • RandomAccess-リストをマークするマーカーインターフェイスは、位置によって要素にすばやく(通常は一定時間)アクセスできるようにします。 これにより、シーケンシャルアクセスと位置アクセスの選択に関するこの動作を考慮したアルゴリズムを生成できます。

8)配列を操作するためのユーティリティ
  • 配列 -配列のハッシュをソート、検索、比較、サイズ変更、取得するための静的メソッドのセット。 また、配列を文字列に変換し、配列をプリミティブまたはオブジェクトで埋めるためのメソッドも含まれています。



この記事の詳細については、たとえば、コレクションの操作に関するセクションや、グアバ、Apache Commons、Eclipse(GS Collections)のコレクションの使用に関する質問などです。

II。 ストリームAPI


関数型プログラミング、ラムダ、およびJava 8で追加された機能もインタビューで非常に一般的です。 このチートシートで詳細に説明しましたが、ここでは簡単な説明のみを行います。

ストリームAPI
Stream Api
Stream API . stream Java 8 , .

Stream Api SQL, :
Integer sumOddOld = 0; for(Integer i: collection) { if(i % 2 != 0) { sumOddOld += i; } } 

次に、Stream Apiを使用して、機能的なスタイルでこの問題を解決できます。
  Integer sumOdd = collection.stream().filter(o -> o % 2 != 0).reduce((s1, s2) -> s1 + s2).orElse(0); 

さらに、Stream Apiを使用すると、余分なコードなしでstream()をparallelStream()に変更するだけで問題を並列で解決できます。
  Integer sumOdd = collection.parallelStream().filter(o -> o % 2 != 0).reduce((s1, s2) -> s1 + s2).orElse(0); 

セマフォ、同期、デッドロックのリスクなどなく、すでにコードを並列化します。

I.ストリームを作成する方法


ストリームを作成する方法
ストリームを作成するいくつかの方法を次に示します。
ストリームを作成する方法作成テンプレート
1.クラシック:コレクションからストリームを作成するコレクション。 ストリーム ()
 Collection<String> collection = Arrays.asList("a1", "a2", "a3"); Stream<String> streamFromCollection = collection.stream(); 
2.値のストリームを作成するStream.ofvalue1 、... valueN
 Stream<String> streamFromValues = Stream.of("a1", "a2", "a3"); 
3.配列からストリームを作成するArrays.stream配列
 String[] array = {"a1","a2","a3"}; Stream<String> streamFromArrays = Arrays.stream(array); 
4.ファイルからストリームを作成します(ファイルの各行は、ストリームの個別の要素になります)Files.linesファイルへのパス
 Stream<String> streamFromFiles = Files.lines(Paths.get("file.txt")) 
5.文字列からストリームを作成する「ストリング」。 文字 ()
 IntStream streamFromString = "123".chars() 
6. Stream.builderを使用するストリーム ビルダー ()。 追加 (...).... ビルド ()
 Stream.builder().add("a1").add("a2").add("a3").build() 
7.並列ストリームの作成コレクション。 parallelStream ()
 Stream<String> stream = collection.parallelStream(); 

8. Stream.iterateを使用して無限のストリームを作成する
Stream.iteratestart_condition、generation_expression
 Stream<Integer> streamFromIterate = Stream.iterate(1, n -> n + 1) 
9. Stream.generateを使用して無限ストリームを作成しますStream.generategeneration_expression
 Stream<String> streamFromGenerate = Stream.generate(() -> "a1") 


II。 ストリーミング方法


Java Stream APIは、2種類のメソッドを提供します。
1.パイプライン-別のストリームを返します。つまり、ビルダーとして機能し、
2.ターミナル-コレクション、プリミティブ、オブジェクト、オプションなどの別のオブジェクトを返します。

パイプラインとターミナルメソッドの違い
一般的なルール :ストリームには任意の数のパイプラインコールと最後に1つのターミナルを含めることができますが、すべてのパイプラインメソッドは遅延して実行され、ターミナルメソッドが呼び出されるまで、スレッドまたはRunnableオブジェクトを作成するように実際にアクションは発生しませんただし、startを呼び出さないでください。

一般に、このメカニズムはSQLクエリの構築に似ており、ネストされたSelectはいくつあってもかまいませんが、結果は1つだけです。 たとえば、式collection.stream()。Filter((s)-> s.contains( "1"))。Skip(2).findFirst()、filterおよびskipはパイプライン処理され、findFirstはターミナルであり、オブジェクトを返します。オプションで、これでストリームの操作が終了します。

2.1ストリームを操作するためのパイプライン化されたメソッドの簡単な説明


詳細
ストリーム方式説明
フィルターレコードをフィルタリングし、条件に一致するレコードのみを返しますcollection.stream()。filter( "a1" ::等しい).count()
飛ばすN個の最初の要素をスキップできますcollection.stream()。skip(collection.size()-1).findFirst()。orElse( "1")
明確な重複のないストリームを返します(equalsメソッドの場合)collection.stream()。distinct()。collect(Collectors.toList())
地図各ストリーム項目を変換しますcollection.stream()。map((s)-> s + "_1")。collect(Collectors.toList())
のぞく同じストリームを返しますが、ストリームの各要素に関数を適用しますcollection.stream()。map(String :: toUpperCase).peek((e)-> System.out.print( "、" + e))。
collect(Collectors.toList())
限界選択を特定の数の最初の要素に制限できます。collection.stream()。limit(2).collect(Collectors.toList())
ソート済み自然な順序で、またはComparatorを設定して、値を並べ替えることができますcollection.stream()。sort()。collect(Collectors.toList())
mapToInt
mapToDouble
mapToLong
mapに類似していますが、数値ストリーム(つまり、数値プリミティブのストリーム)を返しますcollection.stream()。mapToInt((s)-> Integer.parseInt(s))。toArray()
flatMap
flatMapToInt
flatMapToDouble
flatMapToLong
mapに似ていますが、1つの要素から複数を作成できますcollection.stream()。flatMap((p)-> Arrays.asList(p.split( "、"))。stream())。toArray(String [] :: new)


2.2ストリームを操作する端末方法の簡単な説明


詳細
ストリーム方式説明
findFirstストリームの最初の要素を返します(オプションを返します)collection.stream()。findFirst()。orElse( "1")
findAnyストリームから適切なアイテムを返します(オプションを返します)collection.stream()。findAny()。orElse( "1")
集めるコレクションおよびその他のデータ構造の形式での結果の表示collection.stream()。filter((s)-> s.contains( "1"))。collect(Collectors.toList())
数えるストリーム内の要素の数を返しますcollection.stream()。filter( "a1" ::等しい).count()
anyMatch少なくとも1つの要素について条件が満たされる場合、trueを返しますcollection.stream()。anyMatch( "a1" ::等しい)
なし一致いずれかの要素について条件が満たされない場合、trueを返しますcollection.stream()。noneMatch( "a8" ::等しい)
allMatchすべての要素について条件が真の場合、真を返しますcollection.stream()。allMatch((s)-> s.contains( "1"))
コンパレーターを条件として使用して、最小要素を返しますcollection.stream()。min(String :: compareTo).get()
最大コンパレーターを条件として使用して、最大要素を返しますcollection.stream()。max(String :: compareTo).get()
forEach各ストリームオブジェクトに関数を適用します;並列実行での順序は保証されませんset.stream()。forEach((p)-> p.append( "_ 1"));
forEachOrdered各ストリームオブジェクトに関数を適用します;要素の順序を保持すると、list.stream()。forEachOrdered((p)-> p.append( "_ new"));
toArrayストリーム値の配列を返しますcollection.stream()。map(String :: toUpperCase).toArray(String [] :: new);
減らすコレクション全体で集計関数を実行し、単一の結果を返すことができますcollection.stream()。reduce((s1、s2)-> s1 + s2).orElse(0)

メソッドfindFirst、findAny、anyMatchは短絡メソッドです。つまり、ストリームのバイパスは、元のストリーム全体をバイパスせずに、適切な要素をできるだけ早く見つけるように編成されます。

2.3数値ストリームの追加メソッドの簡単な説明


詳細
ストリーム方式説明
合計すべての数値の合計を返しますcollection.stream()。mapToInt((s)-> Integer.parseInt(s))。sum()
平均的すべての数値の算術平均を返しますcollection.stream()。mapToInt((s)-> Integer.parseInt(s))。average()
mapToObj数値ストリームをオブジェクトストリームに変換しますintStream.mapToObj((id)->新しいキー(id))。toArray()


2.4他のいくつかの便利なストリームメソッド


詳細
ストリーム方式説明
isParallelストリームが並列かどうかを調べる
平行並列ストリームを返します。ストリームが既に並列である場合、それ自体を返すことができます
シーケンシャル順次ストリームを返します。ストリームが既にシリアルである場合、それ自体を返すことができます



上記の内容が明確でない場合は、別の記事をご覧になることをお勧めします

III。 連載


このトピックについても、インタビューで頻繁に質問があります。

読む...
主なクラス:

1. ObjectOutput-オブジェクトの「手動」シリアル化のためのストリームインターフェイス。 メインメソッドwriteObject(オブジェクト)-ストリームへのオブジェクトの書き込み、書き込み(...)-配列の書き込み、フラッシュ()-ストリームの保存。 ObjectOutputStreamの基本的な実装

2. ObjectInput-シリアル化後にオブジェクトを手動で復元するためのストリームインターフェイス。 メインのreadObject()メソッドはオブジェクトを読み取り、skipはnバイトをスキップしています。 ObjectInputStreamのメイン実装。

3. Serializable-オブジェクトのシリアル化がオブジェクトの状態を自動的に保存および復元するインターフェイス。

このインターフェイスを実装するオブジェクトは次のことを行う必要があります。
1.最も近い非シリアル化可能な祖先からの引数なしでコンストラクターにアクセスできます。
serialPersistentFieldsおよびtransientを使用して、シリアル化可能および非シリアル化可能フィールドをマークします。

また、そのようなクラスはメソッドを実装できます(オプション):
1. writeObject-シリアル化を制御するか、追加情報を書き込みます。
2. readObject-逆シリアル化の制御用、
3. writeReplace-オブジェクトを置き換えます。 すでにストリームに記録されています
4. readResolve-ストリームから復元するオブジェクトの定義。

4. Externalizable-オブジェクトの保存と復元の機能をプログラマが定義した機能に委任するインターフェイス。 Externalizableは、Serializableインターフェイスを拡張します。

このインターフェイスを実装するオブジェクトは次のことを行う必要があります。
1.引数なしのパブリックコンストラクターがある。
2.読み取りおよび書き込み用にそれぞれwriteExternalおよびreadExternalメソッドを実装します。
3.また、そのようなクラスはメソッドを実装できます(オプション):
-writeReplace-オブジェクトを置き換えます。 すでにストリームに記録されています
-readResolve-ストリームから復元するオブジェクトの定義。

IV。 数学


このトピックに関する質問は非常にまれです(より正確には、このトピックに関する単一の質問を覚えていません)が、念のため、それらについて覚えておく価値があります。

読む...
Java SEで数学計算を実装するためのクラスはわずかです。
1. java.lang.Math - StrictMathとは異なり、多数の静的数学関数を含むクラス -数学関数は、同じ引数に対して常に正確に同じ値を返すとは限りません(実数の値は非常に小さい値で異なる場合があります)。より良いパフォーマンスを達成します。

2. java.lang.StrictMath-多数の静的数学関数を含むクラス。 Mathとは異なり、1つの引数について、結果は常にまったく同じです。 数学にない類似体の機能が含まれています。

3. java.math.BigDecimalおよびjava.math.BigInteger-高い精度と寸法を必要とする数値を操作するためのクラス。

4. java.math.MathContext -BigDecimalまたはBigIntegerクラスで使用できる設定。

V.参照オブジェクト


しかし、参照オブジェクトについては疑問があり、開発者は非常にめったに使用されないため、開発者はそれらに浮かぶことがよくあります。 基本的に、これらは通常の「強力な」ポインタよりも柔軟なメモリ管理のためのクラスです。

読む...
さまざまな参照オブジェクトを作成できるクラス:

1. 参照 -類似オブジェクトの抽象クラス。

2. SoftReference-空きメモリがないことをガベージコレクターが検出すると、ソフトリンク、オブジェクトが削除されます。

3. WeakReference-弱いリンク。 次回パスすると、ガベージコレクターは、そのようなリンクからのみアクセスできるオブジェクトを削除します。 キャッシュおよび一時オブジェクトに使用されます。

4. PhantomReference-ファントムリンクを作成します。リンク自体は常にnullを返しますが、オブジェクトを削除する前に、リンクはReferenceQueueキューに置かれ、オブジェクトに関連付けられたリソースはこのキューをバイパスして解放できます。

5. ReferenceQueue-ガベージコレクターが参照するオブジェクトを削除したときにリンクが追加されるキュー。

VI。 正規表現


インタビューでは珍しいトピックですが、覚えておく価値があります。

正規表現を操作するための2つのメインクラスと1つのインターフェイスがあります。

1. パターン -マッチャーで使用されるコンパイル済み正規表現
マッチャー CharSequenceでコンパイル済みの正規表現(Patternクラス)を実行するためのクラス。

2. MatchResult -Matcherの結果を返すのに役立ちます

VII。 ロギング


また、このトピックに関する質問を覚えていませんが、SEで標準のログ記録を繰り返すことは依然として有用です。

読む...
基本的なロギングスキーム

画像

図からわかるように、ロギングの際、ロガーはフィルターを適用し、ハンドラーメッセージ(またはハンドラーのチェーン)を送信します。これは、フィルターを適用し、フォーマットし、メッセージを外部に送信します(コンソールに表示、ファイルに保存など)

各メッセージには、FINESTからSEVEREまでのレベル(レベルクラス)があり、

Java SEのロギングクラスの主なタイプ:

私、ハンドラー

Java SEにはいくつかのハンドラがあります。

1. StreamHandler -OutputStreamに書き込み、

2. ConsoleHandler - System.errへの書き込み(コンソール)、

3. FileHandler-ファイルに書き込み、

4. SocketHandler -TCPポートへの書き込み、

5. MemoryHandler-メモリにログを保存し、

II、フォーマッター

Java SEは、2種類のフォーマッターを提供します。

1. SimpleFormatter-人間が読み取れる形式、

2. XMLFormatter -XML構造のフォーマット

III。 サービスクラス

1. LogManager-LogManagerクラスは、すべてのシステムロガーとそのプロパティに関する情報を保存します。

2. LoggingPermissionクラスは、ロガーなどを変更する権限を決定するために使用されます。 SecurityManagerの場合。

3. Loggerクラスを使用してメッセージを記録し、LogRecordクラスを使用して、ロギングフレームワークとハンドラー間でメッセージを転送します。

Viii。 並行性


読む...
可能な質問

  1. main()がJavaプログラムで最後に終了するスレッドであることを確認するにはどうすればよいですか?
  2. スレッドはどのように相互作用しますか?
  3. スレッド通信メソッドがObjectクラスにあるのは、wait()、notify()、notifyAll()がなぜですか?
  4. 同期メソッドまたはブロックからwait()、notify()、notifyAll()メソッドを呼び出す必要があるのはなぜですか?
  5. スレッドスリープ()およびyield()メソッドが静的なのはなぜですか?
  6. Javaでスレッドセーフを提供する方法は?
  7. Javaのvolatileキーワードとは
  8. 推奨されるSynchronizedメソッドまたはSynchronizedブロックは何ですか?
  9. ThreadLocalとは何ですか?
  10. スレッドグループとは何ですか? それらを使用すべきですか?
  11. Java Thread Dumpとは何ですか、Java Thread Dumpプログラムを取得する方法は?
  12. Javaタイマークラスとは何ですか? 特定の時間間隔後にタスクを開始する方法は?
  13. スレッドプールとは何ですか? Javaでスレッドプールを作成する方法
  14. Threadクラスのrun()メソッドがオーバーライドされない場合はどうなりますか?


スレッド


読む...
可能な質問
  1. プロセスとスレッドの違いは何ですか?
  2. マルチスレッドプログラミングの利点は何ですか?
  3. ユーザースレッドとデーモンスレッドの違いは何ですか?
  4. Javaでスレッドを作成する方法は?
  5. スレッドのさまざまな条件は何ですか?
  6. Threadクラスでrun()メソッドを呼び出すことは可能ですか?
  7. 特定の時間スレッドを停止するにはどうすればよいですか?
  8. スレッドの優先度とは何ですか?
  9. スレッドスケジューラとタイムスライシングとは何ですか?
  10. マルチスレッドのコンテキスト切り替えとは何ですか?
  11. Javaでデーモンスレッドを作成する方法は?



プロセスとスレッド -違いは、プロセスは独立したアプリケーション(OSが制御)であり、スレッドはJavaでの並列実行用の独立した軽量スレッド(JVMとプログラマーが制御)であるということです。

マルチスレッドプログラミングの利点 -正しく記述されたマルチスレッドアプリケーションは、複数のプロセッサの使用により高速に実行され、スレッドの1つがリソースの受信を待機している間、プロセッサはアイドル状態になりません。

デーモンスレッドはバックグラウンドで実行されるスレッドであり、JVMはシャットダウンするために終了するのを待つ必要はありません。 setDaemon(true)を使用して任意のスレッドをデーモンにすることができますが、このメソッドは、startでスレッドを開始する前に呼び出す必要があります。

ThreadGroupは、スレッドグループに関する情報を提供する廃止されたAPIです。 現在、使用は推奨されていません。
Java Thread Dump-すべてのJVMスレッドの状態に関する情報を取得し、デッドロック状態またはその他のマルチスレッドの問題を検索します。 Java Thread Dumpを生成する方法は多数あります。たとえば、Java 8では、jcmdコマンドPID file_name for dumpまたはkill -3 PIDを使用して、または任意のプロファイラー(VisualVM、jstackなど)を使用して生成できます。

Java SEでスレッドを作成する方法:

1. Runnableインターフェイスを実装するクラスを作成し、runメソッドを実装し、startメソッドでスレッドを開始します。runメソッドが正しく呼び出されないことに注意してください。この場合、新しいスレッドは作成されません(動作します)。

2. Threadクラスから継承クラスを作成し、runメソッドをオーバーライドし、startメソッドでスレッドを開始します。 方法1とは異なり、Threadクラスは既に定義された多数のメソッドを提供しますが、インターフェースを実装すると柔軟性が高まります(Javaでは多重継承ができないため)。

3.エグゼキュータを使用します。これにより、メソッド1-2の高レベルの類似物が提供されます。

スレッドメソッド

1. スリープ -指定した時間、またはスレッドが中断されなかった瞬間まで実行を停止します。

2. 割り込み -終了する必要があることをスレッドに送信します(スレッドのソフト割り込み)。スレッドはこの信号の処理をサポートする必要があります(定期的にThread.interruptedフラグを調べることにより)。

3. 結合 -別のスレッドの終了またはスレッド停止信号を待ちます。

4. synchronized-メソッドまたは同期ブロックの前のキーワード(リンク){...}

5. 待機 -スレッドを停止し、通知またはnotifyAllの呼び出しを待機します。

6. 停止 (廃止)-スレッドをすぐに停止します。共有変数の状態が誤った状態になる可能性があるため、スレッドを使用しないことを強くお勧めします。

7. サスペンド (非推奨)および再開(非推奨)-ストリームを一時的に停止して復元します。 非常に頻繁にデッドロックが発生するため、使用することはお勧めしません。「y(一時停止中にリソースはブロックされたままになります)

8. setUncaughtExceptionHandler-このストリームに例外ハンドラーを追加する機能。

スレッドの特別な変数:

ThreadLocal -1つのスレッドのみのローカル変数。各スレッドはその値を参照します。
volatileは、すべてのスレッドがメモリ(ヒープ)から読み取り、キャッシュしない変数をマークするキーワードです。 これはすべての同期の問題を解決するわけではありませんが、通常の変数ストリームにはキャッシュする権利があり、長時間更新する権利はまったくありません。 複数のスレッドでより信頼性の高い作業を行うには、アトミック変数または同期ブロックを使用する必要があります。



アトミック操作とクラス


読む...
可能な質問
  1. Javaのどのタイプのデータは、マルチスレッドの観点から読み取り/書き込み操作にとってアトミックですか?
  2. アトミック操作とは何ですか?
  3. Java Concurrency APIのどのアトミッククラスを知っていますか?



アトミック操作 -実行される操作または完全に実行されない操作。

次のアトミック操作:

1.リンクおよびプリミティブ型の読み取りと書き込み(longおよびdoubleを除く)

2. volatileとマークされたすべての変数の読み取りと書き込み(書き込みと読み取りは発生前関係として、つまり保証された方法で実行されるため)、

最小化された同期とエラーで異なるスレッドに共通の変数を簡単に作成するための原子変数。 詳細については、 javadocを参照してください



活力の問題



読む...
可能な質問
  • デッドロックとは何ですか? デッドロックを分析して回避する方法は?
  • デッドロック以外にマルチスレッドの問題はありますか?
  • 飢vとライブロックとは何ですか?



マルチスレッドアプリケーションのパフォーマンスの問題(ライブネスの問題):

1. デッドロック-2つのスレッドで2つの異なるリソースをブロックし、リリースを無限に待機します。

2、 飢Star-スレッドの1つが頻繁に使用されるリソースを長時間ブロックし、残りのスレッドがリリースを待機する

3. ライブロック-2つのスレッドが相互のアクションに応じて同じリソースを解放して占有する場合、必要なリソースをすべて取得して実行を継続することはできません。


不変オブジェクト定義戦略


読む...
不変オブジェクトを作成するには、次の規則に従う必要があります。

1.「セッター」メソッドを提供しないでください。すべてのフィールドは最終的なプライベートでなければなりません。

2.継承者がメソッドをオーバーライドしないようにします。これは、クラスをfinalとして定義する最も簡単な方法です。 より複雑な方法は、コンストラクタをプライベートとして定義し、ファクトリメソッドを使用してオブジェクトを作成することです。

3.可変オブジェクトへのリンクを持つフィールドを含むフィールドでは、変更を許可しないでください。

4.可変オブジェクトを変更するメソッドを提供しないでください。

5.必要に応じて、可変オブジェクトへのリンクを与えないでください。コピーを作成し、オブジェクトのコピーを転送します。

高レベルのマルチスレッドツール


読む...
可能な質問
  1. Java Concurrency APIのLockインターフェースとは何ですか? 同期と比較した場合の利点は何ですか?
  2. Executors Frameworkとは何ですか?
  3. BlockingQueueとは何ですか? ブロッキングキューを使用して生産者と消費者の問題を回避する方法
  4. CallableとFutureとは何ですか?
  5. FutureTaskクラスとは何ですか?
  6. Concurrent Collectionクラスとは何ですか?
  7. Executorsクラスとは何ですか?
  8. Java 8には、同時実行APIのどのような改善点がありますか?




読む...
同期ブロックなどとは異なり , J8SE .

:

1. Task scheduling framework ( Executor) — , ..

2. ForkJoinPool — , Executors ExecutorService .. , ( work-stealing).

3. Lock — ,

4. Executors ,

5. — , (Concurrent Collection, BlockingQueue, java.util.concurrent .),

6. Atomic . javadoc

7. ThreadLocalRandom ( JDK 7) .

IX。 例外とエラー


読む...
  • unchecked throws?
  • , throws ?
  • checked unchecked ?
  • checked unchecked ?
  • Exception Error?
  • Exception?
  • Error Throwable?



Java :
1. Error — , , , OutOfMemoryError. catch, .
2. Exception — , . :
— checked — Exception, catch throws ( Exception throws )
— unchecked — Exception, throws ,

:
1. Throwable — exception
1.1 Error — , ,
1.2 Exception — exception, checked exception ( RuntimeException)
1.2.1 RuntimeException — — unchecked exception,

Exception'. Exception , , NullPointerException ( , - ), „“ IllegalArgumentException ( , ).

X.行


読む...
...
  1. String Java? String — ?
  2. String ?
  3. ?
  4. SubSequence String?
  5. java-?
  6. char ?
  7. String ?
  8. switch ?
  9. String, StringBuffer StringBuilder?
  10. String immutable final Java
  11. java?
  12. Char String ?
  13. , Java?
  14. String Pool?
  15. string ()?
  16. Java?
  17. String HashMap Java?



String , . , (immutable) (final), ( , , ), ( immutable, ), , , Map, immutable .

String — „abc“, new (new String(»abc")) , StringBuffer StringBuilder.

String Pool (, ). C intern() .

StringBuffer StringBuilder , , StringBuffer , StringBuilder — , — StringBuilder .


ご清聴ありがとうございました。 他のチートシートは私のプロフィールで見つけることができます。

Source: https://habr.com/ru/post/J314386/


All Articles