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

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

javaでコンテナ作るときに気を付けるべきこと

※この記事は数行で終わります

# javaはsignalを認識できない
signalとは`Ctrl+C`などを押したときにシステム側が反応し、ソフトウェアに割込み処理を行わせるものです。
### dockerでは
コンテナ終了時に内部アプリケーション(コンテナ内のpid1)にシグナルを発報します。10秒間(デフォルト)応答がなければ強制終了します。

# つまり
javaアプリケーションに対しては最初から強制終了を行うか、シグナルを文字列に変えてコマンドとして送るかとか考えないといけないのです。

#### 補足
ここまでの成り行きを説明します。
1. マイクラサーバー立てたるかー
1. docker使お
1. 起動時にシェルスクリプトでバックアップ取るか
1. あれ?正常に終了できないしログも出ない
1. pid1問題があるのか
1. 軽量init使いたくないなめんどそ
1. webguiによるマネージャ…めんどくさそ
1. `exec`コマンドを知る(すべての元凶)
1. おお、ログが出てきた!
1. 完成や!おまいらは入れ
1. (1か月後)
1. プラグイン更新

元記事を表示

Udemy講座クーポンコードの発行(2024年1月分)と新コースリリースに向けた告知

### 自己紹介

皆さん、こんにちは、Udemy講師の斉藤賢哉です。私はこれまで、25年以上に渡って企業システムの開発に携わってきました。特にアーキテクトとして、ミッションクリティカルなシステムの技術設計や、Javaフレームワーク開発などの豊富な経験を有しています。様々なセミナーでの登壇や雑誌への技術記事寄稿の実績があり、また [「マスタリング Java EE 5」](https://amzn.asia/d/j0txqK5)や[「アプリケーションアーキテクチャ設計パターン」](https://amzn.asia/d/9avaCyF)といった書籍も執筆しています。

### Udemy講座のご紹介とクーポンコード(2024年1月末まで)

現在私が講師を務めるUdemy講座には、以下のラインアップがあります。
これらのコースは、**Udedmyセールス対象外のためタイミングを気にすることなく購入可能**です。また以下のリンクから購入いただくと、クーポンが適用されたことになり、定価の**約30%OFF**で購入することができます。
|コース名|リリース|定価|クーポン適用後価格|2024

元記事を表示

【初めてのJava】まずはコーディングしてみた(インターフェース)

## はじめに
インターフェースの実装練習として、
前回作成したBMI計算機にBMR(基礎代謝量)を計算する機能を付けてみました。

## 機能
 身体のパラメーター値(身長、体重、年齢など)をセットすると、BMI、BMRの計算結果を出力するツールです。
(値の入力はハードコーディング)

## ソースコード
※長いので、折りたたんでいます。

“`java:App.java
public class App{
public static void main(String[] args){

try{
Person person = new Person();
if(!person.setParameter(“John”, 1.7, 60.5, 30, Person.Sex.MALE)){
return;
};

Bmi bmi = new Bmi();
Bmr bmr = n

元記事を表示

【Java・学習ログ17】コレクションについて~Mapの基本~

≪使用教材≫スッキリわかるJava入門 第3版 スッキリわかるシリーズ 『第16章』
## Mapの使い方
マップとは2つの情報を**キー**と**値**のペアとして格納するデータ構造。格納した値はキーを指定して読み書きできる。実装の中でも特に多く利用されるのは、java.util.HashMapクラス。

《HashMapが備えるメソッド》
|操作|戻り値|メソッド|意味|
|-|-|-|-|
|追加|値|put(キー,値)|マップにキーと値のペアを格納する|
|取得|値|get(キー)|キーに対応する値を取得(なければnull)|
|調査|int|size()|格納されているペア数を数える|
||boolean|isEmpty()|要素数がゼロであるかを判定|
||boolean|containsKey(キー)|指定データがキーに含まれているかを判定|
||boolean|containsValue(値)|指定データが値に含まれているかを判定|
|削除|void|clear()|要素をすべて削除する|
||値|remove(キー)|指定した内容の要素を削除する|
|その他|Set<

元記事を表示

JavaSE11Gold合格するためにやったこと

## JavaSE11Goldに合格した
正解率63%以上合格で79%だった。
8割以上取れているかなと思ったが、ギリ届かなかった。

![スクリーンショット 2024-01-07 181925.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3577396/b2afd1a9-df69-04b7-b1ce-fa2c95c88e85.png)

## Javaの経験
4年ぐらいJavaでの開発をしている。
試験で頻出するストリームAPIやラムダ式は、ほんの少し業務で使った経験がある。

## やったこと
[黒本](https://book.impress.co.jp/books/1121101020)と[紫本](https://www.shoeisha.co.jp/book/detail/9784798170572)を中心に勉強した。
勉強量としては、黒本は5周、紫本は2周ほどした。

## 期間
かかった期間は6ヶ月だが、前半の3ヶ月はダラダラしていて黒本1周しかしてなかったので、実際に身になった期間は後

元記事を表示

GCP Cloud Load Balancing機能

# GCPのCloud Load Balancingの概要と機能

## 目次
1. [概要](#概要)
2. [機能/詳細](#機能/詳細)
3. [まとめ](#まとめ)

## 概要
GCPのCloud Load Balancingは、Google Cloud Platform(GCP)上で提供される負荷分散サービスです。このサービスは、アプリケーションやウェブサイトへのアクセスを複数の仮想マシンやサーバーに均等に分散することができます。これにより、トラフィックの増減に柔軟に対応し、高可用性とパフォーマンスの向上を実現することが可能です。

Cloud Load Balancingは、GCP内にデプロイされた複数のリソース間でトラフィックを分散するために使用されます。特定のリクエストに対して最適なリソースへのルーティングを行い、セッションの保持やヘルスチェックなどの高度な機能を備えています。

## 機能/詳細
次に、Cloud Load Balancingの主な機能とその詳細について説明します。

### 1. HTTP(S) ロード バランシング
– HTTP(S)プロトコルを

元記事を表示

Java初心者の失敗メモ

私がJavaの学習中に引っ掛かった内容を纏めています。
※内容は今後変更・追記する可能性があります。
 

・エラー: 構文解析中にファイルの終わりに移りました

public static void main(String[] args)
{
System.out.println(“Hello!”);
}

public static void main(String[] args)
{
System.out.println(“Hello!”);

原因:{}の不足
☆プログラムが長くなると{}の数が合わなくなりがちになり発生する
 

・newの扱い
オブジェクトの作成で用いるコマンド。
☆配列の宣言にも必要だが忘れがち

 
・static
クラス変数とクラスメソッドに用いる。
インスタンスと異なりオブジェクトに関連付けられていない。
☆クラス全体を管理する変数等で用いる。

 
・エラー:InterruptedException
原因:スレッド実行中の他スレッドによる割り込みの発生
☆スレッド内でsleepを使用した、

元記事を表示

HashSetとListのパフォーマンスの違い

## 結論:HashSetの方が高パフォーマンス
### 使用問題文-LeetCode 345
文字列 s を指定すると、文字列内のすべての母音のみを反転して返します。

母音は「a」、「e」、「i」、「o」、「u」で、小文字と大文字の両方で複数回出現することがあります。

### コード HashSetを使用 実行時間:5ms メモリー:44.46MB
“`java
class Solution {
public String reverseVowels(String s) {
char [] c = s.toCharArray();
HashSetlist = new HashSet<>();
list.add(‘a’);
list.add(‘i’);
list.add(‘u’);
list.add(‘e’);
list.add(‘o’);
list.add(‘A’);
list.add(‘I’);

元記事を表示

Spring SecurityのfailureUrl()とfailureForwardUrl()の違い

# 環境
– Spring Boot 3.2
– Spring Security 6.2

# 忙しい人のための結論
`failureUrl()`を使いましょう。

# レスポンスが返ってこない
👇のように記述すると、ログイン画面で間違ったユーザー名・パスワードを入力した場合にレスポンスが返ってこなくなりました。

“`java
@Configuration
@EnableWebSecurity
public class SecurityConfig {

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.formLogin(login -> login
.loginPage(“/login”)
.defaultSuccessUrl(“/”)
.failureForwardUrl(“/login?error”) //

元記事を表示

Spring Boot + DB接続(H2データベース)

# はじめに
本記事ではSpring BootのWebアプリケーションにH2データベースを組み込む方法を記載します。

# 前提条件
– Spring Bootのプロジェクトが起動できること

上記がまだの場合は以下の記事を参考に起動まで実施してみて下さい

https://qiita.com/high_high/items/263cfcbd712ada6cddd3

# H2とは
H2とはオープンソースで開発されているRDBMSの1つで、プログラム本体のサイズが小さいため軽量に動作します。
また、H2はOSにインストールせずに利用できるというメリットがあり、Webアプリケーションに組み込んで使うのに便利なRDBMSです。
大量のデータを扱うような大規模アプリケーションでの利用には不向きですが、簡単なアプリケーションであれば十分に実用できます。

## 依存関係の追加
H2を利用するために依存関係を追加します。
※ビルドツールによって依存関係を追加するファイル名が異なります

– Mavenの場合
“`pom.xml

元記事を表示

実務で出会ったグレーな設計手法

# はじめに

ソフトウェア開発の現場では、理想と現実の間で常にバランスを取る必要があります。特に BtoB 形式のプロダクト開発においては、顧客のニーズに迅速に対応するため、時には標準的な設計手法から逸脱する「グレーな設計手法」を採用することがあります。この記事では、一般には公開されていない BtoB プロダクトで遭遇した、伝統的な設計原則からは外れるが、特定の状況下で有効であった設計手法について考察します。

これらの手法は、一般的なソフトウェア開発のベストプラクティスとは異なる場合が多く、メリットとデメリットの両方を持ち合わせています。ここでは、それぞれの手法の背景、実装時の考慮点、そしてそれに伴うリスクについて詳しく掘り下げていきます。目的は、これらの「グレーな設計手法」が実務でどのように機能し、またどのような影響をもたらす可能性があるかを理解することです。

> 注意: ここで紹介する手法は、特定の文脈や要件に基づいて選択されたものです。これらの手法を適用する際には、常にプロジェクトの特性やリスクを十分に考慮し、適切な判断を行うことが重要です。

## 目次

1.

元記事を表示

JavaでXMLをファイルに出力したい

JavaでXMLをファイルに出力したい場合はTransformerを利用します。

https://docs.oracle.com/javase/jp/8/docs/api/javax/xml/transform/Transformer.html

例: メモリ上で構築したXMLをfruits.xmlに出力する。

“`java
// XMLをメモリ上で構築する。
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();

Element e1 = document.createElement(“element1”);
e1.setAttribute(“name”, “ELEMENT1”);
document.appendChild(e1);

Element e2 = document.createElement(“element2”);
e2.setAttribute(“name”, “ELEMENT2”);
e1.appendChild(e2);

E

元記事を表示

graphql-java を使うときはクエリのサイズ制限に注意しよう

# 環境
– java 17
– spring-boot 3.1.2
– graphql-java 21.0

# 発端
GraphQL API の利用者から「クエリが実行できない!」という報告を受けました。
報告があったエラーは以下。

“`
graphql.parser.exceptions.ParseCancelledException:
More than 15,000 ‘grammar’ tokens have been presented. To prevent Denial Of Service attacks, parsing has been cancelled.
“`

メッセージを見てすぐに「巨大なクエリを送っているクライアント側の責任だろう」とは思いましたが、そんな制限を実装したつもりは無いし、 API ドキュメントでも明言していなかったので、発生源を確認しました。

# サイズ制限エラーの発生源
ログにスタックトレースが残っていたので、発生源はすぐに特定できました。

graphql-java の [ParserOptions.java](https

元記事を表示

javaで理解するオブジェクト指向

# はじめに
プログラミングの勉強をしている上で、オブジェクト指向という壁にぶつかると思います。
オブジェクト指向を勉強する上で、よく車などの例で教えてもらうことがあると思います。
その時になんとなく理解したつもりになってそのままにしていることがあると思います。
しかしプログラミングを学んでいく中で、オブジェクト指向は避けて通れません。
ここではjavaを用いて生徒の点数を表示するプログラムを記述している。

# 今回作成するプログラム
今回は生徒の点数とその科目ごとの平均点を表示するプログラムを作成していきます。
具体的には
“`
Aさん
数学:90, 英語:90, 理科:80
Bさん
数学:70, 英語:70, 理科:90
Cさん
数学:30, 英語:30, 理科:60
平均点
A:73, B:71, C:58
“`
というような出力結果が出るようにプログラムを記述していきます。
その上でオブジェクト指向を用いない場合と用いる場合を見比べてもらいます。

# オブジェクト指向を用いないプログラム
以下のコードはオブジェクト指向を用いてないものです。

“`java:Main.

元記事を表示

【初めてのJava】まずはコーディングしてみた(クラス)

## はじめに

HelloWorldの次として、BMI計算機を書いてみることにしました。

## 機能
 標準入力で身長、体重を入力すると、BMIの計算結果を出力するだけのツールです。
メインメソッドで終わってしまう内容ですが、目的はJavaを理解するためのコーディングなので BMIを計算するクラスを別に立てています。

## ソースコード(初回投稿時)

“`java:App.java
import java.util.Scanner;

public class App{
public static void main(String[] args){

calcBmi bmi = new calcBmi();
Scanner scanner = new Scanner(System.in);
double height = 0.0;
double weight = 0.0;

try{
System.out.println(“身長を入

元記事を表示

個人開発でサービスを作ってみた

個人開発でサービスを作って公開したので、その諸々に関して記録に残しておこうと思います。

作ったものはこちらです!

https://lp.tuzuriba.com/

サービスのコンセプトや主な機能はこちらに書いてます。

https://media.tuzuriba.com/column/what_is_tuzuriba/

## なぜ作ったのか
ものづくりが好きだからで、完全に趣味です!

## どうやって作ったのか
### 1. 企画
お仕事の場合はお金を産まなければいけないので、誰の何をどうやって解決するのか・解決したとしてお金を産むのか、みたいなことを何度も繰り返し検証して精度を高めていく必要がありますが、個人開発なのでその辺は特に考えていません。

「こんな感じの世界観が実現出来たら良いなぁ」というふんわりした考えがあったので、開発着手する前にまずはランディングページを作って、血迷わないように考えを明確化しました。(ランディングページは上に貼ったものです)

### 2. 開発
ランディングページを見返しながら、最低限この辺の機能があればコンセプトを表現できそうかな?とい

元記事を表示

jenkinsでログ管理を行う

## 背景
jenkinsとは、Javaベースで起動するソフトウェア開発向けのツールです。
ソフトウェア開発のビルド、テスト、デプロイを目的としたオープンソースを構築し、自動化したい処理を定義します。
サーバ内のスクリプトを指定し、実行タイミングを定義することで、osのcronのような処理が実現できます。
cronでは、逐次処理(例えば、A処理→B処理といった内容を1時間毎に実行する)は、crontabの定義上難しいのに対して、jenkinsでは定義可能です。
Jenkins本来の用途とはズレていますが、ジョブ管理として使っていくとともに、課題としてあったログのデータベースへの挿入中にログのローテートがされてしまう問題を解決するのが本記事の目的となります。

## 導入方法
jenkinsの公式サイトより、warファイルがあるため、
以下サイトからダウンロードします。
https://www.jenkins.io/download/
※Redhat、CentOS、Almalinuxなどのディストリビューションでは下記より必要なバージョンをwgetでダウンロードすればOKです。
(インタ

元記事を表示

Helidon 4.x で 分散トレーシング (OpenTelemetry Java Agent は使わない編)

## はじめに

既に、[「Helidon を用いた MicroProfile Telemetry Tracing」](https://qiita.com/shukawam/items/2ea5a1aeff03901edd2b) という投稿がありますので、大筋はそちらの記事を参照していただいて、ここでは OpenTelemetry の Java Agent を使わずに Heldion 4.x の分散トレーシングを設定し、Oracle Cloud Infrastructure (OCI) の Application Performance Monitoring (APM) と連携して分散トレーシングを行う方法や、さらには Jaeger や Zipkin 等の他の分散トレーシングにも対応できるような MicroProfile 流の設定の方法を紹介します。

## Helidon による 分散トレーシングのための設定

基本的な設定方法については、https://helidon.io/docs/latest/mp/telemetry に書いてありますので、そちらにまずは目を通していただきたい

元記事を表示

XOR演算を使用して解く LeetCode Single Number

## 問題文
空でない整数 nums の配列では、1 つを除いてすべての要素が 2 回出現します。その 1 つを見つけてください。

実行時の複雑さが線形になるソリューションを実装し、一定の追加スペースのみを使用する必要があります。

## 解答
上記問題のポイントは、同じ数を確認できるかどうかです。
XOR演算^を使用することにより、可能になります。
なぜなら、XOR演算では同じ数があった場合0になり、被っていない数は残るからです。

### コード java
“`java
class Solution {
public int singleNumber(int[] nums) {
int result = 0;
for (int n : nums){
result^=n;
}
System.gc();
return result;
}
}
“`
実行時間:2ms
メモリー:42.74

元記事を表示

【Java】JIS X 0213 文字チェック

仕事で、文字列に `JIS X 0213`以外が含まれないことをチェックする処理を実装しろと言われたのですが、調べてもなかなか出てこなかったので、備忘録として記載しておきます。

## コード
処理自体は簡単で、`charsetName`に `x-SJIS_0213`を指定して、`byte[]`⇔ `String` に変換して、変換前後の値が一致することを確認します。

“`java
String target = “小⃝𠮷”;
byte[] targetBytes = target.getBytes(“x-SJIS_0213”);

String after = new String(targetBytes, “x-SJIS_0213”);
System.out.println(“check:” + after.equals(target));
“`

`String target` に含まれる値が `JIS X 0213`の文字のみであれば、`after.equals(target)`は `true`。
`JIS X 0213`以外の文字が含まれる場合は、`false` となり

元記事を表示

OTHERカテゴリの最新記事