- 1. 自動テストがないアプリケーションの構造を Clean Architecture の考え方を適用しテスト可能な構造に変える方法
- 2. checkstyleをコマンドラインから実行し、循環的複雑度のレポートをXML形式で作成する
- 3. Java用語ざっくり理解(Java SEとかJDKとか)
- 4. 日本語プログラミング言語 Mind Java C# で関数を介した整数カウントアップ実行時間を仲良く競う(Mind関数形式で再計測)
- 5. 日本語プログラミング言語 なでしこ Java C# で関数を介した整数カウントアップ実行時間を仲良く競う
- 6. 日本語プログラミング言語 プロデル Java C# で関数を介した整数カウントアップ実行時間を仲良く競う
- 7. javaのString.Intern()メソッドとパフォーマンス
- 8. 「取得」メソッドの命名では適切な動詞をチョイスしよう
- 9. アノテーションとサンプルコードまとめ
- 10. SpringMVCの大きな流れ
- 11. java 2次元配列
- 12. 日本語プログラミング言語 なでしこ Java C# で整数カウントアップ実行時間を仲良く競う
- 13. 【精選10問】B – Card Game for Twoを解いた
- 14. 日本語プログラミング言語 Mind Java C# で関数を介した整数カウントアップ実行時間を仲良く競う
- 15. Java HotSpot仮想マシンの汎用オプション
- 16. Spring BootとGridDBを使ったリアルタイムイベントトラッキング
- 17. UMLの読み方(初心者用)
- 18. GradleプロジェクトのJava17 -> 21にしたときにハマった
- 19. 日本語プログラミング言語 なでしこ Java C# でHello World実行時間を仲良く競う
- 20. 【Java】稼働率年間停止時間を相互に変換する
自動テストがないアプリケーションの構造を Clean Architecture の考え方を適用しテスト可能な構造に変える方法
# はじめに
## 記事を書くきっかけ
私はJavaで書かれたパッケージソフトの保守開発をしています。その一部には自動テストが存在しないアプリケーションがあり、変更後の動作確認が大変でした。近年、「[Clean Architecture 達人に学ぶソフトウェアの構造と設計](https://www.amazon.co.jp/Clean-Architecture-%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E6%A7%8B%E9%80%A0%E3%81%A8%E8%A8%AD%E8%A8%88-Robert-C-Martin/dp/4048930656)」という本を読み、特に「テスト可能な構造」の部分に感銘を受けました。そして、その考え方を自動テストが存在しないアプリケーションに適用し、自動テストができるようになりました。そのノウハウを公開することにより、同じような問題を抱えている人たちの助けになればと思い、記事を書
checkstyleをコマンドラインから実行し、循環的複雑度のレポートをXML形式で作成する
表題の通り、checkstyleをコマンドラインから実行し、循環的複雑度のレポートをXML形式で作成する手順を示します。
**① checkstyleのjarファイルの取得**
GitHubのcheckstyleレポジトリのリリースページからcheckstyleのjarファイルをダウンロードします。
https://github.com/checkstyle/checkstyle/releases
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/3ffb209b-8701-cb4f-3a85-7e4bf8d3a894.png)
**② 設定XMLファイルの作成**
以下のような設定XMLファイルを準備します。
“`xml:
Java用語ざっくり理解(Java SEとかJDKとか)# はじめに
Javaの環境構築でよく見かけるが意味を忘れやすい用語たちについて、情報を簡易的に整理しました。
経験者向けの記載粒度です。# Java SE (Java Platform, Standard Edition)
[公式サイト](https://www.oracle.com/jp/java/technologies/documentation.html)Javaプラットフォームの全体仕様。Javaというプログラミング言語の中心的な概念。
「Java 17」など呼ぶときの「Java」は「Java SE」を指すと考えれば良い。
Java SEは開発者へ提供する基本的な機能とAPIの仕様を定義している。
代表的なものは下記のとおり。
– if 文、for ループ、try-catch ブロックなどの制御構造や、クラス、インターフェース、継承、多態性などのオブジェクト指向プログラミングの概念。
– `class`キーワードや`public`キーワードといった予約語の機能
– `java.lang`や`java.util` をはじめとするコアライブラリ etc.# JVM
日本語プログラミング言語 Mind Java C# で関数を介した整数カウントアップ実行時間を仲良く競う(Mind関数形式で再計測)
# はじめに
日本語プログラミング言語 Mind とJava C# とで関数呼び出しを介した整数カウントアップの反復実行時間を仲良く競い合わせてみます。いわゆるファンクションコールのオーバーヘッドとはどんなものなのかを切り分けます。ただし[前回の記事](https://qiita.com/mylifewithviolin/items/4ae2e162b90db9f48281)ではMindの場合、関数で比較といっても関数形式ではない処理単語形式で実行しておりましたので、今回念のため関数形式に書き換えて再計測してみました。## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
Mind Version 8.07 for Windows
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz## この記事内容の保証
※この記事の実行
日本語プログラミング言語 なでしこ Java C# で関数を介した整数カウントアップ実行時間を仲良く競う
# はじめに
日本語プログラミング言語 なでしこ とJava C# とで関数呼び出しを介した整数カウントアップの反復実行時間を仲良く競い合わせてみます。いわゆるファンクションコールのオーバーヘッドとはどんなものなのかを切り分けます。なでしこワンはレガシーかもしれませんのでなでしこ3の検証を急ぎ来ます。本記事筆者のあくまで興味本位の調査で、各言語の優劣を評価するものではありませんので念のため。## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
nadesiko version 1.588 for Windows
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz## この記事内容の保証
※この記事の実行結果は参考情報です。実行環境に大きく依存します。# お題のソースコード
#### Java
“`Java:main
日本語プログラミング言語 プロデル Java C# で関数を介した整数カウントアップ実行時間を仲良く競う
# はじめに
日本語プログラミング言語 プロデル とJava C# とで関数呼び出しを介した整数カウントアップの反復実行時間を仲良く競い合わせてみます。いわゆるファンクションコールのオーバーヘッドとはどんなものなのかを切り分けます。と、軽い感じでやってみましたところ、プロデルの2つの手順呼び出しの構文の違いで有意差があることを発見しました。## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
Produire Version 2.0.1197 for Windows
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz## この記事内容の保証
※この記事の実行結果は参考情報です。実行環境に大きく依存します。# お題のソースコード
#### Java
“`Java:main.java
import java.lang.
javaのString.Intern()メソッドとパフォーマンス
## String.Intern()メソッド
文字列オブジェクトの正準表現を返します。
文字列のプールは、初期状態では空で、クラスStringによってプライベートに保持されます。
internメソッドが呼び出されたときに、equals(Object)メソッドによってこのStringオブジェクトに等しいと判定される文字列がプールにすでにあった場合は、プール内の該当する文字列が返されます。そうでない場合は、このStringオブジェクトがプールに追加され、このStringオブジェクトへの参照が返されます。
## パフォーマンス影響
サンプルコード(intern()メソッド使用しない)
“`java
public class StringInternTest {public static void main(String[] args) {
final int maxCount= 1000 * 10000;
String arr[] = new String[maxCount];Integer data[] = new Integer[] {1,2
「取得」メソッドの命名では適切な動詞をチョイスしよう
# はじめに
ひとえに「取得」といっても、データベースからの取得、外部APIからの取得など、細かなニュアンスが異なる「取得」がある。
各パターンに応じて適切な動詞を用いた命名を行いプログラム保守性を高める。# 結論
|動詞 |ニュアンス |
|———–|————|
|get|オブジェクトからprivateなフィールドの値を取り出す。|
|fetch|外部サービス(API等)へ通信してレスポンスを取得する。 |
|retrieve|データベースやストレージを検索しリスト等を取得する。(汎用的)|
|find|データベースやストレージを検索し1件だけ存在するユニークデータを取得する。(限定的)|
|select|配列などのコレクションから条件にマッチするデータを取得する。|# 補足
– なんでもかんでも雑に`get`と命名するのは処理のヘビー具合が感じ取れないのでアンチパターン。アクセサ (getter / setter) やプロパティ以外では回避すべき。
– `select`はSQL文のSELECT文実行するだけの処理に使っても良い(現にそのような命
アノテーションとサンプルコードまとめ
# はじめに
こんにちは。takunと申します。
私はSpringBoot3の勉強中で、アノテーションを使った実装を学んでおります。
正直多くて覚えられないと思ったので、一旦ざっとまとめてみようと思った次第です。当方は初心者エンジニアです。間違ったことや不適切な内容となってしまう可能性もあることをご承知ください。また、助言など頂けると嬉しいです。
# アノテーションの共通機能(Bean関連)
インスタンスをBean(オブジェクト)としてDIコンテナに登録する。# 複数のクラスで扱うアノテーション
### @Autowired
DIに登録してるクラスのインスタンスを取得する。
インターフェースを指定しても、必要な処理が組み込まれた無名クラスのインスタンスが作成・設定される。
今後廃止になりそうな記述もあることに注意。
~~~java
@Autowired
PersonRepository repository; //フィールドインジェクションは非推奨。
~~~
~~~java
private final PersonRepository repository;@Au
SpringMVCの大きな流れ
# SpringMVCの大きな流れ
– 最も一般的な例として、@Controller + Forward の場合の流れは以下の通りである。![스크린샷 2023-11-25 15.21.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567846/7637da54-83c8-cb9a-9c75-612fda3c357e.png)
1. Browerからurlリクエストを送る。
2. **DispatcherServlet**がRequestを受け、**HandlerMappingに転送**する。
3. **HandlerMapping**で**urlが一致するメソッドを見つけてDispatcherServletに返却**する。
– MapでUrl(Key)とメソッド(Value)をmappingさせておいて保存している。
4. **DispatcherServlet**でどのような種類のHandlerAdapterが呼び出すことができるかを確認し、該当**Handler
java 2次元配列
# はじめに
2次元配列に1次元配列を格納しようとしたが、理解できていない事が分かった。
忘れてもすぐに思い出せるよう分かった事をまとめた。
(メモリの番地が格納されている事がポイントだと思います。)## イメージ
例えば 2行3列の配列 int mat[][] = new int[2][3]; を作成した場合
3列の配列が2つ作成され、それぞれの先頭の番地がmat[0]、mat[1]に格納される。
別の見方をするとmat[0]には、1行目の先頭の番地が格納されている。
(例の1行目はmat[0][0]、mat[0][1]、mat[0][2])## lengthの結果
mat.lengthは、行数を表す。
mat[0].lengthは、0行目の列数を表す。## サンプルコード
~~~2jigen.java
//2次元配列の初期化
char test[][] = {{‘a’,’b’,’c’,’d’},{‘e’,’f’,’g’,’h’}};
char toTest[][] = {{‘1′,’2′,’3′,’4’},{‘5′,’6′,’7′,’8’}};//t
日本語プログラミング言語 なでしこ Java C# で整数カウントアップ実行時間を仲良く競う
# はじめに
日本語プログラミング言語 なでしこ とJava C# とで整数カウントアップの反復実行時間を仲良く競い合わせてみます。コンソール出力は意外と重い処理なので、いったん素の処理でどんなものなのか検証します。## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
nadesiko version 1.588 for Windows
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz## この記事内容の保証
※この記事の実行結果は参考情報です。実行環境に大きく依存します。# お題のソースコード
#### Java
“`Java:main.java
import java.lang.System;
/**
* プログラム型
*/
class Program
{
/**
* メイン
* @pa
【精選10問】B – Card Game for Twoを解いた
下のコードでWAになったので、後ほど修正します。。。
# 問題
https://atcoder.jp/contests/abc088/tasks/abc088_b# メモ
sortで並び替えてから大きい順に2人にカードを割り振って、最後に差を出力した。# 回答
昇順Ver
~~~java:Main.java
import java.util.Arrays;
import java.util.Scanner;public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
int aScore = 0;
int bScore = 0;
int[] cards = new int[N];for (int i=0;i
日本語プログラミング言語 Mind Java C# で関数を介した整数カウントアップ実行時間を仲良く競う
# はじめに
日本語プログラミング言語 Mind とJava C# とで関数呼び出しを介した整数カウントアップの反復実行時間を仲良く競い合わせてみます。いわゆるファンクションコールのオーバーヘッドとはどんなものなのかを切り分けます。前回の単純な整数カウントアップで驚異的?な結果をたたき出したJavaの結果が気になります。## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
Mind Version 8.07 for Windows
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz## この記事内容の保証
※この記事の実行結果は参考情報です。実行環境に大きく依存します。# お題のソースコード
#### Java
“`Java:main.java
import java.lang.System;
/**
* プログラ
Java HotSpot仮想マシンの汎用オプション
## -Xmixed
ホット・メソッドのJITコンパイルとバイトコードのインタプリタ実行を両方も有効にする。
## -Xint
ホット・メソッドのJITコンパイルは無効になり、すべてのバイト・コードがインタプリタによって実行される。
## -Xcomp
バイトコードのインタプリタ実行は無効になり、すべてのコードがJITコンパイルによって実行される。
## コマンド確認
– defaultがmixed mode
“`
C:\Users\XXXXX>java -version
java version “11.0.17” 2022-10-18 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.17+10-LTS-269)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.17+10-LTS-269, mixed mode)
“`
– -Xint
“`
C:\Users\XXXXX>java -Xint -version
java version “11.0.17” 2022-1
Spring BootとGridDBを使ったリアルタイムイベントトラッキング
## イベントトラッキングサービスの定義
今日のデジタル環境において、ユーザーイベントを追跡・分析することは、ユーザー行動に関する洞察を得たり、パフォーマンスを最適化したり、パーソナライズされたユーザー体験を提供するために極めて重要です。
イベントとは、ウェブサイトやモバイルアプリ上でユーザーのアクションをトリガーとして発生するインタラクションのことです。これには、ボタンのクリックからニュースレターへの登録、製品の購入まで、あらゆるものが含まれます。イベントページビュー自体がイベントです。
Event Tracking Serviceを利用することで、企業はイベントが発生するとそれを捕捉して処理することができ、最新のインサイトを得ることができます。これにより、企業は新たなトレンドに迅速に対応し、リアルタイムで問題を特定し、データ駆動型の意思決定を即座に行うことができます。
この記事では、Spring BootとGridDBを使ってリアルタイムイベント追跡サービスを実装する方法を紹介します。
## 機能要件
技術的な詳細に入る前に、Event Tracking Service
UMLの読み方(初心者用)
# はじめに
Javaを学習し始め、色々な本を手にするとUMLが良くつかわれていることに気づく。本によってはUMLの解説があるが、解説なしでUMLを使う本もあり、UML図を見て「これ、どういう意味だっけ?」を解決するために、私が学習していく中でよく使うUMLの基本をまとめてみた。学習中に出てこなかった内容は記載していないので、UMLのすべては載っていません。
私自身が初心者のため誤っている箇所があると思います。誤りに気付いた箇所があれば教えていただけると幸いです。## クラス図
![クラス図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569317/1bfeae42-9305-1102-eedb-327b6a1946aa.png)## クラス間の関連
![クラス図全体.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569317/daa4c7bc-31ec-5219-3bc0-abdfdf56a0a9.
GradleプロジェクトのJava17 -> 21にしたときにハマった
# 背景
ある個人開発のJava(Gradle)プロジェクトをJava17 -> 21に引き上げると、プロジェクトから魑魅魍魎が発生してしまいました。
これを解消すべく、以下を試していきました。私の環境はIntelliJのCommunity版を使用しております。
# やったこと
## build.gradleのsourceCompatibilityを21に引き上げ
“`gradle
java {
sourceCompatibility = ’21’
}
“`これだけだと、Gradleタスク実行時に
“`
エラー: 21は無効なソース・リリースです
“`
が発生しました。## IntelliJのGradle設定変更
Ctrl + Alt + Sで設定を開き、「ビルド、実行、デプロイ」-> 「ビルドツール」 -> 「Gradle」のGradle JVMを21に変更。
しかしこれでも以下が発生した。
“`
Execution failed for task ‘:compileJava’.
> java.lang.NoSuchFie
日本語プログラミング言語 なでしこ Java C# でHello World実行時間を仲良く競う
# はじめに
日本語プログラミング言語 なでしこ とJava C# とで「Hello World」コンソール出力の反復実行時間を仲良く競い合わせてみます。## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
nadesiko version 1.588 for Windows
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz## この記事内容の保証
※この記事の実行結果は参考情報です。実行環境に大きく依存します。# お題のソースコード
#### Java
“`Java:main.java
import java.lang.System;
/**
* プログラム型
*/
class Program
{
/**
* メイン
* @param args 引数
*/
public s
【Java】稼働率<->年間停止時間を相互に変換する
# はじめに
職場で非機能要件をまとめる際に「稼働率99%って、年間停止時間がどれ位だっけ?」という話になりました。
1年間で365日ということは、稼働率99%だとざっくり3日強ではないかという予測は立てられますが、正確な年間停止時間をパッと言える人はほとんどいないと思います。そこで「稼働率から年間停止時間を求める処理」と、逆に「年間停止時間から稼働率を求める処理」を書いてみました。
# 作成したコード
* 可用性を表すAvailabilityクラスには2つコンストラクタを用意しており、引数がdoubleの時は稼働率、intの時は年間停止時間を受け取るという形にしました。
* そのため、稼働率->年間停止時間の変換処理だけが必要であれば、引数がintのコンストラクタは不要となります。
* 後から思ったのですが、「稼働率クラス」と「年間停止時間クラス」に分けて、それぞれで変換処理を持たせた方が自然だったかもしれません。
* 他にももっとスッキリ書ける方法があるかもしれませんが、久々にJavaを触ったのでこれが限界でした…“`java:Availability.