JAVA関連のことを調べてみた2022年12月06日

JAVA関連のことを調べてみた2022年12月06日

デカルト積問題に気をつけよう

## はじめに
こんにちは、GxPの福家です。
こちらは[グロースエクスパートナーズ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/gxp)の6日目の記事です。

私が担当する案件で、APIのレスポンスが突然に遅くなる事象が発生しました。その原因は、ORMにおける「デカルト積問題(cartesian product problem)」という聞き慣れない問題であることが分かりました。
今回は性能問題を引き起こす「デカルト積問題」について取り上げました。デカルト積問題とは何で、どのような状況で発生するのかついて説明したいと思います。

## そもそもデカルト積とは?
デカルト積問題の前に、集合論におけるデカルト積について説明します。

デカルト積とは、複数の集合の要素のすべての組み合わせを要素として持つ集合のことです。例えば、2つの集合AとBがあるとします。集合Aは数字10個の集合{0,1,2,…,9}、集合Bはアルファベット26個の集合{a,b,c,…,z}です。そのとき、集合AとBのデカルト積は、{(0,a),

元記事を表示

Leetcode 876. Middle of the Linked List

# 876. Middle of the Linked List

https://leetcode.com/problems/middle-of-the-linked-list/

## 難易度
### Easy

## アプローチ
### Brute Force

“`java
package com.leetcode.easy;

public class MiddleOfTheLinkedList876 {
public static void main(String[] args) {}

public ListNode876 middleNode(ListNode876 head) {
ListNode876 temp = head;

int length = 0;
while (temp != null) {
temp = temp.next;
length++;
}

length /= 2;
temp =

元記事を表示

ループ制御文(break、continue)を使って演習

# 問題
1から10までの和を求める処理を行ってください。ただし計算の途中で合計値が30以上となった場合は 繰り返しを中断し、現在の値を出力するプログラムをbreakを使用して作成してください。

“`java
public static void main(String[] args) {
int sum = 0;
for (int i = 0; i <= 10; i++) { if (sum >= 30) {
break;
}
sum += i;
}
System.out.println(“合計:” + sum);
}

//演算結果
//合計:36

“`

# 問題
for文とcontinueを使用し、0~10までの奇数のみを表示します。ただし9は出力しないよう作成してください。

“`java
public static void main(String[] args) {
final int BREAK_NUM = 9;
for (int k = 0; k <= 10; k++) { if (k == BREAK_NUM) {

元記事を表示

【Cloud9 Advent Calendar Day1】今年購入してよかったガジェット11選

この記事はCloud9 Advent CalendarのDay1です。

**こんにちは!Cloud9サーバーサイドエンジニアの折原です!**

突然ですがCloud9も本日からアドベントカレンダーを始めることになりました!
**アドベントカレンダーといいつつもう12/5なんですが、突然やりたいと言ってもやらせてくれるのがこの会社の魅力だと勝手に思っております。**

それでは1発目行ってみましょう!

## 今年購入してよかったガジェット11選(非ガジェットも)

1発目の記事ということで、まずはライトなトピックから。

年の瀬のわくわく楽しいアドベントカレンダーでいきなりがっつり技術の話をされても。。という方もいらっしゃると思うので、今年私が購入して個人的にコスパが最強だったアイテムをご紹介させていただきます。

**Cloud9はエンジニア、非エンジニア問わず全人類のお役に立てる会社を~~私が勝手に~~目指しております。**

## 【1】GALLERIA RM5R-65XT  ¥124,980
![image.png](https://qiita-image-store.s3.

元記事を表示

do-while文を使って演習

# 問題
配列を宣言し、以下の要素を格納してください。「新宿」が出るまで出力してください。
継続条件にboolean型を使うこと。

“`java
public static void main(String[] args) {
String [] Tokyo = {“中央”, “渋谷”, “葛飾”, “江戸川”,”新宿”, “台東”, “中野”, “世田谷”};
boolean isContinue = true;
int i = 0;
do {
if (Tokyo[i].equals(“新宿”) ) {
isContinue = false;
} else {
System.out.println(Tokyo[i]);
}
i++;
} while (isContinue);
}

// 演算結果
// 中央
// 渋谷
// 葛飾
// 江戸川

“`

# 補足
– do-while文は後に継続条件を書く。
→必ず1回は処理する。
– カウンタ変数はブロックの外で定義する。
– 配列は「データ型 [] 変数名」もしくは「データ

元記事を表示

【Java】PowerPointで透かしを追加・削除する方法

透かしは、文書の背景に表示されるテキストまたは淡い色の画像です。PowerPoint文書で透かしを使用すると、文書の著作権を保護したり、文書の状態(ドラフト、最終版など)を指定したり、自社のブランドを宣伝したりするなど、さまざまな目的で使用することができます。この記事では、無料の[Free Spire.Presentation for Java](https://jp.e-iceblue.com/introduce/free-spire-presentation-for-java.html)を使用して、Javaで**PowerPointに透かしを追加または削除する方法**を説明します。

– **[PowerPointのスライドにテキストの透かしを挿入する](#powerpointのスライドにテキストの透かしを挿入する)**
– **[PowerPointのスライドに画像の透かしを挿入する](#powerpointのスライドに画像の透かしを挿入する)**
– **[PowerPointのスライドから透かしを削除する](#powerpointのスライドから透かしを削除する)**

##

元記事を表示

Dequeインタフェース実装クラスの速度比較

# 前書き
徹底攻略Java SE 8 Gold問題集を読みながらJavaGoldの勉強をしていたところ、以下のような記述を見つけた。

> __ArrayDeque<E>クラスは、内部で配列を使用したDequeインタフェースの実装__ であり、以下のような特徴があります。
>  ・FIFO(キュー)として用いる場合には、LinkedList<E>クラスを使用するよりも高速である
>  ・FILO(スタック)として用いる場合には、java.util.Stack<E>クラスを使用するよりも高速である

> ArrayDeque<E>クラスやLinkedList<E>クラスは __スレッド・セーフではない__ ため、マルチスレッドのアプリケーションで使用する場合には、スレッド・セーフに設計されているStack<E>クラスが安全です。

なるほど、ArrayDequeが高速で、マルチスレッド環境で利用する場合はStackが速いのか。
ん、なんかConcurrentLinkedDeque<E>ってやつがあるんだけどこれ何?
スレッドセーフなやつっぽい?

元記事を表示

①SpringBootプロジェクト作成方法 【Vue.js+SpringBootでアプリケーション作成】

# ①SpringBootプロジェクトを作成方法
## 環境
OS : Windows 11 Home
システム種類 : 64 ビット
プロセッサ : i7-10510U
メモリ : 16.0 GB
統合開発環境 : VSCode

1. Javaの拡張パックを導入

Visual Studio CodeでJavaの開発を可能にするため、必要な拡張機能である「Extension Pack for Java」をインストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918186/15386e72-929a-d080-60a0-3dd373d83d69.png)

2. Spring Bootの拡張パックを導入
「Spring Boot Extension Pack」で検索。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c

元記事を表示

SpringBoot でテスト駆動開発 ドメインはECショップで注文情報を作成する部分

# 概要
SpringBootのウェブアプリーケーションでテスト駆動を行います。
アーキテクチャはRestController-Service-Repositoryであり、本記事ではServiceレイヤーのテストコードを書きます。
Repositoryレイヤーの確認は行われているものとして進めます。
Cntrollerの実装はしません。

# 開発環境
IDE: IntelliJ Community
spring-boot-starter-parent 2.75
java : 11
テスト系: Junit5 Mockito
# 図とか

# ユースケース
ショッピングカートと顧客IDから注文情報を作成する機能を実装します。
顧客が支払う金額を確認するために、総額、税抜き価格、配送料、消費税といった情報を表示します。
税抜き価格で4000円以上だと送料が無料になります。
3999円以下だと送料は300円掛かります。
あくまでも金額情報を表示するだけで、DBの書き込みは行いません。

# クラス図
本記事的には赤丸で囲まれているクラスを実装します。
テストコード的にはRepository

元記事を表示

H2DB 予約後に関連するエラー

apiテストでh2ので以下のエラーが出た
“`
org.h2.jdbc.JdbcSQLSyntaxErrorException: SQLステートメントに文法エラーがあります
“`
原因 offsetがh2の予約語になっている。
“`
create文…, OFFSET[*] NUMBER(5)
“`

対応方法
該当の予約後をダブルクォーテーションで囲む

以下のリンクが非常に分かりやすいです。
[参考: h2.jdbc.JdbcSQLSyntaxErrorException:SQLステートメントに文法エラーがあります
](https://zenn.dev/rstliz/articles/69c1fd6c7401eb)

元記事を表示

Gradle Lint Pluginを導入したい

この記事は[フリューAdvent Calendar 2022](https://qiita.com/advent-calendar/2022/furyu)の5日目の記事となります。

## はじめに
こんにちは。フリューでサーバサイド開発をしています、kitajimaです。
ここでは、弊チームで行っている”改善会”という取り組みの中で試してみたツール及びその所感を述べていきます。
なお、”改善会”の詳細は弊社テックブログにも執筆しておりますので、こちらもぜひご覧ください。
https://tech.furyu.jp/review-guideline/

弊チームが携わるプロダクトの中で、主にビルドツールとして利用しているのが[Gradle](https://gradle.org/)です。
今回、プロダクトコードではなくGradleの依存関係をターゲットにしたLinter、Gradle Lint Pluginを試してみたので紹介させていただきます。

## Gradle Lint Plugin とは
Netflixが提供するGradleのプラグインです。

https://github.

元記事を表示

KotlinでSpock入門[mock編]

この記事は筆者の[ソロ Advent Calender 2022](https://qiita.com/advent-calendar/2022/panda) 5日目の記事です。

前回まででSpockでのテストの書き方を色々紹介しましたが、今回はSpockにおけるMockを使用したテストの書き方を紹介します。

# Mocking
まず、以下のようなクラスとインターフェイスを用意します。

“`groovy:Publisher.groovy
class Publisher {
List subscribers = []
int messageCount = 0
void send(String message){
subscribers*.receive(message)
messageCount++
}
}

interface Subscriber {
void receive(String message)
}
“`

PublisherにはリストでSubscriberが格納でき

元記事を表示

Spring boot select文

Repositoryでselect文を書きし実行すると、以下のエラーが出ました。

“defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract java.util.List com.example.demo“

“`
@Query(value=”select * from userInfo LEFT JOIN bookInfo on userInfo.userId = bookInfo.userId”)
““
なんやねん!といろいろ調べると、、、

前提知識として、@Queryとアノテーションをつけて

元記事を表示

for文、while文を使って演習(ユークリッド互除法)

# 問題
入力値1と入力値2の最大公約数を表すための文字列を返却して出力してください。

“`java
public static void main(String[] args) {
System.out.println(euclideanAlgorithm(252,105));
}

public static String euclideanAlgorithm(int num1, int num2) {
System.out.println(“入力値1 : ” + num1);
System.out.println(“入力値2 : ” + num2);

int a = 0;//二値交換のための退避領域
if ((num1 < num2) || (num2 == 0)) { a = num1; num1 = num2; num2 = a; } //※ for (int i = 1; i != 0; ) { i = num1 % num2; num1 = num2; num2 = i; }

元記事を表示

【Java】参照型オブジェクトの罠

【Java】参照型オブジェクトの罠

以下の事象が発生して、解消に時間がかかったので、共有します!

■起きた事象

レスポンスの件数分、参照型オブジェクトをarrayにaddしたのだが、addされた[0]番目の要素の値のみがレスポンスの件数分、置き換わってしまう。

以下のコードは、Listに格納されたレスポンスの件数分、arrayにaddするコードです。

“`java:bug
void bug() {
List response = new ArrayList<>();
/******************* 処理省略 *******************/
List array = new ArrayList<>();
Test test = new Test();

for(int i = 0; i < response.size(); i++) { test.setId(response.

元記事を表示

App Service で Tomcat アプリケーションをデプロイする際の注意点

# はじめに
[Microsoft Azure Tech Advent Calendar 2022](https://qiita.com/advent-calendar/2022/microsoft-azure-tech “Microsoft Azure Tech Advent Calendar 2021″) の 4 日目の記事です。本稿では、App Service で Tomcat アプリケーションをデプロイする際に陥りやすい注意点を紹介します。

# 概要
App Service における Tomcat アプリケーションのデプロイ方法については、公式ドキュメントの[WAR、JAR、EAR パッケージをデプロイする](https://learn.microsoft.com/ja-jp/azure/app-service/deploy-zip?tabs=cli#deploy-warjarear-packages”) にて解説されています。こちらのドキュメントにて言及されているとおり、サポートされている手段はAzure CLI、PowerShell、Kudu publish API と

元記事を表示

switch文を使った演習

# 問題
リレーの順位に応じて以下の点数を出力してくださ。
1位は50点、2位は40点、3位は30点、4位は20点、5位以下は10点。

“`java
public static void main(String[] args) {
score(1);
}
public static void score(int grade) {
switch(grade) {
case 1:
System.out.println(“50点”);
break;
case 2:
System.out.println(“40点”);
break;
case 3:
System.out.println(“30点”);
break;
case 4:
System.out.println(“20点”);
break;
default:
System.out.println(“10点”);
break;
}
}

//演算結果
//50点
“`

# 補足
– switch文の場合if文と違って、条件に当てはまっても以降

元記事を表示

入門 : EclipseとGitでバージョン管理するぞ ~その1~

この記事ではEclipseとGitを使って、ローカルリポジトリを作るところから、コミットするまでの流れを記載しています。さらっと見れるように、なるべく無駄な内容は省いているので、時間がない方でもすぐに実行できると思います。

<前提知識>
・Gitについての基本的な仕組みを理解している
Gitについてよくわからない → 参考サイト;https://qiita.com/renesisu727/items/248cb9468a402c622003

<注意>
この記事は自分のつまづいたところを備忘録として残し、共有するために書きました。もし記事に誤字や誤りがあった場合はご指摘のほど、どうぞよろしくお願いします。

<目次>

1,開発環境
2,Eclipseとは(ざっくり)
3,Gitとは(ざっくり)
4,本題
  [1]Eclipseで新規のローカルリポジトリ(コミット(変更履歴)を残す場所)を作成しよう
  [2]作成した新規ローカルリポジトリに、プロジェクトをコミットしよう
  [3]本当にコミットされているか(履歴保存されているか)確認しよう


1、開発環境

– Wi

元記事を表示

Java学習 導入~HelloWorld~

学習用に走り書き残し。後でまとめたい。
間違えがあればご指摘いただきたい。
## Javaの導入
### Java
JVM(Java Virtual Machine)上で動作する。OSに依存しない。
プログラムをクラスという単位で作る
Hello.java = class Hello
### 開発にはJDKが必要
JDK(Java Development Kit)、コマンドプロンプトで使うツール群。プログラムを作るのに必要。
### JRE
JRE(Java Runtime Environment):ランタイム環境
JRE=JVM+APIで、Javaの実行に必要。JDKにはこれが内包されている。

## 最低限のDOSコマンド
$md ディレクトリ作成(make directory)
$cd ディレクトリ移動(change directory)
 $cd ../ 一個上のディレクトリへ移動
$dir ファイル一覧取得(directory)
$cls コマンドライン掃除(clear screen)
$del ファイル削除(delete)
 del *.* ディレクトリ内のファイルを全削除

元記事を表示

ABC280A~Eの解答[Java]

## はじめに
今回もEまでコンテスト中に解けたのでそれをそのまま載せようと思います。

では、見ていきましょう。

※テンプレ等、実際の提出が見たい方は[こちら](https://atcoder.jp/contests/abc280/submissions?f.Task=&f.LanguageName=&f.Status=AC&f.User=viral)からどうぞ

## A – Pawn on a Grid
問題文は[こちら](https://atcoder.jp/contests/abc280/tasks/abc280_a)

`#`の位置を数え上げれば良いですね。
“`A.java
class Main{

static final boolean autoFlush = false;
static final Library System = new Library(java.lang.System.in,java.lang.System.out,java.lang.System.err,autoFlush);

public static void main(S

元記事を表示

OTHERカテゴリの最新記事