JAVA関連のことを調べてみた

JAVA関連のことを調べてみた
目次

Javaにおけるガベージコレクションについて

## はじめに

Java Silverの学習を進めている際、ガベージコレクション(GC)という言葉が出てきました。

基本情報技術者試験の勉強の際、なんかメモリを掃除してくれる機能、というような認識程度で詳しくは知らなかったので、Javaにおけるガーベジコレクションについてまとめてみようと思います。

※誤りありましたら、ご指摘いただけますと幸いです。

## 想定読者
初学者の方
普段Javaを使用している方

## ガベージコレクション(GC)とは
日本語にすると「ゴミ回収」となるように、自動的に不要なメモリ領域を解放するプロセスのことを指します。

Javaプロセスを開始する際、メモリの割り当てが行われるわけですが、主に使われる領域のことを**ヒープ領域**と呼びます。

ちなみに、JavaはGCを自動で行ってくれますが、CやC++といった言語では、プログラムが使用するメモリ領域の割り当てやメモリ領域の解放を、明示的に指示する必要があります。

そのため、普段実装していてこの辺りはそこまで意識することはないかと思います。

元記事を表示

HTMLのaタグを使ってPOST送信する方法。

## はじめに
Spring Securityを用いてログイン・ログアウト機能を実装していた際、POSTリクエストを送りたいところ、aタグではGETリクエストが送られてしまうため、下記実装を行いました。

formタグでpostにしてダイレクトに送ってもいいんですが、aタグを使用して送りたいケースも仕様によっては考えうるケースかと思います。

この辺に疎いので一つひとつ実装解説も併せて、備忘録という形で残したいと思います。

※誤りありましたら、ご指摘いただけますと幸いです。

## 想定読者
初学者の方
フロントも頑張りたい方

## 実装の中身

#### html

