SlideShare uma empresa Scribd logo
1 de 36
Effective Java 輪読会 第7回
(項目49~52)
2014/2/19
開発部 野口
項目49 ボクシングされた基本データより
基本データ型を選ぶ
基本データ型とボクシングされた
基本データ型の 3 つの違い
 基本データ型は値だけを持つが、ボクシング
された基本データ型のインスタンスは値とは
別のアイデンティティを持っている
 基本データ型は完全に機能する値だけを持っ
ているが、ボクシングされた基本データ型は
null という機能しない値も持っている
 基本データ型のほうがボクシングされた基本
データ型よりも時間・空間においてより効率
的
不完全なコンパレータ
<基本データ型は値だけを持つが、ボクシングされた基本データ型の
インスタンスは値とは別のアイデンティティを持っている>
 first < second では自動アンボクシングされ、うまくいく
 first == second では Integer インスタンスの同一性比較を行
う
 間違い!
Comparator<Integer> naturalOrder = new
Comparator<Integer>() {
public int compare(Integer first, Integer second) {
return first < second ? -1 : (first == second ? 0 : 1);
}
};
不完全なコンパレータの修正案
Comparator<Integer> naturalOrder = new
Comparator<Integer>() {
public int compare(Integer first, Integer second) {
int f = first; // 自動アンボクシング
int s = second; // 自動アンボクシング
return f < s ? -1 : (f == s ? 0 : 1); // アンボクシングなし
}
};
Integer と int との比較
<基本データ型は完全に機能する値だけを持っているが、ボクシング
された基本データ型は null という機能しない値も持っている>
 Unbelievable は表示……されません
 かわりに、(i == 42) で NullPointerException がスローされます
 単一操作内で基本データ型とボクシングされた基本データ型を混在させた場合に
は、ほとんどの場合にボクシングされた基本データ型は自動アンボクシングされ
る
 この場合、i を Integer ではなく int で宣言すれば解決
public class Unbelievable {
static Integer i;
public static void main(String[] args) {
if (i == 42)
System.out.println("Unbelievable");
}
}
恐ろしく遅いプログラム
<基本データ型のほうがボクシングされた基本データ型よりも時間・
空間においてより効率的>
public static void main(String[] args) {
long sum = 0L;
for (long i = 0; i < Integer.MAX_VALUE; i++) {
sum += Long.valueOf(1); // ここでオートボクシングが行わ
れる!
}
System.out.println(sum);
}
ボクシングされた基本データ型を
使用すべきとき
 コレクション内の要素、キー、値として
 より一般的には、パラメータ化された型の型パラ
メータとして
 ☓Collection<int>
 ○ Collection<Integer>
 リフレクションによってメソッドを呼び出す
とき
 参照: 項目53
まとめ
 選択できる場合には、ボクシングされた基本デー
タではなく、基本データ型を使用する
 ボクシングされた基本データを使用する場合、注
意する
 == では同一性比較が行われること
 ボクシングされた基本データとアンボクシングされた
基本データとの計算では、アンボクシングが行われる
こと
 アンボクシングの際に、NullPointerException をスローす
る可能性がある
 基本データ値をボクシングする際、コストを要する不
必要なオブジェクト生成を行う可能性があること
項目50
他の型が適切な場所では、文字列を避け
る
文字列は、他の値型に対する
代替としては貧弱
 外部から入ってきたデータはたいてい文字列
だが、より適切な値に変換してから扱うべき
 数値なら int、float、BigInteger 等
 真偽値なら、boolean
 等々
 もし適切な型がなければ、適切な値型を書く
べき
文字列は、列挙型に対する
代替としては貧弱
 enum の方がはるかに優れている
 参照: 項目30
文字列は、集合型に対する
代替としては貧弱
よりは、こうしよう
String compoundKey = className + "#" + i.next();
private static class CompoundKey {
private String className;
private String methodName;
...
}
文字列は、capability に対する
代替としては貧弱
 ところで、capability って?
capability って?(1)
capability【名詞】
1【不可算名詞】 [具体的には 【可算名詞】]
a〔…の〕能力,才能,手腕,〔…すること〕のできること[能力,
才能] 〔for,in,of〕.
用例: evaluate the capability of a person 人の才能を評価する.
2【不可算名詞】
a(物のもつ)〔…する〕特性,性能 〔for〕.
用例
the capability of gases for compression ガスの圧縮する性質.
...
capability って?(2)
 Effective Java の例では、「偽造できない
