おれろぐ #z_a_ki3

(・∀・) オイ!

Gitを学ぶ 〜前編〜

きっかけ

!超初心者向けです!

Git流行ってるし、色々な所で勉強会をやってて、そろそろ本格的に
覚えたいなと思ったところでクスールさんで勉強会があると聞いて
早速申し込んでみました。

cshool.connpass.com

はじめに

Gitの状態は以下の3つの状態がある。

  • 作業ツリー(ワーキングツリー)
  • インデックス
  • ローカルリポジトリ

習ったコマンド

ローカルリポジトリ

初期化(ローカルリポジトリ作成)

git init

ファイル追加(作業ツリーからインデックス)

git add [ファイル名]

複数のファイルを追加する場合

git add [ファイル1] [ファイル2] [ファイル3]

すべてのファイルを追加する場合

git add .(ドット)
# 削除したファイルを含める場合
git add --all

フォルダ構成だけ先に作成する場合、空のフォルダは追加できないので 慣習的に .gitkeep という空のファイルを作成して追加する。

ファイルを削除する場合

git rm [ファイル名]

コミット(インデックスからローカルリポジトリ

git commit -m "コミットメッセージ"

ファイル追加の取り消し

git reset [ファイル名]

(直前の)コミットの取り消し

# 作業ツリーまで戻る
git reset HEAD^
# インデックスまで戻る
git reset --soft HEAD^

HEAD^はHEAD(先頭)の一つ前ということらしい。

ここに詳しいのがあった。 tech.aainc.co.jp

リモートリポジトリ編

リモートリポジトリと紐付け

git remote add origin [URL]

今はoriginは魔法の言葉とするが、リモートリポジトリと考えてよいらしい。
originを別名に変えることはできるが、滅多にない。

URLを間違えた場合はこんな感じで

tetsuyai.hatenablog.com

プッシュ

git push origin master

リモートリポジトリからローカルリポジトリを作成する。

git clone [URL]

ローカルリポジトリを最新にする。

git pull origin master

各状態間の差分を見る。

作業ツリーとインデックス

git diff

インデックスとリポジトリ(HEAD)

git diff --cached

作業ツリーとリポジトリ(HEAD)

git diff HEAD

resetの時は最新の一つ前なのでHEADの後に^をつけたけど、
diffは最新と比較するので^はいらない。

今日はここまで!!

予習資料

もっと早く知りたかった! Gitが鬼のようにわかるスライド厳選7選 | Find Job ! Startup

更新

正しい用語に修正(作業ディレクトリ→作業ツリー)

OCJP Gold SE 7 受験に向けて

先日、何とかSilverは取得できましたが、Goldまで取れてようやく
Javaチョットデキル人だと思うので頑張ります。

前回の反省を活かして、しっかり勉強します。

とりあえず、教本はこれを使いたいと思います。

www.shoeisha.co.jp

と言ってもまだ購入してません\(^o^)/

前回、Silverを受験する際に使用した紫本は初版で間違えが多かったです。
Goldも同様なので、今回は2刷である事を確認して購入したいと思います。
(地元の本屋はあんまり売れてないのか、1刷でした。)

Java SE 7 Programmer II の試験範囲

http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=5001&get_params=p_exam_id:1Z0-804&p_org_id=70&lang=JA より

Javaクラスの設計

アクセス修飾子の使用:private、protected、public
メソッドのオーバーライド
コンストラクタおよびメソッドに対するオーバーロードの適用
instanceof演算子の使用とキャスト
仮想メソッド呼び出しの使用
クラスの機能向上のためのObjectクラスのメソッドのオーバーライド
package文とimport文の使用

高度なクラス設計

抽象クラスの適用方法と適用するタイミングの特定
抽象クラスとサブクラスの作成
staticキーワードとfinalキーワードの使用
最上位レベルとネストクラスの作成
列挙型の使用
オブジェクト指向の設計原理
インタフェースの宣言、実装および継承を行うコードの記述
インタフェースの継承とクラスの継承の選択
is-a関係とhas-a関係を実装するコードの作成
コンポジションの適用
シングルトン・デザイン・パターンを使用したクラス設計
DAOパターンを実装するコードの作成
ファクトリを使用したオブジェクトの設計および作成とAPIからのファクトリの使用

ジェネリックスとコレクション

ジェネリックスクラスの作成
コレクションを作成するためのダイアモンド演算子の使用
従来型とジェネリックス型を使用したコレクションの相互運用性の分析
ラッパー・クラスとオートボクシングの使用
List、SetおよびDequeの作成と使用
Mapの作成と使用
java.util.Comparatorとjava.lang.Comparableの使用
配列とリストのソートと検索

文字列処理

文字列の検索、解析および作成
正規表現を使用した文字列の検索、解析、および置換
書式指定パラメータを使用した文字列の書式化: %b、%c、%d、%f、%s
例外とアサーション
throw文とthrows文の使用
multi-catchのあるtry文とfinally句の使用
try-with-resources文を使用したリソースの自動クローズ
カスタム例外の作成
アサーションを使用した不変量のテスト

Java I/Oの基礎

コンソールからのデータの読み込みと書き込み
ファイルの読み込みおよび書き込みのためのストリームの使用

Java ファイルI/O(NIO.2)

ファイルやディレクトリパス操作のためのPathクラスの使用
Filesクラスを使用したファイルやディレクトリの確認、削除、コピー、および移動
ファイル属性やディレクトリ属性の読み込みおよび変更
ディレクトリ・ツリーの再帰アクセス
PathMatcherクラスを使用したファイルの検索
WatchServiceを使用したディレクトリ変更の監視

JDBCによるデータベース・アプリケーションの作成

JDBC APIのレイアウト定義
JDBCドライバを使用したデータベース接続
データベースへの更新と問い合わせ
JDBCトランザクションの振る舞いのカスタマイズとトランザクションのコミット
JDBC 4.1のRowSetProvider、RowSetFactoryおよびRowSetインタフェースの使用

スレッド

ThreadクラスとRunnableインタフェースの作成と使用
スレッドのライフサイクルの管理と制御
共有データに対するスレッドのアクセスの同期化
スレッドの潜在的な問題の識別
並列処理
java.util.concurrentコレクションの使用
アトミック変数とロックの適用
ExecutorsとThreadPoolsの使用
並列Fork/Joinフレームワークの使用

ローカライゼーション

Localeオブジェクトを使用したロケールの読み込みおよび設定
ロケールのリソース・バンドルの作成
アプリケーションでリソース・バンドルのロード
NumberFormatとDateFormatを使用した国際化対応のテキスト書式設定

やっぱりSilverなんかと比べると圧倒的に難易度と範囲が広くなってますね。
それぞれの項目で試験対策のテキストだけでは無くて、理解を深める必要が
ありそうです。。。

再受験無料キャンペーンが7月中旬までなので、そこまでには何とか挑戦を
してみたいですね!

Goldの学習に関連しそうな書籍

オラクル認定資格教科書 Javaプログラマ Gold SE 7 (EXAMPRESS)

オラクル認定資格教科書 Javaプログラマ Gold SE 7 (EXAMPRESS)

プログラミング言語 Java 第4版

プログラミング言語 Java 第4版

改訂2版 パーフェクトJava

改訂2版 パーフェクトJava

Java 最強リファレンス

Java 最強リファレンス

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

詳説 正規表現

詳説 正規表現

オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)

オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

OCJP Silver SE 7 合格

今日(もう日付変わっちゃったけど)受験してきました!
結果から言うと、合格ライン63%に対して88%で合格しました!!

去年、新入社員向けのJava研修の講師をしたのである程度、基本的な部分に
ついては理解しているつもりでしたが、実際模試を解いてみると案外漏れがあって
試験当日は全くといっていいほど余裕がありませんでした(笑)

前日は早めに寝て、朝7時に起床、模試で間違えた部分を再度復習して、
試験開始の2時間前に会場近くの漫画喫茶に入って再度復習してました。

自信が無いって言うのは精神衛生上良くないので、やっぱり模試の回数を
こなして高めの正答率になってから受験した方がいいですね。

(期限を決めないとやらないという問題はありますが・・・)

再受験無料キャンペーンは7月まで延期になったので、ちょっと休んだらGold取得を
目標に頑張りたいと思います。

めでたしめでたし。

OCJP Silver SE 7 模試1回目 つづき

zaki3.hateblo.jp

前回の続きです。

問題

gist.github.com

コンパイル、実行した結果として正しいものを1つ選択。

  • A X X X
  • B X Y X
  • C X Y Y
  • D Y Y Y
  • E コンパイルエラー
  • F 実行時エラー

解答:E
正答:D

