- 1. Effective Java[第3版] 学習のまとめ
- 2. AtCoder Beginner Contest 010をやった(Java)
- 3. Java ストリーム
- 4. Java13〜17 振り返り
- 5. メモリに乗り切らない巨大配列のシリアライズにCBORフォーマットを採用した
- 6. JavaのSEがRubyを書くためのまとめ(編集中)
- 7. Spring Bootアプリケーションのコンテナ化を試してみた
- 8. [Java]ArrayListとLinkedListの違いについて
- 9. Log4Shellデモ(実証〜検出〜修正)を公開しました
- 10. AtCoder Beginner Contest 009 をやった(Java)
- 11. Stream API の裏を覗いてみた
- 12. Java 例外を投げ直せ
- 13. JavaのMapについて
- 14. [Spring]Doma2で複数データソース設定
- 15. Javaを使用してExcel画像を追加、読み取り、削除する方法
- 16. CVE-2021-44228 の Log4j 1.x への影響を調査しました
- 17. Gradleでコンパイル警告を100件より多く表示する
- 18. AtCoder Beginner Contest 008をやった(Java)
- 19. Spring Bootを使ったWebアプリケーションのテンプレートを社内OSSとして開発・メンテナンス
- 20. 業務システムの画面仕様をコードベースで書けるようにして開発者体験を爆上げした話
Effective Java[第3版] 学習のまとめ
# はじめに
# [項目1]コンストラクタの代わりにstaticファクトリメソッドを検討する
クラスのインスタンスを提供するにはコンストラクタを使用するのが一般的と考えられているかが、その他にstaticファクトリメソッドというものがある。
それぞれにメリットデメリットがあるため、場合によってどちらを使うかを検討する必要があり、無意識にコンストラクタを使用することは避けるべきである。## staticファクトリメソッドとは
**クラスのインスタンスを返す単なるstaticメソッド**“`java
public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
“`## staticファクトリメソッドの長所
**1.名前を持つことができる**
例えば確率的素数(probable prime) のBigIntegerを返す場合**コンストラクタ**
BigInteger(int, int, Random)**staticファクトリメソッド**
Big
AtCoder Beginner Contest 010をやった(Java)
AtCoder Beginner Contest 010をやった。
たぶんC問題解けるからのちに追加予定。##[A](https://atcoder.jp/contests/abc010/tasks/abc010_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);
System.out.println(scan.nextLine().concat(“pp”));
}
}
“`##[B](https://atcoder.jp/contests/abc010/tasks/abc010_2)
いい方法ないかなーと思ったけど、実践的に考えたら「1 <= 入力値 <= 9」らしいので、パターンで判定した ```
Java ストリーム
[Javaのカレンダー | Advent Calendar 2021](https://qiita.com/advent-calendar/2021/java)の15日目の記事です
※ 少し呑んでます
# 概要
Java の Stream と List(等) で1000件くらいのオブジェクトを扱ったときのヒープ(メモリ)の使用量がどのように変わるかを確認しました
結果は、Stream の方が List よりも 1/4 のヒープで動いてそうです。これだけでも、Stream を使うメリットを感じられるのではないでしょうか?
:::note warn
大量のデータを扱うようなシーンでは、Stream API よりも Spring Batch などの専用のフレームワークを利用すべしとあるので、あくまでも比較的件数が限られているものの用途に向いてそうです
:::# 比較したコード
コードは適当なオブジェクトを 1000回分生成してリストに詰める(Stream から List に変換)するものです。
## Stream を使う場合
“`java
void useSt
Java13〜17 振り返り
アドベントカレンダーに18日に予定入れていたのだが、ダラダラして遅くなってしまった(汗)
以前[この記事](https://qiita.com/yk0807/items/ea2d4b54545c7af37a89)でJava8〜12までの流れをものすごくざっくりと紹介していたので、それから2年9ヶ月の間にJavaがどのように進化していったかを思いっきりざっくりと書き連ねてみる。
ちなみに、Java9からはずっと半年ごとにバージョンが更新されています。2019年9月 Java13 テキストブロック、switch式など
2020年3月 Java14 Recordクラスなど
2020年9月 Java15 Sealedクラスなど
2021年3月 Java16 VectorAPIなど
2021年9月 Java17(**LTS**) switchのパターンマッチングなど、Javaアプレット廃止この中だと、Recordクラス、Sealedクラスはうまく使えばプログラミングの幅が広がりそうですね。後、Javaのswitch文は若干使いづらいと感じていたので、これで使いやすくなるかなという期待はあ
メモリに乗り切らない巨大配列のシリアライズにCBORフォーマットを採用した
## TL;DR
– 要素数が分からず、メモリに乗り切らない可能性がある配列をシリアライズする必要があったので、フォーマットとして CBOR を採用した。
– Protocol Buffers[^protobuf] や Ion, MessagePack, BSON などの主要なバイナリフォーマットで配列を扱う場合、要素数またはバイト長を先頭などに記述する必要があるため、メモリに乗り切らず要素数が簡単には分からない配列を(単純には)シリアライズすることができない
– CBORは要素数不明の配列を表現する手段が[ある](https://www.rfc-editor.org/rfc/rfc8949.html#name-indefinite-length-arrays-an)
– Java/Kotlinの場合、jackson の [jackson-dataformats-binary](https://github.com/FasterXML/jackson-dataformats-binary)を利用してストリームパーサ等を実装することにより、データすべてをメモリに乗せずにシリアライズ・
JavaのSEがRubyを書くためのまとめ(編集中)
#目的
・Rubyの基本を理解し、他人のコードを読めるレベルに到達する。
・基本を整理しつつ、Javaとの違いを関連付けをしたい。
(・Qiitaデビュー)#動確環境
**OS**: Mac
**Version**: 2.6.8p205#基礎知識
##全てがオブジェクト
文字列、配列はJava同様にオブジェクト。
さらには、数値、真偽値、nil(Javaではnull)、正規表現等もオブジェクト。なので以下のように、それぞれに対してto_sメソッドでオブジェクトから文字列化することも可能。
“`
true.to_s
nil.to_s
“`
##分の区切り
基本的に文の区切りにセミコロン不要、改行でよい。
1行に複数の文を記述したい場合に明示的に;で区切ることは可能。##コメント
◯1行コメント
Java: //
Ruby: #◯複数行コメント
“`Java
/*
Javaコメント
*/
“`“`ruby
=begin
Rubyコメント
=end
“`
##変数
###型定義
動的型付け言語なので、宣言時のデータ型記述は不要。
(慣れないうちはコーデ
Spring Bootアプリケーションのコンテナ化を試してみた
この記事は[ZOZO Advent Calendar 2021](https://qiita.com/advent-calendar/2021/zozo) #5 23日目の記事になります。
# はじめに
Spring Bootアプリケーションのコンテナ化をしてみました。またSpring BootではSpring Boot2.3からCloud Native Buildpacksに対応しているため、
Dockerfileを使ったパターンとCloud Native Buildpacksの2パターンでコンテナ化を行ってみました。# コンテナとは
仮想化技術の一つでアプリケーションの実行環境も含めてコンテナとすることで
環境に依存せずアプリケーションを実行することができる技術です。# Dockerとは
コンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンプラットフォームです。# Cloud Native Buildpacksとは
Cloud Native Buildpacksはアプリケーションのソースコードから任意のクラウドで実行できるイメージに変換してく
[Java]ArrayListとLinkedListの違いについて
この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting)の24日目の記事です。
こんにちは、シアトルコンサルティングの小泉です。##はじめに
今回はJavaのコレクションフレームワークであるListについて調べてみました。
その中でもArrayListとLinkedListのそれぞれの特徴について説明します。##ゴール
ArrayListとLinkedListの違いについて理解する。##はじめに
JavaのコレクションフレームワークであるListについて説明します。## Listクラス
java.util.ArrayList
・配列型のリスト
・指定位置の要素の取得が速い
・要素の挿入、削除が遅いjava.util.LinkedList
・線形リスト型のリスト
・指定位置の要素の取得が遅い
・要素の挿入、削除が速い## ArrayList
Listインタフェースを実装したコレ
Log4Shellデモ(実証〜検出〜修正)を公開しました
#Log4Shellデモ(実証〜検出〜修正)
世間を騒がせている重大な脆弱性Log4Shellを、実際に体験して、修正するところまでを見ることができる動画を公開しました。ぜひご覧ください。#参考リンク
* [記事『Log4Shellの脆弱性が公開されました:Version 2.17.0にアップデートしてLog4j RCEを防ぐ』] (https://qiita.com/SnykSec/items/fccc10bd25cd5de0b56f)
* [Proof of Concept 用アプリ
AtCoder Beginner Contest 009 をやった(Java)
AtCoder Beginner Contest 009をやった。
##[A](https://atcoder.jp/contests/abc009/tasks/abc009_1)
3個の段ボールだとして両手で持った時何回往復が必要かを実装してください“`Java
import java.util.*;public class Main {
public static void main(String[] args) throws Exception {
// Your code here!
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();if(N == 1 || N == 2){
System.out.println(1);
} else {
if(N % 2 == 0){
System.out.prin
Stream API の裏を覗いてみた
この記事は [セゾン情報システムズ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/sisco) の 23 日目の記事です。
※ 注意:本記事は **Stream API の使い方を説明するものではありません**。
# Java の Stream API を使ってますか?
Java 開発者のみなさん、Stream API を使っていますか?もちろん、使っていますよね。(反論は認めません)
Stream API をうまく使うと表現力の豊かなソースコードを書けるから、 Java 開発者なら学ばない理由はないでしょう。
もし Stream API の使い方にまだ自信持っていないなら、Java 8 以降を対象とする入門書籍なら必ず取り上げているので、ぜひご自分の好みに合う一冊を見つけて熟読して身につけましょう。
そんな普段何気になく使っている Stream API ですが、今日はその裏にあるものを覗いてみたいと思います。
なお、この記事では以下のような用語の使い分けを意識しています。
* `Stream`
Java 例外を投げ直せ
[Javaのカレンダー | Advent Calendar 2021](https://qiita.com/advent-calendar/2021/java)の14日目の記事です
※ 北斗の拳のようなタイトルになってしまって申し訳ありません
# 概要
`@SneakyThrows` を使って検査例外(チェック例外)を非検査例外(非チェック例外)?に投げ直すやり方
Stream API では、検査例外は try – catch で握る必要があるので、非検査例外にすることでコードをシンプルに保ちます## 参考
– [@SneakyThrows](https://projectlombok.org/features/SneakyThrows)
– [Lombokの@SneakyThrowsを使うとSpring Bootの@Transactionalはロールバックされるのか調べる](https://www.greptips.com/posts/1320/)
– [jOOQ/jOOL: jOOλ](https://github.com/jOOQ/jOOL)# やり方
## b
JavaのMapについて
# 概要
[JavaのCollections Framework](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/doc-files/coll-reference.html) は多くの便利なMap実装を提供しています。
ここではそれらについて簡単に紹介していきます。
## Collections Framework におけるMapの全容
Collections Frameworkで提供しているMap系のインターフェース、抽象クラス、具象クラスの全容は以下のようです。
“`plantuml
interface Map {
}
abstract class AbstractMap implements Map {
}
interface SortedMap extends Map {
}interface NavigableMap extends SortedMap {
}interface ConcurrentMap extends Map {
}
interface Co
[Spring]Doma2で複数データソース設定
## やること
内部DBだけでなく、外部DBにも接続したいよーってときありますよね
SpringBootとDoma2で複数データソースに接続していきます## 環境
Java 11
Spring Boot 2.6.1
Doma 2.50.0
MySQL 8.0.25
Gradle 2.24## 実装
### データベース接続設定
“`application.properties
# DB1
datasource.one.jdbcUrl=jdbc:mysql://sample1.com:3306/sample1?autoReconnect=true&useSSL=false
datasource.one.username=sample
datasource.one.password=sample
# DB2
datasource.two.jdbcUrl=jdbc:mysql://sample2.com:3306/sample2?autoReconnect=true&useSSL=false
datasource.two.username=sample
datasource.t
Javaを使用してExcel画像を追加、読み取り、削除する方法
##背景
この記事では、JavaプログラムでExcelテーブルに画像を追加する方法を紹介します。画像を追加するときは、画像のサイズ、位置、回転、ハイパーリンク、オプションのテキストなどを設定できます。また、エクセルテーブル。ツール:無料のSpire.XLS for Java(無料版)
注:パッケージを公式Webサイトから**[ダウンロード](https://www.e-iceblue.com/Download/xls-for-java-free.html)**して解凍し、libフォルダー内のjarファイルをjavaプログラムにインポートするか、Mavenウェアハウスからダウンロードしてインポートすることができます。**Jarのインポート効果:**
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/e8026e17-bdfe-5a71-db85-84d8c73f1ca6.png)##Javaコード一覧
###画像を追加する
“`
import com.spire.xls.
CVE-2021-44228 の Log4j 1.x への影響を調査しました
[Apache Log4j Security Vulnerabilities](https://logging.apache.org/log4j/2.x/security.html) で [CVE-2021-44228](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228) の Log4j 1.x への影響について追記がありました。脆弱性の影響があるかどうかの確認方法を調査したので、参考情報として掲載します。
Apache Log4j 公式サイトには、次の通り記載されています。
> Log4j 1.x does not have Lookups so the risk is lower. Applications using Log4j 1.x are only vulnerable to this attack when they use JNDI in their configuration. A separate CVE (CVE-2021-4104) has been filed for this vu
Gradleでコンパイル警告を100件より多く表示する
### 背景
コンパイル警告があまりに多いプロジェクトだと、最初の100件までしか警告内容が出力されない。そもそもコンパイル警告が多い状態で放置していること自体が問題だが、途中で省略させずにすべてを確認したいこともある。
“`
$ ./gradlew clean build
Starting a Gradle Daemon (subsequent builds will be faster)
…
ノート:一部の入力ファイルは推奨されないAPIを追加使用またはオーバーライドしています。
ノート:入力ファイルの操作のうち、未チェックまたは安全ではないものがあります。
ノート:詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください。
警告100個
“`### 対応方法
`-Xmaxwarns` の値としてすごく大きな値を指定してやることで回避することができる。
“`gradle
compileJava {
sourceCompatibility = 17
targetCompatibility = 1
AtCoder Beginner Contest 008をやった(Java)
AtCoder Beginner Contest 008をやった。
##[A](https://atcoder.jp/contests/abc008/tasks/abc008_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);int num1 = scan.nextInt();
int num2 = scan.nextInt();
System.out.println((num2 – num1) + 1);}
}
“`##[B](https://atcoder.jp/contests/abc008/tasks/abc008_2)
重
Spring Bootを使ったWebアプリケーションのテンプレートを社内OSSとして開発・メンテナンス
# 概要
筆者は、Java向けOSSであるSpring Bootを使ったWebアプリケーションのテンプレートプロジェクト(以下、「本テンプレート」と記します)を、日立ソリューションズ内のOSSとして2年半開発・メンテナンスしてきました。
本テンプレートを開発するにあたって、社内ニーズ・メンテナンスコストの低減・ノウハウの実装と展開を実現するためにさまざまなツールを利用し、実装を行いました。本記事では本テンプレートにて実装している内容と各種ツールの活用方法を記します。
# 動機
2年半前、筆者は全社に対してソフトウェア技術の知見の収集と伝達を行う部署に所属していました。特に、社内でもニーズが高かったJavaによるWebアプリケーションの開発について知見を収集・伝達を行うことが主な業務でした。
その業務を通して、社内からお話を伺っていると、以下のようなご意見・ご要望を頂くことが多くありました。– Javaを使ったWebアプリケーションを開発したいが、数あるOSSのから何を選べばよいか分からない
– [The Twelve-Factor App](https://12factor
業務システムの画面仕様をコードベースで書けるようにして開発者体験を爆上げした話
# はじめに
* 業務システムの要件定義をする際に、開発者体験を向上させる取り組みとして「Javaのコードで定義し、画面仕様(画面モック)とソースコードのひな形が出力できる」というコンセプトを試したくて、実現するツールを試作しました。
* 注意点として、BtoCのような自由度の高い画面仕様を検討するものではなく、BtoBで業務でのみ利用する用途におけるシステムの画面仕様定義といったシーンに限られる感じです。過度にUI/UXを求める場合は、向いてないと思います。
* このコンセプトが開発者体験をどの程度向上されるのか、実プロジェクトに適用して検証してみた結果を報告します。# 画面仕様をコードベースで書くとは何か?
業務システムの要件定義において、重要な要素として **「画面仕様を決める」** があります。
いざ、画面仕様を書くとなるとパワーポイントで書いたり、エクセルで書いたり、最近だと、詳しくないですが、Adobe XD とかで書くのでしょうか?パワーポイントやエクセルでの限界は、差分管理(把握)やコンポーネントの再利用には難があります。一方、Adobe XD はこの点