JAVA関連のことを調べてみた2022年01月24日

JAVA関連のことを調べてみた2022年01月24日

React + Spring Boot での画像投稿

#はじめに
ReactとSpring Boot + Chakra UIでアプリケーション開発を行おうとしており、
その過程で画像投稿機能を組み込む予定なため学んだことを備忘録として記載します。

#React
“` NewUser.tsx
return (
<>




名前:

元記事を表示

【初心者向け】 interfaceのシンプルな使用例

## 概要
「結局インターフェースって何なの?」
Javaを勉強し始めた人の大多数が抱く疑問かと思います。
そんな新規Javaユーザーを苦しめるinterfaceを簡単な文法のみでまとめてみました。

### 実際に書いてみましょう
経験談にはなりますが、記事だけ読んでいても身につくものでは無いと思います。
この記事は簡単なコードのみで解説しているので、読み終えた後などコードをコピペして遊んでみてください。
(実際にコピペする際はFormater、Printer、Mainをそれぞれ別のファイルに保存してください。)

## 使用例

“`java:Formater
public interface Formater {

public String format(String string);
}
“`
さてさて、何やらフォーマットしてきそうなインターフェースが現れました。
そうです。このFormaterインターフェースは文字列を成形するメソッドを持ちます。
※interfaceを初めてみたよって人も臆さず読み進んでみてね。

“`java:Printer
public cl

元記事を表示

リーダブルコードのまとめ。 1/2

リーダブルコードを読み終わったので、内容をまとめます。

## 【第一部-表面上の改善】
### 2章-名前に情報を詰め込む

– 変数名には、その目的が分かるような明確な単語を選ぶ。例えば、get~という変数をもっと具体的に、fetch~やdownload~とする。
– tmpやnumなどの汎用的な名前はできるだけ避ける。
– メソッド名やクラス名は短いコメントのようなものである。このクラスやメソッドは何をするクラスなのか、一目でわかるような名前にする。
– 変数名に大切な情報を追加する。例えば、ミリ秒を表す変数名には _msをつける。
– 変数名のスコープが大きい場合、長い名前を付ける。1単語や2単語だと、その変数が何を表しているのかとても分かりづらくなってしまう。
– ローカル変数とグローバル変数を区別できるよう、変数に印をつける。例えば、グローバル変数には一番最初に_(アンダーバー)をつけるなど。

### 3章-誤解されない名前

– 意図が伝わるような名前を選ぶ。例えば、filterという名前は「選択する」という意味にも解釈できるし、「除外する」という意味にもとれる。「選

元記事を表示

【OOP】06_抽象化

こんにちは、コイキングです。

本記事では OOP(Object Oriented Programming == オブジェクト指向プログラミング)の説明のうち、抽象化について、説明したいと思います。

******

# 1. 抽象化とは?
現実のオブジェクトから核心的な事、共通的な事、繰り返している事を抜き出す事と言えます。

“ジムで運動する事”を用いて、例えてみると、
ある人はスクワットラックでスクワットで足の運動をするし、ある人はスミスマシンでデッドリフトで背中の運動を、ある人はベンチでベンチプレスで胸の筋肉を鍛えるでしょう。

上記の運動する人の共通点を抜き出してみると
運動器具 (スクワットラック、スミスマシン、ベンチ)から
適切な運動方法(スクワット、デッドリフト、ベンチプレス)で
特定の身体(足、背中、胸)を鍛えています。

また、核心的な行為を抜き出してみると’運動する’になります。

Javaでは上記のような抽象化作業を手伝うツールとして、抽象クラスとインターフェースがあります。
以下の例示コードは抽象クラスとインターフェースを用いて、”ジムで運動する事”を抽象化し

元記事を表示

RPG(ロールプレイングゲーム)作りで使いどころを解説するGoFデザインパターン23種類

まえがき

昨今においては、書籍や動画学習サイトなどにおいて、プログラミング言語の初心者の方に対して、RPG(ロールプレイングゲーム)の作り方を例に出して、プログラムの書き方を解説することが定番化しています。

誰でもとは言わずとも、多くの方にとって、子どもの頃に親しんできた身近なモチーフで、頭にスーッと入りやすいという大きなメリットがあります。

そこで、プログラミング学習者にとって鬼門の一つである、GoFのデザインパターンを23種類、全部、RPGの作り方の例だけで、説明してみようというのが、本記事の試みです。

