- 1. ・配列とは
- 2. ・データ型[]
- 3. ・メソッド
- 3.1. ・fillメソッド
- 3.2. 【最新版 】SpringSecurity 6.0.1 での Configクラスの書き方
- 3.3. Optional class ifPresent, map method
- 3.4. Streamとは
- 3.5. Excelファイルの差分をとるExcelCompare
- 3.6. [Java]使いそうな部分まとめ
- 3.7. orElse, orElseGet, orElseThrow of Optional class
- 3.8. SpringBoot Repository層の単体テスト H2データベースを使うときの設定
- 3.9. unchecked exception
- 3.10. 【Spring Boot】@ConfigurationPropertiesの『Prefix must be in canonical form』を解決する
- 3.11. さまざまな場面で使う三項演算子
- 3.12. e.printStackTrace()とSystem.out.println(e)とSystem.out.println(e.getMessage())の違い
- 3.13. 新人SEが効率的に成長するために必要なこと
- 3.14. JavaGold受かりました。
- 3.15. 迷路作成
- 3.16. Optional class
- 3.17. 複数methodをまとめて排他
- 3.18. ArrayListを更新中に参照する
[エラー]SpringBoot Repository UPDATE文の単体テストが成功しない 原因@Modifyingの引数が不足していため。
# 症状
RepositoryにおけるUPDATE処理の単体テストでエラーが出たので症状と対処法を投稿します。## プロダクトコード
“`CustomerRepository.java
@Repository
public interface CustomerRepository extends CrudRepository{ @Modifying
@Query(“UPDATE Customer c SET c.enabled= true WHERE c.id = ?1”)
public void enabled(Integer id);
}“`
“`Customer.java
@Entity
@Table(name = “customers”)
@Data
public class Customer {@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = “id”, nullable = f
Luceneの転置インデックスの仕組み part1
## 概要
Luceneのインデックスの構成などを理解を深めるためにLuceneのコードを読んだのでそのメモ
## アジェンダ
– インデックス作成されるまで
– Luceneの転置インデックスとは ←次回
– タームリストとポスティングリストの実現方法(コード) ←次回## インデックス作成までの順番として
### インメモリバッファ
ドキュメントデータセグメント単位でインメモリバッファに保持### マージ
設定されたポリシーに沿ってセグメント同士を結合する### フラッシュ
フラッシュによってインメモリバッファのデータをdiskにセグメントとして永続化する
セグメントファイルとして永続化されるが、次のコミットされるまでは検索では使えない### コミット
これによって強制的にデータがフラッシュされる
これによってdiskに永続化されたセグメントファイルが検索可能になる
だたdisk同期が発生するのでコストがかかる処理になっている![image.png](https://qiita-image-store.s3.ap-northeast-
Java ~配列~
・配列とは
配列とは、値をまとめて管理するオブジェクトのこと。
配列の種類は`データ型[]`、`ArrayList`、`LinkedList`、`HashMap`の4種類ある。
・データ型[]
・多次元配列の作り方
多次元配列とは、配列の中に配列を作ることである。
`データ型[][] 配列名 = new データ型[要素数][]`で作成することができる。
`配列名[0] = new データ型[要素数]`で2次元目の配列の個数を入れられる。
![多次元配列図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850098/69c86168-f67a-51e2-9c39-66ce5d94544e.png)
・メソッド
・fillメソッド
`Arrays.fill(配列名, 入れたい要素)` これを使うとすべての要素を“入れたい要素”にできる。すでにある要素も上書きされる。
・配
【最新版 】SpringSecurity 6.0.1 での Configクラスの書き方
## はじめに
久々に個人開発をしようと思い SpringSecurity で認証機能を実装しようとしたところ、`SpringSecurity5.7以降` Configクラスの記述方法に大きな変更が加えられていることを知りました。そこで今回は 最新版である`6.0.1`で認証機能を実装することとしましたが、作業中にいくつか躓く場面があったため、復習を兼ねて記事として投稿してみます。ちなみに私は [公式ドキュメント](https://spring.pleiades.io/spring-security/reference/) を参考にしながら実装しました。
今回は時間がないためConfigクラスの変更点についてのみ触れ、メソッドチェーンそれぞれがどういった役割をしているか等は割愛させていただきます。時間がある際に実際にDBから取得したユーザ情報でログインといった通しの実装について記事を書きたいと思っています。
## 開発環境
– Java17
– postgreSQL 14.3
– SpringBoot 3.0.2
– SpringSecurity 6.0.1
– Gradle
Optional class ifPresent, map method
ifPresent() is given Consumer interface
ifPresentOrElse() is given Consumer interface and Runnable interface
map() is given Function interface, and Function#apply method return
map returns Optional
flatMap() is given Function interface, and Function#apply method return Optional
flatMap returns Optional“`java
public class Outer {
public static void main(String[] args) {
Optionalo = Optional.of(“abc”);
o.ifPresent((str) -> { System.out.println(“optional
Streamとは
– 値の集合に対する処理を使い回す仕組みが「Stream」らしいです。
SampleCode
projava/StreamSample2.javapackage projava;
import java.util.List;
public class StreamSample2 {
public static void main(String[] args) {
var data = List.of(“yamamoto”, “kis”, “sugiyama”);var result = 0;
for (var s : data){
if (s.length() >= 5){
result++;
}
}
System.out.println(result);
}
}こち
Excelファイルの差分をとるExcelCompare
テキストファイルの差分を取りたいのであれば、diffやgit-deltaが便利であるが、人類は時としてExcelファイルの差分を取らなければならない場合がある。
そんなときに便利なツールが
https://github.com/na-ka-na/ExcelCompare
である。Githubのリリースページからファイルをダウンロードして、`excel_cmp` とすれば動く。
macOSでは `brew install excel-compare` すれば動くみたい。
この記事は以上です。
[Java]使いそうな部分まとめ
# はじめに
学内でJavaの競技会があるらしいので、競技プログラミングで使えそうな記述をまとめておきました# 参考
[Java 標準入力 – Qiita](https://qiita.com/mat827/items/4fdd334498c05e942c63)
[Javaの文字列操作【プログラミング初心者向け教材】](https://tokitsubaki.com/java-string-manipulation/147/#:~:text=Java%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E6%93%8D%E4%BD%9C%201%20%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E7%B5%90%E5%90%88%E3%81%97%E3%81%9F%E3%81%84%20%E6%9C%80%E3%82%82%E5%8D%98%E7%B4%94%E3%81%AA%E3%81%AE%E3%81%AF%E3%80%81%20%EF%BC%8B%E6%BC%94%E7%AE%97%E5%AD%90%20%E3%81%A7%
orElse, orElseGet, orElseThrow of Optional class
orElseは、isEmpty() = trueの場合に別の値にすり替える
orElseGet()はSupplier
orElseThrow()は extends Throw> Supplier“`java
class SampleException extends Exception {
}
public class Outer {
public static void main(String[] args) {
System.out.println(Optional.of(“A”).orElse(“X”));
System.out.println(Optional.empty().orElse(“X”));
System.out.println(Optional.empty().orElseGet(() -> “Y”));
try {
System.out.println(Optional.empty().o
SpringBoot Repository層の単体テスト H2データベースを使うときの設定
# 概要
久しぶりにJavaを触ったところRepository層の単体テストの設定で詰まったので投稿します。
Repositoryの単体テストをするときはH2データベースを使います。
H2データベースを使うことでデータベースにアクセスしないで、単体テストができます。以下エラー時の画像
Failed to load Application Contextというエラーが出てテストが失敗します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/a4e8a6f5-2aaa-cec3-bbd1-82bbd2a83931.png)
# 開発環境
OS:windows10
IDE:IntelliJ Community
spring-boot-starter-parent 2.75
java : 11# 実装方法
## pom.xmlにH2データベースを追加する
“`pom.xml
com.h2database<
unchecked exception
NullPointerExceptionのようなRuntimeException系のexceptionは
uncheckedExceptionで、try,catch不要
“`java
public class Outer {
public static void main(String[] args) {
NullPointerException npe = new NullPointerException();
System.out.println(npe instanceof RuntimeException);
String[] str = null;
String s = str[0];
}
}
“`
“`
Exception in thread “main” true
java.lang.NullPointerException
at com.mycompany.mavenproject1.Outer.main(Outer.java:13)
“`
Inte
【Spring Boot】@ConfigurationPropertiesの『Prefix must be in canonical form』を解決する
# 前提
SpringBootにて`@ConfigurationProperties`を使って`application.yml`の値を読み取る際に以下の警告が出た。
“`
Prefix must be in canonical form {行数}
“`
# 問題点読み取り元の`yml`ファイルは以下。
“`application.yml
sampleData:
data1: hoge
data2: fuga
“`
読み取りをするにあたり、下記のように記述していた。“`SampleDataConfig.java
@Component
@Setter
@Getter
@ConfigurationProperties(prefix = “sampleData”)
public class SampleDataConfig {
String data1;
String data2;
}“`
# 解決策`prefix`に指定する値がキャメルケースであることが問題だった。
そのため以下のようにケバブケースで`prefix`を指定することで
さまざまな場面で使う三項演算子
## 目次
[1.基本構文](#1-基本構文)
[2.条件によって出力の内容が異なる場合](#2-条件によって出力の内容が異なる場合)
[3.条件によって代入する値が異なる場合](#3-条件によって代入する値が異なる場合)
[4.return文に記載する場合](#4-return文に記載する場合)
[5.応用編](#5-応用編)## 1. 基本構文
“`java
条件 ? trueの場合 : falseの場合
“`
三項演算子を使用することで、コードの記述量を減らし実装を簡潔にすることができます。
また、if文のネストが深くなりすぎるのを防ぐこともできます。では実際の実装例を見ていきましょう。
※実装例に記載の魚リストの要素数はさいごまで2のままです。## 2. 条件によって出力の内容が異なる場合
### if文ver.
“`java
// 魚リスト
ListfishList = new ArrayList ();
fishList.add(“まぐろ”);
fishList.add(“かつお”);// if文ver.
e.printStackTrace()とSystem.out.println(e)とSystem.out.println(e.getMessage())の違い
e.printStackTrace()
と
System.out.println(e)
と
System.out.println(e.getMessage())
の違い。“`java
public class App {
public static void main(String[] args) throws Exception {String aaa = “aaa”;
try{
aaa.substring(1000);
}catch(Exception e){
e.printStackTrace();
System.out.println(e);
System.out.println(e.getMessage());
}
}
}“`
## e.printStackTrace()の場合
“`
java.lang.StringIndexOutOfBoundsException: begin
新人SEが効率的に成長するために必要なこと
# 新人SEが効率的に成長するために必要なこと
**軽く挨拶**
記事を閲覧していただきありがとうございます。当記事は、SIerで働く新人SEの葛藤と日々のアウトプットを行うための記事です。技術的な話もしますが今回は「新人がいち早く戦力になる」ためにどういうステップを踏めばいいのかという観点で話していこうと思います。1. [結局アプトプットを出せるかだと思う](#anchor1)
1. [エンジニアとして成長するために必要なこと](#anchor3)
1. [まとめ](#anchor4)## 結局アプトプットを出せるかだと思う
1. エンジニアにおけるvalueとは
いきなりですが、私の思う価値のあるエンジニアとは、「生産性の向上にに貢献できる」エンジニアだと思います。これはベテランであっても新人であっても共通にしてチームに貢献することが大切だと思います。
「生産性」という言葉が抽象的なので一つ階層を下げてみましょう。例えば以下のようなものがありますね
– プロ
JavaGold受かりました。
JavaGoldに受かりました。
自分は、どうやらJavaGold受かったそうです。
勉強時間は一か月です。
覚えたところもありましたが、読むのなら大丈夫という感じです。
迷路作成
proになるJava読書中、難しくなってきたのでメモがわりに。
– Sample Code
projava/Maze.java
package projava;
import java.io.IOException;
public class Maze {
public static void main(String[] args) throws IOException {
record Position (int x, int y){}
int[][] map = {
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 1, 0, 1, 0, 0, 1},
{1, 0, 1, 0, 1, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 0,
Optional class
Optionalはnullかnull以外かのどちらの値も格納できるclass
Optional.ofNullable(xxx)はnullならemptyに読み替えて格納する。
array refer時のArrayIndexOutOfBoundsExceptionやNullpointerExceptionを回避してくれるようなものではないので注意“`java
public class Outer {
public static void main(String[] args) {
String strArray[] = {“1a”,”2a”,null};
System.out.println(get(strArray,3));
System.out.println(get(strArray,2));
System.out.println(get(strArray,1));
System.out.println(get(null,1));
}
staticO
複数methodをまとめて排他
first,second,thirdをまとめて排他にするときは
別class化(Test)してReentranLockを持たせる。
lockするとunlockするまでlockできない。
Reentrantを共有ため、threadは単一のTestを共有“`java
class Test {
final ReentrantLock re = new ReentrantLock();
void lock() {
this.re.lock();
}
void unlock() {
this.re.unlock();
}
void first() {
System.out.println(Thread.currentThread().getId() + “:1”);
}
void second() {
System.out.println(Thread.currentThread().getId() + “:2”);
}
void third()
ArrayListを更新中に参照する
forでlistを読み込み中に、別スレッドでlist addすると
exceptionが発生する
“`java
class ReadTask implements Runnable {
Listl;
ReadTask(List l) {
this.l = l;
}
@Override
public void run() {
try {
for (String str:this.l) {
System.out.println(str);
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
} catch (Exception ex) {
ex.pr