- 1. SpringBootで初歩の環境構築~とりあえずトップページが表示されるところまで
- 2. JVMとは 〜プログラムが実行されるまでの一連の流れ〜
- 3. 【Java】Stringはどのようにメモリに保存されるのか調べてみた
- 4. [GraphQL] @oneOf ディレクティブで input 型の union を表現する
- 5. いろんな言語比較してみた
- 6. ABC330A~Fの解答[Java]
- 7. JJUG CCC 2023 Fall で登壇した
- 8. プログラミング言語 Go Java C# で整数カウントアップ実行時間を仲良く競う
- 9. gradleでMETA-INF/services generator
- 10. java OutOfMemoryErrorとJProfiler
- 11. DockerでスリムなJREとMinecraftする
- 12. プログラミング言語 Go Java C# でHello World実行時間を仲良く競う
- 13. 自動テストがないアプリケーションの構造を Clean Architecture の考え方を適用しテスト可能な構造に変える方法
- 14. checkstyleをコマンドラインから実行し、循環的複雑度のレポートをXML形式で作成する
- 15. Java用語ざっくり理解(Java SEとかJDKとか)
- 16. 日本語プログラミング言語 Mind Java C# で関数を介した整数カウントアップ実行時間を仲良く競う(Mind関数形式で再計測)
- 17. 日本語プログラミング言語 なでしこ Java C# で関数を介した整数カウントアップ実行時間を仲良く競う
- 18. 日本語プログラミング言語 プロデル Java C# で関数を介した整数カウントアップ実行時間を仲良く競う
- 19. javaのString.Intern()メソッドとパフォーマンス
- 20. 「取得」メソッドの命名では適切な動詞をチョイスしよう
SpringBootで初歩の環境構築~とりあえずトップページが表示されるところまで
# 開発環境
Windows10でやっていきます。
# Spring Tools 4 for Eclipseダウンロード
下記サイトからjarファイルをダウンロード。
https://spring.io/tools
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/bc94f5e2-6a12-05fd-d0e3-d1505188430d.png)
# jarファイル起動
ダウンロードしたjarファイル
spring-tool-suite-4-4.20.1.RELEASE-e4.29.0-win32.win32.x86_64.self-extracting.jar
を起動。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/2b850c5a-878b-85a0-c0d0-d0946127093d.png)
jarファイルと同じフォルダーに、『sts-4.
JVMとは 〜プログラムが実行されるまでの一連の流れ〜
# はじめに
今回の記事では、JVMとJavaのプログラムが実行されるまでの一連の流れをまとめました。# JVMとは
JVM(Java Virtual Machine)とは、Java仮想マシンとも呼ばれ、Javaのプログラムを動かすために必要なソフトウェアです。# JVMを理解するために必要な知識
### コンパイラ
コンパイラは、ソースコード(.java file)をバイトコード(.class file)に変更します。そして、コンパイラはソースコードに構文エラーがないかをチェックします。エラーを発見した際には、コンパイルエラー(Compile Time Error)がスローされます。### バイトコード
コンパイルの結果生成されたコードで、ソースコードと機械語の仲介役です。バイトコードは、JVMによって処理されます。これにより、JVMを保持するシステムは、OSに関係なくJavaのプログラムを実行することができます。### 機械語
コンピュータが理解できるコードで、CPUによって処理されます。機械語は0と1の2進数で表現されます。# なぜJVMが必要なのか
JVMは
【Java】Stringはどのようにメモリに保存されるのか調べてみた
# はじめに
Stringはjava.lang.Stringクラスの不変オブジェクトで、ヒープ領域に保存されます。** Stringオブジェクトの不変性については、こちらの記事をご覧ください。
[【Java】不変オブジェクトのStringと可変オブジェクトのStringBuilder](https://qiita.com/shibainuu/items/05340b4b0c35083f51d9)# Stringオブジェクトの作り方
1. Stringリテラルを使用
2. newキーワードを使用“`
String s1 = “hello”;
String s3 = new String(“hello”);
“`# Stringはヒープメモリに保存される
Javaのオブジェクトはヒープメモリに保存されるため、Stringも例外なくヒープメモリに保存されます。しかし、Stringオブジェクトの作成の仕方によって保存のされ方が異なります。## 1. Stringリテラルを使用した場合
この方法で作成されたStringは、Stringコンスタントプール(String co
[GraphQL] @oneOf ディレクティブで input 型の union を表現する
# `@oneOf` ディレクティブとは
`@oneOf` とは、 input 型が持つ field の中で、いずれか 1 つを必ず指定しなければならないことを表現するディレクティブです。
そりゃあカスタムディレクティブを頑張って実装すれば実現できるけど・・・と思ったそこのアナタ!
実はこれ、 GraphQL の公式仕様としてもうすぐマージされる予定の directive なんです。https://github.com/graphql/graphql-spec/pull/825
もともと GraphQL には `union` があり、出力については「いずれか 1 種類だけ返す」ことを API 上で表現できていましたが、入力については表現する方法がありませんでした。
`@oneOf` ディレクティブによって、これが可能になります!# 使用例
以下はユーザ検索 API に `@oneOf` を適用した例です。
検索条件である `FindUserCondition` を input で指定するとき、 `id` フィールドか `nameContaining` のどちらかに no
いろんな言語比較してみた
# 軽く比較🍻
書いた見た目を比較するだけ。
実装内容は
– **文字列**の`配列(系のやつ)`の初期化、追加、末尾削除
– のディープコピー
– をフィルタするだけ
– をフィルタしつつ出力を関数にして呼び出すものとします。まぁ準備運動ですね。👯♂️
言語は以下です。
筆者が扱える言語が少ないのでこれだけですが、おいおい増やしたいと思います。– JavaScript
– Python
– Go
– Java
– Rust
– C++
– SQL
– zsh
– vimscript# JavaScript
これがいちばんすき😎😎
“`js
/**
* test
*/
(() => {
// 配列
list = [“test”, “test”]
list.push(“add”)
list.pop(0)
// 配列を移す
_ = […list] // これは非破壊だがシャローコピー
_ = JSON.parse(JSON.stringify(list)) // これはディープコピー
_ = stru
ABC330A~Fの解答[Java]
## はじめに
今回はFまで解けたので提出コードをそのまま載せようと思います。なお、僕のライブラリは[提出結果](https://atcoder.jp/contests/abc330/submissions?f.Task=&f.LanguageName=Java&f.Status=AC&f.User=viral)よりご確認ください。
では、見ていきましょう。## A – Counting Passes
問題文は[こちら](https://atcoder.jp/contests/abc330/tasks/abc330_a)普通にfor文で受け取りながらL以上ならインクリメントする方針で解きました。
“`A.java
final class Main{
private static final boolean autoFlush = false;
private static final SimpleScanner sc = new SimpleScanner(System.in);
private static final SimpleWriter out = new
JJUG CCC 2023 Fall で登壇した
## はじめに
JJUG CCC 2023 Fall に登壇してきました。
エンジニアとしてのキャリアを積むために、積極的にカンファレンスに参加していますが、登壇は初です。
修士を取ったので大人数の前で発表するのは特別なことではありませんでしたが、社会人で時間が無いなか準備をするのは大変でした……JJUG CCC については公式をご参考に。
https://ccc2023fall.java-users.jp/
以下のブログに当日の登壇資料がまとめられています。私のものも掲載していただきました、ありがとうございます。
発表内容や準備から当日の流れを簡単にまとめておきます。
## 発表内容
データベースとリポジトリのテストができる Database Rider というライブラリを紹介しました。
アジャイルで開発しているためユニットテストとテスト自動化は必須です。
なので、リポジトリのテストをするのが当たり前だと思っていたのですが、登壇中の反応や、T
プログラミング言語 Go Java C# で整数カウントアップ実行時間を仲良く競う
# はじめに
プログラミング言語 Go と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
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 ar
gradleでMETA-INF/services generator
# Java 標準の Service Locator パターン
今は Spring などの DI コンテナが使用されることが多いですが、Java 標準でも疎結合を実現するために、インターフェースに合致するクラスを見つけるサービスロケーターパターンを実装したサービスプロバイダーフレームワークがありました。`META-INF/services/` にクラス名を記述したプロバイダ構成ファイルを配置します。現在でも、この仕組みを使用したライブラリがあります。
# gradle での設定方法
こないだ、このファイル自分で書かなあかんの? との話があったので、確認したところ、Jenkins で有名な kohsuke さんが、やっぱり? [META-INF/services generator](https://metainf-services.kohsuke.org/) っていうのを作ってました。さすが。クラスに `@MetaInfServices` アノテーションを付けることで、`META-INF/services/` にファイルが自動生成されます。でも、コピペできる gradle の設定
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文実行するだけの処理に使っても良い(現にそのような命