キー」のことを capability と呼んでいるようで
す(pp.218)
 「時折、文字列はある機能へのアクセスを与
えるために使用されます」(pp.217)
 ThreadLocal の例でいうと、「スレッドロー
カルな変数にアクセスするためのキー」なの
で、(情報にアクセスする)「能力」の訳語
が割と近そうです
 でも「能力」じゃやっぱり意味不明なので、
capability と呼びます
(capability の説明に用いられてい
る)ThreadLocal って?
 個々のスレッドが固有の値を持つための変数
 現在の Java では、以下のようなかたちでライ
ブラリとして提供されている
public final class ThreadLocal<T> {
public ThreadLocal();
public void set(T value);
public T get();
}
capability として、
String の不適切な使用
public class ThreadLocal {
private ThreadLocal() {} // インスタンス化不可能
// 名前付き変数に対するカレントスレッドの値を設定する。
public static void set(String key, Object value);
// 名前付き変数に対するカレントスレッドの値を返す。
public static Object get(String key);
}
「capability として、
String の不適切な使用」の問題点
 キーが共有されたグローバルな名前空間を表
している
 クライアントが提供した文字列キーが一意でなけ
ればならない
 2 つの独立したクライアントが同じ名前を使って
しまったら、意図せず変数を共有してしまう
 意図して同じ名前を使うこともできてしまう(セ
キュリティの問題)
本物の capability
public class ThreadLocal {
private ThreadLocal() {} // インスタンス化不可能
public static class Key { // capability
Key();
}
// 一意の偽造できないキーを生成する
public static Key getKey() {
return new Key();
}
public static void set(Key key, Object value);
public static Object get(Key key);
}
ThreadLocal に、もはや Key は不
要
 set / get をインスタンスメソッドにする
 ThreadLocal のインスタンス自体が capability
public class ThreadLocal {
public ThreadLocal();
public void set(Object value);
public Object get();
}
ThreadLocal を型安全にする
 これが(概ね)java.lang.ThreadlLocal が提供
している API
public final class ThreadLocal<T> {
public ThreadLocal();
public void set(T value);
public T get();
}
まとめ
 より良いデータ型が存在する、あるいは書く
ことができる場合に、何も考えずに文字列で
オブジェクトを表現したりしない
 間違って文字列を使いがちなのは、基本デー
タ型、enum、集合型(それから、capability)
項目51
文字列結合のパフォーマンスに用心する
文字列結合のパフォーマンス
 文字列結合演算子(+)は、便利
 だが、n 個の文字列結合は、O(n^2) となる
 なぜなら、文字列は immutable だから
文字列結合の不適切な使用
public String statement() {
String result = "";
for (int i = 0; i < numItems(); i++)
result += lineForItem(i); // String 結合
return result;
}
String の代わりに
StringBuilder を使用する
public String statement() {
StringBuilder b = new StringBuilder(numItems() *
LINE_WIDTH);
for (int i = 0; i < numItems(); i++)
b.append(lineForItem(i));
return b.toString();
}
まとめ
 パフォーマンスが重要でない場合以外には、
数個以上の文字列を結合するのに文字列結合
演算子を使用しない
 代わりに、StringBuilder の append メソッド
を使用する
 あるいは、文字配列を使用するか、文字列を
結合する代わりに 1 つずつ処理する
 あえてそうすべき時はほとんどなさそうですが
……。
項目52
インタフェースでオブジェクトを参照す
る
オブジェクトを参照するには、ク
ラスよりもインタフェースを使用
すべき
 適切なインタフェース型が存在するならば、
パラメータ、戻り値、変数、フィールドはす
べてインタフェース型を使用して宣言される
べき
 オブジェクトのクラスを参照する必要がある
唯一の場合は、そのオブジェクトを生成する
とき
List インタフェース /
Vector クラスでの例
// 良い - 型としてインタフェースを使用
// subscribers は同期されている必要がある
List<Subscriber> subscribers = new Vector<Subscriber>();
// 悪い - 型としてクラスを使用
Vector<Subscriber> subscribers = new Vector<Subscriber>();
型としてインタフェースを
使用するメリット
List<Subscriber> subscribers = new ArrayList<Subscriber>();
型としてインタフェースを
使用する注意点
 コードが、インタフェースの一般契約で要求され
