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

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

ABC 229 参加してみました。(C問題まで)

初めまして。
茶色コーダーを目指して毎週コンテストに参加しています。

まだまだ先は長いですが、解けた問題を投稿していきたいと思います。
使用言語はJavaです。

#A問題
https://atcoder.jp/contests/abc229/tasks/abc229_a

####方針
 ”#”(黒マス)が3つ以上あれば、黒マスをどこに配置しても条件を満たします。
逆に黒マスが2つのみであれば、配置される位置によって判定が変わる。
具体的には黒マスが縦に並んでいるか、横に並んでいる場合は条件を満たす。
そうでない場合は条件を満たさないとします。

####コード
**標準入力と出力に関するコードは省略しています。**

“`main.java
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.NoSuchElementException;

public class Main {
public static void main(

元記事を表示

コマンドでcheckstyleをかける

https://github.com/checkstyle/checkstyle/releases/

上からcheckstyleのjarをダウンロードする

循環複雑度をシュッとかけるためのxml

“` xml







“`

おもむろに実行してみる

“` bash
ja

元記事を表示

JavaでOutOfMemoryError: GC Overhead limit exceededを穏当に解決した話

この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting)の3日目の記事です。
こんにちは、シアトルコンサルティングの長岡です。

## はじめに
業務で1000万件くらいのデータに対し、DB1のデータをマスタDBと比較し、一致したデータがあれば別名に変換しDB2へ出力するというようなプログラムを作成し実行した際に、OutOfMemoryError: GC Overhead limit exceededが発生し、現場メンバー揃って苦戦したのでその時のことを書いていこうと思います。

## OutOfMemoryError: GC Overhead limit exceededとは
Javaのヒープ領域にオブジェクトを割り当てるための十分な空間がない時に発生するエラーです。
冒頭でも触れた通り、処理すべきデータ量が膨大な時に頻発します。
JavaプロセスがGCの実行時間の98%以上を費やし、各実行で2%未満のヒープしか回復されない場合に、この

元記事を表示

Kotlinのエントリポイントの話

# はじめに

