近期,某大型企業(yè)的高級(jí)java開發(fā)工程師的面試題,現(xiàn)給出試題和答案,供大家參考,如有不對(duì)之處,請(qǐng)大家指教。
選擇題
1)servlet處理請(qǐng)求的方式? 以響應(yīng)的方式
2)抽象類代碼的編寫,哪行代碼不產(chǎn)生編譯出錯(cuò)?A
public abstract class MyClass{
public int constInt=5;
(________)
public void method(){
}
}
A 、 public abstract void method (int a) ;
B 、 constInt=constInt+5; 聲明階段不能賦值
C 、 public int method () ; 抽象類可以重載,重載輸入?yún)?shù)要不一樣,與返回參數(shù)無關(guān),這體現(xiàn)了java的多態(tài)性
D 、 public abstract void anothermethod (){} ; 抽象方法無{}
3)下面說法正確的有(B)
A class中的constructor不可以省略
B constructor必須與class同名,但方法不能與class同名
C constructor在一個(gè)對(duì)象被new時(shí)執(zhí)行
D 一個(gè)class只能定義一個(gè)constructor
4)java中集合類型包含ArrayList,LinkedList,HashMap等類,下面描述錯(cuò)誤的是(B)
A ArrayList和LinkedList均實(shí)現(xiàn)了List接口
B 添加和刪除元素時(shí),ArrayList的表現(xiàn)更佳
C ArrayList的訪問速度比LinkedList快
D HashMap的實(shí)現(xiàn)MAP接口,它允許任何類型的鍵和值對(duì)象并允許將null作為鍵或值
多選題
下列哪些情況可以終止當(dāng)前線程的運(yùn)行?(AB)
A 拋出一個(gè)異常
B 當(dāng)該線程調(diào)用sleep()方法時(shí)
C 當(dāng)創(chuàng)建一個(gè)新線程時(shí)
D 當(dāng)一個(gè)優(yōu)先級(jí)高的線程進(jìn)入就緒狀態(tài)時(shí)。下面關(guān)于java語言實(shí)例方法和類方法的說法,哪幾項(xiàng)是對(duì)的?(BC)
(在方法前面加上static就成了類方法,static只能操作static)
A 實(shí)例方法可以直接通過類名調(diào)用。
B 類方法可以直接通過類名調(diào)用。
C 實(shí)例方法可以操作實(shí)例變量也可以操作類變量。
D 類方法可以操作實(shí)例變量也可以操作類變量。關(guān)于IOC的理解,正確的是(ABD)
A 控制反轉(zhuǎn) B 對(duì)象被動(dòng)的接口依賴類
C 對(duì)象主動(dòng)的去找依賴類 D 一定要用接口
8 以下哪些對(duì)接口methoda的定義是正確的?AC
A void methoda();
B public final double methoda(); // final 不能用
C public double methoda();
D static void methoda(double d1); //static不能用
9 下列是jsp作用域的通信對(duì)象的有(ABD)+page
A session B cookie C application D pagecontext
10 以下關(guān)于final關(guān)鍵字說法錯(cuò)誤的是(AD)
A final是java的修飾符,可以修飾類、接口、抽象類、方法和屬性
B final修飾變量不允許被再次賦值從而避免了復(fù)雜的協(xié)議轉(zhuǎn)換
C final修飾的類肯定不能被繼承
D final修飾的方法不能被重載
一、final關(guān)鍵字可以用來修飾類、方法、變量。各有不同。
A、修飾類(class)。 ** 1、該類不能被繼承。 2、類中的方法不會(huì)被覆蓋,因此默認(rèn)都是final的。 3、用途:設(shè)計(jì)類時(shí),如果該類不需要有子類,不必要被擴(kuò)展,類的實(shí)現(xiàn)細(xì)節(jié)不允許被改變,那么就設(shè)計(jì)成final類
B、修飾方法(method) 1、該方法可以被繼承,但是不能被覆蓋。 2、用途:一個(gè)類不允許子類覆蓋該方法,則用final來修飾 3、好處:可以防止繼承它的子類修改該方法的意義和實(shí)現(xiàn);更為高效,編譯器在遇到調(diào)用fianal方法轉(zhuǎn)入內(nèi)嵌機(jī)制,提高了執(zhí)行效率。 4、注意:父類中的private成員方法不能被子類覆蓋,因此,private方法默認(rèn)是final型的(可以查看編譯后的class文件)
C、修飾變量(variable) ** 1、用final修飾后變?yōu)槌A俊0?/strong>靜態(tài)變量、實(shí)例變量和局部變量這三種。 2、特點(diǎn):可以先聲明,不給初值,這種叫做final空白。但是使用前必須被初始化。一旦被賦值,將不能再被改變。
**D、修飾參數(shù)(arguments) ** 1、用final修飾參數(shù)時(shí),可以讀取該參數(shù),但是不能對(duì)其作出修改
二、final關(guān)鍵字不能用來抽象類和接口。
11 接口和抽象類描述正確的是 (BC)
A 抽象類沒有構(gòu)造函數(shù)
B 接口沒有構(gòu)造函數(shù)
C 抽象類不允許多繼承
D 接口中的方法可以有方法體
12 以下可以正確獲取結(jié)果集的有(AD)
A Statement sta=con.createStatement();
ResultSet rst=sta.excuteQuery("select * from book");
B Statement sta=con.createStatement("select * from book");
ResultSet rst=sta.excuteQuery();
C PreparedStatement pst=con.preparedStatement();
ResultSet rst=sta.excuteQuery("select * from book");
D PreparedStatement pst=con.preparedStatement("select * from book");
ResultSet rst=sta.excuteQuery();
問答器
** 用一個(gè)sql語言查詢每門課程大于80分的學(xué)生姓名
name kecheng fenshu
張三 語文 81
張三 數(shù)學(xué) 74
李四 語文 76
李四 數(shù)學(xué) 90
王五 語文 81
王五 數(shù)學(xué) 100
王五 英語 90
** 什么是java線程池?在什么情況下使用線程池?**
java線程池就是java用來管理線程的池子。限制線程的數(shù)量
當(dāng)程序并發(fā)的線程數(shù)量很多,并且每個(gè)線程都是執(zhí)行一個(gè)時(shí)間很短的任務(wù)就結(jié)束了,
那么就需要頻繁地創(chuàng)建銷毀一些相同的線程時(shí),可以使用線程池來管理。
線程池的優(yōu)點(diǎn)
1)避免線程的創(chuàng)建和銷毀帶來的性能開銷。
2)避免大量的線程間因互相搶占系統(tǒng)資源導(dǎo)致的阻塞現(xiàn)象。
3}能夠?qū)€程進(jìn)行簡(jiǎn)單的管理并提供定時(shí)執(zhí)行、間隔執(zhí)行等功能。
** 寫出一個(gè)單例模式。
public class Singleton {
private static final Singleton singleton = null;
private Singleton(){ }
public static Singleton getInstance() {
if (singleton== null) {
synchronized (Singleton.class) {
if (singleton== null) {
singleton= new Singleton();
}
}
}
return singleton;
}
}
或者
```python
public class Singleton {
private static final Singleton singleton = new Singleton();
private Singleton() { }
public static Singleton getInstance() {
return singleton;
}
}
sleep() 和wait() 的區(qū)別
Java程序中wait 和 sleep都會(huì)造成某種形式的暫停,它們可以滿足不同的需要。wait()方法用于線程間通信,如果等待條件為真且其它線程被喚醒時(shí)它會(huì)釋放鎖,而sleep()方法僅僅釋放CPU資源或者讓當(dāng)前線程停止執(zhí)行一段時(shí)間,但不會(huì)釋放鎖。需要注意的是,sleep()并不會(huì)讓線程終止,一旦從休眠中喚醒線程,線程的狀態(tài)將會(huì)被改變?yōu)镽unnable,并且根據(jù)線程調(diào)度,它將得到執(zhí)行。
總結(jié): sleep()保持對(duì)象鎖、wait()釋放對(duì)象鎖。
附加題
** 假如有一個(gè)投票支持頁面,用戶點(diǎn)擊支持按鈕,限定一個(gè)小時(shí)內(nèi)不能再次點(diǎn)擊,一小時(shí)后可以再次點(diǎn)擊,后面以此類推,請(qǐng)問如何實(shí)現(xiàn)
** 如有要采集一個(gè)頁面的PV、UV數(shù)量,應(yīng)該如何設(shè)計(jì)?(PV頁面展示次數(shù);UV獨(dú)立訪客數(shù))
補(bǔ)充
servlet和 filter的區(qū)別
1、servlet:servlet是一種運(yùn)行服務(wù)器端的java應(yīng)用程序,具有獨(dú)立于平臺(tái)和協(xié)議的特性,并且可以動(dòng)態(tài)的生成web頁面,它工作在客戶端請(qǐng)求與服務(wù)器響應(yīng)的中間層。
2、filter:filter是一個(gè)可以復(fù)用的代碼片段,可以用來轉(zhuǎn)換HTTP請(qǐng)求、響應(yīng)和頭信息。Filter不像Servlet,它不能產(chǎn)生一個(gè)請(qǐng)求或者響應(yīng),它只是修改對(duì)某一資源的請(qǐng)求,或者修改從某一的響應(yīng)。
友情提示
我是和奇谷樸,一個(gè)在帝都周末自己選擇加班的有志好青年,讀完我的文章如果有收獲,記得打賞、關(guān)注和點(diǎn)贊哦!么么噠!!