覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

Java

CVE-2022-21449 が対象となるJavaバージョンはどれ?

Javaの脆弱性である CVE-2022-21449 が巷で話題・問題になってますが、 CVE-2022-21449は、ECDSA(楕円曲線デジタル署名アルゴリズム)のJavaの実装に欠陥があるため、不正なデジタル署名に対する検証が 誤って成功してしまう というものです。 この脆弱性に…

Files.lines(Path) 利用時は try-with-resources とともに利用する

久しぶりに Java 触ったときに何の悪気もなく以下のようなコードを書いてしまいました。 public class FilesTrial { public static void main(String[] args) throws IOException { Path path = Paths.get("/home/hogehoge/dummy.txt"); Files.lines(path).f…

Java - Streamの先頭に値を追加したい

Java の Stream(java.util.stream.Stream)で扱っているデータ群の先頭に別の値を追加したい場合 Stream.concat メソッドを使うのがよいと思います。 ■ソースコードサンプル ["Dta1", "Data2", "Data3", "Data4"] というデータ群の先頭に "|| Title ||" と…

Mavenプロジェクトの依存関係にローカルのjarファイルを追加する

すぐ忘れるので自分用のメモです。 ローカルにしかないような ライブラリ(jarファイル)を Mavenプロジェクトの依存関係に追加する場合は pom.xml に以下のように記述します。 <dependency> <groupId>anything-groupId</groupId> <artifactId>anything-artifactId</artifactId> <version>anything-version</version> <scope>system</scope> <systemPath>${basedir}/l</systempath></dependency>…

Selenide - Webサイトへアクセスする

以前、Selenium と Chrome (ChromeDriver)を使用してWebサイトへのアクセスを確認しました。 Selenium を使うと手数が増えてしまうようなので、各プログラム言語ごとにSeleniumのラッパーが存在しています。 Java用のライブラリをとして存在している Seleni…

Java - ある月の最初の〇曜日・最後の〇曜日 の日付を取得したい

例えば、ある月の最初の水曜日の日付を取得したい、ある月の最後の水曜日の日付を取得したい。 というケースが出てくる場合があります。 それを Java でやるサンプルです。 こういった場合は、java.time.temporal.TemporalAdjusters クラスを利用するのがよ…

Selenium - WebDriverを使用してWebサイトへアクセスする(Java + Chrome)

Selenium の WebDriver(ChromeDriver) で Weサイトへアクセスするサンプルです。 Selenium といえば、Python を利用している例をよく目にしますが、ここでは Java の例となっています。 前提条件 実行環境に ChromeDriver がインストールされており、Path…

Java 6 - String#substringによるメモリリークの可能性

(もともとQiitaに書いていたものを、ここに移動させました。) ※以下Java 6までの問題です。Java 7では解決されています String#substring は新しい文字列を new String で生成するにも関わらず切り出し前の文字列を内部(のchar配列)で保持してしまっていま…

Kotlin - ラムダにおけるスコープ内の変数アクセス・キャプチャ

今日も相変わらず 「Kotlinイン・アクション」 を読みながらの写経です。 Kotlinイン・アクション作者: Dmitry Jemerov,Svetlana Isakova,長澤太郎,藤原聖,山本純平,yy_yank出版社/メーカー: マイナビ出版発売日: 2017/10/31メディア: 単行本(ソフトカバー…

矩形同士の交差

左下の座標(X, Y) と 右上の座標(X, Y) が 与えられた矩形(長方形)があったとして、 2つの矩形が与えられて、その矩形同士が以下のように交差(領域が被っているかを)しているか判定したいです 交差の判定は Max(矩形1.左下X, 矩形2.左下X) < Min(矩形…

codility - Arrays OddOccurrencesInArray

codility の OddOccurrencesInArrayを解いてみます。 問題の概要 インプット(引数) 整数の配列 配列の要素の整数は奇数 配列の要素数は奇数個 要素の値同士のペアができるが、1要素だけペアができない値が含まれている 例:[9, 3, 9, 3, 9, 7, 9] アウト…

ISBN-13を求める

ISBN や ISBN-13 の説明はWikipediaにお任せするとして 「接頭記号」 + 「グループ記号」 + 「出版者記号」 + 「書名記号」 (ハイフン除くと12桁)の値から 末尾に付与するチェックディジットまで含めたISBN-13の値を求めたい場合、 以下のようなメソッドを…

2の累乗の加算で表現できる値の分解

N個の要素の整数を持つ配列Aを与えられる(N >= 1) binarian(A) = pow2(A[0]) + pow2(A[1]) + ... + pow2(A[M-1]) 上記の式で求めた結果と同じ値となるための 2の累乗n の加算 の最小の組み合わせ数を求める 例: A[0]=1 A[1]=5 A[2]=4 A[3]=4 binarian(A) …

連続した整数の XOR(排他的論理和)

ある連続した整数群の XOR の結果を取得したい。 引数は、MとN の2つの整数 M > 0 N > M M から N までの連続した整数の XOR を結果として返す 例えば X = 5, N = 8 の場合以下の通り(括弧で括った部分は2進数表現) answer = 5 ^ 6 ^ 7 ^ 8 = (101 ^ 110 ^…

LeetCode - Maximum Depth of N-ary Tree

LeetCode の Maximum Depth of N-ary Tree を解いてみます。 問題の概要 インプット(引数) N個のNodeを持つツリー アウトプット(引数) ツリーの中の中の最大の深さ 最大の深さ = root Nodeから最も遠いリーフNodeまでの最長パス上のNodeの数 ツリーの各N…

LeetCode - Reverse String

LeetCode の Reverse String を解いてみます。 問題の概要 インプット(引数) charの配列 例:[’h’, 'e', 'l', 'l', 'o'] アウトプット(引数) 引数で与えられた配列を逆順にします。アウトプットは戻り値で返すのではなく、引数の配列の内容を逆順にしま…

LeetCode - Add Two Numbers

LeetCode の Add Two Numbers を解いてみます。 問題の概要 インプット(引数) 数値の1桁ごとの値を格納した連結リスト(ただし数字は逆順になっている)を2つ 例:(2 -> 4 -> 3) と (5 -> 6 -> 4) (342と564の数値を逆順の連結リストで表したもの) ア…

LeetCode - Two Sum

LeetCode の Two Sum を解いてみます。 問題の概要 インプット(引数) 数値の配列とターゲットの数値 アウトプット(戻り値) 与えられた配列の数値を足し合わせてターゲットの数値と一致する2つの数値の組み合わせ。その2つの数値のインデックスを配列で…

文字型(char型)に対するInteger.valueOfの結果

Java で 数字の文字列を int型に変換する際には、Integer.valueOf を利用するのが一般的です。 例えば以下のような感じ。 public class ToInteger { public static void main(String[] args) { System.out.println(Integer.valueOf("1")); System.out.printl…

Kotlin - オブジェクト式

Kotlin の object キーワードは、無名オブジェクト(anonymous object)の宣言のためにも使用できます。 無名オブジェクト は Javaにおける無名内部クラスを置き換えるものとなります。 Javaで無名内部クラスの典型的な利用シーンというと、イベントリストが…

Kotolin - コンパニオンオブジェクト 2

Kotlin のコンパニオンオブジェクトは、クラス内に宣言された通常のオブジェクトであり、 名前を付けたり、インターフェースを実装したり、拡張関数やプロパティを持つこともできます。 コンパニオンオブジェクトに名前を付ける 前回のエントリですでにやっ…

Kotlin - コンパニオンオブジェクト

Javaと異なり Kotlin のクラスは静的なメンバを持つことができません。Javaにおける static キーワードは Kotlin には含まれていません。 この Java における static の代替手段として以下を利用します。 トップレベル関数関数 多くの状況で Java の static…

Kotlin - シングルトン

Java でプログラムを書いている場合に、対象クラスのインスタンスがただ1つだけ存在する状態にしたい場合があります。 そういった場合には、一般的に Singleton パターン(シングルトン・パターン) というデザインパターンを用いてクラスを宣言する事になり…

Kotlin - 移譲

Java(オブジェクト指向言語)を用いて大規模なシステムを設計・開発した場合に、実装の継承 によってシステムが壊れていくことが多々あります。 共通化という名目(DRYの達成)のために、実装クラスを継承してしまっていると、 クラスを拡張し、いくつかの…

Kotlin - データクラス

前回エントリで データを保持するクラスの toString, equals, hashCode のオーバーライドについて簡単に書きました。 これらの実装は、Intellij IDEA などのIDEを使う事で簡単に自動生成することが可能です。 Kotlin では、データクラスを利用することで、こ…

Kotlin - toString, equals, hashCode

Java で以下データを保持するクラスを定義する場合、以下のようになります。 public class Person { private final String name; private final int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName…

Kotlin - getter/setter からのバッキングフィールドへのアクセス

Kotlin のクラスでは、フィールドを持つことができません。 しかし、カスタムアクセサを使用するときに バッキングフィールド が必要になることがあります。 この目的のために、Kotlinでは field という識別子を使用して自動的に作成されたバッキングフィー…

Kotlin - インターフェースで宣言したプロパティの実装

Kotlin ではインターフェースに抽象的なプロパティをを宣言する事が可能です。 例えば以下のようなものです。 interface Cat { val kind: String } Cat インターフェースを実装するクラスにおいて、kind の値を取得する手段を提供しなければならないという意…

Kotlin - コンストラクタ

今日も相変わらず 「Kotlinイン・アクション」 を読みながらの写経です。 Kotlinイン・アクション作者: Dmitry Jemerov,Svetlana Isakova,長澤太郎,藤原聖,山本純平,yy_yank出版社/メーカー: マイナビ出版発売日: 2017/10/31メディア: 単行本(ソフトカバー…

Kotlin - シールドクラス

明示していない場合も少なくないですが、現時点で私が書いているKotlinのエントリは、ほぼ 「Kotlinイン・アクション」 を読みながらの写経です。 Kotlinイン・アクション作者: Dmitry Jemerov,Svetlana Isakova,長澤太郎,藤原聖,山本純平,yy_yank出版社/メ…