JAVA関連のことを調べてみた2021年12月20日

JAVA関連のことを調べてみた2021年12月20日

POSTで呼ばれた場合のリクエスト情報の取得について(Spring Boot)

# はじめに
Spring Bootで開発している際にPOSTでリクエストされた場合の、リクエスト情報の取得方法について調べたので備忘録として記載します。

# 目次
– Spring BootでPOSTリクエスト
– POSTリクエストとは
– リクエスト情報を取得する
– まとめ

# Spring BootでPOSTリクエスト
まず初めに、POSTリクエストを受け付ける簡単なSpring Bootアプリケーションを実装します。

“`java
package com.example.demo;

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import javax.serv

元記事を表示

大学図書館アプリを引き継いでくれる方を募集しています

# はじめに
私は4年生でまもなく卒業なので、岩手県立大学図書館アプリの開発・保守を引き継いでくれる方を募集しています。
アプリの開発や運用などに興味がある方であれば大歓迎です!
興味ある方は、以下の連絡先までご連絡お願いいたします。
g031q024@s.iwate-pu.ac.jp

## 開発した経緯
大学の図書館から本を借りるには、大学の図書館ページにアクセスして蔵書検索をする訳ですが、この過程が割と面倒だと感じました。
ライブラリーアテンダントに所属していた私は、大学の職員さんと相談し、大学の図書館アプリを開発する許可を得て、開発を始めました。

## 学んだこと
アプリを開発しても、色々な人に使ってもらえることが確約されているわけではありません。
アプリを開発するのも大変ですが、そのアプリを多くの人に使ってもらえるようにするのもかなり大変だなと感じました。
PR活動は大学職員さんにも協力していただき、学内メールや学内ポスターなどの掲示も行いました。
開発した当初はあまりアクティブユーザーも多くはありませんでしたが、職員さんに学内メールで周知して頂いたりとPR活動に力を入れた

元記事を表示

コレクションクラスの処理速度について

#1. はじめに
エンジニアとして入社してから今までは主にJavaの開発を携わっていきました。
最近では処理のパフォーマンスに対しても考えないといけない場面に遭遇することもあったため、
簡単な内容となりますが今一度自分の復習も込めて、コレクションクラスでよく使われているListを例に、
それぞれの実行速度についてまとめてみます。

#2. ArrayListとLinkedList
それぞれの主な特徴として、
ArrayList :要素にアクセスするスピードが早い
LinkedList :要素に挿入したり削除するスピードが早い
が挙げられてます。

今回は上記二つを例にし、処理の実行速度の計測を行います。

##要素の追加(add)
まずは100万の要素を追加する場合の作成速度について比較します。

“`java
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

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

元記事を表示

Javaでベンチマーク(性能測定) JUnit5編

