- 1. Java初心者の失敗メモ
- 2. HashSetとListのパフォーマンスの違い
- 3. Spring SecurityのfailureUrl()とfailureForwardUrl()の違い
- 4. Spring Boot + DB接続(H2データベース)
- 5. 実務で出会ったグレーな設計手法
- 6. JavaでXMLをファイルに出力したい
- 7. graphql-java を使うときはクエリのサイズ制限に注意しよう
- 8. javaで理解するオブジェクト指向
- 9. 【初めてのJava】まずはコーディングしてみた(クラス)
- 10. 個人開発でサービスを作ってみた
- 11. jenkinsでログ管理を行う
- 12. Helidon 4.x で 分散トレーシング (OpenTelemetry Java Agent は使わない編)
- 13. XOR演算を使用して解く LeetCode Single Number
- 14. 【Java】JIS X 0213 文字チェック
- 15. 【Java・学習ログ16】コレクションについて~Setの基本~
- 16. ビット操作 Counting Bits
- 17. GCP Cloud Bigtable機能と実装
- 18. Spring Securityでログイン後のURLに付くcontinueクエリパラメータの正体
- 19. 【データベース•学習ログ2】Javaからデータベースに接続し、テーブルを作成する
- 20. 2024年初投稿
Java初心者の失敗メモ
私がJavaの学習中に引っ掛かった内容を纏めています。
※内容は今後変更・追記する可能性があります。
・エラー: 構文解析中にファイルの終わりに移りました
正
public static void main(String[] args)
{
System.out.println(“Hello!”);
}誤
public static void main(String[] args)
{
System.out.println(“Hello!”);原因:{}の不足
☆プログラムが長くなると{}の数が合わなくなりがちになり発生する
・newの扱い
オブジェクトの作成で用いるコマンド。
☆配列の宣言にも必要だが忘れがち
・static
クラス変数とクラスメソッドに用いる。
インスタンスと異なりオブジェクトに関連付けられていない。
☆クラス全体を管理する変数等で用いる。
・エラー:InterruptedException
原因:スレッド実行中の他スレッドによる割り込みの発生
☆スレッド内でsleepを使用した、
HashSetとListのパフォーマンスの違い
## 結論:HashSetの方が高パフォーマンス
### 使用問題文-LeetCode 345
文字列 s を指定すると、文字列内のすべての母音のみを反転して返します。母音は「a」、「e」、「i」、「o」、「u」で、小文字と大文字の両方で複数回出現することがあります。
### コード HashSetを使用 実行時間:5ms メモリー:44.46MB
“`java
class Solution {
public String reverseVowels(String s) {
char [] c = s.toCharArray();
HashSetlist = new HashSet<>();
list.add(‘a’);
list.add(‘i’);
list.add(‘u’);
list.add(‘e’);
list.add(‘o’);
list.add(‘A’);
list.add(‘I’);
Spring SecurityのfailureUrl()とfailureForwardUrl()の違い
# 環境
– Spring Boot 3.2
– Spring Security 6.2# 忙しい人のための結論
`failureUrl()`を使いましょう。# レスポンスが返ってこない
👇のように記述すると、ログイン画面で間違ったユーザー名・パスワードを入力した場合にレスポンスが返ってこなくなりました。“`java
@Configuration
@EnableWebSecurity
public class SecurityConfig {@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.formLogin(login -> login
.loginPage(“/login”)
.defaultSuccessUrl(“/”)
.failureForwardUrl(“/login?error”) //
Spring Boot + DB接続(H2データベース)
# はじめに
本記事ではSpring BootのWebアプリケーションにH2データベースを組み込む方法を記載します。# 前提条件
– Spring Bootのプロジェクトが起動できること上記がまだの場合は以下の記事を参考に起動まで実施してみて下さい
https://qiita.com/high_high/items/263cfcbd712ada6cddd3
# H2とは
H2とはオープンソースで開発されているRDBMSの1つで、プログラム本体のサイズが小さいため軽量に動作します。
また、H2はOSにインストールせずに利用できるというメリットがあり、Webアプリケーションに組み込んで使うのに便利なRDBMSです。
大量のデータを扱うような大規模アプリケーションでの利用には不向きですが、簡単なアプリケーションであれば十分に実用できます。## 依存関係の追加
H2を利用するために依存関係を追加します。
※ビルドツールによって依存関係を追加するファイル名が異なります– Mavenの場合
“`pom.xml
実務で出会ったグレーな設計手法
# はじめに
ソフトウェア開発の現場では、理想と現実の間で常にバランスを取る必要があります。特に BtoB 形式のプロダクト開発においては、顧客のニーズに迅速に対応するため、時には標準的な設計手法から逸脱する「グレーな設計手法」を採用することがあります。この記事では、一般には公開されていない BtoB プロダクトで遭遇した、伝統的な設計原則からは外れるが、特定の状況下で有効であった設計手法について考察します。
これらの手法は、一般的なソフトウェア開発のベストプラクティスとは異なる場合が多く、メリットとデメリットの両方を持ち合わせています。ここでは、それぞれの手法の背景、実装時の考慮点、そしてそれに伴うリスクについて詳しく掘り下げていきます。目的は、これらの「グレーな設計手法」が実務でどのように機能し、またどのような影響をもたらす可能性があるかを理解することです。
> 注意: ここで紹介する手法は、特定の文脈や要件に基づいて選択されたものです。これらの手法を適用する際には、常にプロジェクトの特性やリスクを十分に考慮し、適切な判断を行うことが重要です。
—
## 目次
1.
JavaでXMLをファイルに出力したい
JavaでXMLをファイルに出力したい場合はTransformerを利用します。
https://docs.oracle.com/javase/jp/8/docs/api/javax/xml/transform/Transformer.html
例: メモリ上で構築したXMLをfruits.xmlに出力する。
“`java
// XMLをメモリ上で構築する。
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();Element e1 = document.createElement(“element1”);
e1.setAttribute(“name”, “ELEMENT1”);
document.appendChild(e1);Element e2 = document.createElement(“element2”);
e2.setAttribute(“name”, “ELEMENT2”);
e1.appendChild(e2);E
graphql-java を使うときはクエリのサイズ制限に注意しよう
# 環境
– java 17
– spring-boot 3.1.2
– graphql-java 21.0# 発端
GraphQL API の利用者から「クエリが実行できない!」という報告を受けました。
報告があったエラーは以下。“`
graphql.parser.exceptions.ParseCancelledException:
More than 15,000 ‘grammar’ tokens have been presented. To prevent Denial Of Service attacks, parsing has been cancelled.
“`メッセージを見てすぐに「巨大なクエリを送っているクライアント側の責任だろう」とは思いましたが、そんな制限を実装したつもりは無いし、 API ドキュメントでも明言していなかったので、発生源を確認しました。
# サイズ制限エラーの発生源
ログにスタックトレースが残っていたので、発生源はすぐに特定できました。graphql-java の [ParserOptions.java](https
javaで理解するオブジェクト指向
# はじめに
プログラミングの勉強をしている上で、オブジェクト指向という壁にぶつかると思います。
オブジェクト指向を勉強する上で、よく車などの例で教えてもらうことがあると思います。
その時になんとなく理解したつもりになってそのままにしていることがあると思います。
しかしプログラミングを学んでいく中で、オブジェクト指向は避けて通れません。
ここではjavaを用いて生徒の点数を表示するプログラムを記述している。# 今回作成するプログラム
今回は生徒の点数とその科目ごとの平均点を表示するプログラムを作成していきます。
具体的には
“`
Aさん
数学:90, 英語:90, 理科:80
Bさん
数学:70, 英語:70, 理科:90
Cさん
数学:30, 英語:30, 理科:60
平均点
A:73, B:71, C:58
“`
というような出力結果が出るようにプログラムを記述していきます。
その上でオブジェクト指向を用いない場合と用いる場合を見比べてもらいます。# オブジェクト指向を用いないプログラム
以下のコードはオブジェクト指向を用いてないものです。“`java:Main.
【初めてのJava】まずはコーディングしてみた(クラス)
## はじめに
HelloWorldの次として、BMI計算機を書いてみることにしました。
## 機能
標準入力で身長、体重を入力すると、BMIの計算結果を出力するだけのツールです。
メインメソッドで終わってしまう内容ですが、目的はJavaを理解するためのコーディングなので BMIを計算するクラスを別に立てています。## ソースコード(初回投稿時)
“`java:App.java
import java.util.Scanner;public class App{
public static void main(String[] args){calcBmi bmi = new calcBmi();
Scanner scanner = new Scanner(System.in);
double height = 0.0;
double weight = 0.0;try{
System.out.println(“身長を入個人開発でサービスを作ってみた
個人開発でサービスを作って公開したので、その諸々に関して記録に残しておこうと思います。
作ったものはこちらです!
https://lp.tuzuriba.com/
サービスのコンセプトや主な機能はこちらに書いてます。
https://media.tuzuriba.com/column/what_is_tuzuriba/
## なぜ作ったのか
ものづくりが好きだからで、完全に趣味です!## どうやって作ったのか
### 1. 企画
お仕事の場合はお金を産まなければいけないので、誰の何をどうやって解決するのか・解決したとしてお金を産むのか、みたいなことを何度も繰り返し検証して精度を高めていく必要がありますが、個人開発なのでその辺は特に考えていません。「こんな感じの世界観が実現出来たら良いなぁ」というふんわりした考えがあったので、開発着手する前にまずはランディングページを作って、血迷わないように考えを明確化しました。(ランディングページは上に貼ったものです)
### 2. 開発
ランディングページを見返しながら、最低限この辺の機能があればコンセプトを表現できそうかな?といjenkinsでログ管理を行う
## 背景
jenkinsとは、Javaベースで起動するソフトウェア開発向けのツールです。
ソフトウェア開発のビルド、テスト、デプロイを目的としたオープンソースを構築し、自動化したい処理を定義します。
サーバ内のスクリプトを指定し、実行タイミングを定義することで、osのcronのような処理が実現できます。
cronでは、逐次処理(例えば、A処理→B処理といった内容を1時間毎に実行する)は、crontabの定義上難しいのに対して、jenkinsでは定義可能です。
Jenkins本来の用途とはズレていますが、ジョブ管理として使っていくとともに、課題としてあったログのデータベースへの挿入中にログのローテートがされてしまう問題を解決するのが本記事の目的となります。## 導入方法
jenkinsの公式サイトより、warファイルがあるため、
以下サイトからダウンロードします。
https://www.jenkins.io/download/
※Redhat、CentOS、Almalinuxなどのディストリビューションでは下記より必要なバージョンをwgetでダウンロードすればOKです。
(インタHelidon 4.x で 分散トレーシング (OpenTelemetry Java Agent は使わない編)
## はじめに
既に、[「Helidon を用いた MicroProfile Telemetry Tracing」](https://qiita.com/shukawam/items/2ea5a1aeff03901edd2b) という投稿がありますので、大筋はそちらの記事を参照していただいて、ここでは OpenTelemetry の Java Agent を使わずに Heldion 4.x の分散トレーシングを設定し、Oracle Cloud Infrastructure (OCI) の Application Performance Monitoring (APM) と連携して分散トレーシングを行う方法や、さらには Jaeger や Zipkin 等の他の分散トレーシングにも対応できるような MicroProfile 流の設定の方法を紹介します。
## Helidon による 分散トレーシングのための設定
基本的な設定方法については、https://helidon.io/docs/latest/mp/telemetry に書いてありますので、そちらにまずは目を通していただきたい
XOR演算を使用して解く LeetCode Single Number
## 問題文
空でない整数 nums の配列では、1 つを除いてすべての要素が 2 回出現します。その 1 つを見つけてください。実行時の複雑さが線形になるソリューションを実装し、一定の追加スペースのみを使用する必要があります。
## 解答
上記問題のポイントは、同じ数を確認できるかどうかです。
XOR演算^を使用することにより、可能になります。
なぜなら、XOR演算では同じ数があった場合0になり、被っていない数は残るからです。### コード java
“`java
class Solution {
public int singleNumber(int[] nums) {
int result = 0;
for (int n : nums){
result^=n;
}
System.gc();
return result;
}
}
“`
実行時間:2ms
メモリー:42.74【Java】JIS X 0213 文字チェック
仕事で、文字列に `JIS X 0213`以外が含まれないことをチェックする処理を実装しろと言われたのですが、調べてもなかなか出てこなかったので、備忘録として記載しておきます。
## コード
処理自体は簡単で、`charsetName`に `x-SJIS_0213`を指定して、`byte[]`⇔ `String` に変換して、変換前後の値が一致することを確認します。“`java
String target = “小⃝𠮷”;
byte[] targetBytes = target.getBytes(“x-SJIS_0213”);String after = new String(targetBytes, “x-SJIS_0213”);
System.out.println(“check:” + after.equals(target));
“``String target` に含まれる値が `JIS X 0213`の文字のみであれば、`after.equals(target)`は `true`。
`JIS X 0213`以外の文字が含まれる場合は、`false` となり【Java・学習ログ16】コレクションについて~Setの基本~
教本に沿ってやってみたシリーズ、『第16章』その2。
≪使用教材≫スッキリわかるJava入門 第3版 スッキリわかるシリーズ## set関連のクラスについて
– java.util.HashSetクラス
Setインタフェースを実装するコレクションクラスの中でもっとも一般的なクラス。set関連クラスは複数の情報を重複なく格納する集合(セット)というデータ構造を実現するためのもの。
「重複は許さないが、その順番は問わない」というデータの集まりを利用したい場合にSet関連クラスを用いる。【Setインタフェースが備えるメソッド】
|操作|戻り値|メソッド|機能|
|-|-|-|-|
|追加|boolean|add(★)|セットに要素を追加|
|取得|なし|なし|なし|
|調査|int|size()|格納されている要素数を返す|
||boolean|isEmpty()|要素数がゼロであるかを判定|
||boolean|contains(★)|指定要素が含まれているかを判定|
|削除|void|clear()|要素をすべて削除する|
|boolean|remove(★)|指定ビット操作 Counting Bits
## 問題文
整数 n を指定すると、各 i (0 <= i <= n) について、ans[i] が i のバイナリ表現における 1 の数となる、長さ n + 1 の配列 ans を返します。 ## 解答① 引数n+1の長さを持つ配列ansを用意し、ans.length分をループします。 (i/2)+(i%2)で2進数変換を行い、1のカウント数をansに格納する。 ### コード ```java class Solution { public int[] countBits(int n) { int offset=1; int [] ans = new int [n+1]; for (int i=1;i < ans.length;i++){ ans[i]=ans[i/2]+(i%2); } return ans; } } ``` 実行時間:2ms メモリー:46.55MB ## 解答② n&(n-1)により、nの最下位の1を0に変換および論理積を行い、ans[iGCP Cloud Bigtable機能と実装
# GCPのCloud Bigtableの概要と機能
## 概要
Google Cloud Platform(GCP)のクラウドデータベースサービスであるCloud Bigtableは、大規模なデータセットをリアルタイムで処理するための高性能なデータベースです。Apache HBaseデータベースのモデルに基づいており、可搬性や拡張性、高可用性を提供します。## 機能 / 詳細
以下にCloud Bigtableの主要な機能と詳細を示します:### 1. スケーラビリティ
Cloud Bigtableは、十億を超えるレコードとペタバイト単位のデータを効率的に処理できるスケーラブルなデータベースです。データマスターとリージョンサーバーと呼ばれるノードによって構成され、自動的に拡張および縮小します。### 2. ヘネシーに基づく分散設計
Cloud Bigtableは、Googleのヘネシーと呼ばれる分散ファイルシステムに基づいています。この設計により、高速なデータの読み込み・書き込みが可能で、データの分散処理も容易になります。### 3. データモデリング
CloudSpring Securityでログイン後のURLに付くcontinueクエリパラメータの正体
# 環境
– Spring Boot 3.2
– Spring Security 6.2この記事の内容が該当するのは、Spring Security 5.8以降です。
# ある日気づいた
Spring Securityでログイン付きのWebアプリを作ってログインしたら、URLに`continue`というクエリパラメータが付いていました。![スクリーンショット 2024-01-04 16.11.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58650/843d019f-26cc-5c26-b518-5bae20134cea.png)
こんなん付いてたっけ?と思ったので調べてみました。
# `RequestCache`とは
1. ログインが必要なURLにアクセス
1. 未ログインなのでログイン画面にリダイレクトされる
1. ログイン画面に正しいユーザー名・パスワードを入力
1. 認証完了後、1.でアクセスしたURLにリダイレクトされるという流れは、認証付きのWebアプリでよくあります
【データベース•学習ログ2】Javaからデータベースに接続し、テーブルを作成する
使用教材:侍テラコヤ『Javaとデータベースの連携方法を学ぼう』https://terakoya.sejuku.net/programs/129/chapters
## JavaからMySQLに接続する
《準備》
(1)MySQL Workbenchを導入
(2)データベースを作成
(3)eclipseでプロジェクトを立ち上げ、SQLを書き込むファイルを用意する#### 1.JDBCよりクラスをインポート
“`java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
“`
* Connection … データベースとの接続を管理するクラス
* DriverManager … JDBCを取り扱うためのクラス
* SQLException … データベースの取り扱いで発生した例外を処理するクラス#### 2.JDBCを用いてデータベースに接続
“`java
try {
// データベース接2024年初投稿
すっかりご無沙汰してしまいました。
まずはあけましておめでとうございます。
2024年、目標達成のため日々精進します。元旦から続く悲しいニュースが続いて心が疲弊してます。
しばらくはデジタルデトックスし勉強に励みます。
Qiitaを更新していない期間、勉強していなかったので…
(勉強しなければ更新も書けない)新年、気を引き締め直して参りましょう!!
どうぞよろしくお願いいたします。関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた