Buy Reviews
Powered by MaxBlogPress  

Archive for the ‘java’ Category

Java SCJP 多型與轉型

星期五, 三月 5th, 2010

有下列程式:

class ClassA{}
class ClassB extends ClassA{}
class ClassC extends ClassA{}
public class Test{
public static void main(String[] args){
ClassA p0 = new ClassA();
ClassB p1 = new ClassB();
ClassC p2 = new ClassC();
ClassA p3 = new ClassB();
ClassA p4 = new ClassC();
}
}

下列程式何者正確?(請勾選出三項)
( )A. p0 = p1;
( )B. p1 = p2;
( )C. p2 = p4;
( )D. p2 = (ClassC)p1;
( )E. p1 = (ClassB)p3;
( )F. p2 = (ClassC)p4;

答案:A、E、F

起初做這題的時候,竟然把它看成是比較了,所以很簡單的題目,我就錯了!

Dynamo 2.0 – Apache Cassandra

星期二, 三月 2nd, 2010

ㄚ琪最近讀Slashdot這一篇How Twitter Is Moving To the Cassandra Database,我特地查一下華文的新聞也看到有關碎碎念Twitter,這一則來自部落格MyNoSQL新的消息:Twitter用戶暴增20倍 計劃棄用MySQL,原來Twitter是用MySQL資料庫的,感覺就很親切,不過現在聽說要改用Cassandra資料庫,這個資料庫就真的很陌生了,進去Cassandra的網頁看看,它的slogan這樣寫:『A highly scalable, eventually consistent, distributed, structured key-value store. 』,這是一個高延展性的第二代分散式資料庫,Wiki上查到的應該是第一代的吧!至於第二代的分散式資料庫我就沒有sense了。Cassandra網站上說明它的由來,Dynamo的完整分散式設計跟Bigtable的欄位家族基礎的資料模式。

Dynamo跟Facebook又很有淵源,因為Cassandra是2008年由Facebook開放原始碼來的,它是由Avinash Lakshman跟Prashant Malik設計的,而Avinash Lakshman就是Amazon’s Dynamo的作者之一,在很多方面我們可以把Cassandra看成是Dynamo 2.0。

Bigtable就較熟悉了,之前的Google 應用服務引擎的筆記有提到這個資料庫的使用,因為太習慣用MySQL了,所以在用Bigtbale時可能就會稍微有點不習慣,不過這個問題應該很容易可以解決!

在MyNoSQL與Ryan King的對話中,有一些很有趣的地方,一個就是Ryan King曾經評估過的方案有哪些?『Various databases: HBase, Voldemort, MongoDB, MemcacheDB, Redis, Cassandra, HyperTable and probably some others I’m forgetting.』,裡面未曾提過我們所熟知的Oracle、MSSQL、DB2之類的,就覺得他的思維很奇特!

另外一個就是『How do you plan to migrate existing data?』,你如何計畫合併現有的資料,這可是很大的問題喔,就像ㄚ琪以前要把nuke的資料轉到drupal中,又或是在公司要作不同資料庫的資料轉移,這真的是很大的工程。

Ryan King提出的作法:

Write code that can write to Cassandra in parallel to Mysql, but keep it disabled by the tool I mentioned above

Slowly turn up the writes to Cassandra (we can do this by user groups “turn this feature on for employees only” or by percentages “turn this feature on for 1.2% of users”)

Find a bug :)

Turn the feature off

Fix the bug and deploy

GOTO #2

然後:

  1. Take a backup from the mysql databases
  2. Run an importer that imports the data to cassandraSome side notes here about importing. We were originally trying to use the BinaryMemtable[2] interface, but we actually found it to be too fast — it would saturate the backplane of our network. We’ve switched back to using the Thrift interface for bulk loading (and we still have to throttle it). The whole process takes about a week now. With infinite network bandwidth we could do it in about 7 hours on our current cluster.
  3. Once the data is imported we start turning on real read traffic to Cassandra (in parallel to the mysql traffic), again by user groups and percentages.
  4. Once we’re satisfied with the new system (we’re using the real production traffic with instrumentation in our application to QA the new datastore) we can start turning down traffic to the mysql databases.

只是聽聽人家在說Cassandra有多好,那沒什麼用,到不如實作一次看看,up and running with cassandra有提到怎麼安裝,我也來試試看!

用安裝CassandraCassandram 需有Java 6的環境才能跑!現在可以下載的版本是0.5.1
操作可以參考Cassandra Installation and Configuration這一篇,不過在Windows下跑有些另外要注意的是cassandra.bat這個檔,還有設定CASSANDRA_HOME的環境變數為D:\cassandra,cassandra.bat這個檔裡有

subst P: 『%CASSANDRA_HOME%\lib』
P:
set CLASSPATH=P:\

for %%i in (*.jar) do call :append %%i
goto okClasspath

:append
set CLASSPATH=%CLASSPATH%;P:\%*

SUBSET是建立路徑與磁碟機代號之間的關連。

所以要注意P槽是否正在使用中,如果使用中,就改成別的吧!還有-Dcom.sun.management.jmxremote.port=8080^這一行看來會使用8080 port,所以你有在用這個服務,需要把這服務關掉,或將這個port號改掉,不過我沒這樣試!

