JAVA関連のことを調べてみた

JAVA関連のことを調べてみた
目次

二分探索-leetcode Guess Number Higher or Lower

## 二分探索
検索対象と探索範囲の真ん中の値を比較して,探索範囲をだんだん半分に狭め、見つけるアルゴリズムです。

## 問題文
私たちは推測ゲームをしています。ゲームは次のとおりです。

1 から n までの数字を選択します。私が選んだ数字を当ててください。

あなたが間違った推測をするたびに、私が選んだ数字があなたの推測より高いか低いかを教えます。

事前定義された API intgues(int num) を呼び出すと、次の 3 つの可能な結果が返されます。

-1: あなたの推測は私が選んだ数字よりも大きいです (つまり、num > pick)。
1: あなたの推測は私が選んだ数字よりも小さいです (つまり、num < pick)。 0: あなたの推測は私が選んだ数字と同じです (つまり、num == pick)。 私が選んだ番号を返します。 ## コード java ```java /** * Forward declaration of guess API. * @param num your guess * @return -1 if num

元記事を表示

Lambda環境でのJavaのstaticについて

## 前提
pythonのコードでは関数外のコードは一度しか実行されないという記事を目にしたのでJavaのStaticについても同じ挙動なのか気になり検証した

## 検証
“` java
public class Cache {
private static Integer number = null;

public Cache(){}

public int get(){
if(number != null){
number++;
return number;
} else {
number = 0;
return number;
}
}
}

var cache = new Cache();
logger.info(“1回目の呼び出し cacheの番号: ” + cache.get());
logger.info(“2回目の呼び出し cacheの番号: ” + cache.get());
“`
上記の

元記事を表示

Java の UUID は符号付きで大小比較される

UUID を以下のパターンで比較してみます。
|format| uuid |
|:-:|:-:|
|基準| 018cc122-1a9d-7478-06e8-7a96ab18fea0 |
|MSB比較| X18cc122-1a9d-7478-06e8-7a96ab18fea0 |
|LSB比較| 018cc122-1a9d-7478-X6e8-7a96ab18fea0 |

“`Java
var uuid = UUID.fromString(“018cc122-1a9d-7478-06e8-7a96ab18fea0”);
var um1 = UUID.fromString(“118cc122-1a9d-7478-06e8-7a96ab18fea0”);
var um8 = UUID.fromString(“818cc122-1a9d-7478-06e8-7a96ab18fea0”);
var ul1 = UUID.fromString(“018cc122-1a9d-7478-16e8-7

元記事を表示

Javaよわよわ学習備忘録② VScodeに統合開発環境を一本化して、.Scannerを参考書に従って使おうとしてみたのに、拡張機能のError Lensがよく分かんないメッセージを吐いてきた(´д`)

前提 統合開発環境(IDE)は以下の記事に従い、VScodeで一本化してます。

Error Lens(VScode拡張機能)の概要

![Error_Lens.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584834/79bc7ac7-5626-c4d8-f3c2-9f9e7994f285.png)

**①コードを入力した時点で明らかなミス ⇒ 赤メッセージが該当箇所にでる**
**②(おそらくですが、警告(alert))ミスではないけど、そのまま実行しても動かない ⇒ オレンジ色メッセージが該当箇所にでる**

Error Lens が吐いてきたメッセージ(オレンジの部分)

