JAVA関連のことを調べてみた2020年03月05日

JAVA関連のことを調べてみた2020年03月05日

初心者から始めるJava、if文・switch文

#はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
**間違えた**ものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

#環境
言語:Java11、JDK13.0.2
動作環境:Windows10

#条件判断文
状況に応じた処理を行う場合、Javaでは**「条件(Condition)」**という考え方で処理の前提をとらえることになる。日常生活で使う条件と同じと考えていいが、Javaにおける「条件」は、**TrueかFalse**どちらかの値を持つものを指す。
条件判断文は、**「条件」の値に応じて処理を行う文**であり、条件の値を境に処理の内容を分けて用意することができる機能である。

  • if文
  • もし~であるならば(でないのなら)、〇〇する。
    そうでないならば(else)、△△する。

  • switch文
  • もし、〇〇の値が●●ならば、◎

元記事を表示

React Native vs. Ionic – A head-to-head Comparison in 2020

In this article, we are going to look at an intense comparison between Ionic and React Native development frameworks. At the end of this article, you will be all clear about what framework you should use for your development projects.

click here to read morehttps://www.positronx.io/react-native-vs-ionic-head-to-head-comparison/

元記事を表示

Javaのコレクション入門

[こちら](https://yk0807.com/techblog/2020/03/05/java%e3%81%ae%e3%82%b3%e3%83%ac%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e5%85%a5%e9%96%80%ef%bc%8b%ce%b1/)のブログ記事をQiitaに投稿したものです。

# 0.前置き
Javaに限らず、プログラミングではデータをまとめておくのに配列だけではどうにもうまくいかないことが多々あります。そこでデータ構造が重要になってくるのですが、そのあたりの表現方法は言語によって様々です。

C++ならvectorとかlistとか標準ライブラリのコンテナが用意されていて、(あまり経験ないけど)C#だとLINQというものを使うようです。PHPだと配列でかなりのことが出来たりします(その分使い方には慎重さを要する)。
Pythonだとリスト型やタプル、辞書などを用途に応じて使い分ける感じですね。

# 1.コレクションフレームワークとは
さて、Java。Javaでは、コレクションフレームワークというものを使います。コレクショ

元記事を表示

[Java8]streamを使ってint型の配列を降順ソートする

# 概要
– 勉強中にひっかかったところのメモ
– Integer型だと使えたけど、int型の降順だと、Comparatorが使えなかった。
– 結論は、boxedを使えばできるようだった。

# サンプルプログラム
– 「int型配列を使って、次の数字を降順に並び替えて出力しなさい」みたいな問題

“`java
import java.util.Arrays;
import java.util.Comparator;

public class Main {
public static void main(String[] args) throws Exception {

// 入力
int[] numArray = {4, 3, 2, 5, 6, 7, 3, 2, 1, 9, 7, 8, 10, 6, 4, 3, 5, 8, 9};

Arrays.stream(numArray)
.boxed()
.sorted(Comparator.rev

元記事を表示

Java6アプリからSSHJを使用してSSH接続する

## やりたいこと
Java6でコンパイルした自作アプリから別マシンに、[SSHJ](https://github.com/hierynomus/sshj)ライブラリを使用して、SSH接続することです。
以前は[JSch](http://www.jcraft.com/jsch/)ライブラリを使用して実現しようとしたのですが、[こちらの記事](https://qiita.com/sanoa/items/86c9e9efb5358601b25b)に書いたように上手くいかなかないので、JSchライブラリからSSHJライブラリに変更して実現しようとしています。

## 環境
### 接続先
– Ubuntu 16.04 LTS
– OpenSSH 7.2p2

### クライアント
– Windows 8.1
– 自作アプリ(Java6で開発)
– [SSHJ](https://github.com/hierynomus/sshj)

## サンプルコード
SSH接続時にパスワード認証を行うサンプルはたくさん見つかると思いますが、鍵認証(パスフレーズあり)を行うサンプルが少なかったように思えた

元記事を表示

【Java】配列

#配列
:sunny: 複数のデータをひとまとめにする。変数のセットのようなもの。

“`例.java
public class Main {
public static void main(String[] args) {
String fruit1 = “りんご”;
String fruit2 = “みかん”;
String fruit3 = “いちご”;
String fruit4 = “メロン”;
String fruit5 = “バナナ”;

System.out.println(fruit1);
System.out.println(fruit2);
System.out.println(fruit3);
System.out.println(fruit4);
System.out.println(fruit5);
}
}
“`

上記は果物の種類を表示していくプログラミングです。
これも間違いではないのですが、フルーツの種類を追加していくたびに
変数 fruit の数字が増えていき、

元記事を表示

ブラウザからの先読みリクエスト(Prefetch)はどうやって判定すべきか

# TL;DR
先読みリクエスト(プリフェッチ, Prefetch)はcssだけじゃなくて他のURLにも飛ぶケースがある。
特定のエンドポイントに対して、

– ユーザーのアクションに起因するGETリクエストの件数をより正確に知りたい
– 割と重い処理なので余計なリクエストはなるべく処理したくない

上記ニーズがある場合プリフェッチ対策をした方が良い。

# 経緯
あるWebシステムを開発中、テストサーバーに対してどう考えても意図しないGETリクエストがログに入ってきたため、原因について考えた。
調べたところ、ブラウザバーに何かを入力したりした時にブラウザが先読み(プリフェッチ)処理としてGETリクエストを飛ばすことがあるらしく、そのリクエストに関してはヘッダーに固有の値が設定されるため、それぞれのブラウザの仕様に対して検知処理を実装して対応した。

# 各ブラウザごとのプリフェッチを示すヘッダー

## Chrome(Chromium)
`Purpose: prefetch`
https://www.chromestatus.com/feature/624795967710822

元記事を表示

初心者から始めるJava、式と演算子 2

#はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
**間違えた**ものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

#環境
言語:Java11、JDK13.0.2
動作環境:Windows10

#演算子
前回は、加算と連結に使う+、代入に使う=を扱った。Javaの演算子はたくさんあるが、今回は代表的なものを扱う。以下リスト。

**1.乗算(*),除算(/),剰余(%)**
**2.等価(==)と不等価(!=)**
**3.インクリメント(++)とデクリメント(–)、またその前置後置**

#乗算・除算・剰余
Javaにおいて(僕が知るに少なくともPythonも)、乗算の場合に×でなく*を使う。除算は÷でなく/、そして剰余(余りの数を出す)は%を使う。

除算と剰余において、0で割ることは許されていない(0除算)。コンパイルの際にはエラーとして出てこないが、実行の

元記事を表示

【Data Base】busy状態が頻発したケーススタディ

#事象
初めての新規開発案件で、自分の製造した機能でbusy状態のエラーログが頻発してしまった。

##原因
調査の結果、原因は他機能同士でデッドロックが発生してしまうことに起因していた。

##調査方法
悲観ロックをかける順序を洗い出した。
例)昇格機能:対象の社員を確認 → 所属する店長グループを確定 → 配属エリアの選定 → 配属店舗の選定
       t_staff → t_maneger_group → t_area → t_shop
  退職機能:所属店舗の確認 → 対象社員の上長を確認 → 対象社員の削除
       t_shop → t_manger_group → t_staff

(無理に例えると分かりにくい気もするけど、せっかく書いたし残します。)

##対策
テーブルをidなどで管理して、ロックする順序をプロジェクト全体で統一するのが一般的だよね~との事。

###最後に。
ある程度、デッドロックが原因であることは当たりがついていたが、それを起こしている機能がなかなか見つからずに困り果てていた。
やむを得ず先輩に助力を求めたところ、あっさりと原因の機能を見つ

元記事を表示

AWS Lambda で Javaを使う ーEclipse準備編

##やりたいこと
AWS Lambdaで実行するJavaを実装する

##目次
・Eclipse準備編(今回)
・登録実行編(次回以降)
・実装編 – EC2を定時に止める/立ち上げる
・実装編 – CloudWatchの引数を確認する

## Eclipse準備編
まずは、開発環境を整える。
AWS Toolkit for Eclipseというのが準備されているので、それを利用する。
https://docs.aws.amazon.com/ja_jp/toolkit-for-eclipse/v1/user-guide/setup-install.html

↑に従うと
Eclipse→[Help] →[Install New Software] からインストールできるはずなのだけど、
ネットワークの問題なのかなんなのかうんともすんとも言わなかった。

ので、↓の「Drag and Drop Install」からインストールした。
https://marketplace.eclipse.org/marketplace-client-intro?mpc_install=907

とりあ

元記事を表示

モンティ・ホール問題の簡単な確認

# はじめに
モンティ・ホール問題とは――――[Wikipedia](https://ja.wikipedia.org/wiki/モンティ・ホール問題)によれば
> プレーヤーの前に閉じた3つのドアがあって、1つのドアの後ろには景品の新車が、2つのドアの後ろには、はずれを意味するヤギがいる。プレーヤーは新車のドアを当てると新車がもらえる。プレーヤーが1つのドアを選択した後、司会のモンティが残りのドアのうちヤギがいるドアを開けてヤギを見せる。
ここでプレーヤーは、最初に選んだドアを、残っている開けられていないドアに変更してもよいと言われる。
ここでプレーヤーはドアを変更すべきだろうか?

という問題だそうです。(※但し、モンティは外れの場所を知っていて、必ずヤギのいる場所を開ける。)
一見ドアを変えても変えなくても確率は変わらないように見えますが、実は**変えたほうがプレイヤーに有利**なのだそうです。今回はこの実験を大量に試行して結果を比較したいと思います。
言語はいつも安心のJava ~~(自分が好きなだけ)~~ を使用します。
# 要件
– ドアの数をNUMBER_DOORSとし

元記事を表示

初心者から始めるJava、式と演算子 1

追記:2020/3/4 参考書籍を追記
#はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
**間違えた**ものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

#環境
言語:Java11、JDK13.0.2
動作環境:Windows10

#式とは
小さいころから四則演算を行い、式を読むことには慣れていると思うが、同じ電子演算機である電卓とプログラムとでは違う部分もあるので、注意が必要。

Javaにおいて「式」は以下の二つで構成される。

1、**演算の仕方【演算子】(Operator)**
ex) +(足す)、-(引く)、*(掛ける)、/(割る) etc…

2、**演算の対象【オペランド】(Operand)**
ex) 1 + 2 における1と2

#式の実践
プログラムでは同じ+を、「文字列の連結」と「演算」の両方に使うことができる。文字列は””で囲われた中身

元記事を表示

Micronaut(Java)でBean Validationを追加する

# Micronautで自作のBean Validationを使いたい
業務で自作のバリデーターを作る必要が出てきて、新しいフレームワークなので全然資料がない && Java初心者 で結構苦労しました。

結果的には期待する動作をするものが出来たのでメモします。

# 経緯
現在のタスクで、入力バリデーションとしてよくあるこのような実装が必要になりました。

1. リクエストの特定のパラメータが、指定の正規表現にマッチしてるか確認
2. していなければ特定のエラーメッセージを持ったエラーレスポンスを返す

素?のMicronautなら `Pattern(regexp = “パターン”, message=”メッセージ”)` で実現できると思いますが、現在のプロジェクトではアノテーション別にハンドラで処理をしており、この実装だと不都合でした。

# 実装

**2020/03/04追記 Validatorクラスにに `@Singleton` を付ける必要があり、加筆しました。**

### アノテーション + バリデーター
EmployeeNumber フィールドに対して、以下のいずれか

元記事を表示

Java AtomicLongを使ったシングルスレッド保証(kafka参考)

KafkaConsumer の `poll()`辺りののソースコード見ていたら、AtomicLongを使ってシングルスレッド保証をしていた。
考え方が綺麗だったので、自分でも試したやつを乗っけておく。

(参考:[KafkaConsumerのpoll()部分](https://github.com/apache/kafka/blob/2.3/clients/src/main/java/org/apache/kafka/clients/consumer/KafkaConsumer.java))

“`block-release.java

import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicInteger;

public class Main {

private static final Long NO_CURRENT_THREAD = -1L;
private static final AtomicLong curr

元記事を表示

Azure Cosmos DB Java SDK で ドキュメントがすでにあれば更新、存在しなければ新規作成

“`java

package com.microsoft.azure.documentdb.sample;

import java.util.Date;
import java.util.Iterator;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.microsoft.azure.documentdb.ConnectionMode;
import com.microsoft.azure.documentdb.ConnectionPolicy;
import com.microsoft.azure.documentdb.ConsistencyLevel;
import com.microsoft.azure.documentdb.Document;
import com.microsoft.azure.documentdb.DocumentClient;
import com.microsoft.azure.documentdb.FeedOptions;
import

元記事を表示

TeamCityビルドエージェントコンテナにJDKを追加する

## 目的

自分の環境にあったビルドエージェント環境のコンテナを用意できる。

## ビルドエージェント構成方針

ビルドエージェントの構成は2つの方針がある。

#### 1:リッチなビルドエージェント

ビルドエージェントは無料枠では2つまでなので、小さなプロジェクトユースでは(費用を払わない限り)1つのエージェントに複数のビルド環境をもたせたいだろう。
おそらく、個人ユースでもおおよそ同じと思う。

#### 2:最小限のビルドエージェント

ビルドエージェントを最小限にすることで、ビルド環境のセットアップは簡単に済ませることができるし、Dockerfileも小さくて済む。
反面、エージェントの管理を手動で行わなければならない。

## ベース検討

特に要件がない場合には、[通常のエージェントコンテナ](https://github.com/JetBrains/teamcity-docker-agent)を出発点として作業するのがいいだろう。.NETビルドやDockerデプロイ用の環境セットアップもなされているようだ。
一方、ハードなプロジェクトユースでコンテナを少しでも小さ

元記事を表示

MyBatis(Mapper XML)でオブジェクトをPostgreSQLにJSONとして格納する方法

# やりたいこと
Spring + Mybatis(Mapper XMLでSQL文を定義)なときに、ObjectをPostgreSQLにJSONB型として格納したい

# やり方
今回は2つ取り上げます。
## まず思いつく方法
Java側で一旦Stringにして、格納するSQL文の中でJSONBにキャストします。Object→Stringには`com.fasterxml.jackson.databind.ObjectMapper`を利用します。

“`java:SQL呼び出す側
Object data = hoge(); //格納したいデータ
ObjectMapper mapper = new ObjectMapper();
String objectJSON = mapper.writeValueAsString(data)
sqlClient.insert(objectJSON)
“`

“`xml:MapperXML

insert into hogetable (data) values (#{objectJSON}::

元記事を表示

Spring Boot + Spring Data JPA で宣言的トランザクションによるDB制御をするサンプルコード

## 概要

– Spring Boot + Spring Data JPA (Java Persistence API) を使用して @Transactional アノテーションによる宣言的トランザクションなデータベース制御をするサンプルコードを示す
– Spring Framework や Hibernate ORM のデバッグログ等を出力してトランザクション処理の流れ (JpaTransactionManager, EntityManager, コミット, ロールバック) を確認する

## 動作確認環境

– Java 11 (AdoptOpenJDK 11.0.6+10)
– Gradle 6.2.1
– Spring Boot 2.2.4
– Spring Data JPA 2.2.4
– Spring Web MVC 5.2.3
– Java Persistence API (Jakarta Persistence API 2.2.3)
– Hibernate ORM 5.4.10.Final
– H2 Database 1.4.200

## ソースコード

### ソ

元記事を表示

Spring MVC の正式名称は Spring Web MVC

正式名称: Spring Web MVC
通称: Spring MVC

どっちがどっちなのか忘れてしまうので公式資料を参照する。

Spring Framework 5.2.4 のドキュメントより。

[Web on Servlet Stack](https://docs.spring.io/spring/docs/5.2.4.RELEASE/spring-framework-reference/web.html)

> The formal name, “Spring Web MVC,” comes from the name of its source module (spring-webmvc), but it is more commonly known as “Spring MVC”.

元記事を表示

初心者から始めるJava、変数と型

追記:2020/3/4 参考書籍を追記
#はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては
**間違ったもの**が中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

#環境
言語:Java11、JDK13.0.2
動作環境:Windows10

#変数とは
変数(Variable)とは、コンピュータが持つメモリを利用して、必要な値を記憶しておくための仕組み。**「格納するための箱」**として例えられる。

変数を扱うにあたっての必須ルール
**1、変数の[名前]を決めて**
**2、変数の[型]を指定してから**
**3、変数を[宣言]してから使う**

変数の命名に使うことのできる文字・数字の組み合わせを**識別子(Identifier)**と呼ぶ。ただし、Javaの規則により識別子になれない名前も存在する。

#1、識別子のルール
以下は間違った例と、その理由。

“`Ja

元記事を表示

OTHERカテゴリの最新記事