執行情形像這樣:
2010-03-02_175714

先擺著明天再繼續來玩玩看!

Java – StringBuffer、StringBuilder類別

星期五, 二月 26th, 2010

有下列程式:

public class String {
public String toString(){
StringBuffer buffer=new StringBuffer();
buffer.append(‘<’);
buffer.append(this.name);
buffer.append(‘>’);
return buffer.toString();
}

}

下列敘述何者為真?(請勾選出一項)
( )A. 這段程式不是thread-safe
( )B. 程式人員可以將StringBuffer 改為StringBuilder,而不會改變程式的執行
( )C. 要讓程式更有效率的話,這段程式應改為:rewritten: return』<』+ this.name+』>』;
( )D. 程式若改用 StringBuilder,也不會加強執行效率。

答案是A?,超奇怪的!

因為課本Java物件導向程式設計與SCJP認證明解在運用String、Date及包裝類別的StringBuffer、StringBuilder類別這節裡,提到「StringBuffer提供的方法都是執行緒安全(Thread-safe)的」,那A怎會是對的?我倒覺得檔案B較對!

java null

星期四, 二月 11th, 2010

在Java裡面對於變數未宣告或是在敘述中有發生null的情形,讓我在SCJP中常發生混淆的錯誤!

這一次在SCJP總複習擬真試題解答的23題這裡,看到了解釋要查Java物件導向程式設計與SCJP認證明解的4-8節,奇怪這有關係嗎?會不會是從22題那邊的解釋複製貼上來的!很懷疑是這樣!

2010-02-11_133842

結果我就稍微翻了一下課本,我發現應該跟3-3節較有關係,不過這是在解釋變數沒有給值時,不會馬上就有錯誤,而是在不當使用時,才發生編譯時期的錯誤!

但是此題,我撰寫了一下程式碼,編譯後是這樣:

Exception in thread 『main』 java.lang.NullPointerException
at Test.test(Test.java:4)
at Test.main(Test.java:16)

是執行期的例外,這又跟12章比較類似,不過我找不到有類似的舉例,所以只好自己小心這個錯誤了!

Java – 常見的例外狀況

星期二, 二月 9th, 2010

Java物件導向程式設計與SCJP認證明解

這一本書是這陣子在看的,作者很貼心的準備了SCJP總複習擬真試題給我們免費下載,真好!

我看到12-3-2 常見的例外狀況,有關於編譯器不會檢核的RuntimeException的子孫類別有:

NullPointerException
IllegalArgumentException
NumberFormatException
ClassCastException
ArrayIndexOutOfBound:使用索引值存取陣列元素時,索引值超出陣列範圍。
NegativeArraySizeException
ClassCastException
SecurityException
ArithmeticException

應檢核例外:

java.text.ParseException
java.io.FileNotFoundException
java.io.IOException
java.sql.SQLException
java.lang.InterruptedException:使用索引值存取陣列元素時,索引值超出陣列範圍。
java.lang.ClassNotFoundException

有沒有看到ArrayIndexOutOfBound跟java.lang.InterruptedException這兩個解釋一模一樣?怎會這樣?對初學者來說不知道能不能分辨出來,還好ㄚ琪看了很多本SCJP了,所以一會兒就看到這個錯誤了,可能是作者那時在顧小孩的時候,貼錯了吧!

java.lang.InterruptedException主要是執行緒非執行中而嘗試中斷所引發的例外處理,在執行緒那章會常常看到,原文手冊是這樣寫:

『Thrown when a thread is waiting, sleeping, or otherwise occupied, and the thread is interrupted, either before or during the activity. Occasionally a method may wish to test whether the current thread has been interrupted, and if so, to immediately throw this exception. The following code can be used to achieve this effect:

  if (Thread.interrupted())  // Clears interrupted status!
      throw new InterruptedException();

希望大家可以注意到,不會搞錯!

深入淺出物件導向分析與設計

星期二, 二月 2nd, 2010

Head First Object-Oriented Analysis and Design

這一本深入淺出物件導向分析設計(中文版)是最近在看的書,真的非常深入淺出,我一個下午就看了快400頁,當然像當故事這樣看很快,有時候才會對內容注意一下:

2010-02-02_112213

因為最近在準備SCJP所以對Attribute(屬性)跟Operation(操作)就比較注意,看了這個連連看得答案就覺有問題,我倒是認為Attribute應該是連Equivalent to a member variable in a class(等同於類別裡的成員變數),Operation是連This is the UML term that usually represents a method in one of your classes.(這是UML的術語,通常代表類別裡的方法)。

各位覺得如何?

免費的Java編譯器、組譯器跟Java Development Kits (JDK)

星期三, 一月 27th, 2010

ㄚ琪在2007年寫這一篇java 編譯 .exe 執行檔,現在都已經2010年了,都已經忘了翻譯說,今天有空就來翻譯一下吧,如果有資訊過時不合宜的也會一併更新。

