Java 並行処理における LongAdder の内部構造と性能優位性

高並下におけるカウント処理の課題 JDK 1.8 において導入された LongAdder クラスは、マルチスレッド環境下でのカウンター処理を最適化するために設計された原子操作クラスです。従来の AtomicLong は CAS(Compare-And-Swap)命令を用いて非阻塞な原子性を実現しており、ロックベースの同期機構と比較して高性能ですが、極端に競合が激しいシーンでは性能低下が課題となり ...

6月14日 18:48 投稿

Map インターフェースの完全解説

Map インターフェースの概要 Map インターフェースは、キーと値のペアを管理するための双列コレクションです。Java では、Map インターフェースを実装するクラスとして以下が主に使用されます: HashMap (非スレッドセーフ) HashTable (スレッドセーフ) TreeMap (非スレッドセーフ) LinkedHashM ...

6月14日 00:13 投稿

Fastjsonのデシリアライゼーション脆弱性とその対策

Fastjsonのデシリアライゼーション機構 FastjsonはAlibabaが開発した高性能なJSON処理ライブラリで、JavaオブジェクトとJSON文字列間の相互変換をサポートしています。 基本的な動作原理 public class BasicExample { public static void main(String[] args) { String jsonStr = "{\"@type\":\"com.example.User\",\"username\":\"test\",\"age\":25}"; ...

6月13日 23:50 投稿

Javaリフレクションの基本と実践

Javaのリフレクション(Reflection)は、実行時にクラスやオブジェクトに関する情報を動的に取得・操作するための強力な機能です。これにより、コンパイル時には不明なクラスに対しても、そのフィールドやメソッドにアクセスしたり、インスタンスを生成したりできます。 Classオブジェクトの取得方法 リフレクションの中心となるのはjava.lang.Classクラスです。各クラス ...

6月13日 23:04 投稿

JavaとPythonにおける辞書の遅延初期化と値の更新

キーが存在しない場合にその値を動的に生成し、存在する場合は既存の値を操作する処理は、マップ構造を扱う際に頻出するパターンである。JavaとPythonでは、それぞれ異なるメカニズムでこのニーズを効率的に解決できる。 Java: computeIfAbsent の活用 従来の実装では、キーの存在確認と値の初期化を分けて記述していた。 import java.util.*; public class DictionaryEx ...

6月13日 22:56 投稿

Spring Boot による MCP サーバーの実装とカスタマイズ

MCP(Model Context Protocol)は、AI プラグイン(例:Cursor、Continue、VS Code 拡張)とバックエンドサービス間の標準化された通信プロトコルです。JSON-RPC 2.0 を基盤とし、HTTP、WebSocket、stdio のいずれかのトランスポートを用いてツール呼び出しやコンテキストリソースの取得を可能にします。本稿では、Spring Boot を用いた HTTP ベースの MCP サーバーの構築 ...

6月13日 21:58 投稿

Javaのスレッド制御におけるsleepとwaitの挙動の違い

Thread.sleepによる一時停止 Thread.sleep()は、現在実行中のスレッドを指定された時間だけ一時停止させる静的メソッドです。このメソッドの大きな特徴は、休眠中であってもオブジェクトのロック(モニター)を解放しない点にあります。そのため、同期的な処理の中で一時的に処理を遅延させたい場合や、単純なタイミング調整に利用されるのが一般的です。 以下の例では、別 ...

6月13日 21:23 投稿

LeetCode問題:最小反転操作回数

問題 2612. 最小反転操作回数 整数 n と、範囲 [0, n - 1] 内の整数 p が与えられます。これらは、長さが n でインデックスが 0 から始まる配列 arr を表します。この配列では、インデックス p の位置だけが 1 で、他のすべての要素は 0 です。 同時に、整数配列 banned も与えられます。この配列には、配列内のいくつかの位置が含まれています。banned の第 i 個 ...

6月13日 20:44 投稿

ストリームとファイルI/O

ストリームは、JDK 8から導入されたAPI(java.util.stream)で、コレクションや配列のデータを操作するために使用されます。このAPIはLambda式を大量に利用しており、コードが簡潔になり可読性が向上します。 ストリームの使用方法は以下の通りです。まず、データソースを取得し、そのストリームを取得します。その後、ストリーム内の様々なメソッドを使用してデータを処理 ...

6月13日 20:09 投稿

Java GUIプログラミング入門

Java GUIプログラミング入門 JavaにおけるGUI(Graphical User Interface)は、グラフィカルなインターフェースを通じてユーザーと対話する一般的なUI設計手法です。JavaのSwingやJavaFXなどのライブラリを利用することで、多様なインターフェースを簡単に作成し、豊富なインタラクティブな効果を実現できます。 GUIの基本概念 JavaでGUIインターフェースを作成するには、 ...

6月13日 18:30 投稿