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

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

Java 非同期処理

# Javaの非同期処理

Javaにおいてマルチスレッドとは、一つのプロセス内で同時に実行される複数のスレッドを指す。

**スレッド**とはプログラムの実行単位であり、複数のスレッドが活用されることで、より効率的に処理が実行されるようになる。

**プロセス**とは、実行中のプログラムのインスタンスを指す。プロセスはOSによって管理されるプログラムの実行単位である。

コンピュータ上で複数のプロセスが起動されている場合、各プロセスは独立したそれぞれのメモリ領域を持ち、プロセス同士はそれぞれ隔離されている。プロセスにおいては、OSによって資源の割り当てやスケジューリングが管理され、**異なるプロセス間では通常、メモリ領域が共有されない**。

「資源の割り当て」は具体的には、ヒープ、スタックなどのメモリ領域の割り当て(メモリ上のどの番地からどの番地を使うか)や、CPUを使用して良い時間の割り当て、ファイルや入出力デバイスの割り当てなどを指す。異なるプロセス間で情報をやり取りするためには、IPC(Inter Process Communication)やネットワーク通信(ソケット、パイ

元記事を表示

AL2023学習メモ➀ OpenJDK 17.0.9導入

# 前置き
学習メモをまとめています。
私と同じ初心者さんの助けになれば幸いです。

# この記事でわかること
1\.AL2023(amazon linux 2023)でのOpenJDK 17.0.9インストール方法
2\.javaファイル作成方法
3\.javaファイルコンパイル方法
4\.コンパイルしたクラスの実行方法

:::note warn
2024年1月13日現在の情報です。
今後のアップデートで、OpenJDKのバージョンが上がっていく可能性があります。
:::

# 事前環境
* EC2
* AL2023
# 1\.インストール方法
AL2023で、OpenJDKをインストールする方法は非常に単純です。
AWSで既にパッケージが用意されているため、そこからインストールすることになります。

* java-17がパッケージとして用意されているかを確認
“`
# yumのsearchコマンドでjava-17に該当するパッケージを検索
$ sudo yum search java-17
“`

“`
# 実行結果
メタデータの期限切れの最終確認: 21

元記事を表示

Java パフォーマンスチューニング

## 概要
JavaのパフォーマンスチューニングポイントのNoteです。

## チューニングポイント
**(1)** 可能な場合は、オブジェクト型ではなくプリミティブ型を使用して、メモリ使用量を削減します。
– プリミティブ型は、ヒープではなくスタックに直接格納されるため、オブジェクト型よりもメモリ使用量が少なくなります。
– スタック
– スタックという文字の通り、実行される場合はこの領域に、格納され、終わるとここから取り除かれる。1スレッドで1つの領域が使われる。
– 値型はここに格納される。
– 特定のスコープのみに対して使用されるため、メモリ管理がしやすい反面、大きいデータの格納には向いていない。
– オブジェクトのデータはポインタがここに格納され、実データは後述するヒープ領域で管理される。
– ヒープ
– 開始時に一定領域確保され、必要の都度アプリケーションに割り当てられる。
– 大きいデータ、スコープがはっきりしないもの、

元記事を表示

Java学習 演算子

# 演算子
演算子には「代数演算子」と「比較演算子」がある。
どちらの演算子でも、使用する記号も演算の行い方もRubyと同じ。

## 代数演算子
### 種類
|演算子 |使い方 |意味 |
| :—: |:—-: | :—: |
|+ | a + b | 加算 |
|- | a – b | 減算 |
|* | a * b | 乗算 |
|/ | a / b | 除算 |
|% | a % b | 剰余 |

### 使い方
“`java
class Main {
public static void main(String[] args) {
System.out.println(1 + 2);
System.out.println(10 – 5);
System.out.println(2 * 3);
System.out.println(100 / 4);
System.out.println(11

元記事を表示

Rubyにおける予期しない型の問題(Javaと比較)

予期しない型の問題は、特に動的型付け言語でよく見られます。Rubyの例を使って、このような問題を示します。

### Rubyにおける予期しない型の問題

Rubyでは、変数の型が実行時まで決定されないため、予期しない型の値が渡されると、エラーが発生するか、または意図しない振る舞いが起こり得ます。

“`ruby
# Ruby の例
def multiply(a, b)
a * b
end

puts multiply(5, 3) # 期待通りの乗算: 出力は 15
puts multiply(“5”, 3) # 文字列の繰り返し: 出力は “555”
“`

上記の例では、`multiply` メソッドは2つの引数を乗算します。最初の呼び出しでは、両方の引数が整数なので、期待通りの乗算結果が得られます。しかし、二番目の呼び出しでは、一方の引数が文字列であるため、Rubyは文字列を繰り返す動作をします。この挙動は意図していない可能性があり、バグの原因になりえます。

### 静的型付け言語での対応

対照的に、静的型付け言語ではこのような問題が発生しにくいです。Java

元記事を表示

動的型付け(Ruby)と静的型付け(Java)の違い

RubyとJavaの違いを説明する際、動的型付け(Ruby)と静的型付け(Java)の違いが重要なポイントです。これらの違いを理解するために、両方の言語で同じ機能を実現する簡単な例を用いて説明します。

### 動的型付け: Ruby

Rubyは動的型付け言語です。これは、変数の型が実行時に決定されることを意味します。型の宣言は必要ありませんし、同一の変数に異なる型の値を代入することも可能です。

“`ruby
# Ruby の例
def add(a, b)
a + b
end

puts add(5, 3) # 整数の加算: 出力は 8
puts add(“5”, “3”) # 文字列の連結: 出力は “53”
“`

この例では、`add` 関数はどのような型の引数でも受け入れ、それらを足し合わせます。整数が渡されれば足し算をし、文字列が渡されれば連結します。これはRubyが実行時に型を決定するため可能です。

### 静的型付け: Java

Javaは静的型付け言語です。つまり、変数の型はコンパイル時に決定され、一度決定した型の変数に異なる型の値を代入すること

元記事を表示

DBUnit備忘録

## DBUnitとは
DBUnitは、Javaプロジェクトにおいてデータベースへの更新などのUTを支援するためのフレームワークです。
データベースのテストデータのセットアップ、比較、および期待値の検証を簡単に行うことができます。これにより、データベース関連の機能やクエリが正しく動作するかどうかを確認できます。
私が以前参画していた現場ではテストデータ、期待値をExcelシートで管理していました。
最近になりネットで調べたところ、それらしい記事はいくつも出てくるのですがどれもその現場で使っていたものとは違う方法で実装していました。
管理しやすく見てわかりやすかったので今となってはもっとしっかり勉強しておくべきでした…。
わかったらまた記事更新します。

## DBUnitのインストール
DBUnitを使用するには、まず依存関係をビルドツールに追加する必要があります。例えば、Mavenを使用している場合は、`pom.xml`ファイルに依存関係を追加します。その後、適切なJUnitとDBUnitのバージョンを指定し、必要な設定を行います。

“`xml

元記事を表示

Google AppEngineのJava8サポートが終了するので対処してみた

:::note
ご注意
この記事は2024年1月時点での内容です。賞味期限は短いと思われるので注意してください。おなかを下したりします。
あと途中のテキストは9割がた与太なので、適当に読み流してください。
:::

## これまでのあらすじ

はるか昔にWebのサイトつくってねって依頼されて、当時(ドメイン以外は)無料でどうにかできるAppEngineでサイト作ってお渡ししたところから、なんかもう使えなくなるみたいなんだけれど、どうにかできる?期限は2024年の1月30日なんだけれどってさっきお願いされました。まじかやべえ。なんも覚えてねえ。期限までの時間もねえ。

## 現状GAE/Jのそこらへんってどうなってるん?

ちょい調べたところ、Java8サポートの終了っていうのは小さい問題で、Javaのランタイム環境がサーブレットコンテナじゃなくなっておるってところが大問題。WARのデプロイじゃだめってことなんね。まじどうしよう。

## じゃあどうしようか?

まず参照したのはこれ。

https://cloud.google.com/appengine/docs/standard/j

元記事を表示

vbaコードフォマード

javacode
“`
import com.google.googlejavaformat.java.Formatter;
import com.google.googlejavaformat.java.FormatterException;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class VbaCodeFormatter {

public static void main(String[] args) {
// 指定VBA代码文件路径
String vbaCodeFilePath = “path/to/your/vba/code/file.vba”;

try {
// 读取VBA代码文件内容

元記事を表示

VSCodeでOpen LibertyプロジェクトをAntからMavenに

VSCodeでOpen LibertyプロジェクトをAntビルドからMavenビルドに変更した際の大まかな手順と個人的につまずいた点をまとめました。

# Maven 基礎知識
こちらについては、詳細は別サイトや書籍などでご確認ください。ライブラリをpom.xmlに記述することで管理し、ビルド時に[Maven セントラルリポジトリ](https://mvnrepository.com/)から自動でダウンロードして使えるという点が最も大きな特徴と思われます。

# Maven移行の流れ
Mavenをインストール
環境変数「JAVA_HOME」に JDK のディレクトリのパス追加
環境変数「PATH」に Maven の実行ファイルのあるディレクトリを追加
インストールされたか確認
コマンドプロンプトでmvn –-versionを実行しバージョンが表示されるか確認
“`
$ mvn –version
“`
バージョン等の情報が表示されればインストール完了です。

# pom.xmlの記載
Packageの形式を指定します。今回はwarで作成しました。
“`pom.xml

元記事を表示

【環境構築】MacのC++でstdc++.hやちょっとだけ他言語と比較してみる

## ハマったこと
C++の`bits/stdc++.h`をincludeしたかった。
STLをひとつひとつincludeするのは面倒なので、全部入り神モジュールである`stdc++.h`を入れたい。

2つ必要なことがあった。
1️⃣ファイル本体が必要
2️⃣静的解析がエラーを吐く

環境はMacでvimです。

### 1️⃣ファイル本体が必要
ようはstdc++.hというファイルが、欲しいincludeを死ぬほど大量にincludeしまくってくれてるファイルということ。
だから、欲しいincludeを全部あらかじめincludeしておいたファイルを、1枚だけincludeすれば楽だよねっていうだけ。とくに魔法みたいなことはしてない。

`stdc++.h`はどこにあるか?
gccの最新を入れると一緒についてくる、gccを入れたくない場合は、ネット上に転がっているファイルを取ってくればいい。
または自分で好きにカスタムすればいい(多すぎるincludeを自前で用意したいならの話)

“`gccをいれる.sh
brew install gcc
“`

“`ここにあるはず.バージ

元記事を表示

Javaでコンストラクタを定義する方法

Javaでコンストラクタを定義する方法について説明します。コンストラクタは、クラスのインスタンス(オブジェクト)が生成されるときに自動的に呼び出される特別なメソッドです。コンストラクタは、オブジェクトの初期化に使用されます。以下に基本的なコンストラクタの定義方法を示します。

### コンストラクタの基本的な構造

1. **コンストラクタの名前**: コンストラクタの名前は、常にクラスの名前と完全に同じでなければなりません。
2. **戻り値を持たない**: コンストラクタは戻り値を持ちません。これは、コンストラクタが値を返す通常のメソッドとは異なる点です。
3. **アクセス修飾子**: コンストラクタは、`public`、`private`、`protected`、またはパッケージプライベート(修飾子なし)のいずれかのアクセスレベルを持つことができます。

### 簡単な例

Javaの`Person`クラスにコンストラクタを定義する例を以下に示します。

“`java
public class Person {
// メンバ変数(フィールド)
private

元記事を表示

オブジェクト指向プログラミングの三大要素

## カプセル化(Encapsulation)
オブジェクトのデータ(フィールド)とそれに関連するメソッドを一つの単位、つまりクラスに組み込むプロセスです。カプセル化は、オブジェクトの内部状態を外部から直接アクセスされることなく保護し、オブジェクトのデータとメソッドの詳細を隠蔽します。これにより、外部のコードがオブジェクトの内部状態に依存することが減り、より安全でメンテナンスしやすいコードを実現できます。

## 継承(Inheritance)
あるクラス(スーパークラスまたは親クラス)の特性(フィールドやメソッド)を別のクラス(サブクラスまたは子クラス)に引き継ぐことができる機能です。継承を使用すると、既存のコードを再利用して新しいクラスを作成できるため、コードの重複を減らし、拡張性と保守性を向上させることができます。

## 多様性(Polymorphism)
異なるクラスのオブジェクトが同じインターフェースやメソッドを通じて操作される能力です。これには主に2種類あります:

コンパイル時多様性(静的多様性): メソッドオーバーロードにより、同じ名前のメソッドが異なる引数を取ること

元記事を表示

Javaのデータ型

Javaでは主に二つのデータ型があります:プリミティブ型(Primitive Types)と参照型(Reference Types)。これらの型は、変数が保存するデータの種類とメモリ上での扱い方を定義します。

### プリミティブ型 (Primitive Types)
プリミティブ型は、Javaが提供する基本的なデータ型で、直接値を保持します。これらは比較的低レベルな操作に使用され、メモリ効率が良いです。

1. **整数型**
– `byte`: 8ビットの整数型。値の範囲は-128から127。
– `short`: 16ビットの整数型。値の範囲は-32,768から32,767。
– `int`: 32ビットの整数型。値の範囲は-2^31から2^31-1。Javaで最も一般的に使用される整数型。
– `long`: 64ビットの整数型。値の範囲は-2^63から2^63-1。

2. **浮動小数点型**
– `float`: 32ビットの浮動小数点型。小数点を含む数値に使用。
– `double`: 64ビットの浮動小数点型。`float`よりも

元記事を表示

Logging、ロギング

# Logging、ロギング
– オペレーティングシステムでは、System.out.println()のようなシステムコンソールを使用せず、別途のロギングライブラリを使用してログを出力する。
– ログを使えばThreadの情報、クラス名のような付加情報を一緒に見ることができ、出力の形を調整することができる。
– ログレベルを開発サーバーはdebug、ローカルではtrace、運営サーバーはinfoに設定できる。
– コンソールだけに出力するのではなく、ファイルやネットワークなど、ログを別の位置に残すことができる。 特にファイルとして残すときは、日替わり、特定の容量に応じてログを分割することも可能である。
“`java
private Logger log = LoggerFactory.getLogger(getClass());
private static final Logger log = LoggerFactory.getLogger(Xxx.class)

又は、lombok annotation(@Slf4j)を使用

元記事を表示

JavaでローカルLLMを動かすPart2: OpenAI API互換サーバをJHipsterで実装

この記事は、[Zenn記事](https://zenn.dev/hide212131/articles/4fbeca981db5f8)の転載です。

## はじめに
この記事は、[JavaでローカルLLMを動かす](https://zenn.dev/hide212131/articles/2916417bfa82f4)の続編です。

前回、JavaによるRESTサーバで経由でLLMへのアクセスに成功したので、今回は、OpenAI API互換プロトコルを実装したクライアントからも接続できるようにしてみます。

さらにJHipsterというツールを使い、少ない手順でRESTサーバを構築します。

最終的には、こんなかんじで、SpringBootサーバを起動し、[Chatbot UI](https://github.com/mckaywrigley/chatbot-ui)のようなクライアントから、サーバを経由し、ローカルLLMとのチャットができます。

![](https://storage.googleapis.com/zenn-user-upload/501f623370e8-20240

元記事を表示

JavaでローカルLLMを動かす(llama.cpp, Spring AI)

この記事は、[Zenn記事](https://zenn.dev/hide212131/articles/2916417bfa82f4)の転載です。

## はじめに:JavaとローカルLLM

生成AI、大規模言語モデル(LLM)が大流行りの一年でしたね。

LLMを扱うプログラミング言語としてはPythonでの情報が盛んでした。Pythonも素晴らしい言語ですが、今後LLMがエンタープライズシステムに導入されていくことを考えると、やはりJavaのエコシステムは外せないな、と思い、そうなるとJavaでどの程度LLMを使えるかな?が気になります。

また、OpenAIやAzure OpenAI Serviceを使用しない、オンプレミスで動く「ローカルLLM」という領域も興味があります。Javaが活躍している領域では、しばし、セキュアな環境での開発が求められ、LLMが導入しにくいという話も聞きます。そういった閉域でも導入しやすいというLLMで、どこまでできるかも試してみたいです。

加えて、Spring Framework界隈では、[Spring AI](https://docs.spri

元記事を表示

IT業界未経験からPHP⇒Python⇒Java⇒VBA、XMLと学習ロードマップをうろうろして感じたこと

自分の学習ロードマップのうろうろ歴

無事とある**PHP、Laravel**を中心とする半年のカリキュラムを課す民間のプログラミングスクールを修了し、転職フェアなどにも何回か参加してみたところ、「**実はプログラミング言語の需要には地域差がかなりある**」ということを知り(下記参照)、エッ…(゚Д゚)と思いながら、時代はAIだろ(´д`)と思って、**Python**をやってみたら少しは分かったけど、居住地域の関係で **Java**も併行し始めたけど、Pythonを使うかな(´。`)と思って内定をいただいた会社の自分の所属する部署では一番使うのは **VBA、XML** とのことで、今は急遽ExcelやVBAを触りまくっています。

①実は地域によってプログラミング言語に需要ニーズに違いがある。(-_-;)

〇転職活動を通して感じた地域の言語ニーズの差異に関する私見

(1)求人がどの地域も万遍なく一番多いのは**Java、意外と

元記事を表示

Java学習 変数

# 変数の違い
プログラミング言語によって変数の扱い方は異なり、「動的型付け言語」と「静的型付け言語」の2種類がある。
今まで学習してきたRubyは「動的型付け言語」で、Javaは「静的型付け言語」。

# データ型
データ型とは、変数に格納するデータの種類のこと。
「数値としての1」と「文字としての1」はプログラムの上では異なるものとして扱われます。

Javaでは変数を定義するときに、その変数をどのデータ型として扱うのかプログラムに伝えるため、使用前に「宣言」してから使用する。

## Javaの基本データ型は以下の8種類

|データ型 |bit数  |値 |
| ——– | —– | ——————————————————— |
|boolean |1bit |true あるいは false

元記事を表示

【備忘録】gulp-notifyでエラーになったのでmacにjavaを入れた

# はじめに
現在進行しているプロジェクトのタスクランナーでjavaがないとエラーになる事象が発生したので入れてみた。

# 事象
“`
[12:16:44] gulp-notify: [Error running Gulp] ⚠️ Nu Html Checker (v.Nu) のエラーが出ています ⚠️
The operation couldn’t be completed. Unable to locate a Java Runtime.
Please visit http://www.java.com for information on installing Java.
“`
gulp-notifyでjavaを使ってるけど、macにjavaがないので怒られた。

# javaのインストール
今回はbrewでjavaをインストールした。
“`
java –version
The operation couldn’t be completed. Unable to locate a Java Runtime.
Please visit http://www.java.co

元記事を表示

OTHERカテゴリの最新記事