這一頁將列出免費的Java編譯器、Java組譯器、Java builders、Java開發工具包(JDK)以及Java到原生碼編譯器,這可以讓你用來建立Java應用程式、Java Beans、Java Applets等等,有一些是完整的Java開發環境,而其他的紙包括編譯器及除錯器,其他在站上的網頁你可能會有興趣,列於下:

要找一本Java的書嗎?最推薦的一本是Java in a Nutshell(中譯本:Java 技術手冊),我自己使用第一本來學Java並且發現它很有用,最新的版本支援較新版的JDK而且增加的解釋讓不是C語言的程式設計師更容易來瞭解這本書(前面兩版的目標對象是C語言程式設計師)。

因為這個語言最新版的過大,Java的基礎類別(在寫Java applets時候需要用到)被分開放在Java Foundation Classes in a Nutshell這本書裡,假如你要透過研讀範例來學好它,作者也有這一本Java Examples in a Nutshell,假如你用現有的範例作為樣板你舊可以快速地取得你的程式。

相關網頁

免責聲明

這一頁所提供的資訊沒有任何保證,需要您自擔風險來使用,只因為這裡所列的程式、書籍、文件或服務或好的評論並不意味我會背書或保證程式或內容的任何一部份,所有其他標準的聲明也適用。

免費的Java編譯器、Java到原生碼編譯器、Java開發工具包(JDK)

Sun Microsystems’ Java Development Kit (JDK) (Java SE)
你可以從Java的創作者那邊取得很多平台免費的Java開發工具包(Windows, Linux, Solaris SPARC, Solaris x86),這個工具包包括Java編譯器、Java除錯器以及用來產生Java位元碼的Java類別函式庫,我發現這個編譯器相當慢。

GNU Compiler for the Java Programming Language (GCJ)
這個Java編譯器是由Sun獨立發展出來的,它能夠產生Java位元碼跟原生機器碼,以及轉換Java位元碼成原生機器碼(所以理論上你甚至可以使用這個編譯器來轉換另一個編譯器編譯的Java程式變成原生二進位/執行檔)。你編譯的應用程式也可以是編譯過的原生碼跟Java二元碼的混合體,他有自己的類別函式庫跟垃圾收集,這個編譯器比Sun還好是因為它產生原生機器碼的能力跟廣泛跨平台的功能,支援的平台包括Windows、Linux、AIX、DOS、Renesas、HP-UX、SCO OpenServer/Unixware、Solaris、SGI、IRIX、Digital Unix、OS/2等等(有太多可以列的)。

Jikes Java Compiler
Jikes 是一個比很多其它的編譯器還快的Java編譯器,它也能計算程式間的相關須求跟產生makefiles,假如你想要快速的開發週期,你可能也會想要有執行增量編譯的能力,支援的平台有:Windows 95/NT、AIX、OS/2、Linux、Solaris Sparc,這個編譯器完全根據Java規格來處理建構,原始碼可以開放原始碼授權來取得(IBM Public License)。 註:自2005年後就沒有更新!

Toba (Java to C Compiler)
Toba 翻譯Java應用程式成C的原始碼檔案,然後你可以編譯成原生執行檔(二進位檔),這個程式以原始碼格式來散佈,並且在Linux、Irix 6.2跟Solaris 2.5上測試過,注意這個編譯器已經不再維護,並且只使用舊的JDK 1.1。

免費的Java組譯器

Java Bytecode Assembler
這是一個組譯器可以轉換Java的組合語言成為合法的Java類別檔,輸入的語言跟Sun的javap工具類似。註:這個版本最新的資料日期在2002年,且只有在SunOS 5.4上測試過!

Jasmin
根據它的網站,Jasmin 『拿Java類別的ASCII敘述,用Java虛擬機器指令集寫成一個簡單的像組合語言的語法』然後產生一個Java的類別檔。 註:最新的日期2008年。

讀Java物件導向程式設計與SCJP認證明解

星期一, 一月 25th, 2010

這一本Java物件導向程式設計與SCJP認證明解是ㄚ琪這一周開始要看的!希望今年能邁向SCJP!

免費下載SOAP与Java编程指南

星期二, 十二月 22nd, 2009

這是在CSDN找到的,看簡體文習慣的話可以下載看看!

SOAP与Java编程指南.pdf

About an instance of the Vector class and add an element

星期二, 十二月 15th, 2009

2009-12-15_172535

不知是我英文不好不懂題意,還是這個題目出的有問題,讓我看了答案有點疑問?

答案是這樣:

4) Vector v=new Vector(100);
v.addElement(『99″)

A vector can only store objects not primitives. The parameter 『99″ for the addElement method pases a string object to the Vector. Option 1) creates a vector OK but then uses array syntax to attempt to assign a primitive. Option 2 also creates a vector then uses correct Vector syntax but falls over when the parameter is a primitive instead of an object.

為什麼我用eclipse 3.5.1+java 1.6來編譯,2,3,4都可以執行,感覺add是指增加一個元素,而addElement可以增加較多個,但在此例是一樣的,另外解答說不可以使用primitive型別,可是卻又可以使用,但查考手冊沒有特別提到不可以,所以這個說明就有點奇怪了,看倌是否有更好說明可以幫我瞭解的!