- 1. java OutOfMemoryErrorとJProfiler
- 2. DockerでスリムなJREとMinecraftする
- 3. プログラミング言語 Go Java C# でHello World実行時間を仲良く競う
- 4. 自動テストがないアプリケーションの構造を Clean Architecture の考え方を適用しテスト可能な構造に変える方法
- 5. checkstyleをコマンドラインから実行し、循環的複雑度のレポートをXML形式で作成する
- 6. Java用語ざっくり理解(Java SEとかJDKとか)
- 7. 日本語プログラミング言語 Mind Java C# で関数を介した整数カウントアップ実行時間を仲良く競う(Mind関数形式で再計測)
- 8. 日本語プログラミング言語 なでしこ Java C# で関数を介した整数カウントアップ実行時間を仲良く競う
- 9. 日本語プログラミング言語 プロデル Java C# で関数を介した整数カウントアップ実行時間を仲良く競う
- 10. javaのString.Intern()メソッドとパフォーマンス
- 11. 「取得」メソッドの命名では適切な動詞をチョイスしよう
- 12. アノテーションとサンプルコードまとめ
- 13. SpringMVCの大きな流れ
- 14. java 2次元配列
- 15. 日本語プログラミング言語 なでしこ Java C# で整数カウントアップ実行時間を仲良く競う
- 16. 【精選10問】B – Card Game for Twoを解いた
- 17. 日本語プログラミング言語 Mind Java C# で関数を介した整数カウントアップ実行時間を仲良く競う
- 18. Java HotSpot仮想マシンの汎用オプション
- 19. Spring BootとGridDBを使ったリアルタイムイベントトラッキング
- 20. UMLの読み方(初心者用)
java OutOfMemoryErrorとJProfiler
## JProfiler紹介
ej-technologies社が開発したJavaアプリケーションのパフォーマンス診断ツールです。
今度はJProfilerを使用してアプリケーションのパフォーマンスを診断してみます。
## インストール
JProfiler UI をインストールします:
https://www.ej-technologies.com/download/jprofiler/files
## JProfilerで診断
サンプルコード
“`java
public class OOMTest {public static void main(String[] args) {
int i=0;
Listlist = new ArrayList<>();
String str = “OOM and GC”;
while(true) {
list.add(str);
str = str + str;
i = i++;
}
}
}
“`
実行オプション
“`
-Xms5m -X
DockerでスリムなJREとMinecraftする
## Docker ってなんや
とりあえずいろいろ動くVM
LinuxだけでもなくOSから対応CPUからいろいろあるDockerfile がmakeファイル的な位置
いろいろそろったimageファイルにデータなどを突っ込んで、あとは実行するだけにしておく
手順はキャッシュされるので同じ手順では再利用されるっぽい
image がまとめたLinuxっぽいイメージファイル 1イメージ 1アプリ 1VM的なきまり?
imageをもとにDockerfile で積み重ねることもできる
docker-compose.yaml がそれをまとめて実行する、仮想ネットワークもあるよ
app,Web,DBなど数個まとめてあと環境変数など少々追加するimage から実行すると container が作られる、一般的なファイルシステム的なものにVMを合わせた感じか
## データはどうするの
VMではない親からファイルをマウントして使う、のが一般的な感じか
他の手段で突っ込んでもいいが、VMは割と短命なこともあるので親システムのファイルなどで置いておくのがよく使われる手法## インストール
公式に
プログラミング言語 Go Java C# でHello World実行時間を仲良く競う
# はじめに
プログラミング言語 Go と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
go version go1.19.5 windows/amd64
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz## この記事内容の保証
※この記事の実行結果は参考情報です。実行環境に大きく依存します。# お題のソースコード
#### Java
“`Java:main.java
import java.lang.System;
/**
* プログラム型
*/
class Program
{
/**
* メイン
* @param args 引数
*/
public static
自動テストがないアプリケーションの構造を 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.