Gitを学ぶ 〜前編〜
きっかけ
!超初心者向けです!
Git流行ってるし、色々な所で勉強会をやってて、そろそろ本格的に
覚えたいなと思ったところでクスールさんで勉強会があると聞いて
早速申し込んでみました。
はじめに
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を間違えた場合はこんな感じで
プッシュ
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チョットデキル人だと思うので頑張ります。
前回の反省を活かして、しっかり勉強します。
とりあえず、教本はこれを使いたいと思います。
と言ってもまだ購入してません\(^o^)/
前回、Silverを受験する際に使用した紫本は初版で間違えが多かったです。
Goldも同様なので、今回は2刷である事を確認して購入したいと思います。
(地元の本屋はあんまり売れてないのか、1刷でした。)
Java SE 7 Programmer II の試験範囲
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)
- 作者: 有限会社ナレッジデザイン山本道子
- 出版社/メーカー: 翔泳社
- 発売日: 2013/11/29
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
- 作者: ケンアーノルド,デビッドホームズ,ジェームズゴスリン,Ken Arnold,David Holmes,James Gosling,柴田芳樹
- 出版社/メーカー: 東京電機大学出版局
- 発売日: 2014/05/10
- メディア: 単行本
- この商品を含むブログ (4件) を見る
- 作者: 井上誠一郎,永井雅人
- 出版社/メーカー: 技術評論社
- 発売日: 2014/11/01
- メディア: 大型本
- この商品を含むブログ (4件) を見る
- 作者: 田中裕一
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2014/10/27
- メディア: 大型本
- この商品を含むブログ (1件) を見る
- 作者: 結城浩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2004/06/19
- メディア: 大型本
- 購入: 51人 クリック: 762回
- この商品を含むブログ (400件) を見る
- 作者: ジェフリー・E.F.フリードル,Jeffrey E.F. Friedl,歌代和正,鈴木武生,春遍雀来
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 1999/04
- メディア: 単行本
- 購入: 2人 クリック: 6回
- この商品を含むブログ (5件) を見る
オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)
- 作者: アラン・シャロウェイ,ジェームズ・R・トロット,村上雅章
- 出版社/メーカー: 丸善出版
- 発売日: 2014/03/11
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (4件) を見る
Java並行処理プログラミング ―その「基盤」と「最新API」を究める―
- 作者: Brian Goetz,Joshua Bloch,Doug Lea
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/11/22
- メディア: 単行本
- 購入: 30人 クリック: 442回
- この商品を含むブログ (174件) を見る
OCJP Silver SE 7 合格
今日(もう日付変わっちゃったけど)受験してきました!
結果から言うと、合格ライン63%に対して88%で合格しました!!
去年、新入社員向けのJava研修の講師をしたのである程度、基本的な部分に
ついては理解しているつもりでしたが、実際模試を解いてみると案外漏れがあって
試験当日は全くといっていいほど余裕がありませんでした(笑)
OCJP銀白本の模試の結果ひどかったなー。正答率64%だった。試験時間150分に対して90分くらいで1周できるから本番では再確認をちゃんとしないとな。キャストや例外をスローするメソッドのオーバーライドの問題のミスが目立つのでそこを集中的に見直そう。
— ざきやま@OCJP銀合格 (@z_a_ki3) 2015, 4月 30
OCJP銀ちょろいと思ってたけど、そんなこと無かった。
— ざきやま@OCJP銀合格 (@z_a_ki3) 2015, 4月 30
やっぱり暗黙の型変換とかキャストが弱いな。これ以上やっても試験前に疲れきっちゃうし、自信もなくなってくるから少し休もう。
— ざきやま@OCJP銀合格 (@z_a_ki3) 2015, 5月 1
前日は早めに寝て、朝7時に起床、模試で間違えた部分を再度復習して、
試験開始の2時間前に会場近くの漫画喫茶に入って再度復習してました。
とりあえず、2時間前に試験会場の最寄に着いたから漫喫で待機
— ざきやま@OCJP銀合格 (@z_a_ki3) 2015, 5月 1
満喫のPCにeclipse入れた。
— ざきやま@OCJP銀合格 (@z_a_ki3) 2015, 5月 1
自信が無いって言うのは精神衛生上良くないので、やっぱり模試の回数を
こなして高めの正答率になってから受験した方がいいですね。
(期限を決めないとやらないという問題はありますが・・・)
再受験無料キャンペーンは7月まで延期になったので、ちょっと休んだらGold取得を
目標に頑張りたいと思います。
めでたしめでたし。
OCJP Silver SE 7 模試1回目 つづき
前回の続きです。
問題
コンパイル、実行した結果として正しいものを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()ではなくて、独自のメソッドならコンパイルエラーに。
問題
コンパイル、実行ともに成功させるために修正する箇所はどこか。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だった。
問題
コンパイル、実行した結果として正しいものを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;
なら
コンパイルエラーになるが、問題のコードはアップキャストだから問題なしでした。
問題
コンパイル、実行した結果として正しいものを1つ選択。
- A ArrayIndexOutOfBoundsException が発生する
- B IllegalArgumentException が発生する
- C NullPointerException が発生する
- D StringIndexOutOfBoundsException が発生する
- E 0 が出力される
- F -1 が出力される
解答:A
正答:D
インデックスが範囲を超えたものはみんなArrayIndexOutOfBoundsExceptionだと思ってました。
無知を晒しました(・∀・)
問題
3行目にコードを挿入してコンパイルが成功するものはどれか3つ選択
- A throws IOException { }
- B throws Exception { }
- C throws SQLException { }
- D throws FileNotFoundException { }
- E { }
解答:A,B,E
正答:A,D,E
throwsを使用しているメソッドをオーバーライドする際の決まり
- サブクラスのメソッドがthrowする例外はスーパークラスのメソッドがthrowする例外と同じか、
その例外クラスのサブクラスであること。 - RuntimeExceptionクラスおよびRuntimeExceptionクラスとそのサブクラスの例外は、
スーパークラスのメソッドがthrowする例外に関係なくサブクラスでthrowできる。 - スーパークラスのメソッドにthrowsが有ってもサブクラスで必ず書く必要はない。
1番目の関係性を逆に考えてました。
やっぱり模試を解いてみると理解が甘い点がはっきりと浮き彫りになりますね(´・_・`)
明日は白本の模試を解いてみたいと思います。
OCJP Silver SE 7 模試1回目
やる気が生成されず、前回投稿からちょっと立ちましたが、現状の知識を把握するために
紫本巻末の模試をやってみました。
オラクル認定資格教科書 Javaプログラマ Silver SE 7
- 作者: 山本道子
- 出版社/メーカー: 翔泳社
- 発売日: 2013/08/28
- メディア: Kindle版
- この商品を含むブログを見る
結果
90問中、75問正解で正答率83%・・・あまり余裕はありませんね。
しっかり復習しましょう。
間違い晒し
問題
コンパイル、実行した結果として正しいものを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をカンで答えたので・・・
問題
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は実行時エラーになるものの
コンパイルは問題なく成功するんですよね。
行間をしっかり読むのが大事だと再認識しました。。。
問題
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)
問題
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つ選択"と書いてます。問題をちゃんと読みましょう。
問題
コンパイル、実行した結果として正しいものを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)やろ!!
と、盲目的に解答してました。コンストラクタで初期化してるのに完全に見えなくなってます。
ちゃんと全体を見ましょう。
問題
コンパイル、実行した結果として正しいものを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クラスを継承してもいいのかなぁ・・・と臭いは感じていたものの間違えました。
問題
コンパイル、実行した結果として正しいものを1つ選択
- A Object
- B Number
- C Integer
- D char[]
- E コンパイルエラー
- F 実行時エラー
解答:A
正答:E
純粋にString型を引数に持つメソッドがないのでコンパイルエラーと思ったのですが、
実際はスーパークラスのObjectに暗黙の型変換が行われて2行目が実行されるんですね。
ぐぬぬ。
ちょっと長くなったので分割します。
Java SE 7 Programmer I って
先日のJavaDayTokyoで最新Java認定資格ガイドというセッションがあったので、
それを見てみると、上級者の指導のもとで実装やテストが書けるレベル感らしい。
まぁ、確かに試験範囲的に納得は行くけど、コンパイルエラーになるかどうかの問題は
普段、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を使用する
メソッドとカプセル化を操作する
- 引数と戻り値があるメソッドを作成する
- staticキーワードをメソッドとフィールドに適用する
- オーバーロードメソッドを作成する
- デフォルトコンストラクタとユーザー定義のコンストラクタを区別する
- コンストラクタを作成および多重定義する
- アクセス修飾子を適用する
- カプセル化の原則をクラスに適用する
- 値を変更するメソッドに渡した場合のオブジェクト参照とプリミティブ値に対する影響を判断する
継承の操作
- 継承を実装する
- ポリモフィズムの使用例を示すコードを開発する
- 参照の型とオブジェクトの型を区別する
- キャストが必要なタイミングを判断する
- superとthisを使用してオブジェクトとコンストラクタにアクセスする
- 抽象クラスとインタフェースを使用する
例外の処理
- チェックされる例外、RuntimeExceptionsおよびエラーを区別する
- try/catchブロックを作成し、通常のプログラム・フローが例外によってどのように変更されるかを判断する
- Javaで使用される例外について説明する
- 例外をスローするメソッドを呼び出す
- 一般的な例外クラスとカテゴリを認識する