- 1. Java で Azure App Service の Azure AD 認証の JWT からユーザー情報を取得してみた
- 2. SonarLintからRSPEC-3305のご指摘受けたのですぐ対応しちゃいましょう
- 3. UPDATEしないイミュータブルなテーブル設計
- 4. Thread class
- 5. 【備忘録 AtCoder】アルゴリズムによって計算時間が大きく異なる二つのコード
- 6. UnaryOperator interface
- 7. int → string
- 8. Function interface andThen method, compose method
- 9. Function interface
- 10. Java Silver を受験した時の話
- 11. Predicate interface
- 12. 【初心者専用】ガベージコレクションについて
- 13. Consumer interfaceを使用してconstructorの引数追加の影響を減らす
- 14. 機械学習、Java、GridDBを用いた糖尿病予測
- 15. 日付と時間の文字列を取得するには
- 16. Java springとspringbootの違いをまとめてみた
- 17. Java アクセス修飾子の使い方とカプセル化
- 18. lamda expressionをfunctional interfaceに
- 19. Supplier interface
- 20. enum
Java で Azure App Service の Azure AD 認証の JWT からユーザー情報を取得してみた
## 背景と目的
Azure App Service は Azure AD 認証が簡単に追加できるので、Web アプリ側で認証機能を実装しなくて済みます。とはいえ Web アプリ側の機能として、認証済みのユーザーを識別して動作させる必要があったりします。そんな時は、認証後のリクエストヘッダーに JWT が挿入されるので、これを利用してユーザー情報を取得します。
## 前提条件
“`bash:bash
# Mac 上で検証しました
bash-3.2$ sw_vers
ProductName: macOS
ProductVersion: 13.1
BuildVersion: 22C65# Java の情報です
$ java -version
openjdk version “11.0.10” 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 1
SonarLintからRSPEC-3305のご指摘受けたのですぐ対応しちゃいましょう
# SonarLintのエラー
業務でコーディングしていたら、SonarLintが下記のご指摘をしてくれました。
`Inject this field value directly into “sqlSessionFactory”, the only method that uses it`# エラー発生時のコード
一部抜粋です。
“`java
@Autowired
private ApplicationContext context;@Bean(name = “sqlSessionFactory”)
public SqlSessionFactory sqlSessionFactory(
@Qualifier(“datasource”) DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSourc
UPDATEしないイミュータブルなテーブル設計
# 記事の目的
私が普段携わるプロジェクトでは、以下の理由からプログラムコードだけでなくデータベースも可能な限りイミュータブルを意識して設計している。
– プログラムコードだけでなく、データだってイミュータブルのほうが安全
– 登録時も更新時もデータベース操作はほとんど同じ手続きになるので処理がシンプルになる
– 更新日時カラムに意味を感じない
– 最後の更新タイミングしか表現できないしどの情報がどう変わったのかもわからない
– だからといって履歴テーブルはヤダ
– 履歴を登録するのはデータ登録の前なのか後なのかとかくだらないことで悩みたくない
– そもそも登録処理の途中で落ちたら履歴は残るのか?とか
– 多くの場合DBのトランザクションを無くせる可能性がある
– これについては別途また記事を書きたいイミュータブルなテーブル設計のデメリットとして、一般的なテーブル設計よりもテーブル数が増えるのでSELECTが複雑になりがちとか、レコード量が膨大になりがちとかあるので、ありとあらゆるテーブルにおいてイミュータブルな構造にすべきとは思わないものの、一
Thread class
start methodでthread start
run methodが処理。
いつ動くかはjvmに任せられている。“`java
@Override
public void run() {
super.run(); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/OverriddenMethodBody
System.out.println(“run”);
}@Override
public synchronized void start() {
super.start(); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/OverriddenMethodBody
【備忘録 AtCoder】アルゴリズムによって計算時間が大きく異なる二つのコード
# 問題
[ABC281](https://atcoder.jp/contests/abc281/tasks/abc281_c “問題を開く”)# 実行が間に合わなかったコード
“`java:Main.java
import java.util.Scanner;public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long t = sc.nextLong();
int[] time = new int[n];
for(int i=0; i
UnaryOperator interface
given argument, return が同じtype
default void replaceAll(UnaryOperatoroperator)
“`java
UnaryOperatoru = (x) -> x + “,”;
System.out.println(u.apply(“3”));ArrayList
l = new ArrayList<>();
l.add(“1”);
l.add(“2”);
l.replaceAll(u);
for(String str:l){
System.out.println(str);
}
“`
“`
3,
1,
2,
“`
int → string
“`java
public class Outer {
public static void main(String[] args) {
String s = String.valueOf(11);
System.out.println(s);
}
}
“`
“`
11
“`
Function interface andThen method, compose method
f1.andThen(f2)は、f1,f2
f1.compose(f2)は、f2,f1下記の例
fc1 integer→string, string→integer
fc2 string→integer, integer→string“`java
public class Outer {
public static void main(String[] args) {
Functionf1 = x -> String.valueOf(x + 2);
Functionf2 = x -> Integer.valueOf(x) * 2;
Functionfc1 = f1.andThen(f2);
System.out.println(fc1.apply(5));
System.out.println(f1.andThen(f2).apply(5));
Function
Function interface
Interface Function\
Type Parameters:
T – the type of the input to the function
R – the type of the result of the functiongiven argumentに対し処理を行い、結果を返す
下記の例はgiven stringのlengthを返す“`java
public class Outer {
public static void main(String[] args) {
Functionf = x -> x.length();
System.out.println(f.apply(“abc”));
}
}
“`
“`
3
“`
Java Silver を受験した時の話
正式名称『Oracle Certified Java Programmer, Silver SE11』というやつ。
2022年11月にOracle Java Silverに合格したのでその受験までの勉強期間と、難しかった知識についてまとめていく。![スクリーンショット 2022-12-31 17.19.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077345/f7d8a823-b5b8-a4b9-8eb5-b7f79b6aecb4.png)
受験前はもうSE 17が出るんじゃないかと思っていたが2023/1/10現在まだリリースされていない。
# 目次
受験までの期間について
受験した感想
難しかったことベスト3# 受験までの期間について
– **受験時の肩書き**
– 新卒1年目
– 開発未経験
– **なぜ受験したか**
– 就活時はエンジニア志望でJavaという言語が日本で広く普及していることをしり、資格試験をベンチマークにしようと思ったか
Predicate interface
test methodは、引数に対し、booleanを返す。
“`java
public class Outer {
public static void main(String[] args) {
Predicatep1 = x -> x > 0;
Predicatep2 = x -> x > 100;
Predicatep3 = p1.or(p2);
System.out.println(p3.test(50));
}
}
“`
“`
true
“`
【初心者専用】ガベージコレクションについて
# 0. はじめに
新卒社員がJavaを初めて学習している際の備忘録のようなものです。超入門だと思うので同郷を救いつつ自分の知識も再確認といったところで、今回初耳だった「ガベージコレクション」について問題を通してまとめました# 1. ガベージコレクションについて
ガベージコレクションとは「メモリ上使われなくなったインスタンスを探し、見つかればそのインスタンスを探し、見つかればそれを破棄しメモリを開放すること」です。そのガベージコレクションのタイミングが問われるのが以下の問題になります
“`java
public class Main {
public static void main(String[] args) {
Object a = new Object(); //A
Object b = new Object(); //B
Object c = a;a = null;
b = null;}
}“`
上記のプログラムを実行し、7行目が終了したときにガベージコレクションの対象となるインスタンスはどれか?1. A
2. B
2
Consumer interfaceを使用してconstructorの引数追加の影響を減らす
constructor使わずbuilderでinstance生成する
builderにItemと同じフィールドを持たせる
builderに値設定するロジックをconsumerとして引き渡す
builder内部でconsumer実行
builder内容でItemを生成するコンストラクタ実行“`java
class Item {
private int price;
private String name;
public Item() {}
private Item(Builder build) {
this.price = build.price;
this.name = build.name;
}
public String toString() {
return “name:” + name + ” price:” + price;
}static class Builder {
int price;
String name
機械学習、Java、GridDBを用いた糖尿病予測
本記事では、世界中の多くの人々のライフスタイルを動かしている糖尿病という健康管理の悩みを取り上げます。この記事では、予測システムを作成するための機械学習モデルの使用方法を説明します。このモデルは、ランダムフォレストを使用して、患者が糖尿病であるかどうかを予測します。この記事では、データベース**GridDB**をセットアップするために必要な要件を概説します。その後、我々のデータセットとモデルについて簡単に説明します。最後に、結果を解釈し、我々の結論を出します。
[全ソースコードはこちら][1]
## 必要条件
**GridDB**データベース・ストレージ・システムは、ランダム・フォレスト・モジュールを構築する際のバックアップメモリ・リソースとなります。**GridDB**を完全に機能させるには、ダウンロードし、オペレーティングシステムに設定する必要があります。
必ず以下のコマンドを実行して、必要な環境変数を更新してください。
“`sh
export GS_HOME=$PWD
export GS_LOG=$PWD/log
export PATH=${PATH}:$GS_HOM
日付と時間の文字列を取得するには
“`java
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(“yyyy-MM-dd,HH-mm-ss,SSS”);
Instant v1 = Instant.now();
ZonedDateTime v2 = v1.atZone(ZoneId.of(“Asia/Tokyo”));
String s1 = v2.format(dtf);System.out.println(s1);
“`“`java:System.currentTimeMillis()の場合
long g1 = System.currentTimeMillis();
Instant v1 = Instant.ofEpochMilli(g1);
“`本当はCodeSandboxでサンプル実行出来るようにしたいけど、諦めました。
Java springとspringbootの違いをまとめてみた
## そもそもフレームワークとは
– アプリ開発をする際に、開発の効率を上げるために便利な機能がたくさん詰まっているツール。## Spring Framework
javaのWEBフレームワークで、WEBアプリを作成することができる。
フレームワークの集合体## Spring Boot
spring bootはspring Frameworkの機能の使い分けが困難という欠点を解消するために作られたフレームワーク。
主な機能として、複数のフレームワークを使用する際に発生する、Bean定義やXML設定などを、可能な限り自動設定する機能が搭載されている。そのほか、コードを書かなくてもプログラム処理ができるように「、Javadocと同じくアノテーションが記述できる点も特徴です。Spring MVCのフレームワークの仕様を踏襲して作成しており、Spring Frameworkを構成するフレームワークの一つとして組み込まれている。## spring frameworkとspring bootの違い
– spring framework:Java言語のアプリケーション開発のために作られ
Java アクセス修飾子の使い方とカプセル化
## アクセス修飾子
クラスやフィールド、メソッドヘのアクセスを制御するための修飾子をアクセス修飾子という。アクセス修飾子には、public 、protected、privateの3種類がある。
これらをクラス、フィールド、またはメソッドの宣言の前につけることで、次の表 のようなアクセス制御を行える。(○アクセス制御を行える範囲)
| アクセス修飾子 | 同クラス | 同パッケージ | サブクラス | 他 |
| — | — | — | — | — |
| public | ○ | ○ | ○ | ○ |
| protected | ○ | ○ | ○ | |
| (なし) | ○ | ○ | | |
| private | ○ | | | |クラスにつけられる修飾子はpublicのみ。また、複数のクラスの宣言を1つのファイルの中に記述する場合、public修飾子をつけられるクラスは1つだけ。
“`:例文
class Student{
private int score;
public void setScore(int s){
lamda expressionをfunctional interfaceに
lamda expressionはmethodそのものを表していて
method reffereceのように扱える以下はfunctional interfaceのFactoryInterface#get()に対して
外部からlamda expressionを代入して、切り分けすることにより
SampleClassA⇒SampleClassBに変更した際に、businessLogicに影響を与えない“`java
interface FactoryInterface{
T get();
}
interface SampleInterface{
void method();
}
class SampleClassA implements SampleInterface {
public void method() {
System.out.println(“I am SampleClassA method”);
}
}
class SampleClassB implements SampleInterface {
pub
Supplier interface
functional interface
T get() methodを持つ
lamda expressionでdefineして使う“`java
public class Outer {
public static void main(String[] args) {
Suppliers = () -> “lll”;
String str = s.get();
System.out.println(str);
}
}
“`
“`
lll
“`
enum
Enum classのsub classとなる
each elementがjvmによりinstance化される“`java
enum EnumSample{
PAN(“hello”),GOHAN(“hello”);
String value;
private EnumSample(String value) {
System.out.println(value);
this.value = value;
}
public String toString() {
return value;
}
}
enum EnumSample2 {
APPLE,ORANGE
}
public class Outer {
public static void main(String[] args) {
System.out.println(EnumSample.PAN);
Enum e = EnumSample2.valueOf(“APPLE”);
System.