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

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

[競プロ]Union-Find実装【Java】

競技プログラミングで頻出のUnion-Findというデータ構造について学びました。
また、例題を解きましたので解説していきます。

# Union-Findって?
データ型の一種です。
[wikipedia](https://ja.wikipedia.org/wiki/%E7%B4%A0%E9%9B%86%E5%90%88%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0)を見ると以下のように書かれています。

> 素集合データ構造(そしゅうごうデータこうぞう、英: disjoint-set data structure)は、データの集合を素集合(互いにオーバーラップしない集合)に分割して保持するデータ構造。このデータ構造に対する以下の2つの便利な操作をUnion-Findアルゴリズムと呼ぶ。

> Find: 特定の要素がどの集合に属しているかを求める。2つの要素が同じ集合に属しているかの判定にも使われる。
Union: 2つの集合を1つに統合する。
これら2つの操作をサポートしているため、素集合データ構造は「Union-Findデータ構造」あ

元記事を表示

Descontos Top – Cupom de Desconto

O Descontos Top (https://descontostop.com.br) é um site que ajuda o consumidor a economizar através de cupom de desconto. Utilizando os códigos promocionais ou as ofertas fornecidas por nossos parceiros, é possível poupar em compras das principais lojas virtuais.

Procuramos criar um ambiente que contribua para uma jornada de compra segura. Além da distribuição de cupons de desconto e ofertas, também fazemos a análise de reputação dos nossos parceiros e publicamos materiais adicionais no site, c

元記事を表示

【Java】Fisher-Yatesのシャッフルで配列をシャッフルする

# はじめに

久しくプログラミング業務から離れているため、ちょっとしたアルゴリズムに触れて頭の体操をしようと思い立ち、Fisher-YatesのシャッフルをJavaで実装してみました。
アルゴリズムそのものは、[Wikipediaに記載されているもの](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%83%E3%82%B7%E3%83%A3%E3%83%BC%E2%80%93%E3%82%A4%E3%82%A7%E3%83%BC%E3%83%84%E3%81%AE%E3%82%B7%E3%83%A3%E3%83%83%E3%83%95%E3%83%AB)を利用しています。

# 作成したコード

* 以下のコードは、[Wikipediaの改良されたアルゴリズム](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%83%E3%82%B7%E3%83%A3%E3%83%BC%E2%80%93%E3%82%A4%E3%82%A7%E3%83%BC%E3%83%84%E3

元記事を表示

Docker-composeを使って、ローカルにJava+Mysql開発環境を作成した話

#筆者はこんな人
・10年間Javaのエンジニア(途中から独自FW触っていたせいかJavaを忘れた人)
・docker触って、1ヶ月位

#手順
こちらの方の手順を参考にさせていただきました
[【IntelliJ+Docker】Spring Boot+Java15+MySQL環境構築]
(https://www.netbusiness123.com/docker-spring-boot-environment/)

#詰まった所

・その1
Spring InitializrにJava15がなったので、16を選択
その際にspring bootは「2.5.0 (SNAPSHOT)」を選択

理由
デフォルトの2.4.5は、Gradle 6.8であるため、Java16をサポートしていない
※dockerをbuildする時に、エラーで起動しない

参考
[@Gradle 7.0にアップデートしてJava16でビルドする]
(https://yusuke.blog/2021/03/04/2942)

・その2
JavaのDockerFileは、15ではなく16に修正

元記事を表示

singletonについて

# singletonについて

SpringBootの動画学習で、singletonというプログラミング初心者には聞きなれない単語が出てきたのでsingletonについて調べてまとめてみました。



# singletonとは?
singletonは、あるクラスのインスタンスが必ず一つであることを保証することを指します。

また、singletonはデザインパターンの一種です。

通常はインスタンス化する際、クラスオブジェクトが一つに対し、インスタンスオブジェクトは複数生成することが出来ます。

しかし、クラスオブジェクト一つに対し、一つのインスタンスのみを共有したい場合はsingletonを使用し他のインスタンスを生成できなくします。

## singletonの多用には注意
singletonはデザインパターンの中でも比較的理解されやすい、容易に利用できることから多用されがちです。

しかし、多用しすぎるとクラス間の依存関係を不必要に強めてしまう恐れがあるため、singletonは**どうして

元記事を表示

教科書にはあまり載ってない実行時クラスを上書きして急場を凌ぐ話

## これはなんですか?
jarの中にあるクラスや変更できないコンパイル、パッケージング済みライブラリなどについて、挙動を変えたいときにその動作を受け持つクラスの挙動を変えるための秘技。
直接クラスを書き換えたりするのではなく、実行時にメモリ上にロードされたクラスを書き換えるため、ライブラリそのものを書き換えわけではない。

Javaバージョン問わずの話で、この先も大きく変わることはないと思う。
私が最初に触ったJDKは1.4で、最初にこの技法を用いたのは1.5。
その頃からJava 11までずーっと有効でした。

私はJDKの開発者ではないから、クラスがロードされ保持する具体的な仕組みとかはよくわかっていない。また、その説明を仔細に行うものではない。

## 秘技の説明
私はクラスが保持される仕組みは、Javaの挙動から推測するに、概ねマップ(Map)のようなものだと思っている。

ジェネリクスの中の型は、Stringの部分はクラスのフルパス `”java.util.ArrayList”` などで、Classの部分はjava.util.ArrayList

元記事を表示

Java Spring Controllerで使用したもの(個人用)

Java Spring Controllerで使用したものを書き連ねていきます。
完全に個人用です。参考にしないでください。

##こだわりのディスクリプションを書く
(例)[({要素1})、({要素2})、({要素3})]{標準discription}
要素を最大3つまで表示させる場合

1.標準discriptionはymlファイルに記載

2.要素を生成(最大3つまで)

“`java:java
StringBuilder sbHoge = new StringBuilder();
int count = 0;
for(HogeEntity hogeEntity : hogehoge.getHoges()) {
if(count <= 2) { sbHoge.append("、"); sbHoge.append(hogeEntity.getName()); } count ++; } if(sbHoge.length()!=0) { sbHoge.deleteCharAt(0); sbHoge.inser

元記事を表示

MVC の Model の作成 / JDBC

***
###■ MVC の Model ( JDBC )
Webアプリケーションの制御の役割: Contoller(サーブレット)
Webアプリケーションの画面の役割: View( JSP )
Model は、アプリケーションのメインの処理を担う部分
役割としては、受けたリクエストに対してコントローラーから指示を受け、データベース接続やデータの操作、加工を行う 
このデータの処理をおこなうにあたって、JDBC ( Java DataBase Connectivity ) というJava からデータベースに簡単に接続できる技術(手順)を利用する
決められた手順に従い Java のプログラム内で順番に呼び出していくことでデータベースの制御ができる

JDBC は MySQL や Postgre 、 SQLserver など、俗に RDB と呼ばれるものに対してはどれもドライバが用意されており、どのドライバも手順が共通化されている(例えばMySQL であれば公式サイトからドライバがダウンロードできる)

※Eclipse にデフォルトで入っている Maven というツールでも DB と

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事