java程序员面试真题及详解2017(纯手动)
這是本人第一次面試真題及以后的每一次面試都會整理。這一次的面試題倒是挺簡單的。
注:每個題基本不會深究,知道如何解答即可。
填空題
1.Java之所以可以實(shí)現(xiàn)跨平臺,是因?yàn)镴ava程序在運(yùn)行時使用了()。
JVM
JVM是Java虛擬機(jī)。
2.JAVA中類的訪問修飾符有();類成員的訪問修飾符有()。
類:僅有public ,friendly
成員屬性:public、protected、friendly、priavate
成員方法:public、protected、friendly、priavate
friendly不是關(guān)鍵字,如果是默認(rèn)權(quán)限,則沒有任何修飾符。
3.JAVA程序中異常處理的關(guān)鍵字是(),拋出異常的關(guān)鍵字是()。
Java的異常處理是通過5個關(guān)鍵詞來實(shí)現(xiàn)的:try、catch、throw、throws和finally。
一般情況下是用try來執(zhí)行一段程序,如果系統(tǒng)會拋出(throw)一個異常對象,可以通過它的類型來捕獲(catch)它,或通過總是執(zhí)行代碼塊(finally)來處理;try用來指定一塊預(yù)防所有異常的程序;catch子句緊跟在try塊后面,用來指定你想要捕獲的異常的類型;throw語句用來明確地拋出一個異常;throws用來聲明一個方法可能拋出的各種異常(當(dāng)然聲明異常時允許無病呻吟);finally為確保一段代碼不管發(fā)生什么異常狀況都要被執(zhí)行。
4.Window的()事件在瀏覽器完成頁面加載后立即觸發(fā)。
頁面加載完成有兩種事件:
一是ready,表示文檔結(jié)構(gòu)已經(jīng)加載完成(不包含圖片等非文字媒體文件);
二是onload,指示頁面包含圖片等文件在內(nèi)的所有元素都加載完成。
5.ER模型的組成包括的元素為()、()、()。
實(shí)體-聯(lián)系模型(entity-relationship model),簡稱為E/R模型。在E/R模型中,數(shù)據(jù)結(jié)構(gòu)被表示為“實(shí)體-聯(lián)系”圖,圖中有三個主要的元素類型:實(shí)體;屬性; 關(guān)系。
簡答題
1.一個“.java”源文件中是否可以包括多個類(不是內(nèi)部類)?有什么限制?
答:這個是可以的,一個“.java”源文件里面可以包含多個類,但是只允許有一個public類,并且類名必須和文件名一致。
每個編譯單元只能有一個public 類。這么做的意思是,每個編譯單元只能有一個公開的接口,而這個接口就由其public 類來表示。
2.靜態(tài)變量和實(shí)例變量的區(qū)別?(面試中經(jīng)常遇到)
答:
在語法定義上的區(qū)別:靜態(tài)變量前要加static關(guān)鍵字,而實(shí)例變量前則不加。
在程序運(yùn)行時的區(qū)別:實(shí)例變量屬于某個對象的屬性,必須創(chuàng)建了實(shí)例對象,其中的實(shí)例變量才會被分配空間,才能使用這個實(shí)例變量。靜態(tài)變量不屬于某個實(shí)例對象,而是屬于類,所以也稱為類變量,只要程序加載了類的字節(jié)碼,不用創(chuàng)建任何實(shí)例對象,靜態(tài)變量就會被分配空間,靜態(tài)變量就可以被使用了。總之,實(shí)例變量必須創(chuàng)建對象后才可以通過這個對象來使用,靜態(tài)變量則可以直接使用類名來引用。
例如,對于下面的程序,無論創(chuàng)建多少個實(shí)例對象,永遠(yuǎn)都只分配了一個staticVar變量,并且每創(chuàng)建一個實(shí)例對象,這個staticVar就會加1;但是,每創(chuàng)建一個實(shí)例對象,就會分配一個instanceVar,即可能分配多個instanceVar,并且每個instanceVar的值都只自加了1次。
輸出
staticVar=1,instanceVar=1 staticVar=2,instanceVar=1 staticVar=3,instanceVar=13.session與cookie區(qū)別?
1、cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上。
2、cookie不是很安全,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙
考慮到安全應(yīng)當(dāng)使用session。
3、session會在一定時間內(nèi)保存在服務(wù)器上。當(dāng)訪問增多,會比較占用你服務(wù)器的性能
考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用COOKIE。
4、單個cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個站點(diǎn)最多保存20個cookie。
5、所以個人建議:
將登陸信息等重要信息存放為SESSION
其他信息如果需要保留,可以放在COOKIE中
4.MVC各個部分是由哪些技術(shù)來實(shí)現(xiàn)的。如何實(shí)現(xiàn)。
Model 代表的是應(yīng)用的業(yè)務(wù)邏輯( 通過JavaBean, EJB 組件實(shí)現(xiàn)), View 是應(yīng)用的表示面( 由 JSP 頁面產(chǎn)生), Controller 是提供應(yīng)用的處理過程控制( 一般是一個 Servlet)。
5.J2EE是技術(shù)還是平臺還是框架?主要包含那些技術(shù)?
首先,它肯定是一個框架。名稱是Java2平臺企業(yè)版(Java 2 Platform,Enterprise Edition)。
J2EE應(yīng)用服務(wù)器它包括兩大容器 EJB容器+Web容器,即業(yè)務(wù)邏輯層+表示層。
兩大組件Web組件+Ejb組件
Web組件(即三種技術(shù)):Servlet、JSP、JavaBean,Servlet是Web服務(wù)器的功能擴(kuò)展,接受Web請求,返回動態(tài)的Web頁面。Web容器中的組件可以使用EJB中的組件來完成復(fù)雜的業(yè)務(wù)邏輯。值得注意的是靜態(tài)的HTML頁面和Applets不算是Web層組件。
EJB組件(三種技術(shù)):會話Bean、消息驅(qū)動Bean、實(shí)體Bean。會話Bean:著重業(yè)務(wù)邏輯的實(shí)現(xiàn)與控制,負(fù)責(zé)與Web層通信,給Web層提供訪問業(yè)務(wù)數(shù)據(jù)的接口。當(dāng)客戶端完成執(zhí)行過程的時候,會話Bean及相關(guān)數(shù)據(jù)會消失。實(shí)體Bean:代表持久數(shù)據(jù),數(shù)據(jù)相當(dāng)于存儲在數(shù)據(jù)庫表中,它負(fù)責(zé)保存業(yè)務(wù)數(shù)據(jù),給會話Bean訪問業(yè)務(wù)數(shù)據(jù)的接口。消息驅(qū)動Bean:用于接收、處理客戶通過JMS發(fā)送過來的消息,允許業(yè)務(wù)組件接收衣服的JMS消息。
6.數(shù)據(jù)庫約束并簡單描述(5種)。
首先要想到主鍵約束,外鍵約束,非空。然后還有檢查約束(check),唯一約束。
1.—-主鍵約束(Primay Key Coustraint) 唯一性,非空性
2.—-唯一約束 (Unique Counstraint)唯一性,可以空,但只能有一個
3.—-檢查約束 (Check Counstraint) 對該列數(shù)據(jù)的范圍、格式的限制(如:年齡、性別等)
4.—-默認(rèn)約束 (Default Counstraint) 該數(shù)據(jù)的默認(rèn)值
5.—-外鍵約束 (Foreign Key Counstraint) 需要建立兩表間的關(guān)系并引用主表的列
編程題
1.三位數(shù)水仙花數(shù)。(題意不詳述了)。
解析:大家肯定都有過編程基礎(chǔ)了。怎樣解答,肯定得有一個等式來證明。那就是這個水仙花數(shù)S=個位數(shù)立方+十位數(shù)立方+百位數(shù)立方
然后呢,就是把每一個個位數(shù),十位數(shù),百位數(shù)求出來即可啦。并且我們都知道一個數(shù)的幾次方可以這樣表示pow(x,y),這表示x的y次方。
另一種思路就是由數(shù)字1,5,3組合起來的只要滿足
a^3+b^3+c^3 = a*100+b*10+c即可
public class Flower_number {public static void main(String[] args) {int i=0;int m,n;for(int a=1;a<10;a++){for(int b=0;b<10;b++){for(int c=0;c<10;c++){m=a*100+b*10+c;n=a*a*a+b*b*b+c*c*c;if(m==n){i++;System.out.println("水仙花數(shù)為"+m);}}}}System.out.println("水仙花數(shù)總共有 "+i+" 個");}}
SQL語句
數(shù)據(jù)庫查詢語句本人也總結(jié)過,詳見本人數(shù)據(jù)庫里面的帖子
有班級表CLASS和學(xué)生表STUDENT,兩個表通過class_id進(jìn)行關(guān)聯(lián),其表結(jié)構(gòu)如下:
1、寫出創(chuàng)建學(xué)生表STUDENT的SQL語句,注意添加相關(guān)的約束,要求表明、字段名都是英文。(自己寫的,參考答案)
CREATE TABLE STUDENT(
S_NO CHAR(6) PRIMARY KEY,
S_NAME VARCHAR2(10) NOT NULL,
S_SEX CHAR(2) CHECK(SEX = ‘男’ OR SEX = ‘女’),
S_BIRTHDAY DATE ,
S_SCORE NUMBER(5,1),
S_ADDF NUMBER(5,1),
CLASS_NO CHAR(5),
FOREIGN KEY(CLASS) REFERNCES CLASS(CLASS_NO)
)
2、查詢編號為c002班級中所有的女同學(xué)。(自己手寫,參考答案)
思路:此題要我們把女同學(xué)查出來,而且班級編號也要有,而Student表里包含這兩個條件。
SELECT Sname FROM Student WHERE S_SEX = ‘女’ AND CLASS_ID = ‘c002’
3、 查詢總分(入學(xué)成績+附加分)在550和600之間的所有學(xué)生,并且按照降序排列。
思路:首先,要知道查詢的學(xué)生,然后條件是總分的范圍條件,還有降序的要求。(降序知道用DESC就OK,如果升序啥也不用寫,系統(tǒng)查詢默認(rèn)升序)
SELECT * FROM Student WHERE S_SCORE+S_ADDF BETWEEN 550 AND 600 ORDER BY S_NO DESC
4、將所有名字中帶“斌”或“瀟”的學(xué)生成績加30%。
思路:首先查出名字帶“斌”或“瀟”,并且我們知道成績在Student表里,這樣就知道了當(dāng)我們更新表時,更新的是Student表。
第一步:
SELECT S_NO FROM Student WHERE S_NAME = ‘%斌%’ OR S_NAME = ‘%瀟%’
第二步
UPDATE Student SET S_SCORE = S_SCORE * (1+30%) WHERE S_NO IN (SELECT S_NO FROM Student WHERE S_NAME = ‘%斌%’ OR S_NAME = ‘%瀟%’)
5、查詢?nèi)雽W(xué)成績大于其所在班級平均入學(xué)成績的所有學(xué)生的學(xué)號、姓名、成績。
思路:首先我們要知道WHERE后面千萬不能跟聚合函數(shù)!舉個錯誤示范:SELECT Sname FROM Student WHERE SAGE = MAX(SAGE)
遇到這樣的題目,我們要分步作答,先求出平均成績?nèi)缓笤龠M(jìn)行比較。
第一步:計(jì)算平均成績。
SELECT AVG(S_SCORE) FROM Student
第二步:查詢。
SELECT S_NO,S_NAME,S_SCORE FROM Student WHERE S_SCORE>(SELECT AVG(S_SCORE) FROM Student)
延伸:為什么上面不用GROUP BY,然后在后面的HAVING里面添加查詢條件呢,因?yàn)樯厦孢@個題目并沒有讓我們分組,如果題目要求我們查詢每一門課程的考試平均成績的話,我們才會用到GROUP BY分組查詢。當(dāng)然我們也可以用GROUP BY,因?yàn)槲覀兺ㄟ^學(xué)號把每一個學(xué)生分組,然后就可以用HAVING+聚合函數(shù)進(jìn)行查詢了。
因此上面查詢語句也可以寫為:
SELECT S_NO,S_NAME,S_SCORE FROM Student GROUP BY S_NO HAVING S_SCORE > AVG(S_SCORE)
6、創(chuàng)建存儲過程del_student,輸入?yún)?shù)sno,找到并刪除該條記錄。(student表)。
總結(jié)
以上是生活随笔為你收集整理的java程序员面试真题及详解2017(纯手动)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: d2hackmap
- 下一篇: 有哪些实用的电脑软件值得推荐?