この記事は[Kotlinアドベントカレンダー](https://qiita.com/advent-calendar/2021/kotlin)の参加記事です。

皆さん、Kotlin使っていますか?

コアの設計はJavaに大きな影響を受けたKotlinですが、その言語仕様はJavaと大きく異なる部分が少なくありません。
今回はそんなKotlinの特徴の一つ、エントリポイントについてお話しようと思います。

## TL;DR
– Kotlinの`main`メソッドはコンパイル時特殊クラスに突っ込まれる
– `main`メソッドをそのままクラスの静的メソッドとして書くことはできない
– `companion object`はそれ自体が独立クラスとしてコンパイルされる
– `@JvmStatic`でクラスの静的メソッドを登録する

## 前提知識

1. KotlinはJava同様にJVM用Javaバイトコード(.classファイル)にコンパイルされる。
– JavaもKotlinも`main()`というメソッドをエントリポイントとして起動する。
– Javaは全てのメソッ

元記事を表示

データ分析基盤・DataLakeを作成するツールとしてのEmbulk

この記事はエイチーム引越し侍 / エイチームコネクトの社員による、[Ateam Hikkoshi samurai Inc.× Ateam Connect Inc. Advent Calendar 2021](https://qiita.com/advent-calendar/2021/hikkoshizamurai-connect) 3日目の記事です。

## はじめに
今日は、最近のお仕事で触ることになる可能性が高いEmbulkについて書きます。
*触ることになる*とあるようにEmbulkを使い始めるソフトウェアエンジニアによる記事です。説明に至らない点があったり間違っていたりするかもしれません。その際は[編集リクエスト](https://help.qiita.com/ja/articles/qiita-edit-request)なりコメントなりでご指摘いただけたら幸いです。

何に使うかですが、データ分析基盤、DataLake作成におけるETL処理のために使います。ちなみにETLはExtract、Transform、Loadの略でデータを抽出、変換・加工、ロード(Output)する

元記事を表示

App Service にて Tomcat の設定ファイルを変更してカスタムエラーページを構成する方法

#はじめに
[Microsoft Azure Tech Advent Calendar 2021](https://qiita.com/advent-calendar/2021/microsoft-azure-tech “Microsoft Azure Tech Advent Calendar 2021”) の 2 日目の記事です。本稿では、App Service を Tomcat で運用する上で知っていると役立つ Tips を紹介します。

[App Service](https://docs.microsoft.com/ja-jp/azure/app-service/overview “App Service の概要”) は Windows、Linux、Docker コンテナ(カスタム コンテナー)の Web アプリケーションを Azure 上にホストすることができる PaaS です。Java/Tomcat をスタックとする App Service のリソースを作成する方法については当記事では割愛するため、[公式ドキュメント](https://docs.microsoft.com/

元記事を表示

java 練習問題5-4 (12/2)

calcTriangleAreaメゾットで
三角形の面積(bottom と height)求めて返す
calcCircleAreaメゾットで
円の面積(半径 radius)求めて返す

“`java
public class Main {
public static void main(String[] args) {
double triangleArea = calcTriangleArea(10.0, 5.0);
System.out.println(“三角形の面積:” + triangleArea + “平方cm”);
double circleArea = calcCircleArea(5.0);
System.out.println(“円の面積:” + circleArea + “平方cm”);
}
public static double calcTriangleArea(double bottom, double height) {
double area = (bottom * height) / 2;

元記事を表示

すっきりjavaでわからなかったとこ5−13

#戻り値が配列の時
“`java
public class Main {

public static int[] makeArray(int size) {
//int[]で配列を作る
  int[] newArray = new int[size];
  for (int i = 0; i < newArray.length; i++ ) {  newArray[i] = i;   }  return newArray; } public static void main(String[] args) { //makeArray(3)を実行して int[] array = makeArray(3); //結果を int i をarrayに変換する for (int i : array) { System.out.println(i); } } } ```

元記事を表示

Javaのラムダ式とStreamAPIとは

## 前提

以降の説明で表示するソースは全て [GitHub](https://github.com/thirdplay/java-stream) に上げてあります。


## 本記事の目的
`Java8` で追加された機能(関数型プログラミング・ラムダ式・Stream)というものについて、
難しい説明を極力省き、下記のような記述を読みこなせるようになるのが目標です。

“`java
persons.stream()
.filter(p -> p.getAge() >= 30)
.forEach(p -> System.out.println(p.getName()));
“`


## ラムダ式とは
インターフェースに `抽象メソッド` を1つだけ定義したものを `関数型インターフェース` と呼びます。
この `関数型インターフェース` の実装を、とことん簡潔に記述するのがラムダ式です。


たとえば、こんなインターフェースがあるとします。

“`java:Sample01.java
interface Iface1 {
pu

元記事を表示

midPointとIGA

今年もこの季節がやってまいりました。本年もOpenStandiaでAdvent Calendarを書いていきます。今年は特にテーマは決めずOpenStandiaのメンバが興味のある技術について25日間書いていきますのでよろしくお付き合いください!

# midPointについて
ということで、1日目はmidPointの話題です。midPointについては、一昨年のAdvent Calendar、昨年のAdvent Calendar、その他、折に触れて、OpenStandiaメンバが記事投稿しているのでご存知の方も多いかもしれません。

2019年のAdvent Calendar
https://qiita.com/advent-calendar/2019/midpoint-by-openstandia

2020年のAdvent Calendar
https://qiita.com/advent-calendar/2020/nri-openstandia

また、最近ですと、クラウドネイティブさん主催の須藤あどみん対談でご紹介させてもらって知って頂いた方もいるかもしれません。

202

元記事を表示

Javaのマルチスレッド実装例(後編)(排他制御編)

この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting)の2日目の記事です。
こんにちは、シアトルコンサルティングの長岡です。

## はじめに
前回はプログラムをマルチスレッドで実行してみました。
[Javaのマルチスレッド実装例(前編)](https://qiita.com/Ryooooo/private/c4fdffa50ad31c972bad)
今回はマルチスレッドでプログラムを実行した際の注意点として上げられる、排他制御について書いていこうと思います。
今回も前回同様駆け出しエンジニアの方達にも理解できる内容となっております!

## なぜ排他制御が必要なのか?
前回の記事でも書きましたが、マルチスレッドの処理で同じオブジェクトにアクセスしてしまうと同じフィールドの値を書き換えてしまう為、最終的に期待した値が帰ってこないことがあります。
その為、同じオブジェクトにアクセスする場合はsynchronizedを使用し、排他制御を

元記事を表示

JavaでKotlinと同じくらい安全なコードを書く(後編)

この記事は`Kotlin Advent Calendar`の2日目の記事です。

https://qiita.com/advent-calendar/2021/kotlin

# 前書き
この記事は[JavaでKotlinと同じくらい安全なコードを書く(前編)](https://qiita.com/wrongwrong/items/9b1a5c4f76128b43fa3e)の続きです。

前編では`Java`で安全性を高めるための工夫として、以下の4点を書きました。

– `null`を安全に取り扱う
– メソッド・クラス・変数を基本的に変更できないようにする
– `Collection`を読み取り専用にする
– 一致を安全に判定する

後編では、これらが`Kotlin`でどのような表現になるかと、`Java`で実現した場合と比べた簡単さについて書きます。

# nullを安全に取り扱う
`Kotlin`では、`nullable`な場合型に`?`を付けます。

“`kotlin:Kotlin
// fooはnon-null, barはnullable、戻り値はnon-null
fun

元記事を表示

JavaからC言語を呼び出す

# 概要

JNAを使ってC言語を呼び出す方法をまとめました。

# 前準備

まず、JNAのライブラリをmavenなりbuild.sbtなりに追加します。

“`build.sbt
scalaVersion := “2.13.6”
libraryDependencies += “net.java.dev.jna” % “jna” % “5.9.0”
libraryDependencies += “net.java.dev.jna” % “jna-platform” % “5.9.0”
“`

# JavaからC言語を呼び出す

## Hello World的なプログラム

### C言語で共有ライブラリを作る

以下のようなプログラムを作成します。

“`hoge.c
#include

void hoge() {
printf(“ほげぇ\n”);
}
“`

そして、以下のコマンドで共有ライブラリを作成します。

“`sh
gcc -dynamiclib -o libhoge.dylib hoge.c
“`

### Java側の実装

Java

元記事を表示

テーブル更新時エラー 未完成

コンソールアプリケーション:社員情報管理アプリ

![Something went wrong]()

“`DBController.java

//更新機能
public static void Javadoc_update(String empId ,String empName_up, String gender_up, String birthday_up, String deptId_up)
throws ClassNotFoundException, SQLException {
Connection connection = null;
PreparedStatement preparedStatement = null;

try {

//DBに接続
connection = DBManager.getConnection();

preparedStatement = connection.prepareStatement(ConstantSQL.SQL_UPDATE1);

preparedSta

元記事を表示

JDBC基礎

“`DBManager.java

package jp.co.sss.jdbc.chapter01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBManager {
/** ドライバクラス名 */
private static final String DRIVER = “oracle.jdbc.driver.OracleDriver”;
/** 接続する DB の URL */
private static final String URL = “jdbc:oracle:thin:@localhost:1521:XE”;
/** DB 接続するためのユーザ名 */
private static final String USER_NAME = “jdbc_user”;
/** D

元記事を表示

JAVA 継承

“`Constant2301.java

package lesson23;

public class Constant2301 {
public static final String POLICE = “警察官”;
public static final String TEACHER = “教師”;
public static final String CHEF = “料理人”;
}

“`

“`Chef2301.java
package lesson23;

public class Chef2301 extends Worker2301 {

public Chef2301(String name, int age) {
super(Constant2301.CHEF, name, age);
}

public void doWork() {
System.out.println(“食事を作ります。”);
}
}

“`

“`Display2301..java
package lesson23;

public class Displ

元記事を表示

[Java]Android Fragment間のデータ受け渡し Bundle vs ViewModel

# 目的
Android, Javaで開発するにあたり、Fragment間のデータ受け渡しにBundleとViewModelどちらを使うべきか指標を明示する。
※ただしデータの値は変更しない前提です。

# 結論
Bundle:Fragment間で受け渡すデータ数が少ない場合
ViewModel:Fragment間で受け渡すデータ数が多い場合
のように使い分けるのが良いと思います。

# はじめに
初めてAndroid開発をしたときに、Fragmentから別Fragmentにデータを受け渡すとき、メジャーな方法としてBundleとViewModelがあると知りました。
両方使ってみて、それぞれの利点・欠点が少し分かったので、まとめてみます。
ちなみに筆者は最初はBundleを使いまくっていたのですが、以下に記載する欠点により、ViewModelをメインで使うようになりました。

# Bundle vs ViewModel
BundleとViewModelの利点・欠点をまとめます。

| |Bundle|ViewModel|
|—|—|—|
|利点|データの定義が不要

元記事を表示

[Java] 匿名クラスとインスタンスイニシャライザを使って初期化したデータのシリアライズに失敗した話

以前セッション管理の方法をメモリからDBに変更した際に、シリアライズ周りでエラーが起きたのでそれの原因と対策についてまとめる。

## 前提

Javaではデータの初期化に下記のような方法がある。

“`java
List animals = new ArrayList<>() {
{
add(“いぬ”);
add(“ねこ”);
add(“たぬき”);
}
};
“`

これは匿名クラスとインスタンスイニシャライザを使って初期化を行うという方法である。
通常Listの初期化には`List.of()`, `Arrays.asList()`などを使うが、これはimmutableなListを作成するため、後から要素の追加などが出来ない。
しかし、匿名クラスとインスタンスイニシャライザを使えばArrayListのサブクラスとしてインスタンスを作成するため、その後の要素の追加が可能になる。

## 起きたこと

Serializableを実装したSchoolオブジェクトをシリアライズしようとしたエラーが発生した。

“`java:School.java
/

元記事を表示

Javaのマルチスレッド実装例(前編)

この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting)の1日目の記事です。

こんにちは、シアトルコンサルティングの長岡と申します。
この度、弊社シアトルコンサルティング株式会社でAdvent Calendarに参加することになりました。

TeamTech Move the WorldをMissionに掲げ、日々全力で業務に取り組んでおります!
少しでも興味を持って頂けたら下記のサイトを覗いてみてください!

コーポレートサイト

ホーム


Wantedly
https://www.wantedly.com/companies/seattleconsulting

よろしくお願い致します!
## はじめに
今回はJavaにおけるマルチスレッドの実装例を紹介します。
実務でシングルスレッドからマルチスレッドへの改修案件に携わったこともあり、振り返りついでに紹介します。
前編は

元記事を表示

JavaでKotlinと同じくらい安全なコードを書く(前編)

この記事は`Kotlin Advent Calendar`の1日目の記事です。

https://qiita.com/advent-calendar/2021/kotlin

この記事の内容は完全に`Java`ですが、現在`Java`を書いている人が`Kotlin`を導入するきっかけになることを目指して書きますのでご容赦ください。

# 前書き
`Kotlin`の`Java`に対する大きな利点の1つは、コードの安全性を簡単に担保できることです。
一方、安全性はアピールが難しく、「安全だから`Kotlin`を導入したい!」と主張しても「それ、`Java`でもできるのでは?」「どれ位メリット有るの?」と突っ込まれることも有るでしょう。

実際、自分が経験した限り`Java`でも安全なコードを書く(正確には、書ける環境を整える)ことは可能です。
一方、それを実現するには非常に大きな労力が必要で、現実的には安全性を妥協する部分が出てくると思っています。

このシリーズでは、`Kotlin`の導入材料の1つになれることを目指しながら、`Java`で安全なコードを書く大変さと、`Kotlin`で安

元記事を表示

OTHERカテゴリの最新記事