[Javaのカレンダー | Advent Calendar 2021](https://qiita.com/advent-calendar/2021/java)の3日目の記事です

# 概要

Javaの単体テストのベンチマーク(性能測定)を簡単に取りたいときに使える方法
golang の `go test -bench` のようにサクッとメソッドの性能を確認したいときに利用します

## 参考

– [openjdk/jmh: https://openjdk.java.net/projects/code-tools/jmh/](https://github.com/openjdk/jmh)
– [Javaによるマイクロベンチマーク| Baeldung](https://www.baeldung.com/java-microbenchmark-harness)
– [jmh](https://qiita.com/tags/jmh)

# やり方

## pom.xml

dependencies に以下を追加

“`

org.ope

元記事を表示

馬鹿でもやればできる!資格試験勉強!2つの抑えるべきこと

## はじめに

初めてQiitaに記事を投稿します。:clipboard:

簡単に自己紹介しますと、
大学を中退し、1年間営業(PCを人差し指だけで操作レベル)だったのですが、
その後転職し、大阪のSESでエンジニアをしています。

転職してから3ヶ月でJavaSilverを取得。
そこから5ヶ月でJavaGoldを取得したので、
今回、記事を書かせていただきます。:writing_hand:

資格毎の詳しい対策は自分より優秀な方が記事を書いていただいているので、
今回はどのようなアプローチで資格試験の勉強をするのか、
をテーマに書いていきます。

安心してください。
コツさえ掴めれば勉強効率は格段に上がります。

## 元から勉強できたんじゃないの?
自分は正直馬鹿だなと思います。どれくらいかというと、、、、
高校時代の話ですが、
テストが簡単な1年生1学期にも関わらず、
13教科中11個が赤点だったので、部活の顧問に呼び出しを喰らいました。

=============================================================

:man

元記事を表示

JavaでBase64復号化(String -> byte[])を省メモリに行う

## 概要
昨日はJavaでBase64符号化・復号化を省メモリで行う記事を書いた。

https://qiita.com/kago/items/b437928ebd58e8382e32

上記はInputStream/OutputStreamで入出力しているが、メモリ上にデータを保持する必要がある場合は別の実装になるので、今回はStringからbyte[]への復号化について考えた。

## 実装
“`Base64sample.java
public class Base64sample {

private static final int T_LEN = 16 * 1024;
private static final int B_LEN = T_LEN * 3 / 4;

public static byte[] decode(String src) throws IOException {

byte[] result = new byte[getDecodedLength(src)];

try (Reader read

元記事を表示

AtCoder Beginner Contest 006をやった(Java)

AtCoder Beginner Contest 006をやった。

B問題だから簡単!ということではなくて、今回のB問題は緑相当でしたし・・・
C問題も緑だし、、C問題は解説見たけど意識が遠のいていく感じがしたのでまた今度で()

##[A](https://atcoder.jp/contests/abc006/tasks/abc006_1)
FizzBuzzの問題です。プログラム学び始めたときはお世話になりました。。。
いろんな実装方法があるかと思いますが、僕は剰余で。

“`Java
import java.util.*;

public class Main {
public static void main(String[] args) throws Exception {
// Your code here!
Scanner scan = new Scanner(System.in);
ArrayList list = new ArrayList();

元記事を表示

Cognito Identity Pool 未認証ユーザーで 一時クレデンシャルを AWS SDK for Java 2.x で取得してみる

# はじめに

[前回の記事](https://qiita.com/sugimountaws/items/49ce163a703b555fd88a) では、Cognito Identity Pool で未認証ユーザーによる一時的なクレデンシャルの取得をやってみました。今回の記事では、よりプログラム側に寄せて、AWS SDK for Java 2.x を使って同様に未認証ユーザーによる一時的なクレデンシャルの取得を行ってみます。一時的に取得したクレデンシャルを使って、Textract を使った文字起こしを行ってみます。

Java の開発環境に利用している主なものは以下の通りです。

– AWS SDK for Java 2.x
– Maven
– Visual Studio Code

# Maven の設定

Maven を使って適当に Project を作成したあとに、`pom.xml` を編集します。変更点の概要は次の通りです。

– `maven.compiler.source` や `maven.compiler.target` を使って、コンパイルに使うバージョンを

元記事を表示

tomcat 設定1-4 Java tomcat setenv.sh

“`bash

$ cd /usr/local

$ curl -OL –header “Cookie: oraclelicense=accept-securebackup-cookie” “http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz”

$ tar xvzf ./jdk-8u131-linux-x64.tar.gz

$ mv jdk1.8.0_131 java

$ export JAVA_HOME=/usr/local/java

$ echo $JAVA_HOME

$ cd /usr/local/tomcat/bin/

$ vi setenv.sh
下線部追記
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
CATALINA_OPTS=”-server -Xmx1024m -Xms1024m -Xss228k”
export CATALINA_OPTS
ーーーーーーーーーーーー

元記事を表示

もうメンテされてないライブラリに最新のlog4jを強制する方法

# 問題
直接的にlog4jを利用している場合は、更新 or logbackへの移行 を行えばよい
しかし、脆弱なlog4jへの依存があるライブラリは、ライブラリ側の更新を待つ必要がある
そして、ある程度の規模のライブラリでも、結構な確率でメンテされておらず更新が見込めない

# 対処
“`gradle:build.gradle
ext[“log4j2.version”] = “2.17.0”
“`
外部から最新バージョンの使用を強制するため動作は保証されないが、脆弱なまま放置するよりはマシである

元記事を表示

脆弱なlog4jへの依存を1コマンドで把握する

# log4shellについて
– [Log4jの深刻な脆弱性CVE-2021-44228についてまとめてみた](https://piyolog.hatenadiary.jp/entry/2021/12/13/045541)

# 問題
log4jの対応を行う上での最大の問題は、膨大な依存の中から完全に取り除く必要がある点である
直接的にlog4jを利用している場合は、更新 or logbackへの移行 を行えばよい
しかし、外部ライブラリやフレームワークが利用している場合は、そもそも依存の把握自体が困難になる

# 対処
## 方法1 gradale dependencies
gradleの`dependencies` タスクを利用する
現時点の全ての依存のリストを出力することができる
ただ、単純な依存ツリーを吐き出しているだけなので、ある程度の規模のアプリケーションでは数万行になる
そのため、特定のバージョンのライブラリを取り除く目的にはあまり適していない

## 方法2 OWASP dependency check
OWASP(Open Web Application Secur

元記事を表示

もう怖くないSpring × Junit5 ~後編~

[もう怖くないSpring × Junit5 ~中編~](https://qiita.com/sho-yamashita/items/ec763cbb1924552ad112)からの続き

## モックを使ったテスト
### Mock?モック?ハンモック?
モックとは、あるクラスのメソッドが呼ばれたときの返却値を予め決めておくことで、
そのメソッドの処理をいちいち再現せずに、テストしたいクラスのテストを可能にしてくれる仕組み

![もう怖くないspring×Junit5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263851/bb195ff4-fe32-9aa4-a040-7fd7b4bcf91f.png)
引用)https://to-education.hateblo.jp/entry/2019/06/20/210558

### Mockito
![もう怖くないspring×Junit5.png](https://qiita-image-store.s3.ap-northeast-1.amazo

元記事を表示

Apache Log4j 脆弱性「CVE-2021-44228」について調べたこと

# はじめに
* 2021年12月よりアナウンスされている Apache Log4j の脆弱性「CVE-2021-44228」について個人的に調べたことを記載します。

# Apache Log4j について
* The Apache Software Foundation が提供している Java のロギング用ライブラリです。
* 2021年時点では、Apache Log4j 1.x を継ぐ、Apache Log4j 2 でアップデートが行われています。
* Apache Log4j 2 では、log4j2.xml というログフォーマットやログレベル等の定義ファイルをもとに、プログラムでログを出力します。

# CVE について
* MITRE により掲載されている、サイバーセキュリティ関連の脆弱性情報の一覧が該当します。
* 世界各国のサイバーセキュリティ製品やサービスで脆弱性の影響の有無がアナウンスされる場合に、CVE の番号が使われています。

# CVE-2021-44228 について調べたこと
* スコア
* NVD (アメリカ国立標準技術研究所が管理する脆弱性情報

元記事を表示

AtCoder Beginner Contest 005をやった(Java)

AtCoder Beginner Contest 005をやった。
~~C問題、、、できるかな。。。再起処理だと思うんだけど。。。~~
普通にループさせました。ただ一番最初からループさせたらパンクしそうな気がしたので、ちょっと工夫しました。

##[A](https://atcoder.jp/contests/abc005/tasks/abc005_1)
整数値を求めて、割り算する問題

“`java
import java.util.*;

public class Main {
public static void main(String[] args) throws Exception {
// Your code here!
Scanner scan = new Scanner(System.in);
ArrayList list = new ArrayList();

list.add(scan.nextLine());
System.ou

元記事を表示

JavaでBase64符号化・復号化を省メモリに行う

## 概要
Java 8からjava.util.Base64が導入されてBase64符号化・復号化が標準ライブラリで可能になった。
しかし、一般的な実装だと符号化前データの数倍のメモリが必要になるため、大きなデータを符号化・復号化したい場合にはメモリ使用量の問題が生じる。そこで標準ライブラリによる省メモリなBase64符号化・復号化の実装を考えた。

## 実装

“`Base64Sample.java
public class Base64Sample {

private static final int T_LEN = 16 * 1024;
private static final int B_LEN = T_LEN * 3 / 4;

// 符号化
public static void encode(Path src, Path dst) throws IOException {
try (InputStream is = Files.newInputStream(src);
OutputStre

元記事を表示

Windowsのファイル名で禁止されている記号を置換する

## 実行環境
– Eclipse IDE for Enterprise Java Developers
– OS: Windows 10
– Java version: 11.0.9

## コード
“`Main.java
public static void main(String[] args) {
// Windowsでファイル名として禁止されている文字は\/:?”<>|
String src = “\\_/_:_*_?_\”_<_>_|.txt”;
Pattern illegalFileNamePattern = Pattern.compile(“\\\\|/|:|\\*|\\?|\”|<|>|\\|”);
String fileName = illegalFileNamePattern.matcher(src).replaceAll(“-“);
System.out.println(“src :”+src); // \_/_:_*_?_”_<_>_|.txt
System.o

元記事を表示

jenkins swarm clientの自動起動・停止

# 1.起動用シェルファイルを作成
/home/ec2-user/swarmd.sh

“`
#!/bin/bash
cd /home/ec2-user
java -jar /home/ec2-user/swarm-client-3.29.jar -executors 2 -disableSslVerification -master http://172.31.34.77:8080 -name swarm-node -username admin -password xxxxxx -mode exclusive &
“`

# 2.unitファイルを作成
/etc/systemd/system/swarmd.service

“`
[Unit]
Description=swarm connection daemon
After=network.target

[Service]
SuccessExitStatus=143
Type=forking
User=ec2-user
Group=ec2-user
ExecStart=/home/ec2-user/swarmd.sh
E

元記事を表示

jenkins jnlp agentの自動起動・停止

# 1.起動用シェルファイルを作成
/home/ec2-user/jnlpd.sh

“`
#!/bin/bash
cd /home/ec2-user
java -jar agent.jar -jnlpUrl http://172.31.34.77:8080/computer/jnlp/jenkins-agent.jnlp -secret xxxxyyyyzzz -workDir “/home/ec2-user” &
“`

# 2.unitファイルを作成
/etc/systemd/system/jnlpd.service

“`
[Unit]
Description=jnlp connection daemon
After=network.target

[Service]
SuccessExitStatus=143
Type=forking
User=ec2-user
Group=ec2-user
ExecStart=/home/ec2-user/jnlpd.sh
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Re

元記事を表示

もう怖くないSpring × Junit5 ~中編~

[もう怖くないSpring × Junit5 ~前編~](https://qiita.com/sho-yamashita/items/eb1dad4139b322ca722f)からの続き

## JUnitのいろんな機能
### 例外の検査
例外のチェックが簡単にできます
![もう怖くないspring×Junit5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263851/3ca43357-c0a6-813f-251d-67b566c8ba3a.png)
### 複数の値で同じテストする(パラメーター化テスト)
複数のテストを作らなくても一つのテストで境界値テストできます
![もう怖くないspring×Junit5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263851/9bcfeb20-15e1-3e89-7ede-2794f4b68f45.png)
![もう怖くないspring×Junit5.png](http

元記事を表示

ソフトウェア演習D:NetBeans12.5でjsonを使えるようにする

こんにちは岩手県立大学とか、岩手の人たちAdvent Calender18日目の記事です。

先日、ソフトウェア演習Dの課題でGsonを利用してjsonを使いました。
個人的にGsonを導入するのに詰まったので、NetBeans12.5にGsonの導入について書きたいと思います。

## NetBeansにGsonを導入する
### Gsonとは
Gsonとは、Googleが提供するライブラリでJSONデータとjavaオブジェクトを変換することができます

Gsonライブラリの使い方:https://sites.google.com/site/gson/gson-user-guide#TOC-Overview
Gson GitHub:https://github.com/google/gson

#####今回使用するGsonは外部ライブラリなので以下の手順で追加する必要があります。

注意:私の環境では日本語化プラグインを入れていないので`日本語(英語)`で表記しま

元記事を表示

OTHERカテゴリの最新記事