The King's Museum

ソフトウェアエンジニアのブログ。

2015-01-01から1年間の記事一覧

ブログタイトルを変えた

ブログタイトルを『王様の美術館』に変えた。 元ネタはアイコンにもしているマグリットの絵。 The king's museum - Rene Magritte - WikiArt.org かれこれ数年の間、いろいろなサイトでこの絵を自分のアイコンとして使ってるなぁ。

『Javaの理論と実践: スレッド・セーフの特性について』を読んで

スレッド・セーフの特性について 記事: https://www.ibm.com/developerworks/jp/java/library/j-jtp09263/ メモ: スレッドセーフは「all or nothing」の命題ではない クラスの保証するスレッドセーフ性を厳密に文書化するべきである インスタンスメソッド…

『Javaの理論と実践: 優れたHashMapの構築』を読んで間違いを見つけた

優れたHashMapの構築 記事: Javaの理論と実践: 優れたHashMapの構築 メモ: CuncurrentHashMap の実装を見てみる スループットが最適化されている 複数の書き込みロック。ハッシュバケットに対する 32 のロックコレクション。 size() や isEmpty() について…

『Javaの理論と実践: 並行コレクション・クラス』を読んで

並行コレクション・クラス 記事: Javaの理論と実践: 並行コレクション・クラス メモ: Doug Lea 氏の util.concurrent がいけてる Map の歴史 Hashtable: JDK 1.0 登場。同期化された Map。同期化が必要ない場合に遅い。 HashMap と Collections.synchroniz…

『Javaの理論と実践: (若干) シンプルになった並行性』のメモ

(若干) シンプルになった並行性 記事:Javaの理論と実践: (若干) シンプルになった並行性 メモ: ロギング・スケジューリング・キャッシング系のパッケージは再発明されやすい XML パーサ、XSLプロセッサー、PDF ジェネレータは再発明されないのに。。。 「…

『Javaの理論と実践: ファイナル・アンサー?』のメモ

ファイナル・アンサー? 記事: Javaの理論と実践: ファイナル・アンサー? メモ: 様々な final クラスの final:継承禁止 メソッドの final:オーバーライド禁止 フィールドの final:コンストラクタで一度だけ代入可能。その後、変更不可。 Java でクラス…

『Javaの理論と実践: スレッドはどこへ消えた?』のメモ

Javaの理論と実践: スレッドはどこへ消えた? 記事:Javaの理論と実践: スレッドはどこへ消えた? メモ: スレッドがスタックトレースを残さず消える場合がある 単一スレッド環境:例外が発生してコンソールにスタックトレースが出力される マルチスレッド環…

『Javaの理論と実践: スレッド・プールとワーク・キュー』のメモ

スレッド・プールとワーク・キュー 記事:Javaの理論と実践: スレッド・プールとワーク・キュー メモ: サーバーアプリケーションは「処理時間の短いタスク・大量のタスク」を処理することが多い これに対して、スレッドを都度立ち上げるというマルチスレッ…

【Effective Java】項目22:非 static のメンバークラスより static のメンバークラスを選ぶ

クラスの中に定義されたクラスを『ネストしたクラス』と呼ぶ。 ネストしたクラスは4種類に分類できるが、非 static メンバークラスよりも static メンバークラスを利用するべき。 ネストしたクラス ネストしたクラスには以下の4種類があり、static のメン…

『インテル経営の秘密』(High Output Management)を読んで

(2017年1月11日追記) 日経 BP 社から復刊してます。 Kindle 版もあるのでぜひ。 HIGH OUTPUT MANAGEMENT(ハイアウトプット マネジメント) 人を育て、成果を最大にするマネジメント作者: アンドリュー・S・グローブ,ベン・ホロウィッツ,小林薫出版社/メーカ…

【Effective Java】項目21:戦略を表現するために関数オブジェクトを利用する

戦略パターンを実現するため、関数オブジェクトを利用する。 関数オブジェクト 多くのプログラミング言語では、関数ポインタ、委譲、ラムダ式と呼ばれるような機構を利用して、関数自体の受け渡しが可能になっている。 関数自体をある関数に与えることで、呼…

『Javaの理論と実践: 安全な構築のテクニック』のメモ

最近、再び Java の勉強に時間を使い始めた。 ずいぶんと昔に書かれたものだが Brian Goetz 氏が書いてるシリーズが勉強になりそうなので、毎日 30 分くらいで読んでいる。 IBM developerWorks 日本語版 : Java Technology : 技術文書一覧 今のところ、concu…

【Effective Java】項目20:タグ付クラスよりクラス階層を選ぶ

クラスが2つ以上の特性を持っている場合、タグフィールドを保持するよりも、クラス階層を利用するべき。 タグ付クラス タグ付クラスとはクラスが2つ以上の特性を持っていて、タグフィールドを保持することで、それらを区別するように実装されているクラス…

android.widget.Button の setMinWidth() と setMinimumWidth()

ちょっと前に android.widget.Button(以下、Button クラス)に最小幅を設定しようとして、ちょっとつまづいた。 問題 Button クラスに対して xml 側で最小幅を設定しているところがあった。 (指定が px 単位なのは分かりやすくするため) <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" android:minWidth="30px" /> これを、ちょっ</button>…

『How Google Works』と『グーグル ネット覇者の真実』を読んだ