23パターン

Iteratorパターン

RPGでは、「やくそう」や「たいまつ」、「鉄の剣」などアイテム(道具)を荷物袋(リスト)の中選んで、使ったり捨てたり、あるいは、手に入れたりなどの操作をすることがあります。

例えば、十字キーで操作するタイプのゲームの場合、下ボタンを押すと、次のアイテムが選択されることが一般的です。

RPGで要素を選択するのは何もアイテムだけではありません。戦闘になれば攻撃するターゲットや呪文な

元記事を表示

StAX XML Parser には StAX2 Woodstox を使う (Java/Kotlin)

Java や Kotlin などの JDK 開発環境で、XML をパースする選択肢として StAX パーサーがあります。

# 要約

StAX Parser は XML ファイルを詳細に解析したいケースで便利です。

JDK 標準の StAX Parser よりも、[StAX2 Woodstox](https://github.com/FasterXML/woodstox) を使用することをお勧めします。

# XML Parser の選択肢

JDK 標準(外部ライブラリ不要で使える)の XML Paresr は以下のものがあります。

| 種類 | 特徴 | class |
| — | — | —|
| DOM (Document Object Model) | XML をツリー構造で処理する | org.w3c.dom.Document
javax.xml.parsers.DocumentBuilder |
| XPath (XML Path Language) | XPath 文字列で XML 要素にアクセスする | org.w3c.dom.Documen

元記事を表示

【Java】コンストラクターについて

簡単にまとめました。

## コンストラクターとは

– インスタンス化のタイミングで呼び出される特殊なメソッド
– コンストラクターではメンバー変数の初期化など、事前処理系を記述するのが一般的

とりあえず、以下サンプルコードを実行します。

“`java
public class Person {
public String name;
public int age;

public Person(String name, int age) {
this.name = name;
this.age = age;
}

public Person() {
this(“えんどうゆうき”, 27);
}

public void show() {
System.out.printf(“%s(%d歳)です。\n”, this.name, this.age);
}
}
“`

“`java
public class ConstructorBasic {

public static void main(String[]

元記事を表示

ECSとStep Functionsで並列分散バッチ処理を行う

## はじめに

現状ではジョブ管理システム(JP1 等)+EC2で実装しているバッチ処理を、サーバレスにしてリソースコストや運用コストを抑えたいと思い、勉強のためECSやStep Functionsを触ってみました。

ECSのドキュメントや各種記事等を読んで調べた結果、メインのバッチ処理はJavaアプリをECS(Fargate)上でコンテナ実行することとし、Step Functionsで定期実行や並列実行を制御する構成を試すことにしました。主な理由は以下となります。

– 既存バッチ処理のJava資材をなるべく流用したい **→ Javaアプリ**
– 入力1ファイルあたりのデータ量がそれなりに大きい想定のため、Lambdaでは15分タイムアウトに引っかかる可能性がある **→ ECS**
– 長くて数時間の日次ジョブの想定であり、実行中以外のリソース利用料金発生を避けたい(EC2のメンテナンスも面倒) **→ Fargate**
– ECS単体だとリトライや並列化の制御は難しそう **→ Step Functions**

ぶっちゃけ今回試した程度の処理内容なら、Sparkで書い

元記事を表示

PipedOutputStream を使ってオーディオをストリームで扱う

PublicClodなどの音声認識サービスにおいてSDKで実装しようとするとインターフェースとしてInputStreamとなっている事があります。
byte[] で扱いたい場合にはPipedOutputStream/PipedInputStreamを使うと実装の幅が広がったりします。

“`java
import static java.lang.System.out;

import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.TargetDataLine;

p

元記事を表示

解決!!AtCoder ABC234 D java クリア!!

##解決しました!
java初心者のヤスです!
AtCoder ABC234 D をようやっと解決しました!

どこでつまづいて、どうやって解決したかをまとめています。
問題はこちら↓

https://atcoder.jp/contests/abc234/tasks/abc234_d

##つまづいたところ
・split()でわざわざ全部読み込んでいた。
・配列とListの多様
・StringBuilder知らなかった。
・そもそもの考え方

##いまだにイマイチわからんこと
・平衡二分探索
・log回の概念

###split()でわざわざ全部読み込んでいた。

“`java:java
String[] NK = sc.nextLine().split(” “);
int N = Integer.parseInt(NK[0]);
int K = Integer.parseInt(NK[1]);

//中略

int numlist[] = Arrays.stream(sc.nextLine().split(” “)).mapToInt(Integer::parseInt).toA

元記事を表示

Java – How to Configure Log4j2 Properties File?

# Console Logging
“`
log4j2.properties
# Extra logging related to initialization of Log4j
# Set to debug or trace if log4j initialization is failing
status = warn
# Name of the configuration
name = ConsoleLogConfig

# Console appender configuration
appender.console.type = Console
appender.console.name = consoleLogger
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %m%n

# Root logger level
rootLogger.level = debug
# Root logger referring to console appender
rootLo

元記事を表示

Docker in Javaのメモリ消費がコンテナの制限を超えていた話

# 発端
amazoncorretto:11ベースのコンテナでJava(Kotlin)のアプリケーションを稼働させました。
ホストサーバーのメモリは4G(実際に使用できるのは3.9G程度)
コンテナにはcpus: 2、mem_limit: 2.5gでリソースの制限をかけていました。

# 違和感
アプリケーションに負荷がかかるとメモリ使用率が2.5Gどころか3G超に、そしてサーバーが危篤(ピンチ)
危機が過ぎ去った後、開発環境で色々と検証

JDK11なのでUseContainerSupportがデフォルトオンになっているはずと思いこのようなソースを用意してコンテナ内で実行

“`A.java
public class A {
public static void main(String[] args) {
System.out.println(“Version: ” + System.getProperty(“java.version”));
System.out.println(“availableProcessors: ” + Runtime.getRunt

元記事を表示

Webで使えるJavaのUIフレームワークのVaadinをさわってみた(その2)

## これはつづきものです

https://qiita.com/haruki_ueno/items/afc10b7948411ace3d0d

## Starting a Project
ここではVaadinプロジェクトの始め方をみます。
始め方はここに記載があります。

https://vaadin.com/docs/latest/flow/guide/start

> The recommended way to start a new Vaadin project is to use Vaadin Start. It allows you to configure and download a customized starting point for your application.

という記述があるように、「Vaadin Start」というサイトからプロジェクトを作ることを公式が推奨しています。必須ではなく推奨です。

> The applications created using Vaadin Start are based on Spring Boot. Va

元記事を表示

AtCoder Beginner Contest 017をやった(Java)

AtCoder Beginner Contest 017をやった。
C問題解けない。。

##[A](https://atcoder.jp/contests/abc017/tasks/abc017_1)
一応Double型で宣言して実装

“`Java
import java.util.*;

public class Main {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
double ans = 0;
for(int i = 0; i < 3; i++){ ans += scan.nextDouble() * (scan.nextDouble() / 10); } System.out.println((int) ans); } } ``` ##[B](https://atcoder.jp/contests/a

元記事を表示

Spring Native 0.11(GraalVM)を使ってSpring BootのアプリをNaitive Image化する方法

# サマリー

Spring Native 0.11(GraalVM)を使ってSpring BootのアプリをNaitive Image化しました。
※手順の中で、開発環境構築まで行なっているので、自分の好きなアプリでNative Image化可能。

Q:Naitive Image化とは?
A:今回の検証だと、javaアプリをexe形式にすること(windows環境)

Q:Naitive Image化の何がいいの?
A:アプリ起動が速くなる

Q:アプリ起動が速くなると何がいいの?
A:サーバーレスアーキテクチャーのようにコンテナが頻繁に起動・削除を繰り返す環境で有用

Q:サーバーレスアーキテクチャーの具体例は?
A:AWS Lambda, Azure Functions, GoogleのCloud Functions, Oracle Cloud Functions等
※上記クラウドでアプリを実行するには、dockerイメージの作成が必要になりそう。別の機会に検証を行う。

今回のアプリの測定結果は以下の通り
※いわゆるパソコン(windows10、4コア8スレッド、メモリ16

元記事を表示

JavaとJMeterをインストールする

# 概要

Java(JMeterの動作に必要)およびJMeterのインストール方法を説明します。

– Macの場合およびWindowsの場合を扱います。
– jenvを使う場合の説明は、ここでは割愛します。

# Javaをインストール

Oracle Javaの有償化を巡って、Javaの開発環境(JDK)には様々な種類がありややこしくなっています。

– バージョン8まで
– Oracle JDKを無償で利用できました。
– バージョン9以降
– Oracle JDKが有償化されました。
– 代替となるOpen JDKが様々な機関から無償で提供されるようになりました。
– バージョン17以降
– Oracle JDKが再び無償で利用できるようになりました。([こちら](https://www.publickey1.jp/blog/21/oracle_jdkjava_17.html)を参照)

JMeterを利用する際は、利用するJDKのバージョンと種類を選定した上で、下記のいずれかの方法でインストールしてください。

> JDKのバージョンおよび種

元記事を表示

【OOP】05_ポリモーフィズム

こんにちは、コイキングです。

本記事では OOP(Object Oriented Programming == オブジェクト指向プログラミング)の説明のうち、ポリモーフィズムについて、説明したいと思います。

******
# 1. ポリモーフィズムとは?
**一つの機能が状況によって、違う結果を出す事で、**
Javaでは’親クラス’又は’インターフェース’を定義し、親を継承した子クラスで親の機能を再定義して**親クラスの参照変数から子クラスのインスタンスを参照し、**親クラスの参照変数から子クラスごとに再定義されたメソッドを呼び出すこととするのを言います。

## 1) ポリモーフィズムの長所
– 多種多様なインスタンスを一つの親の参照変数にて管理できるため、**コードの量が減り、コードの維持保守がより楽になります。**
– 一つの親を共有する子クラスを増やし機能を再定義することで新機能の追加が可能がため、**拡張に有利で、結合度が強くならないようにコードの実装ができます。**

## 2) ポリモーフィズムの短所
– ちゃんと活用するのは難しいため、プログラマーの能力によりコー

元記事を表示

Java Silver SE11 5章

# Java Silver SE11 5章
[黒本](https://www.amazon.co.jp/gp/product/4295007625/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1)をもとに学んだことをアウトプットしていきます。
主に問題を解いていて、間違えた箇所もしくは知らなかった内容になります。

## 配列
Javaの配列は、配列クラスから作成されたインスタンスであり、複数の値を取り扱う。
配列が扱う値のことを要素と呼ぶ。
以下のような特徴がある。

* 同じ型か互換性のある型を扱える
* インスタンス生成時に要素数を決める
* 後から変更できない

### 宣言とインスタンス生成
宣言時には以下のルールがある。

* 記述する[]は、変数名の前後に入れることができる
* 宣言時に要素数の指定はできない
* 配列型の変数には、あくまで配列インスタンスへの参照のみが代入されているので要素は関係ない

* 2次元配列を生成する場合の流れ(int[][]array = new int[2][2];)
1. 1次

元記事を表示

Java基礎(アウトプット用)

### メソッドの定義,呼び出し

“`java
class Main{
public static void main(String[]args){
hello();
}
public static void hello(){
System.out.println(“Hello World”);
}
}
“`

###引数をメソッドに渡す

“`java
class Main{
public static void main(String[]args){
hello(“Bob”);
}
public static void hello(String name){

System.out.println(name + “さんこんにちは”);
}
}
“`

###複数の引数を渡す
“`java
class Main{
public static void main(String[]args){
printPrice(“ピザ”,3000);
printPrice(“コーラ”,150);

元記事を表示

プログラミング言語を簡単にまとめる

##Java
JavaとはC言語ベースに開発された汎用性の高いプログラミング言語。求人需要が多い
WEBサービスから業務システム、組み込み、など多岐に渡り開発現場で採用されている。
フレームワークはspring Framework

##Ruby
Rubyとはオブジェクト指向のプログラミング言語。コードはシンプルに書きやすく読みやすい。
WEBサービスやWEBアプリケーションができる。
フレームワークのRuby on Rails。クックパッドや食べログに使用されている

##PHP
PHPとは動的なWEBページを生成することができるサーバーサイドのスクリプト語。HTMLは静的WEBページ。
他のプログラミング言語と比べると文法が比較的容易なので取得しやすい。
フレームワークはLaravel

## C#
マイクロソフト社が開発したオブジェクト指向のプログラミング言語。Javaと似ている。
GUIアプリケーション、WEBアプリケーション、ゲーム開発ができる
フレームワークはASP.NET

元記事を表示

OTHERカテゴリの最新記事