“`

脱運用管理システム… xxを使わずに、Azureでアプリのログを監視する

# はじめに
Azureでシステム開発を請け負うことになりそうなのだが、
とっても高価な運用管理システムを使うのはコスト的に見合わないプロジェクトって、監視とかどうするんだっけな?と思って調べ始めたのがきっかけで、「Applicaiton Insights」というものにたどり着きました。

当初は、Spring BootアプリのLoggerからデータを飛ばせたらなと思いつつ、調査を始めたのですが、
この「Applicaiton Insights」を使えば、各種アプリのメトリクスも取得できそうなので、合わせてやってみようと思います。

最終的には、よくあるアプリの監視で、一定レベル以上のログが出力されたら、メールを生成して何か起こっているよと伝えることを目標とします。脱運用管理システムです。

# Azure Monitor
統合モニタリングサービスです。このサービスを使用することで、Azureリソースのパフォーマンス、可用性、セキュリティをリアルタイムで監視することができます。

# Application Insights
Azure上で動作するアプリの、パフォーマンスモニタリングを

Javaで equalsと hashCodeを使ってみた(+ HashMap)

こんにちは。
この記事では、私が勉強した内容を実際に業務にどのように活かしたのかについて説明していきます。

Javaを勉強し、業務で使用していても**equals**と**hashCode**をoverrideして使う場面は、それほど多くはないと思います。
私も、**equals**と**hashCode**について勉強したことはありますが、実際に使ったことは全くありませんでした。
しかし、今回のプロジェクトで使う機会があって、その経験を皆さんに共有したいと思います。

# 問題状況(案件)
病院で診療情報を保存する状況があると想定します。
医師は患者の診療を終え、その診療情報を保存するたびに、以下のような形式でDBに保存されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678234/fde42ef5-e09a-db64-e2fa-e0f063895380.png)

各カラムは
– 患者ID:患者に付与されるID pk
– 作成日:診療記録作成日 pk
– 項目:診療に関す

SpringDIで生成されるオブジェクトを扱う際に注意すること

https://qiita.com/gengen0719/items/65cab20943bf4cce61ca

こちらの記事の続きです。
SpringDIを使って生成されるBeanの取り扱いで注意するべきことを書きました。

# Beanは通常シングルトンである

例えば以下のような実装をします。

“`Java
@Controller
public class DemoController {

private final CaluculationService incrementalService;

public DemoController(IncrementalService incrementalService) {
this.incrementalService = incrementalService;
}

@GetMapping(“incremental”)
public String calc(Model model) {
model.addAttribute(“result”, incr

Javaで「メソッドの定義」の動作を確認してみた

# 概要

Javaで「メソッドの定義」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/method/index2.html

# 実装

以下のファイルを作成しました。
“`JSample2_1.java
class JSample2_1{
public static void main(String args[]){
hello();
bye();
hellobye();
}

private static void hello(){
System.out.println(“こんにちは。”);
}

private static void bye(){
System.out.println(“さようなら。”);
}

private static void hellobye(){
hello();
bye();
}
}
“`

以下のコマンドを実行しました。
“`
$ javac JSample2_1.java

Scannerから入力を受け付けたあと、エラー処理が無限に繰り返される(Java超初心)

## 前提
最初の頃に躓いたので、記録も兼ねて記載します。
Scannerで入力を受け付けたあと、仕様外の入力(例:数字の入力を求めているのに文字を入力)などが起こった場合、エラー時の処理が無限に繰り返されてしまう対処法です。
なお、ターミナルやコマンドプロンプトが無限ループを起こしてしまったときは、
Windows:ctrl + C
Mac:Control + C
で終了できますので、「初めて知った」という方は是非ご参考ください^^

## コンテンツ
下記のように年齢の入力をユーザーに求め、入力された数字に応じて
「成人です」
「未成年です」
と表示されるjavaのコードを書きます。

“`
import java.util.Scanner;

public class ScannerBug {
public static void main(String[] args) {
// 入力受取のためのインスタンス生成
Scanner scanner = new Scanner(System.in);

while (true) {
int a

JUnitの基本的な注釈とアサーションメソッド一覧

JUnitは、Javaで最も一般的に使用されるテストフレームワークです。
JUnitでよく使われる基本的な注釈とアサーションメソッドを一覧にしてまとめました。
使用方法など詳しくは以下のドキュメントをご覧ください。
[JUnit 5 ユーザーガイド](https://junit.org/junit5/docs/current/user-guide/)

# 注釈
| 注釈 | 説明 |
|:-|:-|
| @Test | テストメソッドであることを示します。 |
| @ParameterizedTest | 異なる引数でテストを複数回実行できます。 |
| @BeforeEach | テストメソッドの実行前に毎回実行されます。 |
| @AfterEach | テストメソッドの実行後に毎回実行されます。 |
| @BeforeAll | テストメソッドの実行前に一度だけ実行されます。 |
| @AfterAll | テストメソッドの実行後に一度だけ実行されます。 |
| @DisplayName | テストクラスやテストメソッドにカスタムの表示名を指定します。 |
| @Nested

JAVA関連理論まとめ編

### JVMの実行方式
JVMはインタープリター方式でバイトコードを実行し、プログラムを迅速に開始し、JITコンパイラを通じて性能を最適化します。

### インタープリター方式
– バイトコードを1行ずつ機械語に変換して実行します。デバッグが速いですが、実行速度はコンパイル方式より遅いです。

### コンパイラ方式
– 実行速度が速いですが、コンパイル過程で時間がかかります。

### 文字列処理
– **String**: 不変オブジェクトで、文字列を操作するたびに新しいStringオブジェクトが生成されます。スレッドセーフです。
– **StringBuffer**: 可変オブジェクトで、文字列操作時に既存のオブジェクトの値を変更します。スレッドセーフですが、同期化による性能低下がある場合があります。
– **StringBuilder**: 可変オブジェクトで、文字列操作時に既存のオブジェクトの値を変更しますが、スレッドセーフではありません。

### スレッドセーフ
– マルチスレッド環境でスレッドが同時にそのコードやデータにアクセスしても、実行結果が同じになります。ミュ

Spring BootでDAOからデータベースにアクセスしてみた-その2(クライテリア)

# 背景・目的
過去に、Spring Bootについて下記の記事にまとめました。今回は、Criteria APIによるデータベースアクセスを試します。

– [Spring BootでDAOからデータベースにアクセスしてみた-その1(DAOとアノテーション)](https://qiita.com/zumax/items/4dd856cd108d23a15188)
– [Spring Bootでバリデーションを試してみた](https://qiita.com/zumax/items/f09bacf18f3bb96d1331)
– [Spring Bootでデータを保存する-その2](https://qiita.com/zumax/items/06d0465218478840a949)
– [Spring Bootでデータを保存する-その1](https://qiita.com/zumax/items/2e387254c736659bf20c)
– [Spring Bootでデータベースへのアクセスを試してみた](https://qiita.com/zumax/items/7487b86f

プライベートサブネットにEC2を置いたWebアプリケーションを作成する②

前章: [プライベートサブネットにEC2を置いたWebアプリケーションを作成する①](https://qiita.com/RHIC-0819/items/25bff36c3aacf92af28e)

## アプリケーションを立ち上げる

前回まででウェブアプリケーションの土台を作成したので、ようやく実際にアプリケーション構築に取り組みます。

本章は以下の手順で進めていきます
1. RDSを作成してEC2から接続する
1. EC2にアプリケーションを構築し、アプリケーションを立ち上げる
1. ALBを作成して、ローカルのブラウザから接続する

## 完成図
![alb-rds-ec2-完成図.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821799/d99f4a70-a09e-d1fc-b9df-91e9c347a87b.png)

## RDSの作成
マネジメントコンソールからRDSを開き、データベースの作成を選択します。

作成のポイントは4点です
1. **エンジンタイプの選択

プライベートサブネットにEC2を置いたWebアプリケーションを作成する③

前章: [プライベートサブネットにEC2を置いたWebアプリケーションを作成する②](https://qiita.com/RHIC-0819/items/f3755e02e16694792c4e)

続いては、セキュリティを高める設定をしていきます。

## 手順

以下の手順で一つずつセキュリティを高めていこうと思います。

1. Route53でドメインを登録する
1. ACMで証明書を発行してHTTPS通信を有効化する
1. WAFを有効化する
1. Secrets Managerを利用して、認証情報のハードコーディングをやめる
1. [おまけ1] Cloud Frontのキャッシュを有効化してレスポンスを早くする
1. [おまけ2] Webサーバーの冗長化

## Route53でドメインを登録する

マネジメントコンソールのRoute53を開いたら、「ドメインを登録」を左のメニューバーから選択します。

取得したいドメイン名を入力しチェックアウトに進み、必要な連絡先情報を入力したら作成してください。
リクエストしたドメイン名でパブリックホストゾーンが自動作成されたら、レコード

プライベートサブネットにEC2を置いたWebアプリケーションを作成する①

前章: [プライベートサブネットにEC2を置いたWebアプリケーションを作成する ーイントロー](https://qiita.com/RHIC-0819/items/76f14f82c6d6c7aadb68)

## プライベートサブネットにEC2インスタンスを配置してSession Managerで接続する

今回作成するアプリケーションは、組織内部のみでの利用を想定しており、外部からのアクセスをできる限り許可しないような形でEC2インスタンスを配置していきます。

ここで作成するゴールはEC2にSession Managerからアクセスするところまでがゴールとなっています。

![aws-qiita-ec2.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821799/94d4dd69-ddb1-8f39-6c46-76901e79aab8.png)

## VPCの用意
まずマネジメントコンソールにログインし、VPCの作成を行います。

![image.png](https://q

プライベートサブネットにEC2を置いたWebアプリケーションを作成する ーイントロー

初めての投稿なので、お手柔らかにお願いします。

執筆現在では新卒1年目で、研修においてWebアプリケーション開発を課されたので、その際に作成したインフラ構成図を紹介していこうと思います。

まず、本稿で紹介するAWSの最終的な構成図は以下のようになっています。

![チームJ開発ーAWS最終構成図.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821799/9bf1902a-ce65-4389-f3e0-f1d1d35bcf01.png)

ポイントとしては題名にある通り、プライベートサブネットにアプリケーションサーバーを配置することでEC2への直接のアクセスをブロックし、セキュアなアプリケーションを構築します。

アプリケーションサーバーへのインターネットからのアクセスをブロックする大きな理由は、EC2が持っているインスタンスプロファイルを使って、不正な操作をされる恐れがあるからです。不正なリソース作成によって予想外なコストが発生したり、本番で動いているリソースの勝手な削除を予防し

Spring BootでDAOからデータベースにアクセスしてみた-その1(DAOとアノテーション)

# 背景・目的

過去に、Spring Bootについて下記の記事にまとめました。今回は、EntityManagerによるデータベースアクセスを試します。
– [Spring Bootでバリデーションを試してみた](https://qiita.com/zumax/items/f09bacf18f3bb96d1331)
– [Spring Bootでデータを保存する-その2](https://qiita.com/zumax/items/06d0465218478840a949)
– [Spring Bootでデータを保存する-その1](https://qiita.com/zumax/items/2e387254c736659bf20c)
– [Spring Bootでデータベースへのアクセスを試してみた](https://qiita.com/zumax/items/7487b86f56ea12c31d44)
– [Sprint Bootの環境を構築したときのメモ](https://qiita.com/zumax/items/8effa97f338dd0224b22)

# まとめ
下記

Java(SpringBoot)を基本からまとめたみた【入門】

## コア機能

– IOC : Inversion on Control Container
– AOP : Aspect Oriented Programming
– DAF : Data Access Framework
– MVC : Spring MVC Framework

## Spring Beanとは?

– OBJECT : An object that is managed by the Spring Framework in a Java application.
– FEATURES : Aims to simplify the complex enterprise Java application development.
– CONFUGURATION : Spring Beans can be configured using XML, Java annotations, or Java code.

## 参考サイト
[The ULTIMATE Spring Boot course | 8 HOURS Course](https://www.yo

Spring Bootのアノテーション基礎

Spring Bootでは、アノテーションを使用して簡潔にWebアプリケーションを構築することができます。ここでは、よく使用されるアノテーションについて説明します。

# 1. @Controller
@Controller は、Spring MVCにおけるWebコントローラーを示すためのアノテーションです。このアノテーションがクラスに付与されると、そのクラスはHTTPリクエストを処理するためのコントローラーとして認識されます。

“`java
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping(“/example”)
public class ExampleController {

@GetMapping
public

Spring Bootでバリデーションを試してみた

# 背景・目的

前回、下記でデータの登録・更新・削除などを試しました。今回はバリデーションを試してみます
– [Spring Bootでデータを保存する-その2](https://qiita.com/zumax/items/06d0465218478840a949)
– [Spring Bootでデータを保存する-その1](https://qiita.com/zumax/items/2e387254c736659bf20c)

# まとめ
下記に特徴をまとめます

|特徴|説明|
|:–|:–|
|バリデーションのパッケージ|spring-boot-starter-validation|
|パッケージは二種類ある|・jakarta.validation
・jakarta.validation.constraints|
|標準バリデーション|以降のものがある|
|入力されているかのバリデーション|“`@Null“`
`@NotNull`
`@NotBlank`
`@NotEmpty`
|数値の範囲のバリデーション|`@Min`
`@Max`

Javaで「メソッドの使い方」を動作を確認してみた

# 概要

Javaで「メソッドの使い方」を動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/method/index1.html

# 実装

以下のファイルを作成しました。
“`JSample1_1.java
class JSample1_1{
public static void main(String args[]){
int eigo = 78;
int suugaku = 90;
int kokugo = 68;

check(“英語”, eigo);
check(“数学”, suugaku);
check(“国語”, kokugo);
}

private static void check(String kyoka, int seiseki){
System.out.print(kyoka + “の試験結果は”);
if (seiseki > 80){
System.out.println(“合格です”);