![resource_leak_sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaw

元記事を表示

JavaでGoogle Custom Searchを活用する方法

# はじめに

Google Custom Searchは、特定のウェブサイトや複数のウェブサイト、あるいはインターネット全体からカスタマイズされた検索結果を取得するための強力なツールです。この記事では、Javaを使用してGoogle Custom Search APIにアクセスし、検索結果を取得する基本的な方法を説明します。

# 必要な準備

– Google Cloud Platformアカウント
– Google Custom Search Engineの設定
– APIキーと検索エンジンID

# 主なステップ

1. **リソースバンドルの作成**:
– `config.properties`ファイルに`google.apikey`と`google.custom.search.engine.id`を設定します。これにより、APIキーや検索エンジンIDなどの設定情報をプログラムから簡単に読み込むことができます。

2. **GoogleSearchServiceクラスの実装**:
– Javaで`GoogleSearchService`クラスを作成し、Google

元記事を表示

HttpSession

– Servletが公式支援するSessionで、一定時間使用しなければ該当Sessionを削除する機能などを提供する。
“`java
@PostMapping(“/login”)
public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult,
HttpServletRequest request) {
if (bindingResult.hasErrors()) {
return “login/loginForm”;
}

Member loginMember = loginService.login(form.getLoginId(), form.getPassword());

if (loginMember == null) {
bindingResult.reje

元記事を表示

Session

– サーバーに重要な情報を保管し、接続を維持する方法である。
– 前のCookieの解決を解決するためには、重要な情報はすべてサーバに保存し、クライアントとサーバは **Session ID(推定不可能な任意の識別子値、UUID 等使用)** にて接続しなければならない。 この方法をSessionという。
“`java
@PostMapping(“/login”)
public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServletResponse response) {
if (bindingResult.hasErrors()) {
return “login/loginForm”;
}

// 1. ユーザーがログイン情報(Login Form)を伝達すれば、サーバーで該当ユーザーであるか確認する。
Member loginMember = loginService.login(form.getLogi

元記事を表示

Cookieについて

– HTTP応答にCookieを入れてウェブブラウザに伝達すれば、以後ウェブブラウザでサーバーに要請する時、該当Cookieを継続的に送ってくれる。
– 永続的な CookieとセッションCookieがあるが、通常ブラウザ終了時にログアウトされることを期待するので、セッションCookieをお勧めする。
> 永続的な Cookie : 有効期限を入力すると、その日まで保持
> セッション Cookie : 有効期限を省略するとブラウザ終了時まで保持
“`java
@PostMapping(“/login”)
public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServletResponse response) {
if (bindingResult.hasErrors()) {
return “login/loginForm”;
}

M

元記事を表示

サーバーからクライアントに配信するResponseデータを作成する3つの方法

## 1. 静的リソース
– ウェブブラウザに静的なHTML、css、jsを提供するときは静的リソースを使用する。
– **src/main/resources**はリソースを保管する場所であり、class pathの開始経路である。
– Spring Bootは、class pathの次のディレクトリにある静的リソースを提供する。
– **/static , /public , /resources , /META-INF/resources**
> 下記の経路にファイルが入っていれば
> src/main/resources/static/basic/hello-form.html
> ウェブブラウザで以下のように実行すればよい。
> http://localhost:8080/basic/hello-form.html

## 2. View Template
– ウェブブラウザに動的なHTMLを提供するときは、ビューテンプレートを使用する。
– **static/main/resources/templates**にビューテンプレートを

元記事を表示

【Spring Boot】バリデーションで詰まったことまとめ

## はじめに
Spring Bootで個人開発をしており、バリデーションで詰まったところをまとめます(Spring Bootの実務経験はありません)。
基本、以下を参考にしています。
javax→jakartaに変わったのですが、それ以外は変わっていないようです。
[【Spring Boot】バリデーション](https://b1san-blog.com/post/spring/spring-validation/)

## Spring Boot3系にバージョンアップしたらjavax.validationがエラーになる
元々javax.validationでバリデーションを行っていたのですが、
ある日アプリケーションの起動ができなくなり、プロジェクトを新規作成した際にSpring Boot2.7.3→3.2.0にバージョンアップしました。
すると、importのjavax.validation〜がエラーになっていました。
調べるとjavax→jakartaになったことが出てきますが、書き換えてもエラーのままでした。
pom.xmlに以下が必要でした。
元のプロジェクトには書いてあっ

元記事を表示

flutterのandoirdアプリを内部テストしようとしたら起動できなくて泣いちゃった。。。

## 事の背景
昔、公務員として土木業界で働いていたのですが、当時の現場作業を簡略化できるアプリを作りたい、、、
そう思い経験0のFlutterに手を出してみた。
いざ、リリースに向けて内部テストでabbファイルをアップロードするも、スマホにインストール後「開く」ボタンが出てこず起動できない。。。
私が愛してやまないflutter cleanコマンドと とビルドを繰り返すも全く解決せず、ということで本当に泣きかけていた。

## 結論
AndroidManifext.xmlファイルの は、初期から追加する際は別タグを用意する必要がある。
助けてくださったサイトはこちらです、、、本当にありがとうございました!!!!
https://note.com/chute/n/n75cde5f1712a

## 症状の詳細

こちらではgoogle play consoleの詳細は省く。
内部テストでリリースしたアプリのURLをスマホで開き、アプリをインストール。
![image.png](https://qiita-image-store.s3.ap-northeas

元記事を表示

再帰を使用したDFSについて

## 問題 Leetcode 104. Maximum Depth of Binary Tree
バイナリ ツリーのルートを指定すると、その最大の深さを返します。

バイナリ ツリーの最大の深さは、ルート ノードから最も遠いリーフ ノードまでの最長パスに沿ったノードの数です。
Input: root = [3,9,20,null,null,15,7]
Output: 3

## 再帰
### コード
“`java
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
*

元記事を表示

【Java】Base64にエンコード/デコードする

# はじめに

業務で担当していたPowerShellのコードに「文字列をBase64に変換している処理」があったので、JavaでBase64にエンコードする方法と、Base64からデコードする方法を調べてみました。

# コード

## 基本的な変換処理

* Base64にエンコード/デコードするためのクラスは、`Base64.Encoder`と`Base64.Decoder`に分かれていました。
* これらのクラスは、いずれもJava8で実装されたそうです。
* APIのページを見る限り、`Base64.Encoder`と`Base64.Decoder`のコンストラクタを直接呼び出すことはできません。
* そのため、`Base64`クラスから`getEncoder()`メソッドと`getDecorder()`メソッドを呼び出してこれらのクラスのインスタンスを作ります。
* 単にエンコードするだけであれば`encode()`を使いますが、ここでは結果を文字列として受け取りたかったので` encodeToString()`を使っています。

“`java:Base64Sam

元記事を表示

[24日目] JavaでWebSocket (SSL可)

こんにちは、なりかくんと申します。
この記事はなりかくん Advent Calender 2023の24日目の記事です。(執筆は6日遅れの30日とか言えない。)

今回は、JavaでWebSocketを扱う方法を紹介します。Javaの記事ってなかなか出てこないんですよね。特にSSL対応のやつとか。
(調べ方が悪いのかもしれない。)

# Java標準機能のHttpClientでWebSocket
Java標準機能のHttpClientでWebSocketを接続できます。調べてもなかなか出てこなかったのでコードを紹介します。

“`java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.WebSocket;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.ExecutionException;

元記事を表示

DB 更新メソッドの引数にて transaction object をオプション引数的に扱う方式案

# 概要
DB にクエリ発行するメソッドにおいて
– 外部から transaction object を渡してクエリを発行する
– transaction object の省略時はメソッド実行時に tranaction を作成してクエリを発行する

をシンプルに実現したい、というのが基本的なモチベーションとしてありました。
これを実現する方式をいくつか検討しました。

# 基本実装
User を取得するコードを考えます。transaction 内でデータ取得したい場合と、単純な参照系の機能などで transaction を意識せず取得したい場合があり、この両方を同じコードで対応したいです。

“`java
class UserRepository
{
public User findById(String userId, QueryCondition condition, Connection conn)
{
try (
Statement stmt = con.createStatement();
R

元記事を表示

StringBuilderとString型の違い -LeetCode Merge Strings Alternately使用

## 問題文
2 つの文字列 word1 と word2 が与えられます。 word1 から始めて交互に文字を追加して、文字列を結合します。ある文字列が他の文字列より長い場合は、マージされた文字列の末尾に追加の文字を追加します。

マージされた文字列を返します。

## 解き方 3つ
### コード① StringBuilderを使用しない 実行速度:13ms メモリー:42.82MB
“`java
class Solution {
public String mergeAlternately(String word1, String word2) {
String ans =””;
int index=0;
while(index < word1.length()+word2.length() ){ if(index < word1.length()){ ans += word1.charAt(index); }

元記事を表示

SpringBoot3でUsernamePasswordAuthenticationFilterを使うとセッションが落ちる

## はじめに
SpringBoot3.xにアップグレードするとログインできなくなるプロジェクトがありました。
本家のアップグレードのドキュメントを見ても特に変更漏れが無くハマった為、記載しておきます。
同一の症状が出ている人は参考にしてみてください。

## 環境

– SpringBoot 3.1.6
– Java 17
– spring-boot-starter-security
– spring-session-jdbc
– UsernamePasswordAuthenticationFilterクラスを使用して拡張

ログイン後DBにセッションは書きこまれていましたが、何故かログインすらできませんでした。

## 簡易修正方法
SecurityFilterChainにてHttpSecurityで設定できるrequireExplicitSaveにfalseを入れるだけです。
“`java
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http, AuthenticationManager a

元記事を表示

jpackageコマンドでfat.jarのインストーラを作成する

jpackageコマンドでfat.jarのインストーラを作成する方法を示します。

# ① 事前準備

Windows環境でjpackageを利用する場合、WiX 3.0が必要です。リリースページからwix311-binaries.zipをダウンロードして、PATHを通しておきます。

https://github.com/wixtoolset/wix3/releases

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/597cc2d6-2e5f-e487-8c5c-84101b416dbf.png)

# ② jpackageコマンドの実行

ディレクトリ構成は以下の通りです。HelloWorld-0.0.1-SNAPSHOT.jarが対象のfat.jarです。

“`
build
├─ exe
└─ lib
└ HelloWorld-0.0.1-SNAPSHOT.jar
“`

jpackageコマンドを実行します。

– インストール先のフォルダを指定する

元記事を表示

ナップサック問題を制約充足ソルバーを使って解く OptaPlanner チュートリアル

この記事は [FastDOCTOR After Advent Calendar](https://tech.fastdoctor.jp/entry/2023/12/29/092753) 26日の記事です。次の日の記事は [外注で初期開発したシステムを内製化するためにやったこと](https://zenn.dev/shirauix/articles/5459c5b6a2f7ee) です。

# 概要

ナップサック問題は比較的簡単な問題であって、特別な道具は必要ないのですが、あえてそういう問題を制約充足ソルバーで解くことによって、やさしく学ぶことができるのでは、と考えています。

FastDOCTOR Technologies のテックブログでは、 OptaPlanner について実践的なケースを紹介していますので、よければご覧ください。

[【最適化問題】「医療の往診サービスで、医師とドライバーのペアが特定のエリアを巡回する最善のルートを考えよ」をソルバープログラムで解いてみた](https://tech.fastdoctor.jp/entry/2023/05/19/195525)

元記事を表示

40代事務職Java面白い!6週間勉強してオブジェクト指向とGithub便利だなって思った

公式ドキュメントを読め!おじさんに疲れたので、じゃあ英語で読めるようにアメリカのオンライン大学のコンピューターサイエンス学部に2023年9月に入学しました。現在社会人学生です。
11月からプログラミングのJavaコース入門で勉強してます。

1週間のカリキュラム
使用しているテキスト※公式サイトで公開されているシラバスより引用してます
Introduction to Programming Using Java Version 9.0, JavaFX Edition
https://math.hws.edu/javanotes/index.html

公式サイト掲載シラバスよりhttps://www.uopeople.edu/become-student/prepare-for-uopeople/prepare-college-courses/programming-1-cs-1102-learning-materials/

– その週のテーマのテキストを読む
– その週テキストで学んだことを英語のエッセイ形式で書く
– 毎週プログラミングのコードを書く課題

こんな感じです。

元記事を表示

OTHERカテゴリの最新記事