javaの資格試験(ocj-p)を取って何を学んだか

20
Javaの資格試験(OCJ-P)取って何を学んだか 2015-08-01 渋谷Java(LT) @nikuyoshi

Upload: hiroki-uchida

Post on 17-Aug-2015

848 views

Category:

Engineering


0 download

TRANSCRIPT

Javaの資格試験(OCJ-P)を取って何を学んだか

2015-08-01 渋谷Java(LT枠) @nikuyoshi

本日の発表内容は個人の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

自己紹介• 内田 大樹(@nikuyoshi)

• 通信会社の情報システム部門の運用基盤開発部門

• ジョブ管理システム(ex. JP1)を中心に、設計・開発・試験等を担当しています

• Java, JavaScript(Ext JS), HTML, CSS, Shell script

• 最近Qiitaに記事を投稿することが増えました

実家は熱海で喫茶店を やってます(宣伝)

受験したきっかけ

とりあえずJavaの資格取ってこい

承知いたしました(ガクガク

Oracle Certified Java Programmer, SE5/6

(OCJ-P) とは何か?

試験概要問題数 60問

合格ライン 61%

試験時間 150分

出題形式 多肢選択式 / ドラッグ&ドロップ

受験料 34,230円(2013年当時)

結果、勉強期間、使用教材等

• Java経験: 約半年(2013年5月時点)

• 正解率: 66%

• 勉強期間: およそ3ヶ月

• 使用教材: 黒本教科書、黒本問題集

必要な知識• Java言語の基礎

• javac、javaコマンド、JARファイル、ガーベッジコレクション、finalizeメソッド等

•宣言、初期化、スコープ • static変数、インスタンス変数、配列、インナークラス、ローカルインナークラス等

•フロー制御 • if~else文、switch文、while文、break、continue、アサーション、例外処理等

• APIコンテンツ • StringBuilder、StringBufferクラス、正規表現、ファイルI/O、直列化、ロケール等

•並行性 • Threadクラス、スレッドの生成、同期化、割り込み、マルチスレッド等

•オブジェクト指向コンセプト • カプセル化、メソッドのオーバーロード、is-a・has-a関係、ポリモーフィズム等

•コレクション/ジェネリックス • Hashtable、HashMap、HashSet、TreeSet、ジェネリクス、ワイルドカード等

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

例題

以下のコードをコンパイル、実行した時の結果として正しいものを選びなさい。public class Example { public static void main(String[] args) { Thread t = new Thread(new Runnable(){ public void run(){ System.out.println("running"); } }); t.start(); t.start(); }}

A. 正常に実行され、「running」が表示される

B. 正常に実行され、「runningrunning」が表示される C. コンパイルエラーになる D. 実行時に例外がスローされる

以下のコードをコンパイル、実行した時の結果として正しいものを選びなさい。public class Example { public static void main(String[] args) { Thread t = new Thread(new Runnable(){ public void run(){ System.out.println("running"); } }); t.start(); t.start(); }}

A. 正常に実行され、「running」が表示される

B. 正常に実行され、「runningrunning」が表示される C. コンパイルエラーになる D. 実行時に例外がスローされる IllegalThreadStateException

解説

• startメソッドによって実行されたメソッドは、runメソッドの実行が完了すると、デッドスレッドとなり、そのスレッドをstartメソッドによって再び起動することはできない。再び起動すると、java.lang.IllegalThreadStateExceptionが送出される。

ジェネリックなComparableインターフェースを実装する型を扱うFooクラスを完成させたい。 空欄①~⑤を埋めよ。(ドラッグ&ドロップ問題)

class Foo<                     > {

element = null;

public void add( e){ element = e; // some more code }}

 ①   ②   ③  ④ 

 ⑤ 

選択肢

? E <?> <E> extends implements super Comparable Comparable<E> Comparable<?>

ジェネリックなComparableインターフェースを実装する型を扱うFooクラスを完成させたい。 空欄①~⑤を埋めよ。(ドラッグ&ドロップ問題)

class Foo<                     > {

element = null;

public void add( e){ element = e; // some more code }}

 E   extends   Comparable<E> 

 E 

 E 

選択肢

? E <?> <E> extends implements super Comparable Comparable<E> Comparable<?>

全てミス無く埋めることができて一問分の正解

感想• スレッド、ファイル操作、ポリモーフィズムのきちんとした知識があまりない状態から勉強したため、知識を詰め込むのが結構しんどかった。(2年前当時)

• OCJ-Pは引っかけ問題が多く、2択まで絞り込んでもそれから1択に絞るのが難しく感じた。

• 重箱の隅をつつくような問題が多く、そういった問題の知識を増やすよりはコードを実際に書く方が実務に活きると思った。 個人的な意見としては、新人にはオススメできない。数年Javaを書いた人が、総復習がてらに受験するのは良いと思う。 あとは転職のため?

学んだこと

• スレッドの状態遷移、制御、同期化のお作法を理解できたこと(個人的にはこれが一番業務に繋がった)

• ジェネリクス、ポリモーフィズムを理解することで柔軟なクラス設計ができるようになったこと

• 面倒くさいファイル操作周りの知識をつけられたこと(JDK1.7 New I/O 2のおかげで使用頻度減って悲しい)

受験して良かった/悪かった点• 良かった点

• Javaを体系的に勉強することで偏りなく基礎知識が身についたこと

• 最低限これだけのスキルを持っていると表明できる形を残せたこと

• 悪かった点

• 資格のための勉強をしてしまいがちで、業務に活かしにくいこと

• 読めるようにはなるが、スラスラ書けるようにはならないこと