プログラミングメモ

ソフトウェア開発に関する技術メモ。

JJUG CCC 2015 Spring メモ

Timetable / JJUG CCC 2015 Spring(4月11日開催) | 日本Javaユーザーグループ

覚えておきたいところ自分用メモ。

Javaにおけるnull。これまでとこれから (太一氏)

Javaにおけるnull。これまでとこれから - Google スライド

  • 各言語のnullっぽいもの

    • SQL
      • 3値論理である(true, false, NULL)
      • NULLは未知、または、適用不能、をあらわす。値ではない!
  • 言語仕様上nullが許されない場所

    • Integer i; で i の unboxing
    • for (String foo: bar) のbar
    • synchronized(x) の x
    • throw ex のex
  • 何もないこと、をどうあらわすか

    • "空"のオブジェクト

      • 空文字列
      • 空の配列
      • 空のListなど。Collections#emptyList()などで得られる。
    • 型のあるnull

      • NullObjectパターン。A型に対し、abstract Aと、そのサブクラスRealA、NullA を作る。
        • ソースが増えるのがデメリット。
    • Optional

  • 有効でない値、を受け取ったとき/受け取りうるときどうするか

    • Map#getOrDefault 値がないときの値を指定(Java 8)
    • java.util.Objects#toString (Java 7)
    • Optional
      • ifPresetn
      • orElse
  • nullを早期にガード

    • メソッドの引数にnullを渡すのをガード
    • Collectionの要素のnull防止
    • java.util.Objects#requireNonNull
  • The Checker Framework にチェックさせる

※ 自分で調べてみたらこんなもの

  • nullを考慮して処理
    • java.util.Objects
      • Objects#hashCode
      • Objects#equals ( compare もあるが、そちらはNPEが出ることがあるらしい)
      • Objects#nonNull
    • Apache commons lang
      • StringUtils#isEmpty
      • StringUtils#defaultString

大規模な負荷でもドキドキしない為のJava EE (nagaseyasuhito氏)

大規模な負荷でもドキドキしない為のJava EE

  • 負荷テストは Apache JMeter

    • Selenium IDEのシナリオを利用できる。Selenium IDEでユーザー操作をシナリオとして記録できる。
    • Jenkins Performance Plugin : JMeterの結果を可視化。
  • ボトルネックをみつける

    • Resource Monitoring
      • Zabbix, Munin, MRTG, Sensu, Gangliaなど。
    • MissionControl
      • Flight Recorderで取得したJVMの統計情報を可視化
      • -XX:+UnlockCommercialFeatures -XX:+FlightRecorder
      • jcmdコマンドで統計情報を取得
  • JPA のスケールアウト戦略

    • READが頭打ち (SELECTが頭打ち)
      • →Master Slave Replication
        • 更新系クエリはマスターへ発行
        • 検索系はスレーブに発行
        • MySQL ReplicationDriver
          • java.sql.Connection#setReadOnly(true)した場合はスレーブのホストにリクエスト発行
    • WRITEも頭打ち on memory cacheでも間に合わない。
      • →Partitioning
        • クエリを発行するデータベースを分ける。IDの剰余などでわける
        • joinやsortができないのでアプリの設計にも影響
        • EclipseLink Partitioning
        • Hibernate Shards