Java 軟件高級工程師筆試題正則表達式
【智力部分】(30分)算法
1. 燒一根不均勻的繩要用一個小時,如何用它來判斷半個小時?(5分)sql
兩頭同時燒編程
2. 4,4,10,10,加減乘除,怎麼出24點?四個數字分別只能用一次(5分)設計模式
(10*10-4)/4緩存
3. 若是你有無窮多的水,一個容積爲3L的和5L的提桶,你如何準確稱出 4L的水?(5分)安全
第一步:向5L的通中放兩次3L水,這時3L水桶剩1L水。服務器
第二步:將3L水桶中的1L水倒入5L的水桶中,這時5L的水桶中有1L水。session
第三步:再用3L水桶盛滿水所有倒入5L的水桶,4L水就稱出來了。數據結構
4. 一隻蝸牛從井底爬到井口,天天白天蝸牛要睡覺,晚上纔出來活動,一個晚上蝸牛能夠向上爬3尺,可是白天睡覺的時候會往下滑2尺,井深10尺,問蝸牛幾天能夠爬出來?(5分)
8天。
前七天是(3-1)*7 =7
第八天晚上又爬了3尺,這時已經到井口了。在井口睡覺想滑也滑不下去了。
5. 有一種細菌,通過一分鐘分裂爲2個,再過一分鐘,分裂爲4個,這樣,將一個細菌放在一個瓶子裏面,一個小時後瓶子被細菌充滿了。如今假設一開始放入瓶中的爲兩個細菌,那麼到充滿瓶子要多長的時間?(10分)
59分鐘。
一個放了一個細菌的瓶子通過一分鐘分裂,就有兩個細菌了。第二個瓶子直接就有了兩個細菌,也就至關於調過了第一個瓶子在第一分鐘的狀況了。之後的狀況就徹底一致了,因此是59分鐘。
【專業部分】(70分)
1. 簡述一下面向對象的特徵,並舉例說明你對面向對象的理解?(5分)
面向對象是基於萬物皆對象這個哲學觀點,把一個帝鄉抽象成類,具體就是你吧一個對象的靜態特徵和動態特徵抽象成屬性和方法,也就是把一類事務的算法和數據結構封裝在一個類之中,程序就是多個對象和互相間的通訊組成的。
面向對象具備封裝性,繼承性,多態性。封裝隱蔽了對象內部不須要暴漏的細節,似的內部細節的變更跟外界脫離,只依靠接口進行通訊。封裝性下降了編程的複雜性。經過繼承,使得新建一個類變得容易,一個類從派生類哪裏得到其非私有的方法和公用屬性的繁瑣工做交給了編譯器。而繼承和實現接口和運行時的類型標定機制所產生的多態,使得不一樣的類所產生的對象可以對相同的消息作出不一樣的反映,記得提升了代碼的通用性。
總之,面向對象的特性提升了大型程序的重用性和可維護性。
2. ArrayList和HsahSet的區別,HashMap和Hashtable的區別?(5分)
ArrayList和HashSet的區別:
ArrayList是一組有序的集合,存放的是對象的引用,而不是對象自己。存放的對象是能夠重複的。
HashSet存放的對象是不可重複的。
HashMap和Hashtable的區別:
3. 線程同步的關鍵字是什麼?sleep() 和 wait() 有什麼區別?怎麼喚醒wait()中止的線程?(5分)
線程同步的關鍵字:synchronized
Sleep()和Wait()的區別:
Sleep不讓出系統資源;wait是進入線程等待池等待,讓出系統資源,其餘線程能夠佔用cpu,且須要notify,notifyAlll來喚醒等待池中的線程。
4. 列舉你在項目中經常使用的設計模式(僞代碼或類圖),並說明每種設計模式的具體應用場景。(5分)
單例模式
Public class Singleton{
private static volatile Singleton singleton = null;
private Singleton(){}
public static Singleton getSingleton(){
if(singleton == null){
synchronized(Singleton.class){
if(singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
多線程中屢次獲取某個對象的實例,而沒必要每次都去new。
4. Spring中事務管理支持哪幾種方式以及每種方式的具體使用方法。(5分)
實現方式兩種:
編碼方式;
聲明式事務管理方式。
聲明式事務管理是經過AOP技術實現的,實質就是:在方法執行先後進行攔截,而後在目標方法開始以前建立並加入事務,執行完成目標方法後根據執行狀況提交後回滾事務。
聲明式事務管理有兩種方式:基於XML配置文件(攔截器 AOP),經過標籤@Transaction註解
另外一種答案:
1.每一個bead都有一個事務代理
一級緩存:session級別的緩存,session關閉後,緩存就沒有了
二級緩存:sessionFactory級別的緩存,它緩存的是對象
查詢緩存:查詢緩存也是sessionFactory級別的緩存,它緩存的是sql語句
通常二級緩存要和查詢緩存配合使用,避免N+1的問題。更建議使用mamcatched單獨作緩存。
5. 至少寫出一種11位手機號碼的正則表達式。(5分)
^[1][358][0-9]{9}$
6. 用簡短的代碼實現字符串「s tr in g」到「s tr in g」轉換。即將多個空格轉換爲一個空格(5分)
String s = 「s tr in g」;
S=s.replaceAll(「 +」,」 」);
7. 使用Socket編寫一個程序,客戶端向服務器端發送請求(發送字符串便可),服務端接收後發送反饋信息.(10分)
TCP協議
網上例子不少 本身找。代碼過長
8. 用SQL語句實現Oracle分頁查詢。(10分)
Select * from (select ROWNUM rn,t.* from tableName T where t.rn <=40) TT where tt.rn >=10
Select * from tableName where userID limit 0,20;
select a.x from aa a where not exists (select 1 from bb b where a.x = b.x)