- 0.1. スッキリわかるサーブレット&JSP入門で引っ掛かった点
- 0.2. 【Java】任意文字列でラブ注入
- 0.3. 自己紹介と初投稿
- 0.4. GradleでCheckstyleとOpenRewriteを使ってみた
- 0.5. Javaの学習 ~package~
- 0.6. Spring boot + Ajax 簡易掲示板作成 (投稿機能)
- 0.7. Ubuntu 22.04 で Java をインストール
- 0.8. docker上で動かしているjavaアプリが何か遅い気がするときに調べたことなど備忘録
- 0.9. Javaでキーボードピアノを作る
- 0.10. ScheduledThreadPoolExecutorとTimerによるタイマーの実装の違い
- 0.11. 【Javaの基本】メソッド呼び出しの処理の流れの確認
- 1. 経緯
- 2. 実例その1 引数あり(戻り値なし)
スッキリわかるサーブレット&JSP入門で引っ掛かった点
# 概要
タイトル通り、環境構築などで引っ掛かった点と解消法をまとめます。
環境構築方法等は公式WEBで無料公開されています。非常にありがたい!# パースペクティブにJava EEがでない
pleiades 2022版(最新)ではなく2021版をインストールすれば解決
https://mergedoc.osdn.jp/
最新版は使えないのね(悲しい)
# サーバーに追加または除去できるリソースがありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/5d9310de-28c2-21e5-f6f9-4ddc961e0d1f.png)
サーバーにプロジェクトを追加することができない問題。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazo
【Java】任意文字列でラブ注入
# はじめに
【問題】配列{"ドド","スコ"}からランダムに要素を標準出力し続け、『その並びが「ドドスコスコスコ」を3回繰り返したもの』に一致したときに「ラブ注入♡」と標準出力して終了するプログラムを作成せよ(配点:5点)
— ((?++)) (@Sheeeeepla) August 1, 2022
本記事ではTwitterで見かけた上記の問題を解くプログラムをご紹介します。
ただし、普通にJavaで解く方法については既に先駆者様がいらっしゃる([こちらの記事](https://qiita.com/na0y/items/1f5ed3ce215297d70d3a))ので、今回は任意の文字列を受け取るメソッドを実装し、上記の問題を解いてみました。
# 実装の方針
上記の問題を以下のように変換します。> 文字列の配列 `wordList` からランダムに要素を標準出力し続け、『その並びが文字列 `text` を `n` 回繰り返したもの』に一致したときに「`lastWord`」と標準出力して終了するプログラムを作成せよ
すなわち、「ドドスコスコスコ」のような具体的な文字列ではなく、任意の文字列を受け取って動作するメソッドを実装し、そこに「ドドスコスコスコ」などのパラメータを渡すことで問題文の動作を実現します。
なお、以下のような入力は考慮しない
自己紹介と初投稿
初めまして、やっさんです。
いままでは製造業に勤めていました。
未経験からエンジニアを目指しています。30代で転職して、IT業界に入ろうとただいま就活中です。
5月から8月まで職業訓練校で【java】の学習をしていました。
が、正直なところ、仕事で活かせるほどマスターしたとは言い難い状態。訓練校卒業後は自己学習がメインになりましたが、
やはり自分一人の意志だとレベルが低い自己満足でおわってしまうのが弱いところ・・・。どこかしらでアウトプットをしたいなと考えていた矢先に、こちらの【Qiita】というブログ??的なサイトを知りました。
基本的には、個人の勉強を乗せていく予定です。
学習したことをメモ帳的な感じで記載し、自分の思考の過去ログとして利用できたらなとも考えています。コード入力や、自己解釈についての誤解があると思われますので、参考にはしないでください。笑
あれば指摘やアドバイスしていただけると嬉しいです。あと同じような境遇の方とも知り合いたいとも思っております。
こんな感じですね!笑
よろしくお願いします。
GradleでCheckstyleとOpenRewriteを使ってみた
## はじめに
個人開発で作成したコードに対して以下の作業をしてみます。
・CheckstyleでJavaのコーディング規約に準じていない部分を検出
・OpenRewriteで一部をリファクタリング
## 開発環境
– Linux(Kali 5.10.0)
– Gradle 7.2.0
– Java 16.0.1
## 導入
### Checkstyle
#### Gradleにプラグインとバージョン情報を追加
“`
plugins {
id ‘checkstyle’
}
checkstyle {
toolVersion = ‘10.3.2’
}
“`
#### checkstyle.xmlを追加
まず、checkstyle.xmlを配置する新しいディレクトリを作成します。
デフォルトの構成は以下のようになります。“`
(root)
└── config
└── checkstyle
└── checkstyle.xml
“`
checkstyle.xmlはcheckstyleの公式GitHubレポジトリからコ
Javaの学習 ~package~
未経験からのエンジニア転職を目指していたのですが、先日無事内定をいただきました!
転職先で使用する言語がJavaということで、アウトプット学習のため少しずつ投稿していきたいと思います。(Java Silverの学習も兼ねています!)### パッケージ(package)とは
Javaはオブジェクト指向の言語であるため、クラスをたくさん作成する可能性があります。
そのクラスを機能ごとに、分類するための仕組みがパッケージです。#### パッケージの目的
①名前空間(ネームスペース)を提供することで、名前の衝突を回避する
②アクセス制御機能を提供する
③クラスの分類を可能にする### パッケージの宣言方法
“`java
package practice;
//package + 好きなパッケージ名;
“`
また、パッケージは階層を作成できる為(ディレクトリのようなイメージ)、その場合は上の階層から「.」で繋げて記述します。
“`java
package practiceA.practiceB.practiceC;
“`
##### ちなみに…
・パッケージ宣言をしない場
Spring boot + Ajax 簡易掲示板作成 (投稿機能)
# 最初に
「非同期通信」(Ajax)というものに興味がありJavaのアプリケーションに組み込んで実装してみました。
検索しても丁度良い記事があまり見つからなかったので実装方法を記事にしようと思います。後々編集、削除、検索機能の記事も投稿出来たらと思います。
本記事の完成ページ
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2645309/6884ef8c-9f50-1458-fd34-b11e979eb226.png)<参考サイト>
[Spring Boot で Ajax を実装する単純なサンプル](https://qiita.com/t-yama-3/items/572fabc873b4b6a0fc7c)# 1. プロジェクト作成方法
本プロジェクトはEclipse上で下記の画像の環境で作成しました。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2645309/efedb511-d1
Ubuntu 22.04 で Java をインストール
Ubuntu において Java を使おうとするといろいろ選択肢がある。
一番安直にしようとするとどうしたらいいかな・・・
以前 Ubuntu20.04 で実験しましたが、同様に 22.04 で確認してみました。# 環境
– Ubuntu Linux 22.04
– openjdk-11 (デフォルト設定)# 何があるかな?
“`
$ apt-cache search openjdk | grep jre
“`
とすると、以下が得られた。“`
default-jre – 標準的な Java または Java 互換のランタイム
default-jre-headless – 標準的な Java または Java 互換のランタイム (ヘッドレス)
openjdk-11-jre – OpenJDK Java ランタイム – Hotspot JIT 版
openjdk-11-jre-headless – OpenJDK Java ランタイム – Hotspot JIT 版 (ヘッドレス)
openjdk-11-jre-zero – Alternative JVM for
docker上で動かしているjavaアプリが何か遅い気がするときに調べたことなど備忘録
docker上で動かしているjavaアプリが何か遅い気がするとき、以下のような事をすればOKと思っている
マシン負荷を調べる(df -h, disk i/o, memory)
> [マシン負荷を調べる(df -h, disk i/o, memory, CPU, SSD/HDDかどうか)](https://qiita.com/seigot/items/56a8807bc25023909061)
実行中のDocker Containerのメモリ使用量を docker stats コマンドを使って調べる
> https://docs.docker.com/engine/reference/commandline/stats/
javaアプリのヒープメモリが足りない場合は以下のように調べてみる
> [JVMのヒープメモリを確認する(jstat)](https://qiita.com/kaikusakari/items/9b7c3d1fb524eb6aa348)
> $ jps
> 1121 Jps
> 988 Bootstrap
> – 上のtomcat起動後、psコマンドでも
Javaでキーボードピアノを作る
# Javaでピアノを作りたい
* Swingでキーボードイベント処理
* Soundで音を作成を実現したい。
# 執筆時の最終的到達点
* キーボードを押すと、音を出すことができるようになった
* キーコード、周波数、音量等の指定が可能# 執筆時の未到達点
* わずかに低遅延の反応(現状、キーを押してからラグがあるように感じる、実際バッファサイズ分22.7msの遅延が発生する可能性がある。バッファサイズを減らすにはバッファの更新間隔を減らす必要がある。更新イベントはTimerで起こしてるが、15ms程度遅延が発生することがある。結果として、これ以上バッファサイズを減らすことはできない。キーボードイベントが発生した段階でバッファの内容をflushして、内容を書き換える手法を取ればキーボードイベントに対して遅れが発生しないはずなので、この手法は今後の目標とする。)
* 正弦波を出しているが、ノイズが乗っているのでフィルタが必要である(このノイズはKey.releaseイベントが起きた段階で音を0にしているためステップ上の波形が発生していることによると考えられる。)
* ロ
ScheduledThreadPoolExecutorとTimerによるタイマーの実装の違い
# Timerの実装
“`java
java.util.Timer
“`
でタイマーを実装することができますが、ほかにも“`java
java.util.concurrent.Executors;
java.util.concurrent.ScheduledExecutorService;
“`
を使って実装することも可能です。# 記事の目的
タイマーで次のように10ms間隔でタスクを定期実行するよう設定した場合、“`java:TimerTest.java
import java.util.Timer;public class TimerTest {
public static void main(String[] args) {
// Timerクラスのオブジェクトを作成
Timer time = new Timer();
time.scheduleAtFixedRate(new SampleTask(), 0, 10);
}
}
“`“`java:SampleTask.java
i
【Javaの基本】メソッド呼び出しの処理の流れの確認
経緯
「メソッド呼出後、呼出先の処理が終了し、呼出元に”返ってきて”処理が継続される。」という話と、「メソッド呼出後、呼出先の処理が終了し、呼出元に”返ってきて”処理が継続される。return文がある場合、呼び出し元に戻り値(変数)も”返ってくる”」という話は言い回しによっては混乱させると感じたため。
実例その1 引数あり(戻り値なし)
![スクリーンショット 2022-08-05 8.33.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2133160/6b98096b-bdff-3579-8f69-bcd289c820ea.png)
![スクリーンショット 2022-08-05 8.32.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/
【メモ】関数とラムダ式について理解する
# 関数オブジェクトとは
第1級オブジェクトとして扱う関数を関数オブジェクトという。## 第1級オブジェクトとは
プログラムの実行中に生み出したり、変数に代入したりできるもの。(データ、データ構造、インスタンス、関数)
(補足)関数オブジェクトは参照型のためメモリ領域の先頭番地が変数に格納される。### 第1級オブジェクトの特性
– 変数に代入できる。
– プログラム実行中に実体を生成できる。
– 引数として渡せる## 関数オブジェクトの格納方法
“`
// 静的メソッドの場合
関数型インターフェース 変数名 = クラス名::そのクラスの静的メソッド名// インスタンスメソッドの場合
関数型インターフェース 変数名 = インスタンス変数名::そのインスタンスのメソッド名
“`## 標準関数インターフェース:java.util.functionパッケージ
関数オブジェクトを格納するための汎用的なインターフェースが準備されている。
引数が3つ以上の関数等用意されていない方も存在するため、そういった場合には自作が必要。
(補足)関数型インターフェースは***1つの抽象
Java配列を個別インスタンスでまとめて初期化する方法。ただしfor文テメーはダメだ
# TL;DR;
配列要素にインスタンスを埋めて初期化する時は、**無難に**`for`文を使うか`Arrays#setAll`を使おう。
`Arrays#fill`だとインスタンスが同一になる罠があるから気をつけてね。[^1][^1]:`Arrays.fill`で小ハマりしつつ、日本語の関連記事がうまく見つけられなかったので書きました。
# この記事を作った経緯(長い茶番とも言う)
本稿には挑戦的なタイトル[^2]や言葉の乱れがございますので、我慢するかブラウザバックをお願いいたします。
[^2]:書きながらテンションが上がって文体に乱れが出た点や、挑発的なタイトルになった点は書きながらテンションが上がったせいです。
## for文なんてダセーよなー
自作クラスの配列を初期化する時、どうしますか?
Javaの教本では`for`文使うじゃないですか。
例えば★こんな風★に。“`
public class Sample {
public static void main(String[] args) {
Sample[] samples =
Spring Batch初期構築 ~JobRepositoryの保存先設定から実行まで~
# はじめに
業務でバッチアプリケーションの開発を行うことになったため、まずは動くバッチアプリを作るぞ!ということで、
こちらのQiitaの記事を参考に進めていました。**(以降、この記事内の工程をやった前提で進みます)**
[まずは実践、Spring Boot Batchの動かし方](https://qiita.com/kawakawaryuryu/items/4b3f5cc7574b7bd6b625)しかし開発を進めたところ、[JobRepositoryの保存先~起動](https://qiita.com/kawakawaryuryu/items/4b3f5cc7574b7bd6b625#datasource%E3%81%AE%E8%A8%AD%E5%AE%9A)のところで躓いてしまい、かなりてこずったので、
本記事では**JobRepositoryの保存先の設定と実行手順について説明**しようと思います。※上記の記事は、基本的なSpring Batchについての概念も丁寧に説明されていますので、
公式リファレンスと一緒に参考されるとよいかと思います。# 前提
今回紹
Java で圧縮ファイル gzip (.gz) ,bzip2 (.bz2) を読み込む
以下サンプルでは,単純なテキストファイルを gzip,bzip2 で圧縮されたファイルを読み込むものとします.
gzip はJVM標準のライブラリだけで読み込み可能です.
java.util.zip.GZIPInputStream を利用します.“`java
package hello.compress;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.zip.GZIPInputStream;public class HelloGZipMain {
public static void main(String[] args) throws Exception {
File gzFile = new File
Javaでラブ注入してみた
# 発端
現在、部署に配属されてきた新入社員のトレーナーをしています。
開発未経験で、入社して初めてプログラミングを経験する方で現在絶賛Javaのキャッチアップ中。曰く、1on1で「Twitterでこんなツイートを見かけたのでやってみました」とのこと。
【問題】配列{"ドド","スコ"}からランダムに要素を標準出力し続け、『その並びが「ドドスコスコスコ」を3回繰り返したもの』に一致したときに「ラブ注入♡」と標準出力して終了するプログラムを作成せよ(配点:5点)
— ((?++)) (@Sheeeeepla) August 1, 2022
「そういうところから勉強の題材を自分で見つけてやってみる姿勢めっちゃ良いね!業務時間使っていいからこれからもどんどんやっていこう!」
と大絶賛したところで、~~先輩ぶってドヤ顔するため~~ 参考にしてもらうため解答例を書いてみました。# コード
その場でめっちゃ雑に書いて新入社員に見せたものから、あまりに細かい説明用のコメントを抜いたり軽く手直しはしています。
“`java:Dodosuko.java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
Jenkinsのインストールとビルド実行(AmazonLinux2)
# はじめに
本記事はjenkinsのインストールと簡単なジョブの実行をまとめたものです。Jenkinsをさわってみることを目標に学習した備忘録になります。
下のサイトを可能な限り再現しています。https://www.buildinsider.net/enterprise/jenkins/001
### システム要件
|MW等|バージョン等|
|:—|:—|
|OS|AmazonLinux2|
|Jenkins|2.361|
|OpenJDK|11.0.13|# Jenkinsのインストール
コマンド上でJenkinsをインストールして、ブラウザからアクセスできるようにしていきます。
### コマンド操作
Jenkinsリポジトリを追加して、yumでインストールしていきます。
“`
# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
# rpm –import https://pkg.jenkins.io/redhat/jenkins.io.
superとsuper()
# thisと差
thisは現在のクラスのメンバー変数を指し、superは相続クラスのメンバー変数を指す。現在のクラス: this.変数
相続クラス: super.変数# Overriding
overridingは親クラスを受け継いだメソッドを子クラスで再利用することだ
条件 : メソッド名, リターンタイプ ,パラメータの個数が同じでなければならない“`
public class index{
public static void main(String[] args){
Parent parent = new Parent();
parent.sum();Child child = new Child();
child.sum();
}
}public class parent{
int sum;
public int sum(int x, int y){
sum = x + y;return sum;
}
}public class
Javaと学ぶ関数型言語
# はじめに
関数型言語って何…?て人のためにJavaと比較をしたりしながら、どんなものなのかを知ってもらおうと思い本記事を書かせてもらいました。皆さんの学びの助けになれば幸いです。# 関数型言語とは
関数がそのままプログラムになる**宣言型言語**でλ計算を基礎としています。このλ(ラムダ)が言わずもがなJavaのラムダ式に繋がってきます。興味が湧いたら是非最後まで読んでいってください。
- 宣言型言語とは
- 手続きを明示的に記述せず、データ間の関係を定義することに重点をおき、アルゴリズムを記述する言語
# 手続き型と関数型の違い
- 手続き型
- 代表的な言語にC言語・Fortran・COBOLなどがあります。コンピュータに逐次的に実行させる動作を人間が命令でひとつひとつ丁寧に書いていかなければなりません。例えるならば、「水を飲む」という動作をさせたいとき、「右手をあげて、コップがある方向を向いて、右手を15cm前に進めて、右手の親指の第一関節を曲げて…」み
thisとthis()
* 生成者やメソッドの媒介変数とオブジェクト変数の名前が同じときに使用
* 同じクラス内の他の生成者を呼び出すときに使用
# this
メンバー変数に値を入れてあげたいときに使用
メンバー変数:メソッドや生成者ではなく、classにある変数
“`
public class student(){
int age; // メンバー変数
int score;
}
“`
変数名が同じときは近い変数を指す
“`
public student(int age, int score){
age = age;
score =score;
}
“`
媒介変数のage、scoreを指すためエラー発生
“`
public student(int age, int score){
this.age = age;
this.score =score;
}
“`
thisをつけるとメンバー変数を指す—
# this()
生成子、メソッドを指す
“`
public student(int age, int score){
age = ag