ていない(が、実装クラスは提供している)機能
に依存しているなら、実装クラスを変更すると
き、新たな実装がその機能を提供しているかどう
かが重要となる
 例)「Vector が同期されている」ことに依存する
コードを書いていれば、それを ArrayList に置き換え
ることはできない
 そのようなときは、変数を宣言する場所に、その要件
をドキュメント化すること!
 インタフェースを用いることで型の表現力の一部を捨てて
しまっているので、(それを補う)これは重要だと思いま
す
インタフェースを使用する
利点にあずかった一例
 java.lang.ThreadLocal
 フィールドに Map を持つ
 1.3 リリースでは、HashMap を用いていた
 1.4 リリースでは、IdentityHashMap に変更する
ことで、より速くなった
適切なインタフェースが存在しない場
合は、クラスでオブジェクトを参照す
る
 String や BigInteger などの値クラス
 より一般的には、具象クラスが関連付けされたイ
ンタフェースを持たないとき
 例)Random
 クラスに基づくフレームワークに属する場合
 例)java.util.TimerTask
 インタフェースは実装しているが、そのイン
タフェースにない特別なメソッドをクラスが
提供している場合
 例)PriorityQueue
まとめ
 ある与えられたオブジェクトが適切なインタ
フェースを持っているかどうかを調べる
 インタフェースを持っていれば、オブジェク
トを参照するためにインタフェースを使用し
て、プログラムをより柔軟にする
 インタフェースを持っていなければ、クラス
階層中で必要な機能を提供している最も上位
のクラスを使用する

Mais conteúdo relacionado

Destaque

Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目43-44Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目43-44Appresso Engineering Team
 
Effective java 輪読会 第3章 項目11, 12
Effective java 輪読会 第3章 項目11, 12Effective java 輪読会 第3章 項目11, 12
Effective java 輪読会 第3章 項目11, 12Appresso Engineering Team
 
Effective java 輪読会 第3章 項目8,9,10
Effective java 輪読会 第3章 項目8,9,10Effective java 輪読会 第3章 項目8,9,10
Effective java 輪読会 第3章 項目8,9,10Appresso Engineering Team
 
JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文Appresso Engineering Team
 
マルチスレッド デザインパターン ― Single Threaded Execution
マルチスレッド デザインパターン ― Single Threaded Executionマルチスレッド デザインパターン ― Single Threaded Execution
マルチスレッド デザインパターン ― Single Threaded ExecutionAppresso Engineering Team
 
Javaアプリケーションサーバ 構築・運用の勘所
Javaアプリケーションサーバ 構築・運用の勘所Javaアプリケーションサーバ 構築・運用の勘所
Javaアプリケーションサーバ 構築・運用の勘所Takahiro YAMADA
 
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShellAmazon Web Services Japan
 

Destaque (19)

Effective Java 輪読会 項目45-48
Effective Java 輪読会 項目45-48Effective Java 輪読会 項目45-48
Effective Java 輪読会 項目45-48
 
Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目43-44Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目43-44
 
Effective Java 輪読会 項目53-56
Effective Java 輪読会 項目53-56Effective Java 輪読会 項目53-56
Effective Java 輪読会 項目53-56
 
Effective java 輪読会 第3章 項目11, 12
Effective java 輪読会 第3章 項目11, 12Effective java 輪読会 第3章 項目11, 12
Effective java 輪読会 第3章 項目11, 12
 
Effective java 輪読会 第3章 項目8,9,10
Effective java 輪読会 第3章 項目8,9,10Effective java 輪読会 第3章 項目8,9,10
Effective java 輪読会 第3章 項目8,9,10
 
Effective Java 輪読会 項目69-70
Effective Java 輪読会 項目69-70Effective Java 輪読会 項目69-70
Effective Java 輪読会 項目69-70
 
Effective Java 輪読会 項目71-73
Effective Java 輪読会 項目71-73Effective Java 輪読会 項目71-73
Effective Java 輪読会 項目71-73
 
JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文
 
Effective Java 輪読会 項目69-70追加
Effective Java 輪読会 項目69-70追加Effective Java 輪読会 項目69-70追加
Effective Java 輪読会 項目69-70追加
 
