- 1. スレッドセーフなリスト
- 2. 25歳専門新卒がSESに就職して半年が経ち、転職を決意。
- 3. Streamの生成処理
- 4. vue.config.jsの活用例
- 5. 自作家計簿
- 6. SWTアプリでダークモードしたい
- 7. 動的Webプロジェクトの国際化
- 8. Rails と Java Servlet + JSP によるWEBアプリ開発の比較
- 9. Javaの入門テキスト
- 10. java 回転コマンドの作成
- 11. SpringBoot + Spring JPAでMySQLのJSON型のValue検索
- 12. IntelliJ IDEAでjava 13のswitchをためす
- 13. [ java ] インターフェース
- 14. Javaにおける入力した5個の数字の内、最大値と最小値を求める(修正ver)
- 15. Java Gold SE 8 合格に際して
- 16. 用解説語:インターフェースについて
- 17. 用語解説:アクセサ / アクセサメソッド、カプセル化
- 18. JavalinでWebアプリケーションを構築する
- 19. 用語解説:オーバーロード
- 20. Google App Engine (Java 11) + Spring Boot + Gradle で Hello World
スレッドセーフなリスト
##並列処理怖いよって話
リストについて基本的に注意すべきですが、こと並列処理に関しては
マルチスレッドに要注意ですたとえば
“`だめ.java
private static Listlist = new ArrayList<>(); private static Consumer
qwe = v -> list.add(String.format(“%s: %s”, Instant.now(), v)); public static void main(String[] args) {
IntStream.range(0, 9).boxed().collect(Collectors.toList()).parallelStream().forEach(qwe);
list.forEach(System.out::println);
}
“`これの結果は
“`結果
null
null
null
2019-11-08T17:37:22.279Z: 7
2019-11-08T17:37:22.313Z: 3
20
25歳専門新卒がSESに就職して半年が経ち、転職を決意。
【専門学校時代の経歴】
システム開発コースを専攻。
・1年次
4月~10月 基本情報技術者試験の勉強。『不合格』
11月~2月 Javaオラクルブロンズの勉強。『合格』
3月~ 基本情報技術者試験の勉強。『合格』・2年次
4月~7月 Javaオラクルシルバーの勉強。『合格』
7月~10月 応用情報技術者試験の勉強。『不合格』
11月~3月 卒業研究※C言語、C#、Javaでプログラミングもやってました。
【入社してからの経歴】
4月~6月 入社式当日運用部署に配属決定。
3か月間の意味のない研修のスタート。素直に「は?」って思いました。システム開発希望で入社してたので意味が分からなかったですね。
研修はほぼ自習勉強でしたね。時間の無駄です。7月~11月 常駐先決定。
金融システムのサーバ保守業務。
とりあえず、やりがいがありません。
配属ガチャ、案件ガチャ共にハズレを引きました。人によっては良いかもしれませんが、5年後10年後のキャリアアップを見据えてやりたい事があったので個人的にはハズレです。
いかんせん、サーバの保守に興味が持てません
Streamの生成処理
Java8から導入されたStreamAPI
Collectionの操作に便利な処理がたくさんある
(いまさらになるが)メモ的な感じで列挙していこうと思う。StreamAPIとは
Stream自体はListやMapなどのCollection要素ではなく、配列やリストなどの要素に対して生成処理、中間処理、終端処理を加えて新しい要素に置き換えるためのパイプラインのようなものという認識## Stream#of
“`java
Streamstream = Stream.of(“a”,”b”,”c”);
“`## Collection#stream
Listからの生成
“`java
Listlist = Arrays.asList(“a”,”b”,”c”);
Streamstream = list.stream();
“`Mapからの生成
“`java
Mapmap = new HashMap<>();
Stream> stream =
vue.config.jsの活用例
## 前提
フロントエンド側をSPAフレームワークを活用して、ウェブサービス・ウェブアプリケーションを開発する際、昨今はRuby on RailsやLaravelなど流行りのバックエンド言語・バックエンドフレームワークと掛け合わせて制作すると思います。
初期開発時にプラグインとしてバックエンド環境に予めVueやReactを実装し、導入しやすくなってきている為です。今回のプロジェクトでは、Javaを使用しまたディレクトリも分けた状態で開発をした為そういったプロジェクト向けの記事として呼んでいただけますと幸いです。
## ログイン機能
おおよそのウェブサービスにあるように今回開発したプロジェクトでもログイン機能がありました。
ログイン画面とログイン処理の責務はJava側で持たせています。
ViewはJavaのテンプレートエンジンのThymeleafを使用しています。ログイン後、所定のtokenやcookieをブラウザ側に保持させダッシュボードへと繊維します。
ダッシュボードから先の画面および処理はSPA側の責務です。## 開発環境での課題
今回のプロジェクトでは前述した通り、
自作家計簿
むかし,記帳風月という家計簿ソフトを使用していました.
今は公開されていません.
Windowsを捨てるにあたり,データを移行しつつクローンを自作しました.
どんだけ需要があるんだか,って感じですが.
セットアップにはそれなりに手間がかかります.
https://github.com/gucchy55/beauties
## 追加した機能
– 特殊な費目の定義
– 特別収支: 定常的な収支と別に管理したい費目用
– 立替収支: 通常の収支・特別収支と別に管理したい費目
SWTアプリでダークモードしたい
どれだけ需要があるかわからないけど.
自作したSWTアプリでMacのダークモードしたい.
Eclipse IDE 2019-06 (4.12) から可能になっていたので.
参考: https://www.eclipse.org/eclipse/news/4.12/platform_isv.php#dark-theme-mac
VM引数に以下を指定して実行
`-Dorg.eclipse.swt.display.useSystemTheme=true`
## ダークモードかどうかの判定
“`Java
“Dark”.equals(execCommand(“defaults read -g AppleInterfaceStyle”));
“`
動的Webプロジェクトの国際化
#はじめに
実装しようとしたときに調べた範囲では、動的webプロジェクトの国際化についてまとめてる記事はなかったのでまとめてみました。ここでの国際化は、クライアントのwebブラウザが使用している`Locale(言語と国/地域)`クラスを取得し、表示する言語をクライアントに合わせて動的に対応する事です。
今回紹介する手法は、サーバーサイドの`java`ではメッセージを全て`ID`でやりとりし、クライアント側の`jsp`と`javascript`で、あらかじめ用意しておいた言語ごとの`properties`ファイルを参照し`ID`と対応する文字列を表示するというものです。
この手法では、サーバーサイドはメッセージをIDに変換するのみ、クライアントサイドはメッセージを言語ファイルから参照する一文に変換するのみなので、将来的な拡張にも影響も少なく、簡単に国際化することが可能だと思います。
考え方としては、サーバーサイドはクライアント側の`Locale`が何であれ動きは変わらず、クライアントサイドに最初から対応する言語ファイルを送っておき、webページに表示する際に翻訳を行
Rails と Java Servlet + JSP によるWEBアプリ開発の比較
### Rails と Java Servlet + JSP によるWEBアプリ開発の比較
||Rails|Java Servlet + JSP|
|—|—|—|
|Model|XXX.rb|XXX.java|
|View|XXX.erb|XXX.jsp|
|Controller|XXXController.rb|XXXServlet.java|
|ルーティング|routes.rbで指定|XXXServlet.javaのアノテーションで指定|### ルーティングの指定方法
#### Rails
routes.rbで指定“`ruby:routes.rb
Rails.application.routes.draw do
get ‘/sample’ => ‘コントローラ名#アクション名’
post ‘/sample’ => ‘コントローラ名#アクション名’
end
“`#### Java Servlet + JSP
XXXServlet.javaのアノテーションに指定“`java:XXXSerblet.java
package src;imp
Javaの入門テキスト
[●テキスト本体(PDF形式224ページ:1.72MB)](http://www.k-techlabo.org/www_java_new/JavaText.pdf) 2019/11/17更新
[(→ミラーサイトからDL)](https://ktechlabo.xsrv.jp/www_java_new/JavaText.pdf)
[→テキスト中のサンプルプログラム](http://www.k-techlabo.org/blog2/?page_id=1384)
---------------------
(2019/11/16)
学校でプログラミング教えています.初心者に教えるためのJavaの入門テキストを作りました.
とりあえず「Javaで一応プログラミングできる」ようになるまでの内容にしています.(Java SE 8の文法までの内容にしています)
冒頭の50ページ弱で基本的な文法と基本的なI/Oについて解説しています.あとはよく使うライブラリについての解説です.
GUIはSwingとSWTについて解説しています.
このテキストはまだ試作品の段階ですが,教育現場で使いな
java 回転コマンドの作成
# まえがき
javaコマンドで回転コマンド作成した。
# 参考文献
https://blog.no42.org/code/docker-java-signals-pid1/
https://qiita.com/munieru_jp/items/02533ebe5c822e6e29bb
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Scanner.html
https://stackoverflow.com/questions/1216172/how-can-i-intercept-ctrlc-in-a-cli-application
# 環境
“`bash
$java –version
openjdk 13 2019-09-17
OpenJDK Runtime Environment (build 13+33)
OpenJDK 64-Bit Server VM (build 13+33, mixed mode, sharing)
$bash –version
GNU bash, バージョン 5.0.
SpringBoot + Spring JPAでMySQLのJSON型のValue検索
## 概要
JPAを使用してのJSON型カラムのValue値検索について調べたので、共有として。
Specificationにて検索するケース。## 結論
MySQLの関数を使用する。### JSON_EXTRACT
“`sql
SELECT * FROM ATABLE WHERE JSON_EXTRACT(“column_name”, “$.key”) = value;
“`なので、Spring JPAのSpecificationを使用する場合、
“`java
public SpecificationjsonSearch(String key, String val) {
return (root, query, cb) -> {
return cb.like(cb.function(“JSON_EXTRACT”, String.class, root.get(“names”), cb.literal(“$.” + key)),
“%” + val + “%”);
};
}
“`## 参考
[Custom expressi
IntelliJ IDEAでjava 13のswitchをためす
※ 2019/11/15 時点です。
IntelliJ IDEAまったくと言っていいほど触ったことが無いので、自分用にメモ。
# 環境
IntelliJ IDEA 2019.2.4 (Community Edition)# 手順
New ProjectでProject SDKに“`13“`を選択する。![intelljeideaswith0001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31934/75475708-2b79-9485-86cb-13c5b5f1201b.jpeg)
https://twitter.com/java/status/1193898422849269760 の http://blog.codefx.org/java/switch-expressions/ を参考にサンプルコードを書く。
“`java
import java.io.FileNotFoundException;public class Main {
static enu
[ java ] インターフェース
今回はインターフェースについて記す。
##インターフェースとは
後からメソッドを実装して使用するためのもの。
例えば足し算や引き算というものは計算とくくることができる。この時、計算がインターフェース、足し算や引き算がインターフェースを実装するクラスということである。##インターフェースを使ったプログラム
インターフェースは以下のように定義できる。~~~java
//interface インターフェース名{}
interface Calc{}
~~~インターフェースでは
・フィールド:定数のみ宣言できる(暗黙的にpublic static finalで修飾される)
・メソッド :抽象メソッドのみ定義できる(暗黙的にpublic abstractで修飾される)
と決まっている。~~~java
interface Calc{
int NUM1 = 1; //修飾子はpublic static finalが省略されている
int NUM2 = 10;void calc(); //抽象メソッド
}
~~~インターフェースはimplementsを使
Javaにおける入力した5個の数字の内、最大値と最小値を求める(修正ver)
先日5個の数字から最大値と最小値を求めるプログラムを投稿しましたが、コメントでアドバイスをいただいたので修正したものを再投稿したいと思います。@LouiS0616 さんコメントありがとうございます…!!
ちなみに前回の記事のリンクをここに貼っておきます。https://qiita.com/GARA41679531/items/c81b57a56bfcb28f84a0
#変更した点
前回のコードでは変数 min と max を 0 で初期化していたので、入力された数字がすべて正の数または負の数の時に最大値もしくは最小値のどちらかが 0 で出力されてしまいました。
そこを改善するために、1つ目に入力された数字を変数 min と max に代入し、そこから大小関係を調べるコードに書き直しました!#コードの記述
“`Java
package max_min;
import java.util.*;
import java.math.*;public class Max_Min {
public static void main(String[] args) {
//
Java Gold SE 8 合格に際して
# はじめに
この度、11月某日にJava SE 8 Programmer II(Gold)を受験し、無事合格致しました。
様々な合格体験記がこのQiitaにはございますし、私自身、Gold受験を思い立ったのが5月ごろということでお世辞にも効率よい勉強の仕方が出来たとは思いません。
しかし、時間をかけた分操作のプロセス、思想などを深く掘り下げて理解することが出来たと感じています。実際満点とはいきませんでしたが、問題に対してプロセスを追い、噛み砕きながら解いていくことが出来ました。
資格を取るにあたり、ただ問題集を闇雲に頼らず、己の知識として吸収することが出来たのは良い経験になりました。
本記事では、頻出とかは関係なく面白いと思った内容を辿っていこうと思います。
# Stream Pipeline
Goldを受験する際避けて通れないStream APIですが、操作の流れが一見誤解されそうな仕組みをとっています。しかし、一度理解すればStream関連の問題にしっかり活きてくる内容だと思います。
以下に例を示します。
“`example.java
public cl
用解説語:インターフェースについて
【インターフェース/interface】とは
・境界面、接点、連絡役、橋渡し、などの意味を持つ
・何かと何かが接する部分、もしくはその間
・クラスに含まれるメソッドのひとつ
・メソッドの型と変数のみを定義している
・メソッドの具体的な処理内容は記述していない
・メソッドを利用する直前で処理内容を記述することが可能
・複数のインターフェースを継承し、新しいインターフェースを作ることも可能(多重継承というらしい)(例)インターフェースの宣言/実装
——————————-『宣言』
→ interface インターフェース名 {}『実装』
→ class クラス名 implements インターフェース名{}——————————-
【抽象クラス/abstract】とは
・abstract:抽象、の意
・抽象メソッドを1つ以上持つクラスのこと
・定義のみを宣言するメソッド(メソッド名・引数など)
・具体的な処理内容を記述しないメソッド
・メソッドのオーバーライドが可能
用語解説:アクセサ / アクセサメソッド、カプセル化
アクセサメソッドに入る前の補足
【カプセル化/ encapsulation】とは
・オブジェクト指向言語の特徴の一つ
・関連性のあるデータやプログラムを容器の中に収納すること
・容器 = オブジェクト
(※容器の名前はオブジェクト、と記載していました。修正いたします。)・フィールド、メソッドを収容する
・収容したものは、クラスの外から干渉できない
(※干渉できるものもあるようです。ご指摘ありがとうございます。)・オブジェクトの中に収容したフィールドやメソッドは、外から干渉できないように保護されている
・オブジェクトに入れて他から触れなくすることをカプセル化という(みんな箱入り娘?)
【アクセサ/アクセサメソッド】とは・フィールドのアクセスを仲介する目的で用意されるメソッド
・フィールドの値の更新や取り出しは、そのオブジェクト(容器)のメソッドを経由する
・全てのフィールド値は『set○○』『get○○』というメソッドがないとアクセスできない
・この『set○○』『get○○』のことをアクセサという【フィールド】とは
・clas
JavalinでWebアプリケーションを構築する
[Javalin](https://javalin.io/)というフレームワークを試してみたので投稿します。
このフレームワークは、参考書や日本語のサイトなどの情報が少ないですが、DocsとTutorialがとてもわかりやすく、特にTutorialには、それぞれサンプルプログラムがGitHUBに投稿されているので、Intellijにそのままインポートしてカスタマイズできたりしますので、WEBアプリを作成するのにあまり困らないでしょう。
# 環境
| カテゴリ | 値 |
|:—————–|——————:|
| os |windows 10 home 64bit |
| Java| 1.8 |
| framework| Javalin 3.6|
| 開発環境| IntelliJ IDEA 2019.2|#1. Hello World
Gradleプロジェクトを新規作成して、以下を実装するだけで
用語解説:オーバーロード
オーバーロードとは
・多重定義、overload
・同一クラスの中で行う(?)
・オブジェクト指向プログラミングの技法のひとつ
・引数や戻り値が異なるが名称が同一のメソッドを複数定義すること
・同一名称の関数(メソッド)を複数個定義し、引数の違いで区別する
※メソッドは、クラス内に定義した関数。処理の塊、手法。・引数の型が異なる同名のメソッドを予め複数定義しておく
→ メソッドを呼び出すときに選択肢ができる
→ 引数・戻り値の型に応じて適切なメソッドの呼び出しが可能
→ 呼び出し時のチェック・メソッド内部での条件分岐を減らせる
→ 可読性・保守性が向上する【メリット】
・メソッドの煩雑化防止
・似て非なるメソッドの大量記述の防止【デメリット】
・増えすぎると機能を理解しづらいメソッドを生む可能性あり”オーバーロードの本質は
『引数や戻り値、個々の振る舞いは異なるが、振る舞いの本質は同様』の場合のメソッドかコンストラクタに対して適用するべきであり、
『引数の型が異なるだけで振る舞いは同様』の場合のメソッドをオーバーロードしても混乱のもととなりやすい。”
Google App Engine (Java 11) + Spring Boot + Gradle で Hello World
## 概要
– Google App Engine Java 11 スタンダード環境 + Spring Boot の構成でシンプルな Hello World 表示 Web アプリケーションを作る
– Google App Engine Java 11 スタンダード環境の正式版リリースは2019年10月30日にアナウンスされている
– Java 11 リリースは2018年9月25日にアナウンスされている## 環境
– Google App Engine Java 11 スタンダード環境
– Spring Boot 2.2.0
– Gradle 6.0
– JUnit 5
– Thymeleaf 3## Java 8 スタンダード環境から Java 11 への基本的な箇所の変更点
– インスタンスクラスのメモリが2倍に増えた (例えば F1 は 128MB が 256MB になった)
– アプリケーション設定ファイルが appengine-web.xml から app.yaml に変更された
– war ファイルではなく、実行可能な jar ファイルをデプロイする必要がある#