java程式設計師面試真題及詳解2017(純手動)
這是本人第一次面試真題及以後的每一次面試都會整理。這一次的面試題倒是挺簡單的。
注:每個題基本不會深究,知道如何解答即可。
填空題
1.Java之所以可以實現跨平臺,是因為Java程式在執行時使用了()。
JVM
JVM是Java虛擬機器。
2.JAVA中類的訪問修飾符有();類成員的訪問修飾符有()。
類:僅有public ,friendly
成員屬性:public、protected、friendly、priavate
成員方法:public、protected、friendly、priavate
friendly不是關鍵字,如果是預設許可權,則沒有任何修飾符。
3.JAVA程式中異常處理的關鍵字是(),丟擲異常的關鍵字是()。
Java的異常處理是通過5個關鍵詞來實現的:try、catch、throw、throws和finally。
一般情況下是用try來執行一段程式,如果系統會丟擲(throw)一個異常物件,可以通過它的型別來捕獲(catch)它,或通過總是執行程式碼塊(finally)來處理;try用來指定一塊預防所有異常的程式;catch子句緊跟在try塊後面,用來指定你想要捕獲的異常的型別;throw語句用來明確地丟擲一個異常;throws用來宣告一個方法可能丟擲的各種異常(當然宣告異常時允許無病呻吟);finally為確保一段程式碼不管發生什麼異常狀況都要被執行。
4.Window的()事件在瀏覽器完成頁面載入後立即觸發。
頁面載入完成有兩種事件:
一是ready,表示文件結構已經載入完成(不包含圖片等非文字媒體檔案);
二是onload,指示頁面包含圖片等檔案在內的所有元素都載入完成。
5.ER模型的組成包括的元素為()、()、()。
實體-聯絡模型(entity-relationship model),簡稱為E/R模型。在E/R模型中,資料結構被表示為“實體-聯絡”圖,圖中有三個主要的元素型別:實體;屬性; 關係。
簡答題
1.一個“.java”原始檔中是否可以包括多個類(不是內部類)?有什麼限制?
答:這個是可以的,一個“.java”原始檔裡面可以包含多個類,但是隻允許有一個public類,並且類名必須和檔名一致。
每個編譯單元只能有一個public 類。這麼做的意思是,每個編譯單元只能有一個公開的介面,而這個介面就由其public 類來表示。
2.靜態變數和例項變數的區別?(面試中經常遇到)
答:
在語法定義上的區別:靜態變數前要加static關鍵字,而例項變數前則不加。
在程式執行時的區別:例項變數屬於某個物件的屬性,必須建立了例項物件,其中的例項變數才會被分配空間,才能使用這個例項變數。靜態變數不屬於某個例項物件,而是屬於類,所以也稱為類變數,只要程式載入了類的位元組碼,不用建立任何例項物件,靜態變數就會被分配空間,靜態變數就可以被使用了。總之,例項變數必須建立物件後才可以通過這個物件來使用,靜態變數則可以直接使用類名來引用。
例如,對於下面的程式,無論建立多少個例項物件,永遠都只分配了一個staticVar變數,並且每建立一個例項物件,這個staticVar就會加1;但是,每建立一個例項物件,就會分配一個instanceVar,即可能分配多個instanceVar,並且每個instanceVar的值都只自加了1次。
public class Test11 {
public static int staticVar = 0;
public int instanceVar = 0;
public Test11() {
staticVar++;
instanceVar++;
System.out.println("staticVar=" + staticVar + ",instanceVar="
+ instanceVar);
}
public static void main(String[] args) {
Test11 test = new Test11();
Test11 test1 = new Test11();
Test11 test2 = new Test11();
}
}
輸出
staticVar=1,instanceVar=1
staticVar=2,instanceVar=1
staticVar=3,instanceVar=1
3.session與cookie區別?
1、cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上。
2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙
考慮到安全應當使用session。
3、session會在一定時間內儲存在伺服器上。當訪問增多,會比較佔用你伺服器的效能
考慮到減輕伺服器效能方面,應當使用COOKIE。
4、單個cookie儲存的資料不能超過4K,很多瀏覽器都限制一個站點最多儲存20個cookie。
5、所以個人建議:
將登陸資訊等重要資訊存放為SESSION
其他資訊如果需要保留,可以放在COOKIE中
4.MVC各個部分是由哪些技術來實現的。如何實現。
Model 代表的是應用的業務邏輯( 通過JavaBean, EJB 元件實現), View 是應用的表示面( 由 JSP 頁面產生), Controller 是提供應用的處理過程控制( 一般是一個 Servlet)。
5.J2EE是技術還是平臺還是框架?主要包含那些技術?
首先,它肯定是一個框架。名稱是Java2平臺企業版(Java 2 Platform,Enterprise Edition)。
J2EE應用伺服器它包括兩大容器 EJB容器+Web容器,即業務邏輯層+表示層。
兩大元件Web元件+Ejb元件
Web元件(即三種技術):Servlet、JSP、JavaBean,Servlet是Web伺服器的功能擴充套件,接受Web請求,返回動態的Web頁面。Web容器中的元件可以使用EJB中的元件來完成複雜的業務邏輯。值得注意的是靜態的HTML頁面和Applets不算是Web層元件。
EJB元件(三種技術):會話Bean、訊息驅動Bean、實體Bean。會話Bean:著重業務邏輯的實現與控制,負責與Web層通訊,給Web層提供訪問業務資料的介面。當客戶端完成執行過程的時候,會話Bean及相關資料會消失。實體Bean:代表持久資料,資料相當於儲存在資料庫表中,它負責儲存業務資料,給會話Bean訪問業務資料的介面。訊息驅動Bean:用於接收、處理客戶通過JMS傳送過來的訊息,允許業務元件接收衣服的JMS訊息。
6.資料庫約束並簡單描述(5種)。
首先要想到主鍵約束,外來鍵約束,非空。然後還有檢查約束(check),唯一約束。
1.—-主鍵約束(Primay Key Coustraint) 唯一性,非空性
2.—-唯一約束 (Unique Counstraint)唯一性,可以空,但只能有一個
3.—-檢查約束 (Check Counstraint) 對該列資料的範圍、格式的限制(如:年齡、性別等)
4.—-預設約束 (Default Counstraint) 該資料的預設值
5.—-外來鍵約束 (Foreign Key Counstraint) 需要建立兩表間的關係並引用主表的列
程式設計題
1.三位數水仙花數。(題意不詳述了)。
解析:大家肯定都有過程式設計基礎了。怎樣解答,肯定得有一個等式來證明。那就是這個水仙花數S=個位數立方+十位數立方+百位數立方
然後呢,就是把每一個個位數,十位數,百位數求出來即可啦。並且我們都知道一個數的幾次方可以這樣表示pow(x,y),這表示x的y次方。
另一種思路就是由數字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("水仙花數為"+m);
}
}
}
}
System.out.println("水仙花數總共有 "+i+" 個");
}
}
SQL語句
資料庫查詢語句本人也總結過,詳見本人資料庫裡面的帖子
有班級表CLASS和學生表STUDENT,兩個表通過class_id進行關聯,其表結構如下:
1、寫出建立學生表STUDENT的SQL語句,注意新增相關的約束,要求表明、欄位名都是英文。(自己寫的,參考答案)
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班級中所有的女同學。(自己手寫,參考答案)
思路:此題要我們把女同學查出來,而且班級編號也要有,而Student表裡包含這兩個條件。
SELECT Sname FROM Student WHERE S_SEX = ‘女’ AND CLASS_ID = ‘c002’
3、 查詢總分(入學成績+附加分)在550和600之間的所有學生,並且按照降序排列。
思路:首先,要知道查詢的學生,然後條件是總分的範圍條件,還有降序的要求。(降序知道用DESC就OK,如果升序啥也不用寫,系統查詢預設升序)
SELECT * FROM Student WHERE S_SCORE+S_ADDF BETWEEN 550 AND 600 ORDER BY S_NO DESC
4、將所有名字中帶“斌”或“瀟”的學生成績加30%。
思路:首先查出名字帶“斌”或“瀟”,並且我們知道成績在Student表裡,這樣就知道了當我們更新表時,更新的是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、查詢入學成績大於其所在班級平均入學成績的所有學生的學號、姓名、成績。
思路:首先我們要知道WHERE後面千萬不能跟聚合函式!舉個錯誤示範:SELECT Sname FROM Student WHERE SAGE = MAX(SAGE)
遇到這樣的題目,我們要分步作答,先求出平均成績然後再進行比較。
第一步:計算平均成績。
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裡面新增查詢條件呢,因為上面這個題目並沒有讓我們分組,如果題目要求我們查詢每一門課程的考試平均成績的話,我們才會用到GROUP BY分組查詢。當然我們也可以用GROUP BY,因為我們通過學號把每一個學生分組,然後就可以用HAVING+聚合函式進行查詢了。
因此上面查詢語句也可以寫為:
SELECT S_NO,S_NAME,S_SCORE FROM Student GROUP BY S_NO HAVING S_SCORE > AVG(S_SCORE)
6、建立儲存過程del_student,輸入引數sno,找到並刪除該條記錄。(student表)。