Effective Java 輪読会 項目63-65
Effective Java 輪読会 項目63-65Effective Java 輪読会 項目63-65
Effective Java 輪読会 項目63-65
 
Effective Java 輪読会 項目66-68
Effective Java 輪読会 項目66-68Effective Java 輪読会 項目66-68
Effective Java 輪読会 項目66-68
 
JavaScript 勉強会 ― 型と値
JavaScript 勉強会 ― 型と値JavaScript 勉強会 ― 型と値
JavaScript 勉強会 ― 型と値
 
Effective Java 輪読会 項目60-62
Effective Java 輪読会 項目60-62Effective Java 輪読会 項目60-62
Effective Java 輪読会 項目60-62
 
Effective Java 輪読会 項目74-75
Effective Java 輪読会 項目74-75Effective Java 輪読会 項目74-75
Effective Java 輪読会 項目74-75
 
Effective Java 輪読会 項目77-78
Effective Java 輪読会 項目77-78Effective Java 輪読会 項目77-78
Effective Java 輪読会 項目77-78
 
マルチスレッド デザインパターン ― Single Threaded Execution
マルチスレッド デザインパターン ― Single Threaded Executionマルチスレッド デザインパターン ― Single Threaded Execution
マルチスレッド デザインパターン ― Single Threaded Execution
 
20150302 java8 第一回_ラムダ式(1)
20150302 java8 第一回_ラムダ式(1)20150302 java8 第一回_ラムダ式(1)
20150302 java8 第一回_ラムダ式(1)
 
Javaアプリケーションサーバ 構築・運用の勘所
Javaアプリケーションサーバ 構築・運用の勘所Javaアプリケーションサーバ 構築・運用の勘所
Javaアプリケーションサーバ 構築・運用の勘所
 
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
[AWSマイスターシリーズ] AWS CLI / AWS Tools for Windows PowerShell
 

Mais de Appresso Engineering Team

Mais de Appresso Engineering Team (12)

Java Day Tokyo 2014 まとめ (chen)
Java Day Tokyo 2014 まとめ (chen)Java Day Tokyo 2014 まとめ (chen)
Java Day Tokyo 2014 まとめ (chen)
 
Effective java 輪読会 項目57-59
Effective java 輪読会 項目57-59Effective java 輪読会 項目57-59
Effective java 輪読会 項目57-59
 
Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目41-42Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目41-42
 
Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第7章 項目38-40Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第7章 項目38-40
 
Effective Java 輪読会 第6章 項目35-37
Effective Java 輪読会 第6章 項目35-37Effective Java 輪読会 第6章 項目35-37
Effective Java 輪読会 第6章 項目35-37
 
Effective java 輪読会 第6章 項目32-34
Effective java 輪読会 第6章 項目32-34Effective java 輪読会 第6章 項目32-34
Effective java 輪読会 第6章 項目32-34
 
Effective java 輪読会 第6章 項目30-31
Effective java 輪読会 第6章 項目30-31Effective java 輪読会 第6章 項目30-31
Effective java 輪読会 第6章 項目30-31
 
Effective java 輪読会 第5章 項目23-25
Effective java 輪読会 第5章 項目23-25Effective java 輪読会 第5章 項目23-25
Effective java 輪読会 第5章 項目23-25
 
Effective java 輪読会 第4章 項目18-22
Effective java 輪読会 第4章 項目18-22Effective java 輪読会 第4章 項目18-22
Effective java 輪読会 第4章 項目18-22
 
Effective Java 輪読会 第4章 項目13-17
Effective Java 輪読会 第4章 項目13-17Effective Java 輪読会 第4章 項目13-17
Effective Java 輪読会 第4章 項目13-17
 
Effective java 輪読会 第2章 項目5,6,7
Effective java 輪読会 第2章 項目5,6,7Effective java 輪読会 第2章 項目5,6,7
Effective java 輪読会 第2章 項目5,6,7
 
Effective java 輪読会 第2章 項目1,2,3,4
Effective java 輪読会 第2章 項目1,2,3,4Effective java 輪読会 第2章 項目1,2,3,4
Effective java 輪読会 第2章 項目1,2,3,4
 

Último

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Último (9)

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

Effective Java 輪読会 項目49-52