問題見たとき、interface ZにはtoString()の定義無いやん!アクセスできないやん!!
これはコンパイルエラーで間違いない!!!

なんて思ったのでしょう。だがしかし、interfaceもclassと同様に継承してない場合は
デフォルトでObjectが親になるので、Objectが持っているtoString()メソッドであれば、
参照することができるという罠でした。

※toString()ではなくて、独自のメソッドならコンパイルエラーに。

問題

gist.github.com

コンパイル、実行ともに成功させるために修正する箇所はどこか。1つ選択。

  • A 2行目の A() の private を削除する
  • B 5行目の B() の private を削除する
  • C 6行目の play() メソッドを public にする
  • D 6行目の play() メソッドを static にする
  • E いずれも該当しない

解答:B
正答:A

コンストラクタがprivateだからやろ〜と条件反射でBを選択しちゃいました。
mainメソッドと同一のクラスだからprivateで問題ないわけで、
スーパークラスコンストラクタが暗黙的にサブクラスのコンストラクタを呼び出す際に
privateだとアクセスできないと。

Aの通り、privateを削除するか、選択肢には無いけどprotectedにすればOKだった。

問題

gist.github.com

コンパイル、実行した結果として正しいものを1つ選択。

  • A Class A Class A
  • B Class B Class A
  • C Class A Class B
  • D Class B Class B
  • E コンパイルエラー
  • F 実行時エラー

解答:E
正答:D

キャストの方向を勘違いしていた様子。7行目がダウンキャスト obj1 = obj2; なら
コンパイルエラーになるが、問題のコードはアップキャストだから問題なしでした。

問題

gist.github.com

コンパイル、実行した結果として正しいものを1つ選択。

  • A ArrayIndexOutOfBoundsException が発生する
  • B IllegalArgumentException が発生する
  • C NullPointerException が発生する
  • D StringIndexOutOfBoundsException が発生する
  • E 0 が出力される
  • F -1 が出力される

解答:A
正答:D

インデックスが範囲を超えたものはみんなArrayIndexOutOfBoundsExceptionだと思ってました。
無知を晒しました(・∀・)

問題

gist.github.com

3行目にコードを挿入してコンパイルが成功するものはどれか3つ選択

  • A throws IOException { }
  • B throws Exception { }
  • C throws SQLException { }
  • D throws FileNotFoundException { }
  • E { }

解答:A,B,E
正答:A,D,E

throwsを使用しているメソッドをオーバーライドする際の決まり

1番目の関係性を逆に考えてました。

