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

搜狗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執行緒啟動之前就已經完成啟動,程式碼輸出是()。

publicstaticvoid main(String[] args) throws Exception {

final Object obj = new Object();

Thread t1 = new Thread() {

publicvoid 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() {

publicvoid 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模式重在從自身複製自己建立新類。