グーグル関連の本を二冊読んだ。 『How Google Works』と『グーグル ネット覇者の真実』。 How Google Works (ハウ・グーグル・ワークス) ―私たちの働き方とマネジメント作者: エリック・シュミット,ジョナサン・ローゼンバーグ,アラン・イーグル,ラリー・ペ…

『ライトついてますか』と『スーパーエンジニアへの道』

Are you light on? ゴースとワインバーグの共著、『ライトついてますか』を読んだ。 ライト、ついてますか―問題発見の人間学作者:ドナルド・C・ゴース,G.M.ワインバーグ発売日: 1987/10/25メディア: 単行本 名前は何度も目にしていたのだけど実際に手に取っ…

【Effective Java】項目19:型を定義するためだけにインタフェースを利用する

インタフェースは、その実装クラスのインスタンスで何ができるかだけを述べるべきである。 その他の目的、たとえば定数インタフェースなどには利用しない。 定数インタフェース メソッドを持たず、static final の定数を外部に提供しているだけのインタフェ…

【Effective Java】項目18:抽象クラスよりインタフェースを選ぶ

Java では抽象クラスよりも、インタフェースを利用するべき。 抽象クラスとインタフェース 抽象クラスとインタフェースには以下の違いがある。 抽象クラスはメソッドの実装を含むことが許されるが、インタフェースは許されない 抽象クラスを実装するためには…

ファイナライザの脆弱性

項目7でファイナライザの挙動を調べてて、以下の記事を見つけた。 IBM developerWorks ヒント: ファイナライザーによる脆弱性からコードを保護する どうやら Java のファイナライザには脆弱性があるらしい。 ファイナライザの脆弱性 項目7で書いたように、…

【Effective Java】項目17:継承のための設計および文書化する、でなければ継承を禁止する

継承させることを意図するクラスを作成するときは、継承のために設計し、文書化する。 そうでない場合には継承させないようにする。 自己利用(self-use)の文書化 クラスはオーバーライド可能なメソッドの自己利用を文書化する必要がある。 個々の public …

【Effective Java】項目16:継承よりコンポジションを選ぶ

継承よりもコンポジションを選ぶべきである。 継承の利用 継承はコードを再利用するための一般的な手法だが、常に最適なものとは限らない。 継承を安全に利用することができるのは以下の場合である。 スーパークラスもサブクラスも特定のパッケージ配下にあ…

【Effective Java】項目15:可変性を最小限にする

クラスの可変性は最小限にするべきである。 不変クラス 不変クラスとは、そのインスタンスを変更できないという性質をもつクラス。 インスタンスが生成された時点ですべての情報を持っていて、インスタンスの生存期間中はそれらの情報が変化しないことが保証…

【Effective Java】項目14:public のクラスでは、public のフィールドではなく、アクセッサーメソッドを使う

クラスがパッケージの外からアクセス可能ならば(public ならば)、ゲッターとセッターを提供するべき。 public なクラスがデータフィールドを公開すると、その内部的な表現を永久に変更できなくなる。 一方、クラスがパッケージプライベート・private のネ…

【Effective Java】項目13:クラスとメンバーへのアクセス可能性を最小限にする

ここから第4章「クラスとインターフェス」。 クラスとインタフェースは Java の中心に位置し、抽象化の基本となる要素。 この章では、クラス・インタフェースが利用可能で、頑強で、柔軟になるような指針を議論する。 最初の項目は情報隠蔽・カプセル化に関…

Gauche 始めました。

Scheme というか、Gauche を勉強し始めた。 プログラミングGauche作者: Kahuaプロジェクト,川合史朗出版社/メーカー: オライリージャパン発売日: 2008/03/14メディア: 大型本購入: 22人 クリック: 713回この商品を含むブログ (272件) を見る ちょっとしたタ…

【Effective Java】項目12:Comparable の実装を検討する

Comparable インタフェースの compareTo を実装するとインスタンスが順序を持つようになる。 第3章で議論した他のメソッドとは異なり、compareTo メソッドは Object では宣言されていない。 ただし、Comparable を実装すると、多くの一般的なアルゴリズムや…

【Effective Java】項目11:clone を注意してオーバーライドする

本項目では正しく機能する clone メソッドを、どのように、いつ実装するかを議論する。 Cloneable インタフェース Cloneable インタフェースはオブジェクトが複製を許可していることを示す。 ただし、Cloneable インタフェース自体は空のインタフェースであ…

【Effective Java】項目10:toString を常にオーバーライドする

toString をオーバライドして意味のある文字列を返すようにする。 toString のオーバーライド java.lang.Object は toString() を実装しているが、ユーザーにとってよい情報を返すわけではない。 Object obj = new Object(); // 「クラス名@ハッシュコード値…

【Effective Java】項目9:equals をオーバーライドする時は、常に hashCode をオーバーライドする

equals をオーバーライドする時は、hashCode メソッドを必ずオーバーライドしなければならない。 オーバーライドしない場合、Object.hashCode の一般契約を破ることになり、HashMap、HashSet、HashTable など、hashCode の一般契約に基づくコレクションが適…

【Effective Java】項目8:equals をオーバーライドするときは一般契約に従う

第3章『すべてのオブジェクトに共通のメソッド』に入る。 第3章は、Object.equals()、Object.hashCode()、Object.toString()、Object.clone() について、いつ、どのようにオーバーライドするかを説明する。 finalize も同様のものだが、すでに項目7で議論…

(c) The King's Museum