搜狗2013校園招聘java筆試題分析(個人的一點分析拙見,不到之處請不吝賜教)

不知道 自己理解 有哪些 不到之處,還望高手們, 不吝指教,一點點貼出我的分析 過程,錯誤之處還請批評指教。

 

13.下面關於字符串的描述,正確的是(C

A.通過Strinf s1=new String(“abc”)和String s2=”abc”,額s1==s2爲true

B.”abc”+”def”則會創建三個字符串對象,第三個是”abcdefg”,也就是說,在Java中對字符串 

   的一切操作,都會產生一個新的字符串對象。

C.StringBuffer是線程安全的,它比String快。

D.StringBuider是線程安全的,它比String快。

 

首先,我們排除了A,根據Java的堆棧賦值原理,我們知道。s1在堆中,s2在棧中,是false;

字符串拼接我們經常會使用StringBuider(在單線程裏面),這樣做的原因就是減少了”abc”+“def”浪費空間的緣故,還浪費時間(這一點是在資料上查的,我曾用拼接前後的時間差對比,可是ms級別上得不到結果啊!)。

在《java核心技術基礎卷I的第51頁》我查到,StringBuider是java1.5以後引入的,它的前身就是StringBuffer,StringBuffer的效率略低,但允許採用多線程方式執行添加或刪除字符的操作。而在單線程中,應該使用StringBuider。所以我覺得答案應該是C,不知道對不對。

 

14.以 下操作中,可 能的解決 java內存泄露問題的手段有;  【 多選】 ( )

A.在 程序中調用 system.gcr);

B.關掉不再使用的網絡數據庫連接 ;

C.在程序中調用finalize();

D.清理集合類中的無用對象;

E.在 程序中調用Runtime.getRuntime().runFinalization().

不知道爲啥,這種題對我很抓狂啊....求大俠指點。

 

15.假設如下代碼中,若t1線程在t2線程啓動之前就已經完成啓動,代碼輸出是()。

public static void main(String[] args) throws Exception {

final Object obj = new Object();

Thread t1 = new Thread() {

public void run() {

synchronized (obj) {

try {

obj.wait();

System.out.println("Thread 1 wake up.");

catch (InterruptedException e) {

}

}

}

};

t1.start();

Thread.sleep(1000);

Thread t2 = new Thread() {

public void run() {

synchronized (obj) {

obj.notifyAll();

System.out.println("Thread 2 sent notify.");

}

}

};

t2.start();

}

A.

Thread 1 wake up.

Thread 2 sent notify.

B.

Thread 2 sent notify.

Thread 1 wake up.

C.A、B皆有可能

D.程序無法輸出,卡死。

這是很基礎的一道題,看過java併發編程的一些資料的朋友應該都很清楚這個waitnotify/notifyAll的工作機制,wait要等到有對象發出nitifyALL)通知它時纔會執行,選B

 

16.Math.floor(-8.5)=(B)

A.(float)-8.5  B.(long)-9 C.(long)-8 D.不能確定,與軟硬件相關。

這個不多說了,我的android論壇的java板塊有BOSS的一篇文章,http://www.eyeandroid.com/thread-10639-1-1.html,說的很詳細,選B

17.synchronize關鍵字可以作用在下列哪些選項(多選)(BCD)

A.int值  B.字符串常量  C一個Integer對象 D.ExampIe.Class  E.數組

我們知道,synchronize的主要作用是多線程中,不同線程對一個對象的加鎖訪問機制,就是爲了併發訪問的安全性。而synchronize的用法一般是這樣的吧(不知道我說的全不全):

1.放在方法作用域和返回值類型之間Synchronize,同一時刻只允許一個線程訪問此方法;

Public Synchronize int add();

2.Synchronize(anObject),這樣同一時刻,anObject就只允許一個線程訪問了,當然,這裏面必須是對象,基本類型是不行的。 我特意試了下數組,是不行的,這爲什麼,其實給我的錯覺 E是可以的,           應該是BCD

 Prototype模式和Factory Method模式之間的區別可以理解爲 【多選】 ( BC)
A.Factory Method模 式是利用現有的對象進行克隆。
B.Prototype模 式是利用現有的對象進行克隆。
C.Factory Method模 式是重新創建一個對象。
D.Prototype模 式是重新創建一個對象。

 Prototype模式通過複製原型(Prototype)而獲得新對象創建的功能,這裏Prototype本身就是“對象工廠”(因爲能夠生產對象),實際上Prototype模式和Builder模式、AbstractFactory模式都是通過一個類(對象實例)來專門負責對象的創建工作(工廠對象),它們之間的區別是:Builder模式重在複雜對象的一步步創建(並不直接返回對象),AbstractFactory模式重在產生多個相互依賴類的對象,而Prototype模式重在從自身複製自己創建新類。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章