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

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

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(“身長を入力してください”);

元記事を表示

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[i

元記事を表示

GCP Cloud Bigtable機能と実装

# GCPのCloud Bigtableの概要と機能

## 概要
Google Cloud Platform(GCP)のクラウドデータベースサービスであるCloud Bigtableは、大規模なデータセットをリアルタイムで処理するための高性能なデータベースです。Apache HBaseデータベースのモデルに基づいており、可搬性や拡張性、高可用性を提供します。

## 機能 / 詳細
以下にCloud Bigtableの主要な機能と詳細を示します:

### 1. スケーラビリティ
Cloud Bigtableは、十億を超えるレコードとペタバイト単位のデータを効率的に処理できるスケーラブルなデータベースです。データマスターとリージョンサーバーと呼ばれるノードによって構成され、自動的に拡張および縮小します。

### 2. ヘネシーに基づく分散設計
Cloud Bigtableは、Googleのヘネシーと呼ばれる分散ファイルシステムに基づいています。この設計により、高速なデータの読み込み・書き込みが可能で、データの分散処理も容易になります。

### 3. データモデリング
Cloud

元記事を表示

Spring Securityでログイン後のURLに付くcontinueクエリパラメータの正体

# 環境
– Spring Boot 3.2
– Spring Security 6.1

この記事の内容が該当するのは、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を更新していない期間、勉強していなかったので…
(勉強しなければ更新も書けない)

新年、気を引き締め直して参りましょう!!
どうぞよろしくお願いいたします。

元記事を表示

Java で Selenium と Jsoup でウェブブラウザ自動化とデータ抽出

# 1. はじめに

ウェブ開発の世界では、ブラウザの自動化やデータの抽出は日々の業務を効率化する上で欠かせない技術です。Javaを用いたSelenium WebDriverとJsoupライブラリを組み合わせることで、ブラウザを自動操作し、必要な情報を効率的に収集することができます。この記事では、Java, Selenium, とJsoupを使用してブラウザ自動化とデータ抽出を行う基本的な方法を紹介します。

# 2. Seleniumとは?

Seleniumは、ブラウザ操作を自動化するための一連のツールを提供します。開発者やテスターがコードを書いてブラウザの動作を自動化できるように、WebDriverというAPIを介して様々なブラウザと対話します。これは、主にウェブアプリケーションのテスト自動化に使用されますが、データのスクレイピングや自動化されたナビゲーションのためにも使用されます。

# 3. Jsoupとは?

Jsoupは、JavaのHTMLパーサーライブラリで、HTMLを解析し、操作し、クリーンナップし、HTMLからデータを抽出するためのメソッドを提供します。ウェブページ

元記事を表示

メッセージ、国際化

# メッセージ機能
– message.propertiesというメッセージ管理用ファイルを作成し、様々なメッセージを1か所で管理する。
そして、HTMLに該当データをキー値で呼んで使用させる。

– ファイルは/resources/message/propertiesに置けばよい。
“`
messages.properties

hello=こんにちは
hello.name=こんにちは {0} // パラメーターを設定する
“`
# 国際化機能
– message.propertiesを各国別に別途管理できる。
– message_en.propertiesなどでファイル名を変えて作れば良い。
“`
messages_en.properties

hello=hello
hello.name=hello {0}
“`
– 他のファイル名のメッセージファイルを登録したい場合は、application.propertiesにファイル名を登録しなければならない。
– S

元記事を表示

IntelliJ IDEA で Spring Boot アプリケーションを起動するまで

# はじめに
本記事では、IntellJ(IDE)を使用してSpring Bootアプリケーションを起動させるまでの手順を記述します。
※筆者はmacを使用していますが、WindowsおよびLinux等でも同様にできます(おそらく。。。)

## IntelliJ IDEA インストール + 起動
IntelliJをインストールする際は、IDEを管理してくれるToolbox Appというアプリケーションを使うと便利です。
1. 以下サイトにアクセスし、Toolbox Appをダウンロードします。
https://www.jetbrains.com/ja-jp/toolbox-app/
![スクリーンショット 2024-01-03 9.35.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624418/2d11d2b5-5781-f442-125d-5bc09ab1dd78.png)

2. インストーラに従いインストールします。
インストールが完了すると以下の画面が表示されていると

元記事を表示

Javaでタプルが使いたいと思ったので作成した

# ごあいさつ
あけましておめでとうございます。
今年もよろしくお願いします。
## 目標
本年は記事の投稿ペースを上げていきたいですね。
最悪一ヶ月に一回とか。

# 本題
では早速コード。
## コード
“`java:SimpleTuple.java
public static class SimpleTuple{
private A left;
private B right;

public SimpleTuple(A left, B right){
this.left = left;
this.right = right;
}

public A getLeft(){
return left;
}

public B getRight(){
return right;
}

public void setLeft(A left){
this.left = left;
}

public void s

元記事を表示

トリボナッチ数列 一般化を使って問題を解く

## トリボナッチ数列とは
最初の3つは 0, 1, 1 で、4つ目以降は”前3つを足したもの”
ex) 0 1 1 2 4 7 …

## コード java
“`java
class Solution {
public int tribonacci(int n) {
if(n ==0) return 0;
if(n<3) return 1; int []array = new int [n+1]; array[0]=0; array[1]=1; array[2]=1; for (int i=3; i <= n;i++){ array[i]=array[i-1]+array[i-2]+array[i-3]; } return array[n]; } } ``` 実行時間:0ms メモリー:40.38MB ### forループの初期化部分を省略 ```java class Solu

元記事を表示

Spring boot を のチュートリアルをやってみたpart1

# はじめに
記事を書いてる本人もJava歴1年未満&Spring framework歴数ヶ月の人間です
(フレームワークもろくに触ったことないです)

フレームワークを触るにあたって、チュートリアルのようなものがあるので、それを実践してわかったことや用語のまとめなどをしていきます。(忘備録のようなものだとおもってください)

# チュートリアルをやってみる
以下のリンクより、チュートリアルを実践できます
https://spring.io/guides/

最初の「RESTful Webサービスの構築」というのからまず取り組みます
(RESTfulなサービスとは?という方はこちらの記事をぜひ御覧ください
→https://qiita.com/o_q/items/0bb7963f87308f4ca4bc)

# 目標
「http://localhost:8080/greeting 」 にアクセスしたとき、HTTP GETが動き、以下のJSON形式の返答を受け取る
“`
{“id”:1,”content”:”Hello, World!”}
“`
URLの後ろに「?name=User」

元記事を表示

OTHERカテゴリの最新記事