Java邏輯思維面試
【7】五個大小相同的一元人民幣硬幣。要求兩兩相接觸,應該怎么擺?
【8】猜牌問題
S 先生、P先生、Q先生他們知道桌子的抽屜里有16張撲克牌:紅桃A、Q、4 黑桃J、8、4、2、7、3 草花K、Q、5、4、6 方塊A、5。約翰教授從這16張牌中挑出一張牌來,並把這張牌的點數告訴 P先生,把這張牌的花色告訴Q先生。這時,約翰教授問P先生和Q 先生:你們能從已知的點數或花色中推知這張牌是什么牌嗎? 於是,S先生聽到如下的對話:P先生:我不知道這張牌。
Q先生:我知道你不知道這張牌。
P先生:現在我知道這張牌了。
Q先生:我也知道了。
聽罷以上的對話,S先生想了一想之后,就正確地推出這張牌是什么牌。
請問:這張牌是什么牌?
【9】一個教授邏輯學的教授,有三個學生,而且三個學生均非常聰明!
一天教授給他們出了一個題,教授在每個人腦門上貼了一張紙條並告訴他們,每個人的紙條上都寫了一個正整數,且某兩個數的和等於第三個!(每個人可以看見另兩個數,但看不見自己的)
教授問第一個學生:你能猜出自己的數嗎?回答:不能,問第二個,不能,第三個,不能,再問第一個,不能,第二個,不能,第三個:我猜出來了,是144!教授很滿意的笑了。請問您能猜出另外兩個人的數嗎?
面試題真題
填空題
1.OOP的特征:(封裝、繼承、多態、抽象);
2.Oracle觸發器從執行時間順序上可分為:(before觸發器、after觸發器);從響應范圍上可分為:();
3.Java的訪問控制修飾符包括(default、public、private、protected);
4.數據庫中事務(Transaction)的4個屬性:(原子性、一致性、隔離性、持續性/永久性);
5.Oracle數據庫的備份命令是(exp);數據庫的恢復命令是(imp);
6.使用顯示游標有4個步驟:(聲明游標,打開游標,從游標中獲取結果集 ,關閉游標);聲明游標
判斷題
1.Java類是可以實現多繼承。( 錯 )
2.String類是不可以被繼承的。( 對 )
3.&&是位運算符,表示按位與運算;&是邏輯運算符,表示邏輯與(and)。( 錯 )
4.String是Java的一個基本數據類型。( 錯 )
5.Java中多線程有兩種實現方法,分別是繼承Thread類和實現Runnable接口。( 對 )
6.執行“TRUNCATE TABLE DB_TRAIN;”語句后,必須使用“COMMIT”進行提交。( 對 )
7.Oracle數據庫中實例和數據庫是一一對應的。( 對 )
8.“北京西站”,可以通過like‘%北京_’查詢出來。( 錯 )
9.Oracle數據庫中“SELECT SYSDATE FROM DUAL;”查詢結果返回當前數據庫服務器的時間。( 對 )
10.Insert,delete,update,select是DCL語句。( 錯 )
選擇題
1.下列不是繼承Collection接口的是(C)
A.List B.Set C.Map
2.數組(B)length這個方法?String( A )length這個方法?
A 有 B 無
3.String s=new String(”xyz”);創建了(B)個String Object?
A 1 B 2 C 3 D 4
4.構造器Constructor( B )可被override?(A)可以被Overloading?
A 是 B 否
```
###5.當一個對象被當作參數傳遞到一個方法后,此方法可改變這個對象的屬性,並可返回變化后的結果,那么這里是(A)
```
A 值傳遞 B 引用傳遞
```
###6.在ORACLE中,一個用戶擁有的所有數據庫對象統稱為(B)
```
A: 數據庫 B: 模式 C: 表空間 D: 實例
```
###7.下面哪個語句是錯誤的 ( D )
```
A: create synonym dept_synon for user.db_dept ;
B: create sequence dept_seque increment by 1;
C: alter sequence dept_seque increment by 2;
D: drop dept_synon;
```
###8.下面哪個不是ORACLE數據庫程序設計中的循環語句 ( A)
```
A: for...next B: loop...end loop C: while...end loop D: for...end loop
```
###9.若tnsnames.ora文件中部分配置如下:
```
KMISSVR=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=HELLO)(PORT=1521))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=KMIS)
)
)
則表明:( C )
A: Oracle服務器所在的主機名為DEDICATED
B: Oracle服務器所在的主機名為KMIS
C: 對應數據庫的SID名為KMIS
D: 對應數據庫的SID名為KMISSVR
```
###10.現在要啟動數據庫,那么下面哪一個語句是錯誤的 (A)
```
A: STARTUP NORMAL
B: STARTUP FORCE
C: STARTUP NOMOUNT
D: STARTUP MOUNT
```
###11.在Oracle中,用下面語句定義了一個存儲過程:(B)
```
CREATE PROCEDURE TRAIN_REPAIR(VALUE1 IN VARCHAR2,VALUE2 OUT NUMBER,VALUE3 IN OUT VARCHAR2) AS
BEGIN
....
END;
假定使用的變量都已經定義,下面對過程TRAIN_REPAIR的調用語法正確的是( B )
A: TRAIN_REPAIR(‘YZ’,10,V3)
B: TRAIN_REPAIR(‘YZ’,V2,V3)
C: TRAIN_REPAIR(V1,V2, ‘RZ’)
D: TRAIN_REPAIR(‘YZ’,10,‘RZ’)
```
###12.在Oracle中,select語句中用來連接字符串的符號是( C )
```
A: “+” B: “&” C: “||” D: “|”
```
####解釋
```
1.oracle數據庫中的連接符為||,例如連接字符串AB、CD可以使用“AB”||“CD”;
2、SQL SERVER 數據庫連接符為+,例如連接字符串AB、CD可以使用“AB”+“CD”;
3、MYSQL數據庫中連接符為+,例如連接字符串AB、CD可以使用“AB”+“CD”;
```
###13.在SQLPLUS中,執行外部腳本使用的命令是( B )
```
A: / B: @腳本 C: EXE 腳本 D: 不能在SQLPLUS中直接運行腳本
```
###14.下面說法正確的有 (A )
```
A: 在Oracle中運行“select rtrim(‘abcdef’,‘bc’) from dual;”的結果是:def
B: 在Oracle中運行“select replace(‘a&a&b’, ‘&’,‘-’) from dual;”的結果是:a-a-b
C: 在Oracle中運行“select instr(‘abcdef’,‘e’) from dual;”的結果是:4
D: 在Oracle中運行“select nvl( null , 3 ) from dual;”的結果是:3
```
###15.假設TRAINSTATUS中有10行數據,如果想查出此表中第5行數據,可以使用下列選項哪個查詢語句( B )
```
A: SELECT * FROM TRAINSTATUS WHERE ROWID=5 ;
B: SELECT * FROM TRAINSTATUS WHERE ROWNUM=5 ;
C: SELECT * FROM TRAINSTATUS WHERE ROW=5 ;
D: SELECT * FROM TRAINSTATUS WHERE ROWNO=5 ;
```
##簡答題
###1.OOP的3個基本特征是什么,並簡述其中的一個特征。
```
拓展:OOP:Object Oriented Programming 面向對象的程序設計
OOD:Object - Oriented Design,面向對象設計
Object-Oriented Analysis:面向對象分析方法
基本特征是:繼承、多態、封裝
米一個的特征具體解釋:
封裝 :就是將一個類的使用和實現分開,只保留部分接口和方法與外部聯系
繼承:子類自動繼承其父級類中的屬性和方法,並可以添加新的屬性和方法或者對部分屬性和方法進行重寫。繼承增加了代碼的可重用性。
多態:多個子類中雖然都具有同一個方法,但是這些子類實例化的對象調用這些相同的方法后卻可以獲得完全不同的結果,多態性增強了軟件的靈活性。
```
###2.簡述String、StringBuffer、StringBuilder的區別。
```
String是個不可變長度的字符串,而StringBuffer是個可變長度的字符串;
在對String類進行操作的時候(例如增加字符),實際上是在內存中產生了一個新的String對象;而StringBuffer是給原對象增加字符,不是新創建一個對象
StringBuilder是線程非安全的,StringBuffer是線程安全的,二者的方法都是一樣的
```
###3.簡述&和&&的區別。
```
&和&& 都可以作為邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都為true時,整個運算結果才為true,否則,只要有一個為false,則結果為false。
&& 還具有短路的功能,即如果第一個表達式為false則不再計算第二個表達式。
&還有可以用作位運算符,當&操作符兩邊的表達式不是boolean類型時,&表示按位與操作
```
###4.簡述HashMap和Hashtable的區別。
```
他們都是Map接口的具體實現,HashMap是Hashtable的輕量級實現(非線程安全的具體實現),主要的區別在於HashMap允許空(null)鍵值(key),由於非線程安全,在只有一個線程訪問的情況下,效率高於Hashtable
HashMap允許將null一個entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉,改成containsvalue和containskey。
Hashtable繼承自Directory類,而HashMap是Java1.2引進的Map interface 的一個實現
Hashtable是synchronize的而HashMap不是,在多個線程訪問Hashtable時,不需要自己為他的方法實現通過不,而HashM啊就必須為之提供外同步
```
###5.Java實現多態的機制是什么?
```
靠的是父類或接口定義的引用變量可以執行子類或具體實現類的實例對象,二程序調用的方法在運行期才動態綁定,就是應用變量所指向的具體實例對象方法,也就是內存李政宰運行的那個對象的方法,而不是引用變量的類型中定義的方法。
```
###6.==與equals()的區別。
```
== 操符專門用來比較兩個變量的值是否相等,也就是用於比較變量所對應的內存中所存儲的數值是否相同,要比較兩個基本類型的數據或兩個引用變量是否相等,只能用 == 操作符
如果一個變量所指向的數據是對象類型額,那么這時候設計了兩塊內存,對象本身占用一塊內存(堆內存),變量也占用一塊內存,例如Object obj = new Object(); 變量obj是一個內存 new Object() 是另外一塊內存,此時,變量obj鎖碎影的內存中存儲的數值就是對象占用的那塊內存的首地址。
equals方法是用於比較兩個獨立對象的內容是否相同,
簡單的說就是 == 這個用於比較兩個對象的地址是否相同,記住,通過new 出來的對象一定是不同的,equals用於比較對象的內容是否相同
```
###7.Try{}里有一個return語句,那么緊跟在這個try后面的finally{}里的code會不會執行,什么時候執行,在return之前還是之后?
```
會執行,finally語句總會執行的除非遇到一些特殊情況如Systemexit(0)
return語句並不一定就結束一段程序,當它和finally一起使用但是finally語句中無return時會先等finally語句執行完成后再返回值,
當finally語句中有return語句時會直接返回finally中return的語句。
```
###8.Int和Integer各是什么數據類型,這2種數據類型存儲的內容各是什么?(6分)
###9.final和finally,finalize的區別(6分)
```
final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
內部類要訪問局部變量,局部變量必須定義成final類型
finally 是一場處理語句結構的一部分,表示總是執行。
finalize 是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收。
```
###10.abstract class和interface的區別(6分)
```
含有abstract修飾符的class即為抽象類,abstract類不能創建的實例對象,含有abstract方法的類必須定義為abstract class,abstract class 類中的法國法不必是抽象的,abstract class 類中定義抽象方法必須在具體子類中實現,所以不能有抽象構造方法或靜態方法。如果子類沒有實現父類中的所有抽象方法,呢么子類必須定義為抽象類型
接口interface可以說是抽象類的一種特殊實例,解耦中的所有方法都必須是抽象的。接口中的方法定義默認為public abstract類型,接口中的成員變量類型默認是public static final
下面比較一下兩者的區別:
1.抽象類可以有構造方法,接口中不能有構造方法
2.抽象類中可以有普通成員變量,接口中沒有普通成員變量
3.抽象類中可以包含非抽象的普通方法,接口中的所有方法必須是抽象的不能有非抽象的普通方法
4.抽象類中的抽象方法訪問的類型可以是public protected 和默認類型
```
###11.UML里包含哪些圖,請繪制簡單工廠模式的類圖?(10分)
```
用例圖、靜態圖、(包括類圖、對象圖、包圖),行為圖、交互圖(順序圖、合作圖),實現圖
```
###12.說出數據連接池的工作機制是什么?
```
數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重復使用一個現有的數據庫連接,而再不是重新建立一個;釋放空閑時間超過最大空閑時間的數據庫連接來避免因為沒有釋放數據庫連接而引起的數據庫連接遺漏。這項技術能明顯提高對數據庫操作的性能。
具體工作機制如下:
數據庫連接池在初始化時將創建一定數量的數據庫連接放到連接池中,這些數據庫連接的數量是由最小數據庫連接數來設定的。無論這些數據庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數量。連接池的最大數據庫連接數量限定了這個連接池能占有的最大連接數,當應用程序向連接池請求的連接數超過最大連接數量時,這些請求將被加入到等待隊列中。
數據庫連接池的最小連接數和最大連接數的設置要考慮到下列幾個因素:
1) 最小連接數是連接池一直保持的數據庫連接,所以如果應用程序對數據庫連接的使用量不大,將會有大量的數據庫連接資源被浪費;
2) 最大連接數是連接池能申請的最大連接數,如果數據庫連接請求超過此數,后面的數據庫連接請求將被加入到等待隊列中,這會影響之后的數據庫操作。
3) 如果最小連接數與最大連接數相差太大,那么最先的連接請求將會獲利,之后超過最小連接數量的連接請求等價於建立一個新的數據庫連接。不過,這些大於最小連接數的數據庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重復使用或是空閑超時后被釋放。
```
###13.例舉5種j2ee常用的設計模式。
```
適配器模式
工廠模式
建造者模式
單例模式
策略模式
```
###14.Oracle中,請寫出兩種方式把數值類型COLUMN列的空值(NULL)輸出為0。
```
nvl函數
select nvl(null,0) from dual;
還有一個decode函數
如果所在列是空,就用0代替,如果不是null就是相應的字段信息
select decode(cloum_name,null,0,cloum_name) from dual;
還可以用‘_’來代替空
select decode(cloum_name,null,'_',cloum_name) from dual;
```
數據庫題
表1:TRAININFO(TRAINID,TRAINKIND,TRAINTYPE)
111111 YZ 25T
222222 YZ 25T
333333 YW 25T
444444 YW 25T
555555 RW 25T
表2:TRAINREPAIR(TRAINID,REPAIRDATE,REPAIRSTATION)
111111 2010-10-31 唐山廠
222222 2011-11-30 四方廠
333333 2012-12-31 廠客廠
444444 2013-12-31 西安廠
555555 2014-5-31 鋪鎮廠
其中表1和表2的唯一主鍵都是TRAINID,並且可以利用TRAINID列建立兩張表數據的一一對應關系,要求使用SQL語言的隱性鏈接和顯示鏈接兩種編寫方式,查詢出如下數據:
111111 YZ 25T 2010-10-31 唐山廠
222222 YZ 25T 2011-11-30 四方廠
333333 YW 25T 2012-12-31 廠客廠
444444 YW 25T 2013-12-31 西安廠
555555 RW 25T 2014-5-31 鋪鎮廠