java工程師面試題

一:選擇題
1. 關於以下程序代碼的說明正確的是( D )
1.class HasStatic{
2. private static int x=100;
3.public static void main(String args[ ]){
4.HasStatic hs1=new HasStatic( );
5.hs1.x++;
6.HasStatic hs2=new HasStatic( );
7.hs2.x++;
8.hs1=new HasStatic( );
9.hs1.x++;
10.HasStatic.x- -;
11.System.out.println(“x=”+x);
12. }
13. }
A、 5行不能通過編譯,因爲引用了私有靜態變量
B、 10行不能通過編譯,因爲x是私有靜態變量
C、程序通過編譯,輸出結果爲:x=103
D、程序通過編譯,輸出結果爲:x=102

考點: java變量 ++ 在前和在後的區別
在前:先自增後賦值
在後:先複製後自增
例子:
int a = 5, b = 5;
System.out.println(a++); // a是先輸出5,然後再對a進行累加
System.out.println(++b); // b是先進行累加,然後再輸出,輸出值爲6

  1. 下列關於for循環和while循環的說法中哪個是正確的?( B )
    A.while循環能實現的操作,for循環也都能實現
    B.while循環判斷條件一般是程序結果,for循環判斷條件一般是非程序結果
    C.兩種循環任何時候都可替換
    D.兩種循環結構中都必須有循環體,循環體不能爲空

    3.以下選項中循環結構合法的是( C )
    A、while (int i<7) { i++; System.out.println(“i is “+i); }
    B、int j=3; while(j) { System.out.println(“ j is “+j); }
    C、int j=0; for(int k=0; j + k !=10; j++,k++) { System.out.println(“ j is “+ j + “k is”+ k); }
    D、int j=0; do{ System.out.println( “j is “+j++); if (j = = 3) {continue loop;} }while (j<10);

考點:
A:while的循環體是boolean類型的
B:同A
D:loop無定義

  1. 給出下面代碼段, 哪行將引起一個編譯時錯誤?( D )
    1) public class Test {
    2) int n = 0;
    3) int m = 0;
    4) public Test(int a) { m=a; }
    5) public static void main(String arg[]) {
    6) Test t1,t2;
    7) intj,k;
    8) j=3; k=5;
    9) t1=new Test();
    10) t2=new Test(k);
    11) }
    12) }
    A. 行1 B. 行4 C. 行6 D. 行9

考點:
構造函數的問題,默認構造函數是無參的,當定義一個有參的構造函數時,需要重新定義無參的構造函數

  1. 下面的方法,當輸入爲2的時候返回值是多少?( D )
    publicintgetValue(int i) { int result = 0; switch (i) { case 1: result = result + i; case 2: result = result + i * 2; case 3: result = result + i * 3; } return result; }
    A0 B2 C4 D10

考點:
return語句的重要性

二:簡述題
1、描述一下 JVM 加載 class 文件的原理機制?
JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader是一個重要的 Java運行時系統組件。它負責在運行時查找和裝入類文件的類。
2、heap和stack有什麼區別。 java的內存分爲兩類,一類是棧內存,一類是堆內存。棧內存是指程序進入一個方法時,會爲這個方法單獨分配一塊私屬存儲空間,用於存儲這個方法內部的局部變量,當這個方法結束時,分配給這個方法的棧會釋放,這個棧中的變量也將隨之釋放。 堆是與棧作用不同的內存,一般用於存放不放在當前方法棧中的那些數據,例如,使用new 創建的對象都放在堆裏,所以,它不會隨方法的結束而消失。方法中的局部變量使用final 修飾後,放在堆中,而不是棧中。
3、GC 是什麼?爲什麼要有 GC? GC是垃圾收集的意思(GabageCollection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法。
4、列舉出一些常用的類,包,接口,請各舉 5 個 要讓人家感覺你對java ee開發很熟,所以,不能僅僅只列core java中的那些東西,要多列你在做ssh項目中涉及的那些東西。就寫你最近寫的那些程序中涉及的那些類。 常用的類:BufferedReaderBufferedWriter FileReaderFileWirter StringIntegerjava.util.Date,System, Class,List,HashMap 常用的包:java.lang java.io java.utiljava.sql,javax.servlet,org.apache.strtuts.action,org.hibernate常用的接口:RemoteListMap Document NodeList,Servlet,HttpServletRequest,HttpServletResponse,Transaction(Hibernate)、 Session(Hibernate),HttpSession
5 java 中有幾種類型的流?JDK 爲每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類? 字節流,字符流。字節流繼承於InputStreamOutputStream,字符流繼承於InputStreamReader OutputStreamWriter。在java.io包中還有許多其他的流,主要是爲了提高性能和使用方便。
6、多線程有幾種實現方法?同步有幾種實現方法? 多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口 同步的實現方面有兩種,分別是synchronized,wait與notify wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock。 sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉 InterruptedException(中斷異常)異常。 notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先級。Allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是 讓它們競爭。
7、說一說 Servlet 的生命週期? 答:servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init,service和destroy方法表達。 Servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service 方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷燬的時候調用其destroy方法。 web容器加載servlet,生命週期開始。通過調用servlet的init()方法進行servlet的初始化。通過調用service()方法實現,根據請求的不同調用不同的do***()方法。結束服務,web容器調用servlet的destroy()方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章