求職不怕考
pcw-chendx@vip.sina.com
與編程相關的招聘,都會準備很多考題,一不小心考生就在考題上栽了跟頭,特別是沒有多少工作經驗的應屆畢業生,往往回答得過於理論化,很難令考官滿意。為此,我們特意推出本系列,通過對真實考題的分析讓大家在回答考題時有更多的實用性,讓考官滿意,順利找到工作。
資料類型 關乎記憶體佔用
爪哇米工作室 陳躍峰
資料類型是編程的基礎,它會影響程式對記憶體的佔用情況,如果資料類型使用的不好,會增加記憶體佔用,反之可以減少記憶體佔用。所以,在招聘考試中,一定會有與資料類型相關的題目。
招聘題目:編寫一個方法,求byte類型的絕對值。
答案A:
public
byte abs(byte b){
if(b
>= 0){
return
b;
}else{
return
–b;
}
}
答案B:
public
byte abs(byte b){
if(b
>= 0){
return
b;
}else{
return
(byte)–b;
}
}
答案C:
public int abs(byte b){
if(b
>= 0){
return
b;
}else{
return
–b;
}
}
題目答案:答案是C。
為什麼答案是C
答案A有語法錯誤,對於byte類型的參數b來說,運算式-b是int類型,這不符合聲明中傳回值是byte的約定,所以答案A錯了。在Java文法中,對於byte、short、char類型進行算術運算時,運算結果將自動提升為int類型,不要忽視了這點。
答案B有邏輯錯誤,byte類型的數值區間是[-128,127],由於正數和負數儲存格式的不同(原碼和補碼格式儲存),所以在求絕對值時, -128的byte類型數值沒有對應絕對值,所以答案B錯了。
所以,通過這樣一個簡單的題目,考官就可以考察了應聘者對於資料類型運算時的變化的掌握情況,對應聘者基礎知識的紮實程度會有一個直觀的認識。
資料類型在幾乎所有的實際開發中都會用到,不管是開發軟體、還是開發網站程式,用好資料類型,不僅可以使開發人員寫出的代碼比較簡潔,也可以在一定程度上提高程式的執行效率,而代碼的簡潔和執行效率是實際開發過程中最為重要的內容之一
實際應用
資料類型在實際開發中是如何運用的?如何提高執行效率?我們通過一組代碼進行說明。在實際的資料存放區和網路傳輸中,底層的資料處理很多是基於byte數組的,如果需要儲存或傳輸一個int類型的資料,容易想到的方法是利用字串實現來回的轉換。
利用字串轉換雖然比較省事,但是無論是在記憶體使用量還是執行效率上都無法令人滿意,而int類型是由4個byte組成的,利用這個知識可以輕鬆的實現int類型數值和byte數組之間的互轉,提高效率。
代碼1:
將int類型轉換為byte數組:
int n = 12345;
byte[] b = new byte[4];
b[0] = (byte)n;
b[1] = (byte)(n >> 8);
b[2] = (byte)(n >> 16);
b[3] = (byte)(n >> 24);
點評:該代碼結構清晰,執行效率高,在儲存時將int類型的4個位元組按照從低到高的順序依次儲存到byte數組b中,利用移位和byte類型的強制轉換輕鬆實現int類型中4個位元組的分割。
將byte數群組轉換為int類型:
int m = (b[0]
& 0xff) | ((b[1] << 8) & 0xff00) |
((b[2] << 16) & 0xff0000) |((b[3] << 24) &
0xff000000);
點評:該代碼的結構和難度比上面的轉換要大一些,按照上面的儲存順序,b[0]儲存低八位,所以通過和0xff進行位於運算以後只保留低八位,其他的清零,最後通過位或運算子將4個位元組的內容按照位置進行合并。使用這種方式利用底層的位元運算符提高了代碼的執行效率。
代碼2:
//將int轉換為byte數組
int n = 12345;
String s =
String.valueOf(n);
byte[] b =
s.getBytes();
//將byte數群組轉換為int
String s1 = new
String(b1);
int m =
Integer.parseInt(s1);
點評:代碼2雖然在程式碼數上比代碼1少,但是無論是在程式的執行效率還是記憶體使用量上都比代碼1差了很多,每次轉換時都需要產生一個String對象,這樣不但浪費了記憶體,也降低了程式的執行速度。