やっぱり模試を解いてみると理解が甘い点がはっきりと浮き彫りになりますね(´・_・`)

明日は白本の模試を解いてみたいと思います。

OCJP Silver SE 7 模試1回目

zaki3.hateblo.jp

やる気が生成されず、前回投稿からちょっと立ちましたが、現状の知識を把握するために
紫本巻末の模試をやってみました。

オラクル認定資格教科書 Javaプログラマ Silver SE 7

オラクル認定資格教科書 Javaプログラマ Silver SE 7

結果

90問中、75問正解で正答率83%・・・あまり余裕はありませんね。

しっかり復習しましょう。

間違い晒し

問題

gist.github.com

コンパイル、実行した結果として正しいものを1つ選択。

  • A main hello
  • B hello main
  • C コンパイルエラー
  • D 実行時エラー

解答:C
正答:D

へっぽこなミスで、これ、実行に必要なmainメソッドが無いだけなのでコンパイル
問題なく出来るんですよね。

こんな間違えはもったいないです。

問題

ArrayListクラスの特徴として正しいものを4つ選択

  • A AbstractListクラスを継承している
  • B Collectionクラスのsort()メソッドが使用できる
  • C RandomAccessインターフェースを実装している
  • D オブジェクトを格納できる
  • E 宣言時に必ず型宣言しなくてはいけない

解答:A,B,C,D
正答:A,B,C,D

間違えて無かったけど、Cをカンで答えたので・・・

問題

gist.github.com

2行目にコードを挿入してコンパイルが成功するものはどれか2つ選択

  • A list.indexOf(2.0d);
  • B list.get(list.size());
  • C list.add("hi");
  • D list.add("10.0");

解答:A,D
正答:A,B

Bのlist.get(list.size())で要素の範囲をオーバーすると思って、Dを選択したのですが、
ボクシングアンボクシングやキャストと違ってパースは自動的にされないですよね。

"コンパイルが成功するもの"っていうのがポイントでBは実行時エラーになるものの
コンパイルは問題なく成功するんですよね。

行間をしっかり読むのが大事だと再認識しました。。。

問題

gist.github.com

sbが保持する文字をすべて削除するコードとして正しいものを1つ選択

  • A sb.delete();
  • B sb.deleteAll();
  • C sb.delete(0, sb.length());
  • D sb.delete(0, sb.size());
  • E sb.remove();
  • F sb.removeAll();

解答:B
正答:C

StringBuilderの仕様を覚えていませんでした。
基本的なAPI仕様を読みます。。。

StringBuilder (Java Platform SE 8)

問題

gist.github.com

6行目に挿入するコードで Welcome Java World. と出力するものを2つ選択

  • A sb.append(s1).append(s2);
  • B sb.insert(s1).insert(s2);
  • C sb.append(s1 + s2);
  • D sb.insert(s1 + s2);
  • E sb += (s1 + s2);

解答:A
正答:A,C

"2つ選択"と書いてます。問題をちゃんと読みましょう。

問題

gist.github.com

コンパイル、実行した結果として正しいものを1つ選択

  • A a:null b:0
  • B a:Bar b:500
  • C a:Foo b:100
  • D コンパイルエラー
  • E 実行時エラー

解答:A
正答:C

問題を見て、これあれやん!this付けてないからメソッド実行しても値が更新しない奴やん!
フィールドは初期化してないからデフォルトの値(String=null、int=0)やろ!!

と、盲目的に解答してました。コンストラクタで初期化してるのに完全に見えなくなってます。
ちゃんと全体を見ましょう。

問題

gist.github.com

コンパイル、実行した結果として正しいものを1つ選択

  • A Helloが2回表示される
  • B Helloが1回表示された後、ClassCastException が発生する
  • C Helloが1回表示された後、IllegalStateException が発生する
  • D コンパイルエラー

解答:B
正答:D

interface Aにはshow()メソッドが定義されてないのはコンパイル時にチェックされますね。
IDEだと警告が出るのであまり考えてませんでした。
あと、2つの例外をしっかり覚えてたら消去法で解答できましたね。

ClassCastException
あるオブジェクトを継承関係にないサブクラスにキャストしようとした

IllegalStateException
(オブジェクト状態が)不正または不適切なときにメソッドが呼び出された

問題

定義可能なコードを1つ選択

  • A abstract class A extends String { // 実装コード }
  • B abstract class B extends Double { // 実装コード }
  • C abstract class C extends Integer { // 実装コード }
  • D abstract class D extends System { // 実装コード }
  • E abstract class E extends Number { // 実装コード }

解答:D
正答:E

まず、Numberクラスを知らなかったのが敗因。基本型のラッパークラスの抽象クラスだったんですね。
Systemクラスを継承してもいいのかなぁ・・・と臭いは感じていたものの間違えました。

問題

gist.github.com

コンパイル、実行した結果として正しいものを1つ選択

  • A Object
  • B Number
  • C Integer
  • D char[]
  • E コンパイルエラー
  • F 実行時エラー

解答:A
正答:E

純粋にString型を引数に持つメソッドがないのでコンパイルエラーと思ったのですが、
実際はスーパークラスのObjectに暗黙の型変換が行われて2行目が実行されるんですね。

ぐぬぬ

ちょっと長くなったので分割します。

Java SE 7 Programmer I って

先日のJavaDayTokyoで最新Java認定資格ガイドというセッションがあったので、
それを見てみると、上級者の指導のもとで実装やテストが書けるレベル感らしい。

zaki3.hateblo.jp

まぁ、確かに試験範囲的に納得は行くけど、コンパイルエラーになるかどうかの問題は
普段、IDEで解決してくれていたり、慣例的に書いていて意識していない部分も出るので、
意外と難しい印象が・・・。

それにしても後半にある

みんなのギモン:「認定試験は時間的な余裕がない!」
そう感じるように試験時間を設定しています
・オラクル認定資格の試験仕様の策定には『心理統計学者(Psychometrician)』も関与してます!

って・・・

おぃ、心理統計学者よ。

1問当たり1分30秒しか時間がない中、解けない問題に引っかかると確かに焦って
余計解けなくなるのは確かなので、そこはチェックつけて後回しにして解ける問題だけ
さくさくと解いて残り時間で2周目に取り組む方がいいのかなと思います。

で、Java8対応は5月末にのBronzeがリリースされて、7月にSilver、10月にGoldと出るけど、
資格取得の目的は社内考課の為だけなので再受験無料キャンペーンが延長になった7月までに
Java7 Goldまで取れればいいかなと思ってます。

(できればJava EE 6 Web Component Developerまでチャレンジしたいけど無理そう。)

Java SE 7 Programmer I 受験する!

期末の昇給に関わる評価とか再受験無料キャンペーンが5月いっぱいで終わるので Oracle Certified Java Programmer, Silver SE 7 を受験することにしました。

一応、JavaSEの範囲で、且つシルバーだと基本的な部分しか出てこないと思うので大丈夫かと思うのですが、テスト内容を確認していきたいと思います。

試験範囲

Javaの基本

  • 変数のスコープを定義する
  • Javaクラスの構造を定義する
  • main()メソッドがある実行可能なJavaアプリケーションを作成する
  • 他のJavaパッケージをインポートしてコードでアクセスできるようにする

Javaのデータ型の操作

  • 変数を宣言および初期化する
  • オブジェクト参照変数とプリミティブ変数を区別する
  • オブジェクトのフィールドに対して読取りと書込みを行う
  • オブジェクトのライフサイクルについて説明する
  • オブジェクトのメソッドを呼び出す
  • StringBuilderクラスおよびそのメソッドを使用してデータを操作する
  • 文字列を作成および操作する

演算子と決定構造の使用

  • Java演算子を使用する
  • カッコを使用して演算子の優先順位を変更する
  • ==とequals()を使用して文字列と他のオブジェクトが等しいかどうかをテストする
  • ifおよびif/else構造を作成する
  • switch文を使用する

配列の作成と使用

ループ構造の使用

  • whileループを作成および使用する
  • 拡張forループを含むforループを作成および使用する
  • do/whileループを作成および使用する
  • ループの構造を比較する
  • breakとcontinueを使用する

メソッドカプセル化を操作する

継承の操作

  • 継承を実装する
  • ポリモフィズムの使用例を示すコードを開発する
  • 参照の型とオブジェクトの型を区別する
  • キャストが必要なタイミングを判断する
  • superとthisを使用してオブジェクトとコンストラクタにアクセスする
  • 抽象クラスとインタフェースを使用する

例外の処理

  • チェックされる例外、RuntimeExceptionsおよびエラーを区別する
  • try/catchブロックを作成し、通常のプログラム・フローが例外によってどのように変更されるかを判断する
  • Javaで使用される例外について説明する
  • 例外をスローするメソッドを呼び出す
  • 一般的な例外クラスとカテゴリを認識する

参考

Java SE 7 Programmer I| Oracle Certification Exam