Javaにおけるデータベース接続とトランザクション、スレッドの関係性

SpringはJava界の代表的なフレームワークであり、現在ではコンテナ管理の事実上の標準となっている。IoCやAOPに加え、特に重要な機能として「データベーストランザクション管理」が挙げられる。これを理解するには、いくつかの基礎概念を押さえる必要がある。本シリーズでは以下の観点から深掘りしていく: java.sql.Connectionの特性、トランザクション表現、およびJav ...

7月26日 21:19 投稿

MongoTemplateの主な利用方法

MongoTemplateの公式ドキュメント: https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo.aggregation.supported-aggregation-operations 1. 登録・削除・更新・検索操作 ネイティブMongoDB: Queryオブジェクト Queryオブジェクトを作成(すべての条件を格納する)、その後Criteriaオブジェクトを作成(条件を構築する) 精確な条件:crit ...

7月26日 19:40 投稿

FlowableワークフローエンジンとSpring Bootの連携実装

FlowableワークフローエンジンとSpring Bootの連携実装 動作環境 JDK 11 Spring Boot 2.7.6 Flowable 6.8.0 MySQL 8.0.27 BPMNプロセスの作成 1. オンラインフロー図作成ツールの利用 簡単な休假申請プロセスをツールで描画します。ツール:http://www.bpmnmodeler.com/ 2. 完成したプロセス定義XML <?xml version="1.0" encoding="UTF-8"?> <definition ...

7月26日 17:09 投稿

Javaアルゴリズム:動的計画法による0/1ナップサック問題の解法

ナップサック問題は、有限の容量を持つバッグにどの物品を詰めるかを最適化する古典的なアルゴリズム問題です。特に0/1ナップサック問題は、各物品をバッグに入れるか入れないかの二択しかない場合を指します。 問題設定: 3つの物品があります: 物品A:価値1000、重量1kg 物品B:価値2000、重量4kg 物品C:価値1500、重量3kg バッグの容量は4kgで、この中に詰められる ...

7月26日 16:45 投稿

スライディングウィンドウ(Sliding Window)アルゴリズムのパターンと実装まとめ

非固定長スライディングウィンドウのテンプレート public int variableWindow(int[] nums) { Map<Integer, Integer> state = new HashMap<>(); // 適切なデータ構造を選択 int start = 0; int maxLen = 0; for (int end = 0; end < nums.length; end++) { // ウィンドウを拡大 // nums[end] を state に O(1) で追加 ...

7月26日 16:34 投稿

Java アノテーションの内部構造と処理機制の解説

アノテーションの技術的な正体 Java におけるアノテーションは、一見するとコメントのように見えますが、実際には特定のインターフェースを継承した特殊な型です。ソースコード上で付与された情報は、コンパイラによってバイトコード内の特定属性として記録されます。 // 定義の実際 public interface SystemConfig extends Annotation { String environment() default ...

7月26日 03:12 投稿

RunnableとCallableの違いを理解するためのThreadとFutureTaskの詳細解説

JavaにおけるRunnableとCallableの違いは、多くの場合面接で頻出する質問です。この記事では、これらのインターフェースの違いについて詳しく説明し、さらにその実装であるThreadやFutureTaskの内部動作を深掘りします。 RunnableとCallableの基本的な違い まず、それぞれのインターフェースを見てみましょう。 public interface Runnable { void run(); } publ ...

7月26日 02:03 投稿

開発効率を向上させるための実践的なヒント

既に定義されたAPIインターフェースに対して、なぜ開発が遅いのでしょうか?他の作業が挟まることもありますが、それでもなお遅いと感じるのは、思考の問題なのか、それともテクニックの問題なのでしょうか。 細心さを持ち、バグを減らそう! 同僚から圧縮ファイルのアップロード機能の実装を依頼され、以前作成した圧縮関数があったので、そのままコピー&ペーストしま ...

7月25日 23:28 投稿

JavaでExcelをエクスポートする際のエラー:[class xxx]に対するコンバーターが見つからない

エラーメッセージ: org.springframework.http.converter.HttpMessageNotWritableException: No converter for [class xxx] with preset Content-Type 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' 解決策 エラー内容は「指定されたContent-Typeに対応するコンバーターが見つからない」という意味です。この問題を解決するには以 ...

7月25日 21:50 投稿

Javaにおけるジェネリクスの理解と実践

ジェネリクスとは、クラス、インターフェース、メソッドの定義時にデータ型をパラメータ(型パラメータ)として受け取る仕組みです。この型パラメータは通常のデータ型のように扱え、変数宣言(メンバ変数、ローカル変数、メソッドパラメータを含む)や戻り値の型指定に使用できます。実際に型パラメータに割り当てられるデータ型は、使用時に指定した型となります。 ジェ ...

7月25日 19:24 投稿