- 1. 【初心者】Java?JDK?JRE?JVM 違いを理解したい
- 2. 「Stringを==とequalsで比較する際の違いを教えてください」と面接官に言われたら
- 3. Effective Java 第3版まとめ(項目3)
- 4. Rust初心者にとってEnumは難しい!JavaのEnumと何が違うの?
- 5. AWS Cloud9でJavaの開発環境を構築する
- 6. Effective Java 第3版まとめ(項目2)
- 7. テンプレートメソッドとは
- 8. コンピュータとオセロ対戦51 ~層~
- 9. Spring Boot + Vue.js + Axios でいいね機能の実現
- 10. 【Spring】Validation(入力チェック)
- 11. 【spring】flywayを使用したマイグレーション
- 12. Effective Java 第3版まとめ(項目1)
- 13. Scalaの勉強はじめました 6 〜関数型プログラミング編 関数について〜
- 14. 【Java】Spring Data JPA関連プロパティ @application.properties
- 15. 【Java】HibernateでEntity/DB間をマッピングする仕組み
- 16. 【Java】JPA備忘録(Entity・ID自動採番・Repository・Specification・@Transational)
- 17. auカブコム証券のkabuステーションREST APIで自前のトレイル注文を作ってみる(注文発注編)
- 18. VSCodeのJavaのOrganize Importsで削除済みファイルが候補に残り続ける場合の対処法
- 19. Spring O/R Mapperの使い分け
- 20. Spring4ShellがGlassfishとPayaraに拡大:同じ脆弱性ですが、新しい悪用法です
【初心者】Java?JDK?JRE?JVM 違いを理解したい
# はじめに
僕は Javaと聞いて Oracle? 組み込み?脆弱性対応?などのキーワードが浮かびます。
JDK・JRE・JVM の区別もついてないですが、Java を触る必要があるため、これを機に理解したいと思います。# Javaを第三者に一言で説明したい
– Javaとは、サン・マイクロシステムズ社が開発したプログラム言語# ざっくりまとめると
![スライド1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474478/c9570e18-c73d-4dce-75d4-e29e5de88bd5.jpeg)![スライド2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474478/5491e51a-226a-d9b6-9d4d-7777a21859ac.jpeg)
# 用語
– Java SE
– Java Platform, Standard Edition の略。Java で使用される API
「Stringを==とequalsで比較する際の違いを教えてください」と面接官に言われたら
面接官「Stringを==とequalsで比較する際の違いを教えてください」
自分「== はインスタンスの同一性を比較する一方、equalsはObjectによって定義される同値性の比較に使われます。」
自分「従ってStringを比較するとき、==では同じ文字列でも違うインスンスの場合にfalseが返って来てしまうことがあるため、通常はequalsを使用します。」
面接官「はい、完璧です。」
自分「より詳細に言うと、Stringを定数として使用する場合はJVMのLDC命令によって定数プールからインスタンスが確保されるため、これら定数プールの文字列を比較する場合は==でもtrueが返ってきます。」
自分「逆に、文字列をプログラムで動的に構築する場合は定数プールとは関係ない全く新しいStringインスタンスが構築されるため、==はfalseとなります。」
面接「なるほど。」
## String Constant Pool(文字列定数プールとは)
Javaで文字列リテラルを表現する場合、文字列は定数プールから確保される。これにより、同じ文字列が登場した場合にメモリの使用量を削
Effective Java 第3版まとめ(項目3)
# 項目3.privateのコンストラクタかenum型でシングルトン特性を強制する
## はじめに
* シングルトンは一度しかインスタンスが作成されないクラス
* シングルトンにすることでテストを困難にする## 実装方法
### その1
コンストラクタをprivateにし、インスタンスへのアクセスを提供するためのpublic static finalなメンバーを公開する
* 長所
* クラスがシングルトンであることがAPIから明らか
* 単純である
* 短所
* リフレクションによりprivateコンストラクタを呼び出せてしまう
* シリアライズ可能にするには、Serializableを実装するだけでなく、インスタンスフィールドをtransientと宣言し、readResolveメソッドを提供しなければならない### その2
コンストラクタをprivateにし、publicなstaticファクトリメソッドを公開する
* 長所
* APIを変更せずに振る舞いこを変えることができる
* ジェネリックのシングルトンファクト
Rust初心者にとってEnumは難しい!JavaのEnumと何が違うの?
# ことのあらまし
Rust入門してもうすぐ2週間のみゆきです。
Rustの列挙型は集合論では直和集合、Tagged-Union と言われたり、列挙子に値を持てる点がJavaやC#といった他の言語の列挙型と違う点と解説されています。
なんとなく雰囲気が違うのは感じ取れるのですが、私の頭では理解が追い付いてないです。
特に、RustのEnumが値を持てる点で、「そういえばJavaのenumも高機能でどんな値でも(自作型でも配列でも)持つことができたはず!」ということを思い出しました。
では、両者は一体何が違うのか実際に書いて比較してみました。
※勢いで書いているので間違ったことを書いているかもしれません ><
# Rust と Java の Enum を比較
まず、確認の意味も含めて単純なenumでJavaとRustを比較してみます。
“`rust:Rust
enum Hoge {
V1,
V2,
}// 使い方
let hoge: Hoge = Hoge::V1;
“`
“`java:Java
enum Hoge {
V1, //ordinal(
AWS Cloud9でJavaの開発環境を構築する
# 背景・目的
– KDAを試すにあたり、[必要なJavaの環境](https://docs.aws.amazon.com/ja_jp/kinesisanalytics/latest/java/getting-started.html)を準備します。
– 以前、[AWS Clou9を試してみた](https://qiita.com/zumax/items/312d20594b7eecbd533d)で構築した環境を利用します。# 実践
## Javaのバージョンを確認
– 現在のバージョンを確認します。
– すでに、Java11が入っています。
“`
$ java –version
openjdk 11.0.14.1 2022-02-08 LTS
OpenJDK Runtime Environment Corretto-11.0.14.10.1 (build 11.0.14.1+10-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.14.10.1 (build 11.0.14.1+10-LTS, mixed mode)
$
“`
##
Effective Java 第3版まとめ(項目2)
# 項目2.多くのコンストラクタパラメータに直面したときにはビルダーを検討する
## 書かれている内容
* staticファクトリメソッドとコンストラクタは、多くのオプションパラメータに対しては、どちらもうまく対応できない
* テレスコーピング・コンストラクタ・パターンは、コードを書くのが困難になり、加えてそのコードを読むのはさらに困難になる
* JavaBeansパターンは生成過程の途中で不整合な状態にあるかもしれない
* JavaBeansパターンはクラスを不変にする可能性を排除してしまう
* ビルダーはテレスコーピング・コンストラクタ・パターンの安全性とJavaBeansパターンの可読性を組み合わせている## 個人の見解
ビルダーを検討しないといけないようなオプションパラメータが多い状況は、オブジェクトの責務が大きすぎるように思う。
まずはオブジェクト指向エクササイズの「1つのクラスにつきインスタンス変数は2つまでにすること」を心がけた上で、選択肢の1つとしたい。## オブジェクト指向エクササイズとは
### 9つのルール
1. 1つのメソッドにつきインデントは
テンプレートメソッドとは
## 概要
テンプレートメソッドとはOOPの代表的なデザインパターンの一つで、CSVインポートとXMLインポートなど、**大まかな流れは似てるけど細かいところが違う処理**を複数作成する必要があるときに、
– 一つのクラス内で各ステップをメソッド化し、同じクラス内の別のメソッドでそれらを順番に実行するようにする
– 上記のクラスの子クラスでメソッドの内容を適宜上書きすることでいろいろな仕様に対応できるようにするというものです。特に親クラスの「それらを順番に実行する」メソッドが「テンプレートメソッド」と呼ばれます。
親クラスが「我々を呼ばないでください、我々が呼びます」と言っているという意味で「ハリウッド原則」と呼ばれることもあるようです。
これはデザインパターンを知らなくても似たようなことをやったことがある人が多いのではないかなと思います。
## 埋め込み方法
### 親クラス
– 必要なステップをそれぞれメソッドに格納する。
– テンプレートメソッド内で上記の処理を実行する。
– 絶対上書きしてほしいメソッドは抽象メソッドにする。
– 上書きしなくてもいいメソッドはデフ
コンピュータとオセロ対戦51 ~層~
https://qiita.com/tt_and_tk/items/068f2afde6db637e189f
[前回](https://qiita.com/tt_and_tk/items/54101f07855763fb4924)
# 今回の目標
全結合層、畳み込み層、プーリング層を作る
# ここから本編
## 現在のディレクトリ構成“`
MyNet2
├── Matrix.java
├── actFunc
│ └── 活性化関数クラス
├── layer
│ └── 層クラス
└── tests
└── テストクラス
“`## actFunc
活性化関数についてはMyNetとほぼ同じですので、省略します。## Layer
層について、基本的な定義づけを行います。
まず層とは、ここではノードが一列に並んだものを指すことにします。ただ、これまでのように入力層や出力層を特別扱いすることはありません。また、畳み込み層とプーリング層も層です。
MyNetはノードクラスを用いたことで畳み込み層やドロップアウトなどの作成が困難でしたが、MyNet2ではネットワー
Spring Boot + Vue.js + Axios でいいね機能の実現
# はじめに
Spring Boot学習中の者です。学習のためにアプリケーションを作成していて、いいね機能を実装する上で考えたこと等をまとめました。# 参考文献
https://qiita.com/yoyoyo/items/b288f067d5de04f26046
https://masawada.hatenablog.jp/entry/2017/04/19/105243
# 使用技術
Spring Boot 2.6.6
Spring Security
Thymeleaf
MySQL
Mybatis 2.2.0
Vue.js
Axios# いいね機能のロジック
以下の要件を満たすようないいね機能を実装しました。
1.ユーザは、一つの投稿に対し1回「いいね」を押すことができる。
2.ユーザが対象の投稿に既に「いいね」を押していた場合、その「いいね」は取り消される。# テーブル
今回の例で使う「ユーザの投稿情報」を持つPOSTテーブルと、「ユーザがいいねした投稿情報」を持つLIKESテーブルの構成です。
POSTテーブル(主キー:POSTID)
|カラム名|POSTID|
【Spring】Validation(入力チェック)
# 概要
当記事では、
・標準機能のValidation
・独自実装Validation
の実装方法について説明します。# 標準機能のValidation
必須チェックを実装したい場合を例にすると、
「javax.validation.constraints.NotEmpty」など
下記の「 @NotEmpty(message = “入力してください。”) 」のように、
指定することで簡単に実装することができます。
“`
@NotEmpty(message = “入力してください。”)
public String mailAddress;
“`# 独自Validation
## アノテーション実装
“`/ValidationDemo/src/main/java/com/example/demo/validation/UnavailableString.java
package com.example.demo.validation;import static java.lang.annotation.ElementType.*
【spring】flywayを使用したマイグレーション
# 概要
Springでflywayを使用したマイグレーション方法について説明します。# 準備
## pom.xmlにflywayを追加
下記を追加する
“`/{プロジェクト名}/pom.xml
org.flywaydb
flyway-core
“`## DB接続情報を追加
“`/{プロジェクト名}/src/main/resources/application.properties
spring.datasource.url=jdbc:mysql://localhost/{接続DB名}
spring.datasource.username={接続ユーザ名}
spring.datasource.password={接続ユーザのパスワード}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
“`## 実行SQL文用意
“`/{プロジェクト名}/src/
Effective Java 第3版まとめ(項目1)
# 項目1.コンストラクタの代わりにstaticファクトリメソッドを検討する
## 例
“`java
public class EffectiveJava1 {// コンストラクタ
public EffectiveJava1() {
}// staticファクトリメソッド
public static EffectiveJava1 newInstance() {
return new EffectiveJava1();
}
}
“`## 長所
1. 名前を持つこと
1. その呼び出しごとに新たなオブジェクトを生成する必要がないこと
1. メソッドの戻り値型の任意のサブタイプのオブジェクトを返せる
1. 返されるオブジェクトのクラスは、入力パラメータの値に応じて呼び出しごとに変えられる
1. 返されるオブジェクトのクラスは、そのstaticファクトリメソッドを含むクラスが書かれた時点で存在する必要さえない## 短所
1. publicあるいはprotectedのコンストラクタを持たないクラスのサブク
Scalaの勉強はじめました 6 〜関数型プログラミング編 関数について〜
## はじめに
N予備校で「Scala応用」コースを受講しています。
今回から関数型プログラミングについてです。## 関数型プログラミング
:::note
外部の状態を変化させない関数だけでプログラミングを行うこと
:::外部の状態を変化させることを、**副作用**という。
### 副作用のある関数
変数を変更する
オブジェクトが持っているフィールドの値を書き換える
例外やエラーを発生させる etc.### 参照透過性
値と式が交換できるような関数
“`scala
def square(n: Int) = n * n
“`
同じ値を入れたら必ず同じ結果になることが保証されたもの、かな。
正直テキストよりもこっちの方がまだわかりやすい。https://gimo.jp/glossary/details/referential_transparency.html
## 関数
“`scala
val add = new Function2[Int, Int, Int] {
def apply(x: Int, y: Int): Int = x + y
}
“`
【Java】Spring Data JPA関連プロパティ @application.properties
# プロパティ一覧(随時追加)
“`properties
spring.jpa.properties.hibernate.jdbc.time_zone=Asia/Tokyo
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
“`# spring.jpa.properties.hibernate.jdbc.time_zone
・データベースのタイムゾーンを設定する。
・設定方法は2つあるが、今回は設定方法2。設定方法1:JDBC URLのパラメータとして設定
設定方法2:spring.jpa.properties.hibernate.jdbc
【Java】HibernateでEntity/DB間をマッピングする仕組み
# まえがき
Entityクラスに@Table,@EntityをつけてORMをなんとなくで実現していたが、その仕組みをちゃんと知ろうという記事。https://www.baeldung.com/hibernate-naming-strategy
# 2つのNaming Strategy
・Entityクラス と DB 間で「テーブル名」「カラム名」のマッピングを行う際にNaming Strategyを利用する。
・Naming Strategyは「Explicit Strategy」と「Imlicit Strategy」の2つ存在する。
・マッピング処理は次のフローで行われる。① LogicalNameの決定【Implicit Strategy】
② PhysicalNameの決定【Explicit Strategy】LogicalName:Javaで扱うテーブル名,プロパティ名
PhysicalName:DBとマッピングさせるテーブル名,プロパティ名# ① LogicalNameの決定【Implicit Strategy】
・デフォルトのImplicit
【Java】JPA備忘録(Entity・ID自動採番・Repository・Specification・@Transational)
# まえがき
SpringBootでWEBアプリケーションを作るとき、よくSpring Data JPAを利用する。
Entityクラス関連のアノテーションや、トランザクションの動きについて時間が経つと忘れるので、備忘として残す。# Entityクラス
“`java
@Entity
@Table(name = “sample_user”)
// @CreatedDate @LastModifiedDate を活性化するために必要
@EntityListeners(AuditingEntityListener.class)
public class SampleUserEntity implements Serializable {@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer userId;
private String name;
private Integer age;
private String gender;
pri
auカブコム証券のkabuステーションREST APIで自前のトレイル注文を作ってみる(注文発注編)
# はじめに
前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)
5. [auカブコム証券のkabuステーションREST APIのテスト用モック
VSCodeのJavaのOrganize Importsで削除済みファイルが候補に残り続ける場合の対処法
名前変更等で削除されたファイルがキャッシュに残り続け、Organize Imports時に候補になってしまう現象への対処方法です。
コマンドパレット(F1キー等で起動)で以下のコマンドを実行します。
“`
Java: Clean Java Language Server Workspace
“`
一応スクショも。
![スクショ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139956/38c20fc8-4a1d-94c1-9d38-368f3843f8e2.png)
VSCodeのキャッシュのクリア等で検索すると `Clear Editor History` コマンドが出て来ますが、この現象に対してそちらは効果がありません。
同じような原因でビルドエラーになった際、たまたま今回のコマンドに気づいたのでメモとして残しておきます(通常はすぐビルドするから今回のような現象でハマらないのかも知れない…)。
Spring O/R Mapperの使い分け
# O/R Mapperとは何か
O/R Mapperはオブジェクト指向言語で書かれたアプリケーションと非オブジェクト指向であるデータベースやSQLの間のインピーダンスミスマッチを解消させるためのフレームワークである。今回はメジャーなO/RMapperである以下のフレームワークについて調査する。
* JPA(Java Persistance API)
* MyBatis# JPA(Java Persistance API)
* Domainに@Entity等のアノテーションを付与することで設定する
* CRUDに関わる基本的なメソッドがEntityManagerから提供されるため、冗長なSQLの記載が不要になる
* 独自のクエリを発行する際は、SQLライクな独自のクエリ言語であるJPQL(Java Persistance Query Language)を使用する以下にDomainの実装例を示す。
“`java
package com.example.todo.domain.model;import java.io.Serializable;
import java.ut
Spring4ShellがGlassfishとPayaraに拡大:同じ脆弱性ですが、新しい悪用法です
本記事は2022年4月8日(米国時間)に公開した英語ブログ[Spring4Shell extends to Glassfish and Payara: same vulnerability, new exploit](https://snyk.io/blog/spring4shell-rce-vulnerability-glassfish-payara/)を日本語化した内容です。
[![logo-solid-background.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2216557/2691d8df-331d-96e6-dee7-9f990f036d53.png)](https://snyk.io/jp)
先週、[Spring4Shell](https://security.snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORK-2436751)の発見について発表しました。`spring-beans`パッケージの古いバージョンにリモートコード実行(RCE)の脆弱性