- 1. Java16をjenvに追加 (Mac)
- 2. EclipseでSpring Bootのプロジェクトを起動してみた
- 3. Javaを0から学ぶ 基本構文と変数
- 4. JMXでTomcatのMBeanからメモリ/スレッド利用数を取得してCloudWatchへ通知する
- 5. MVCモデルに関して簡単にまとめてみた
- 6. 裏返せる可能性(斜め) (paizaランク C 相当)
- 7. 「SpringBootで日付計算処理アプリ」の続き
- 8. サーブレット / JSP Webアプリケーションについて
- 9. static メソッド、非 static メソッドについて
- 10. and演算子とor演算子について
- 11. 【Java アルゴリズム修行⑱】文字列探索 ~BM法~
- 12. LambdaでJava入門しようとしてハマった
- 13. 【Java アルゴリズム修行⑰】文字列探索 ~KMP法~
- 14. リバーシの操作(縦横)
- 15. 【Java】AtCoderのABC-201に参加しました(レート:264→272)。
- 16. 【Java】OptionalのorElseの使い方
- 17. 【SpringBoot入門】リファレンス見ながら環境構築
- 18. Quarkus+Redisで簡単なアプリケーションを作る
- 19. MapperクラスのSQLで不等号を使いたい(MyBatis)
- 20. Javaの配列とリスト配列で配列の要素を数える方法が違います
Java16をjenvに追加 (Mac)
ステップ
1. Download https://jdk.java.net/16/
1. `sudo mv ~/Downloads/openjdk-16_osx-x64_bin.tar.gz /Library/Java/JavaVirtualMachines/`
1. `cd /Library/Java/JavaVirtualMachines/`
1. `sudo tar -xzf openjdk-16_osx-x64_bin.tar.gz`
1. `sudo rm openjdk-16_osx-x64_bin.tar.gz`1. jenvに追加
“`
jenv add /Library/Java/JavaVirtualMachines/jdk-16.jdk/Contents/Home
“`1. jenvに出てきた
“`bash
jenv versions
* system (set by /Users/ma
EclipseでSpring Bootのプロジェクトを起動してみた
# はじめに
後輩がSpring Bootの勉強中でフォローしているのですが、その時に躓いた内容について残します。## 環境
Windows 10 Home 64ビット# EclipseでSpring Bootのプロジェクトの起動
以下の記事を参考に、Spring Bootのプロジェクトを作成し、プロジェクトの実行をしてみました。
参考:[EclipseでSpring Bootの環境構築 | 分かりやすく図解で説明](https://medium-company.com/spring-boot環境構築/#Spring_Boot)**■ 補足**
– MySQLのバージョンは8.0.25
– Eclipseはリリース 2021-03のJava>FullEdtion## プロジェクト起動で発生したエラー
“`
java.sql.SQLNonTransientConnectionException: Could not create connection to database server.
at com.mysql.cj.jdbc.exceptions.SQLErr
Javaを0から学ぶ 基本構文と変数
PythonとExcel VBAを四年くらいやってきただけの、
しょぼしょぼな私が色々あってJavaを学ぶ事になった(何か開発するわけではない)ので、
自身の学びのためにも、ここに色々書いていこうと思います。
知識本当に無いので、違うこととかあったら、すみません。
ご指摘いただければ、随時直していきます。環境:macOS 10.14.6
参考資料:スッキリわかるJava入門 その他色々なサイト(すみません色々転々と見ています)[Javaを0から学ぶ](https://qiita.com/sandream/items/ce240423c880b972b9bb)でいくつか試しましたが、とりあえず、ファイル構造の理解まではJDKを利用していきます。
# 基本構成
“`java
public class Main(){
public static void main(String[] args){
//ここにコードを書いていく。
}
}
“`○ファイル名=クラス名とする(上記の場合はMain.java というファイルになる)
○クラス名は大文字から始
JMXでTomcatのMBeanからメモリ/スレッド利用数を取得してCloudWatchへ通知する
# 本内容について
JMX(Java Management eXtentions)は稼働中のJavaに対する管理インターフェースを提供します。
今回はAWS EC2で稼働するLinuxサーバのTomcatでJMX設定を有効化し、Javaのヒープやスレッド数を取得、CloudWatchで可視化する内容です。# プログラム概要
※Javaは1.2で学習が止まっているのと、そこからほぼ書いていなかったため、記述方法などについてはご容赦ください。
サーバ内へ常駐し、所定の間隔で情報を通知する形にしています。
ループ内でJMXの参照を取得、各メトリックを取得し、一括でCloudWatchに通知する流れです。取得する対象のMemoryPoolMxBeanや、スレッドの名称などは、後述のCommand-line JMX Client等で確認し、環境に合った対象にしておく必要があります。(JavaのGC方式によって取得対象のMemoryPoolMxBeanの名称などが異なります。)
* 毎回 getMBeanServerConnection() を呼んでいるのは、Tomcatサーバの一
MVCモデルに関して簡単にまとめてみた
# MVCモデルに関して簡単にまとめてみた
マッチングサイトの開発にMVCモデルを適用していたため、
自分の後学のためにMVCモデルに関して自分なりに調べてまとめてみました。
開発の際に自分なりに解釈した部分も含まれるため、間違っている点あると思います。ご容赦ください。
# MVCモデルとは?
MVCモデルとはプログラムの処理を役割ごとに分けて開発を行う考え方です。Webシステムの開発によく用いられるそうです。
例えばあなた(ユーザー)がもう一人のユーザーとメッセージでやり取りを行うとします。
メッセージ画面には入力フォームが用意されています。あなたはその入力フォームよりメッセージを入力し、送信ボタンを押下します。
すると、コンピュータは入力されたメッセージのデータを受け取り、問題なければDBへ登録し、あなたが送信したメッセージが表示されたメッセージ画面をあなたへ返します。
この流れを一連で記載すると以下のようになります。
1.ユーザーより、メッセージを入力
裏返せる可能性(斜め) (paizaランク C 相当)
https://paiza.jp/works/mondai/a_rank_level_up_problems/a_rank_pincerattack_step3
最初は力業でこんなことをやった。
“`java:Main.java
import java.util.Scanner;public class Main {
public static void main(String[] args) {
int h, w, y, x;
String[][] map;Scanner sc = new Scanner(System.in);
h = sc.nextInt();
w = sc.nextInt();
y = sc.nextInt();
x = sc.nextInt();map = new String[h][w];
for(int i=0; i
「SpringBootで日付計算処理アプリ」の続き
前回「[SpringBootで日付計算処理アプリ](https://qiita.com/hhujk5/items/ba8c7c73ba6c957c3e35)」で課題だった「計算結果の表示方法」が改善できましたので投稿させていただきます。
##環境
macOS Big Sur
Java 11
Spring Boot 2.4.5
SpringToolSuite4
gradle
MySQL
MyBatis##解決方法
計算結果を格納する先として別途エンティティクラスResultを作成し、
当Resultクラスのフィールドとして計算結果を表示させます。
※前回の計算式を格納するエンティティクラス「DateCalc」の名前を「DateFormula」に変更しています。##各ソースコード(重要部分のみ)
###Result.java“`java
package com.example.demo.entity;import java.time.LocalDate;
import lombok.Data;
@Data
public class Result {priva
サーブレット / JSP Webアプリケーションについて
***
####● Web アプリケーションの設計を考える前に、基礎となるオブジェクト指向設計、インターネット通信の仕組みについて記述する***
###■ オブジェクト指向設計の基本について
オブジェクト指向設計とは…
全てをモノとして捉えて設計するための考え方、設計した内容を正しくプログラムに落とし込むことができるのがオブジェクト指向言語の特徴1つの役割を明確にして持たせることで情報が共通化され、拡張性や再利用性が高まり使いやすくなる、大規模プロジェクトに向いている理由もここにある
######■ オブジェクト指向設計の原則
オブジェクト指向設計において守るべき5つの原則「 SOLID の原則」がある
1.SRP:単一責任の原則
2.OCP:オープン / クローズドの原則
3.LSP:リスコフの置換原則
4.ISP:インターフェース分離の原則
5.DIP:依存性逆転の原則***
1.単一責任の原則
SOLID の原則の根幹となる原則、この原則を順守することで残り4原則についても自然と設計することができるクラスは1つのことだけに責任を負うこと、つまり1クラスに1つの
static メソッド、非 static メソッドについて
***
###■ static 修飾子とは
static 修飾子とは、インスタンスを通してではなく、クラス(属するクラス、そうでないクラスともに)から直接呼び出すことができるようになる修飾子Java のクラスが持つことができるメソッドは主に2つ、static メソッド(クラスメソッド)と非 static メソッド、(インスタンスメソッド)である
インスタンスメソッドは、その振る舞いを持っているインスタンスを生成して呼び出す、言わばインスタンスに動いてもらう、というイメージだが、クラスメソッドはその名の通りクラスに直接属している(クラスの持ち物)
クラスメソッド内ではインスタンスに属するもの(インスタンスの持ち物)は一切参照できない、つまりインスタンスのフィールド、メソッド、同一クラス内の非 static なメソッド、this、super は使用できない(自クラスのインスタンスを生成して使用することは可能) static フィールドや他の static メソッド、引数を利用する
クラスの持ち物であるため、呼び出すときは原則として クラス名. static メソッド名 と指定する
and演算子とor演算子について
# and演算子とor演算子について
##and演算子
論理演算子は複数の条件式を組み合わせた式を評価してtrueまたはfalseを返します。
“`
if(A && B){} //論理積、AとBが共にtureならtrue
“`「A&&B」だった場合、Aの条件式がtrueかつBの条件式がtureだった場合は式全体の評価がtrueとなる。
そうでなかった場合はfalseとなります。“`
if(A & B){}
“`ちなみに、「A & B」の場合はAがtrueの場合でも、Bを評価します。
##or演算子
or演算子はAもしくはBがtrueの場合、条件式全体でtrueを返します。
“`
if(A || B){}
“`「A||B」の場合、Aがtrueだった場合、Bは評価せず条件式はtrueで評価します。
Aがfalseだった場合はBを評価します。“`
if(A | B){}
“`「A|B」の場合、Aがtrueだった場合でもBを評価します。
##まとめ
・and演算子はAかつBがtrueだった場合、trueを返す
・or演算子はAもしくはBがt
【Java アルゴリズム修行⑱】文字列探索 ~BM法~
###BM法とは
このBoyer-Moore法というのは、理論的にも、実践的にもKMP法より優れていて、
実際の文字列探索でも広く利用されているものだそうです。基本方針は、**パターンの末尾文字から先頭側へと照合を行う過程で不一致文字を見つけた場合に
事前に用意した表に基づいてパターンの移動量を決定する**というものになります。テキストを`ABCXDEZCABACABAC`、パターンを`ABAC`としたときの流れを見てましょう。
まずは、テキストとパターンの先頭文字を重ねた上で、パターンの末尾文字`C`に着目すると、
テキスト4文字目の`X`と不一致であることがわかります。
![スクリーンショット 2021-05-17 16.28.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521565/cd5f4512-3f50-3394-1cff-c41a784be251.png)
そのままパターンをパターンを1~3文字ずつ移動しながら照合してみましょう。
![スクリーンショット 2021
LambdaでJava入門しようとしてハマった
# 経緯
普段はNode.jsで開発していますが、LambdaでJavaを使うテストをしている方がエラーで行き詰っていたので一緒に調査しました。# 結論
Lambdaのハンドラー設定が間違っていました。
デフォルトでは、`example.Hello::handleRequest`
だったのを、
`com.example.Hello::handleRequest`
に変更したところ実行できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1162215/f1710c19-7996-6947-61f9-eb0eed391293.png)
[こちら](https://qiita.com/niwasawa/items/69bba64d7cd2d6277473)の記事を参考にしました。# 何しようとしてたの?
LambdaでJavaを使用するのが初めてだったので、まずは[こちら](https://blog.mmmcorp.co.jp/blog/2020/03/29/lambda-ha
【Java アルゴリズム修行⑰】文字列探索 ~KMP法~
### KMP法とは
[前回](https://qiita.com/kotaito/items/d1c3f84409d1527814c4)の力まかせ法では、不一致の文字に出会った場合、
パターンを移動して、パターンの先頭からテキストとの照合を行なっていましたが、
**移動の度に照合結果が先頭に戻ってしまうので、その点は非効率であるといえます。**
**そんな非効率な部分を有効活用したのがこのKMP法らしいです。**`ZABCABXACCAD` というテキストから `ABCABD`というパターンを探索するとして、
まず最初はテキストとパターンの先頭文字から順に照合を行います。
![スクリーンショット 2021-05-17 15.27.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521565/036aed5c-0269-5418-dfc0-c7c7a1f44143.png)
テキストの先頭文字 `Z`は、パターンには含まれない文字なので、不一致として、パターンを1文字進めます。
![スクリーン
リバーシの操作(縦横)
https://paiza.jp/works/mondai/a_rank_level_up_problems/a_rank_pincerattack_step2
きちんとメモ取っていこうという構え。
こういうところで「まあ正解したからいいや」と理解をおざなりにすると後の問題で詰まるのだ。まずは自己流。
“`java:Main.java
import java.util.Scanner;public class Main {
public static void main(String[] args) {
int h, w, y, x;
String[][] map;Scanner sc = new Scanner(System.in);
h = sc.nextInt();
w = sc.nextInt();
y = sc.nextInt();
x = sc.nextInt();map = new String[h][w];
【Java】AtCoderのABC-201に参加しました(レート:264→272)。
こんばんは。
2021/5/15に、AtCoderのABC-201に参加しました。
レートは以下の通りとなっています。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/2eb1b72d-177b-1890-4c33-e43cd9413938.png)
実は家の用事もあり、AB問題を速攻で解いて切り上げてしまいました。
が、C問題についてのミスが発生しなかった?ので、パフォーマンスは高めでした。
嬉しいようないまいちなような。。
順位は5631 / 8739でした。###A問題
3つの数列A1、A2、A3が与えられる。
これを、並べ替えることでA3-A2=A2-A1になるか?
3つしか文字列がないので、2重ループにしてチェックするなり、きれいな書き方は色々あったと思うのですが、とりあえず思いついた実装で。
1,2,3だと、以下の組み合わせがあると考えました。1
2
31
3
22
3
12
1
33
1
23
2
1改めて・・これは
【Java】OptionalのorElseの使い方
# Optionalとは
Optionalは、“メソッドの戻り値としてnullを返す可能性があることを明示的に示したいときに使用します。“
メソッドがnullを返す可能性があるということを示すことで、
そのメソッドを利用するプログラムをより安全に実装することができるようになります。#orElseの使い方
Optionalのオブジェクトは“nullの可能性があるオブジェクトの型を指定“して宣言します。
Optionalのオブジェクトには“ofNullableメソッドの戻り値を代入“します。
Optional.ofNullableメソッドの引数がnullの場合にorElseメソッドの引数の値を返します。
(以下の場合は「Nullです」を返します)
nullでない場合はnullではないその値を返します。“`java
String str = null;Optional
nullableString = Optional.ofNullable(str); System.out.println(nullableString.orElse(“Nu
【SpringBoot入門】リファレンス見ながら環境構築
# SpringBoot環境構築
## はじめに
SpringBootでWebアプリケーションを作ってみたかったので[公式リファレンス](https://spring.pleiades.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started)を見ながら環境構築をやっていきます。
自分の記録用なので環境構築をしたい方は公式リファレンスを見ながらやったほうがいいと思います。。
ちなみにJavaでフレームワークを使うのは初めて。サーブレットとJSPで簡単なものを作ったことあるぐらいのレベル。## 開発環境
“`
mac osx 10.15.7
java 16.0.1
maven 3.8.2
“`
インストールの説明割愛。## Spring Boot CLIのインストール
Homebrewを使用してるので以下でインストールしました。“`
$ brew tap spring-io/tap
$ brew install spring-boot
“`## POMの作成
Quarkus+Redisで簡単なアプリケーションを作る
## 概要
最近QuarkusというJavaフレームワークの存在を知りました。
> Quarkus は、Java 仮想マシン (JVM) およびネイティブコンパイルのために作成されたフルスタックの Kubernetes ネイティブ Java フレームワークで、Java をコンテナに最適化し、サーバーレス、クラウド、Kubernetes の各環境で効果的なプラットフォームとして使用できるようにします。
https://www.redhat.com/ja/topics/cloud-native-apps/what-is-quarkusだそうです。
KubernetesネイティブなJavaフレームワークということで、マイクロサービスが流行りつつある今、個人的には将来性のあるフレームワークなのかな、と思っています。
特徴や詳しい使い方は他の方に任せます。(こちらの記事では、Quarkusのサイトで紹介されているredis-clientを使ったサンプルアプリケーションの作り方をまとめました。
Redisと接続してCRUDを行うRESTful APIアプリケーションです。↓のページに
MapperクラスのSQLで不等号を使いたい(MyBatis)
## 困ったこと
MapperのSQLをXMLに記載するとき、不等号(大なり、小なり など)を使用すると、
「要素のコンテンツは、整形式の文字データまたはマークアップから成るものでなければなりません。」
のエラーになってしまう。## 解決方法
` 以下の2つがあるが、1がおすすめ。### 1. 該当箇所を囲む
“`.Java
“`### 2. SQL文全体を囲む
この方が可読性が良いが、動的SQLを記載しても反映されない。“`.Ja
Javaの配列とリスト配列で配列の要素を数える方法が違います
Javaで配列とリスト配列で配列の要素を数える方法が違います。
配列の場合は
“`java
public class Main{
public static void main(String[] args){
String[] data = {“test1″,”test2″,”test3”};
for(int i=0;idata = new ArrayList ();
data.add(“test1”);
data.add(“test2”);
data.add(“test3”);