2016年3月9日 星期三

關於資源回收題目

Which statement is true?

A. Programs will not run out of memory.
B. Objects that will never again be used are eligible for garbage collection.
C. Objects that are referred to by other objects will never be garbage collected.
D. Objects that can be reached from a live thread will never be garbage collected.

A 是錯的,GC不能保證可以釋放出足夠的記憶體。
B 是錯的,陷阱答案,"never again be used"=>不再使用的物件並不代表不被參考到的物件
(有一說法是可能會在finalize()中重新被參考到,但我認為Finalize()被呼叫也就代表GC已經被啟動了,個人看法。)
C 是錯的,考孤島型的參照一樣會被回收。
D 是對的

2016年1月14日 星期四

常見的執行緒池--Executors.newCachedThreadPool()

Executors.newCachedThreadPool()

    建立一個執行緒池,當有需求時(也就是有實現runnable 介面的物件需要執行時),會建立新的執行緒(建立Thread 物件),但若舊有的執行緒是空閒的(有Thread物件沒有在執行runnable 物件),就使用舊有的執行緒。這種執行緒池通常可以改善生命週期短的非同步任務的效能

    由於執行緒若空閒時間達到60秒,便會被回收掉。所以執行緒池可以長時間存在而不消耗資源,畢竟可能根本沒有執行緒在執行。

2015年12月23日 星期三

JAVA SE 認證 1Z0-808 考試心得分享


JAVA SE 認證 1Z0-808 考試心得分享:

本文章同時發表於 : 維克的煩惱

最近跑去考JAVA SE8的認證考了--- 1Z0-808 - Java SE 8 Programmer I

考試前有上網找了一些資訊,不過大部分都是SE6或SE7的

好像沒找到SE8的

再加上第一次考認證考,所以就來寫寫考試的心得吧!

據說SE6考古題400多題 ,命中率可以高達100%

我猜大家最關心的也是SE8認證考 1Z0-808 的考古題命中率吧

我就不賣關子直接說 命中率是...0%

沒瞎說

我的考古題來源是 kaplan

這網站是從oracle 的網站連結找的

(如果要從google 搜尋,用kaplan self test 關鍵字會比較好找到)

kaplan 有180題考古題

再加上猛虎出閘的803考古題126題

雖然不是1Z0-808不過我想考試範圍一樣 應該差不多的說

反正不管怎麼說 就是都都沒考..

雖然都沒考,不過真的不建議沒作考古題就直接上場

畢竟考古題還是可以釐清一些觀念的

我就覺得kaplan的幫助就不少,雖然也不便宜,花了我2000多台幣

考場方面我是在新竹巨匠考的

不能自己帶紙筆 字典

提供的紙有點像護貝的A4紙,大概是要重複使用吧

筆是簽字筆之類的(其實我不太會分),正常書寫速度會寫不出來,會斷水,要寫慢點才OK

我覺得我應該要試寫一下的..殘念

門不知道為啥 後半段的時候一直有震動的撞擊聲

考場是小房間,前面桌子3面靠牆

坐在桌前轉身就手就可以碰到後面的門

電腦還OK,據說在某些考場會遇到電腦當機的悲情事件

2個小時半的考試 我寫完大概只剩10幾分鐘了

畢竟沒考過的題目要仔細看,怕有陷阱唄

考完會有說明30分鐘就會寄mail知道成績

不過我是在2天後才收到mail的,大概mail通知也是周休2日吧..

不過成績其實可以上網查,這題外話不多說

心得分享到此為止

最後是...

我考過啦!!! 哈哈

雖然只是JAVA基礎

但考過還是爽的

向809邁進!!

2015年12月3日 星期四

switch 比對支援的型別

switch 比對支援的型別: chart , byte, short, int,
JAVA 5後開始支援: Character, Byte, Short, Integer,
JAVA 7後開始支援: String
還有 enum (列舉其實會被轉換成為int來比較)

Java 會自動import 的package

1. 沒有名字的套件(package with no name)
2.  java.lang
3. 目前所在套件(current package)

抽象類別注意事項:

1.  抽象類別可以實現(implements)介面
2.  抽象類別不能使用 new 建立物件實體(匿名類別不在此列)
3.  抽象類別可以繼承具體類別
4.  抽象類別可以繼承抽象類別
5.  抽象類別內可以沒有抽象方法
6.  子類別在使用父類別抽象方法時一定要覆寫(override)才能使用並實作
7.  抽象方法不可以有{}
8.  抽象方法一定要有abstract關鍵字
9.  抽象方法存取權限不能是private
10.沒有抽象屬性
11.沒有抽象建構子
12.抽象方法不能是static

有個陷阱是
在抽象類別中定義非抽象方法,卻又沒有{},這是不合法的。

2015年11月29日 星期日

字串比較 == 與 equals

在JAVA的字串比較中:
 ==      用來比對是否兩個字串指向同一個物件
equals 用來比對字串內容是否相同

String s1 = "JAVA";
String s2 = "JAVA";
String s3 = new String("JAVA");
String s4 = new String("JAVA");

其中:

s1 == s2  //true 由於物件池的存在 s1與s2的宣告方式 其實會指向同一個字串物件
s1.equals(s2) //true 內容相同
s3 == s1 //false 不同物件
s3.equals(s1) //true 內容相同
s3 == s4 //false 不同物件
s3.equals(s4) //true 內容相同


何謂字串池?

在Java1.4之後,為了提升字串的使用與效能,特別為字串在記憶體中(的Heap區 )建立了一個虛擬的物件池來存放字串。凡是直接指定字串的宣告,如s1與s2,其字串物件都會被放進字串池中。
字串池有個特點就是,相同的字串內容不會被重複建立字串物件,所以上面的s1與s2會是相同的物件,而s3與s4由於並沒有被存放在物件池中,所以實際上是兩個不同的物件。


注意:

由StringBuilder建立的物件是StringBuilder物件不是字串物件,所以不應該直接用equals與字串做比較,一般是使用toString()方法後再與字串比較。

StringBuilder s1 = new StringBuilder("Test");
String s2 = "Test";

其中:

s1 .toString().equals(s2); //true 內容相同