Java配列の全て ─ 仕組み・メモリ・共変性・試験の急所まで完全理解
Javaの配列をゼロから完全解説。JVMメモリモデル、オブジェクトとしての正体、共変性の罠、多次元配列、Arraysユーティリティ、Silver試験頻出パターンまで網羅。
Javaの配列をゼロから完全解説。JVMメモリモデル、オブジェクトとしての正体、共変性の罠、多次元配列、Arraysユーティリティ、Silver試験頻出パターンまで網羅。
JavaのArrayListをゼロから完全解説。Collections Framework誕生の背景、内部の配列リサイズ戦略、ジェネリクス・オートボクシング、主要メソッド、Silver試験頻出パターンまで網羅。
なぜ ArrayList のインデックスアクセスは速くて HashMap の検索も速いのか。なぜ二重ループは危険なのか。Big-O 記法を「データ量が増えたとき何倍遅くなるか」という感覚で理解する。
ASCII から Unicode へ、UTF-8 と UTF-16 の違い、Java の char が 65535 文字しか表せない理由、絵文字が 2 つの char になるサロゲートペア。文字コードの歴史を辿って Java の文字処理を根本から理解する。
RAM とは何か、CPU はどうメモリを使うか、OS はどう管理するか、プロセスのメモリマップとは何か。スタックとヒープの「物理的な正体」から、Java/JVM の理解に繋がる根本的なコンピュータメモリ入門。
「とりあえず private にする」から脱却する。情報隠蔽の原則がなぜ生まれたか、public フィールドの何が問題か、getter/setter をただ生やすアンチパターン、イミュータブル設計との関係を解説。
純粋関数・副作用なし・イミュータブルデータとはどういう考え方か。オブジェクト指向と何が違うのか。Java 8 でラムダ・Stream が導入された背景と、関数型の考え方がコードをどう変えるかを解説。
なぜ Effective Java は「継承よりコンポジション」と言うのか。is-a と has-a の違い、深い継承ツリーが壊れる理由、コンポジションへの書き換え方を具体例で解説。
前置/後置インクリメントの挙動・2の補数による整数表現・オーバーフローの正体・浮動小数点の精度問題を、ビットとメモリの視点から解説。Java Silver 頻出の「なぜ?」を暗記ではなく構造から理解する。
ArrayList は内部的に配列、LinkedList はノードの連鎖、HashMap はハッシュ値とバケット。各コレクションのメモリ構造を知ると、O(1)/O(n) の計算量が体感で理解でき、実務での選択ミスがなくなる。
「Write once, run anywhere」「型安全性」「GCによる自動メモリ管理」「オブジェクト指向の徹底」。Java の各設計判断がなぜそうなったのかを、C/C++ の教訓と1990年代のソフトウェア危機から読み解く。
例外はオブジェクト。スタックトレースはスタックのスナップショット。finally が return より強い理由。try-with-resources が AutoCloseable を呼ぶ仕組み。例外の構造をメモリから理解する。
スタックフレーム・ヒープ・Metaspace・GCルート・世代別GC・Minor/Full GC まで、簡単なJavaコードの実行に合わせてメモリの挙動を1ステップずつ追う初学者向け完全解説。
ラムダ式はなぜ匿名クラスより軽いのか。なぜ外側の変数は effectively final でなければならないのか。クロージャのキャプチャという概念をメモリの視点から解説する。
「文法は読めるが内部で何が起きているかわからない」状態から脱却するための、JVMメモリモデルを軸とした体系的解説。Integer キャッシュ・String pool・== と equals の「なぜ」を暗記ではなく構造で理解する。
親型の変数に子のインスタンスを入れてメソッドを呼ぶと、なぜ子のメソッドが動くのか。仮想メソッドテーブル(vtable)・動的ディスパッチ・instanceof・ClassCastException をメモリ構造から解説。
Stream の3大性質「遅延評価・使い捨て・元データ不変」が実際どういう意味かを、パイプラインの組み立てと実行タイミングから解説。終端操作が来るまで何も起きない理由と、それによる最適化の仕組み。
JDBC接続の基本から、ClassNotFoundException/SQLException/タイムアウトなどよくあるエラーの原因と解決方法、コネクションプールの正しい使い方まで解説します。
Singleton、Factory、Builder、Observer、Strategyなど、Javaで頻出するデザインパターンを実例コード付きで解説します。
System.out.println をやめてSLF4J+Logbackに移行する方法、ログレベルの使い分け、MDCを使ったリクエストID付与、ログローテーション設定を解説します。
Java GCの仕組み(GC世代、G1GC/ZGC/SerialGC)、GCログの読み方、メモリチューニングの具体的な手順を解説します。
Javaのスレッド基礎、ExecutorServiceによるスレッドプール、CompletableFutureによる非同期処理、スレッドセーフの実現方法を解説します。
Optional の正しい使い方と、isPresent()+get()を使うアンチパターン、map/flatMap/orElseGet/ifPresentOrElseの使い方を解説します。
List/Set/Map/Queueの使い分け、ArrayList vs LinkedList、HashMap vs TreeMapの性能差、スレッドセーフなコレクションを解説します。
インターフェースと抽象クラスの違い、default メソッド、sealed interface、いつどちらを使うべきかを実例で解説します。
try-catchの書き方、検査例外と非検査例外の使い分け、カスタム例外の作り方、try-with-resourcesまで解説します。
Java 8で導入されたLambda式の構文、関数型インターフェース(Function/Predicate/Consumer/Supplier)、メソッド参照を実例で解説します。
Java Genericsの基本から、extends/superによる境界型パラメータ、ワイルドカード、型消去まで実例を交えて解説します。
JavaのNullPointerExceptionの原因パターンを分類し、Java 14以降のHelpful NullPointerExceptionsやOptionalを使った予防法まで解説します。
Java 8で導入されたStream APIの基本操作から、collectors、flatMap、並列ストリームまで実例で解説します。
java.lang.OutOfMemoryErrorの種類ごとの原因と対処法を解説します。ヒープ、Metaspace、スタックの問題を網羅。