JAVA基礎面試題

一.           java語言基礎:html

1、合法標識符:java

答:以字母,「_」,「$「符號開頭,能夠包含字母,「_」,「$「和數字;編程

2、八大類型以及各類整數類型的取值範圍:數組

答:byte 8位(-2^7~2^7-1)、short 16位(-2^15~2^15-1)、int 32位(-2^31~2^31-1)、long 64位(-2^63~2^63-1)緩存

float 32位單精度浮點數、double 64位雙精度浮點數、boolean、char單一的 16 位 Unicode 字符等;安全

  • 在把容量大的類型轉換爲容量小的類型時必須使用強制類型轉換;服務器

  • 轉換過程當中可能致使溢出或損失精度;網絡

  • char型變量中能不能存貯一箇中文漢字?爲何?數據結構

  • 答:是可以定義成爲一箇中文的,由於java中以unicode編碼,一個char佔16個字節,因此放一箇中文是沒問題的。函數

3、&(位運算符)與&&(關係運算符)區別:

答:&比較兩個二進制是否爲1;而&&比較兩邊是否爲true,只有兩邊都爲true時才爲true;

4、if與else語句:

答:一個判斷中能夠有多個if、if else語句,可是隻能有一個else;else能夠沒有;

5、switch裏面數據類型包括:

答:整型(byte,short,int),char,枚舉(重點);

int i = 5;
        switch(i){
        case 0:
            System.out.println("0");break;
        case 1:
            System.out.println("1");break;
        case 2:
            System.out.println("2");break;
        default:
            System.out.println("default");break;
        }

default能夠放在中間嗎?多個case能夠共用一條語句;

能夠,可是通常default放在最後

6、while循環:

答:當while內條件爲true時,循環繼續執行,當while內條件爲false時才退出循環;若一開始就爲false時程序只執行do範圍內語句一次;

Given:

10.int x=0;

11.int y=10;

12. do {

l3. y--;

14. ++x;

15. } while (x < 5);

16. System.out.print(x + "," + y);

Answer:5,5

7、break與continue區別:

答:continue是退出本次循環,繼續下一次循環,而break是退出整個循環體;

8、關於可變長參數:

答:a、參數列表中最多隻能出現一次可變長參數;

b、若是參數中包含多個參數的話,那麼可變長參數只能出如今最後面的位置;

c、可變長參數可實現方法的重載(重點);

public class Demo {
    public static int sum(int n, int... nums) {
        for (int i = 0; i < nums.length; i++) {
            n = n + nums[i];
        }
        return n;
    }
    public static void main(String[] args) {
        int s1 = sum(1, 2);
        int s2 = sum(1, 2, 3);
        int s3 = sum(1, 2, 3, 4);
        int s4 = sum(1, 2, 3, 4, 5);
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
        System.out.println(s4);
    }
}

9、靜態常量初始化兩種方式:

答:靜態常量必須顯示的初始化;a、經過構造器進行初始化,b、只能用靜態代碼塊初始化;

public class Test{

public static String a="";

public Test(){a="1";//後初始化};

static{a="2";//先初始化}

}

十、Java初始化順序(靜態變量、靜態初始化塊、實例變量、實例初始化塊、構造方法);A繼承B,A是子類,B是父類(基類);成員變量不繼承;

父類靜態成員--子類靜態成員;

父類靜態初始化塊--子類靜態初始化塊;

父類實例成員和實例初始化塊--父類構造方法;

子類實例成員和實例初始化塊--子類構造方法;

11、不一樣訪問修飾符對類成員的訪問範圍:

做用域

當前類

同一package

子孫類

其餘package

public

protected

×

friendly(不寫時默認)

×

×

private

×

×

×

12String stringBuffer的區別:

答:String建立的字符串不能修改;而stringBuffer定義的字符串能夠修改;

new String("hello")建立了幾個對象?

答案:建立了兩個對象

String temp="hello";//在常量池中

String str=new String(temp);//在堆上

13、final, finally, finalize的區別。

  final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。String類便是final類;

    finally是異常處理語句結構的一部分,表示老是執行。

    finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,能夠覆蓋此方法提供垃圾收集時的其餘資源回收,例如關閉文件等。

14int Integer 有什麼區別?

答:a、Integer是對象類型,而int是基本數據類型;

b、類能夠是null,但基本數據類型不能爲空;

17Math.round11.5)等於多少? Math.round-11.5)等於多少?

Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;Math.round(-11.6)返回(long)-12;

正數:小數點後第一位>=5,+1;負數,小數點後第一位>5;+1;

18、怎樣將浮點數(float)相加 ? Float 好像沒有辦法?

答:請注意 float 和 Float 是不一樣的,前者是 Java 基本類型之一, 然後者倒是class。您應該將源代碼改成:

float One;

float Two;

float Hard = One + Two;

Float One = new Float(1.0);

Float Two = new Float(2.0);

Float Hard = new Float(One.floatvalue() + Two.floatvalue());

19如何將字串String轉換成整數int

答:1)int i = Integer.parseInt(「String」);

20、如何將整數 int 轉換成字串 String

有三種方法:

1)String s = String.valueOf(i);

2)String s = Integer.toString(i);

3)String s = "" + i;

21什麼是J2EE,J2SE,J2ME?

答:J2SE主要用於開發界面平臺軟件的;

J2ME主要用於開發嵌入式程序,如:手機軟件程序等;

J2EE主要是基於WEB服務器的開發B/S結構企業級程序;

22、Java中的屬性和字段有什麼區別?

答:Java中的屬性,一般能夠理解爲get和set方法。而字段一般叫作「類中定義的成員變量」。

23、值類型與引用類型變量的區別?

答:值類型變量是基本數據類型的一個變量;而引用類型變量是一個對象類型引用的變量;

24、隱式參數與顯示參數?

答:顯示參數是明顯列在方法聲明中,而隱式參數沒有出如今方法聲明中;

隱式參數,如,關鍵字this;

this表明對象的引用(誰調用就表明誰);
super表明當前子類對父類的引用。

25、什麼是實例域、實例、實例變量?

答:實例域就是指定義類時的最外層的那兩個大括號那個範圍。

實例就是你new出來的類的對象引用。

實例變量:private(訪問修飾符) int(數據類型) a(實例變量)=0; 

實例變量不能標識爲 abstract、synchronized 、native 或 strictfp。不能用JAVA關鍵字

26、什麼是標識符、修飾符、訪問修飾符?

(1)標識符:「_」、「$」

(2)修飾符:final、synchronized、abstract、

(3)訪問修飾符:public、protected、default、private

27、一個類在new後,其靜態代碼塊會執行嗎?

答:一個類在new的時候即執行其靜態代碼塊;執行完畢以後不會再執行;

二.類/接口/枚舉/封裝類:

1一個類爲何要作成抽象類?接口?

答:a、減小代碼的重複;b、解耦合;

接口與抽象類:一個類實現接口必須實現接口全部方法,而繼承抽象類只需實現抽象方法,非抽象方法可不實現,這樣就減小了這個類不須要的代碼的重寫性;

2匿名內部類是否能夠繼承其餘類,是否能夠實現接口?

答:匿名內部類必須擴展一個基類或實現一個接口,可是不能有顯式的繼承和實現子句;

三、靜態內部類與普通內部類區別:

答:a、靜態內部類實例化的時候沒必要先實例化外圍類,能夠直接實例化內部類,而對於非靜態內部類必須先實例化其外部類,才能再實例化自己;

b、靜態內部類沒有了指向外部類的引用;

c、在任何非靜態內部類中,都不能有靜態數據、方法、靜態類等;

四、爲何須要使用內部類呢?其主要緣由有如下三點:

答:a、內部類方法能夠訪問該類定義所在的做用域中的數據,包括私有的數據。

b、內部類能夠對同一個包中的其餘類隱藏起來。

c、當想要定義一個回調函數且不想編寫大量代碼時,使用匿名內部類比較便捷。

 

三.面向對象編程:

1請問java的三大特性是什麼?它們各有什麼特色?

答:a、封裝:將一個類的成員屬性設置成私有的,再提供get和set方法供外部訪問;即這樣的封裝類不會被外界所改變,只能給外界使用;

    b、繼承:一個子類繼承一個父類,繼承父類中全部方法,不能繼承父類中成員變量;子類自己又能夠有另外的方法,即子類具備可擴展性特性;

c、多態(重寫):兩種,一種是重寫,重寫就是子類重寫父類中方法(方法名、返回類型(子類的返回類型必須相同或是父類返回類型的子類)和參數類型必須一致);

另一種是重載,重載是在一個類中的方法名相同,參數類型必須不一樣(或它們有不一樣的參數個數),返回類型能夠相同,能夠不一樣;

2類與對象之間的關係:

答:a、關聯:一個類受另一個類影響,一個Driver類裏面只跟一個Car類變量,即在Driver類中的方法內傳一個car屬性對象,強耦合關係;

b、依賴:一種使用關係,很弱的一種耦合。driver開幾種類型的車,即重載,driveplane;drive(car);這個時候driveplane的關係即爲依賴關係;

c、聚合:聚合關聯 Aggregation:弱'擁有'關係,A對象能夠包含B對象,但B不是A的一部分;

d、組合:是一種強的‘擁有’關係,體現嚴格的部分和總體的關係,

e、泛化:繼承

f、實現:接口

3、類與對象間的結構關係:

縱向關係:泛化(包括類繼承、接口繼承、實現)

橫向關係:關聯(包括通常關聯、聚合、組合)

 

4.面向對象理解

什麼是OOP?什麼是類?請對比類和對象實例之間的關係。OOP是面向對象編程縮寫。指的是用對象的觀點來組織與構建系統,對象是類的實例化。對象一般做爲計算機模擬思惟,表示真實世界的抽象。類是靜態的,對象是動態的,類負責產生對象,能夠將類當成生產對象的工廠。

6UML圖分幾類?

答:經常使用的UML圖:

A、用例圖:幫助開發團隊以一種可視化的方式瞭解系統功能需求,好比:角色與用例之間關係;

B、 類圖:三部分描述,上面是類名、中間是屬性、下面是方法;完整的類圖,應該具備指向其父類關係,而且具備與之關聯的部分;

C、 時序:顯示不一樣對象之間的調用關係;

D、狀態圖:某個類所處的不一樣狀態或者是該類的狀態轉換信息:

E、 活動圖:表示在處理某個活動時,兩個或者更多類對象之間的過程控制流。

F、 組件圖:顯示系統中軟件與其餘軟件的依賴關係:

G、部署圖表示該軟件系統如何部署到硬件環境中。

靜態(系統結構):用例圖、類圖、對象圖、組件圖、部署圖

動態(系統行爲):時序圖、協做圖、狀態圖、活動圖

五.I/O流:

1、在Java語言中,如何列出PC機文件系統中的全部驅動器名?

答:在Java 2版本中,java.io包中的File類新增長了方法listRoots()能夠實現這一功能;

2IO流的三種分類方式:

    a.按流的方向分爲:輸入流和輸出流;
    b.按流的數據單位不一樣分爲:字節流和字符流;
c.按流的功能不一樣分爲:節點流和過濾流;
三、IO流的四大抽象類:
(1)字節流:
InputStream(讀數據):全部字節輸入流的祖先;(從外部讀取文件數據到程序中)
OutputStream(寫數據):全部字節輸出流的祖先;(將程序中的數據輸出到外部文件中)
(2)字符流:Reader:全部讀取字符輸入流的祖先;
Writer :全部寫入字符串的祖先;

 

4、文件讀寫的基本類:

(1)、讀取字節流:

文件àFileInputStreamàBufferedInputStreamàDataInputStreamà數據;

(2)、寫入字節流:

數據à DataOutputStream à BufferedOutputStream à FileOutputStream à文件;

(3)、該程序接受鍵盤輸入(從鍵盤讀取數據):

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));   

String str=in.readLine();
(4)、寫入字符流:
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("C:\\test.txt")));

 

out.write(「dagdagd」);

 

六.集合和泛型

1、說出ArrayList,Vector, LinkedList的存儲性能和特性

答:ArrayList,Vector, 查詢數據快,插入慢,Vector是線程安全的,LinkedList查詢數據慢,插入速度快;list有序可重複;set不可重複且無序;

2、Collection 和 Collections的區別

答:Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.

Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各類集合的搜索、排序、線程安全化等操做。

3、HashMap和Hashtable的區別。

答:HashMap是線程不安全的,容許有null的key值或者value值;

Hashtable是線程安全的,不容許空key和value值;

4Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別?

Set裏的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。而==是判斷兩個值是否相等的;

5、遍歷一個list

for(int i=0;i <list.size();i++)
 for(Object o:list)
Iterator it=list.iterator()
  for(;it.hasNext();)

  Set set = new HashSet(list);
    for(Iterator it=set.iterator();it.hasNext();)
    { Object o = it.next; System.out.println(o.toString());}

List<Object> list
for(Object foo : list){
        String className = foo.getClass().getClassName;       
        System.out.println(foo);  
 }  

 

六、  String傳值,

public  class Test {

    public static void change(String str){

       str="123";

    }

  public static void main(String args[]) {

      String abc = new String("abc");

      Test.change(abc);

      System.out.println(abc);  }

輸出:abc

7.爲何重寫equals()時也要重寫hashCode()?二者什麼關係

由於這兩個函數均可以重寫;徹底能夠hashcode相等的對象而equals確返回false;重寫hashCode是爲了集合類存儲這些對象的時候有個比較規則;好比Map不容許重複元素,就是經過hashCode來檢測的;可是hashcode的實現,通常要知足幾個特徵,好比:自反性,傳遞性什麼的。

8.java泛型中的E,T,K,V,U,S

    E - Element (在集合中使用,由於集合中存放的是元素)

    - Type(Java 類)

    - Key(鍵)

    - Value(值)

    - Number(數值類型)

    ? -  表示不肯定的java類型

9.認識理解Java中的native方法

Java不是完美的,Java的不足除了體如今運行速度上要比傳統的C++慢許多以外,Java沒法直接訪問到操做系統底層(如系統硬件等),爲此Java使用native方法來擴展Java程序的功能。在java中native是關鍵字。它通常在本地聲明,異地用C和C++來實現。它的聲明有幾點要注意:

1)native與訪問控制符先後的關係不受限制。

2)必須在返回類型以前。

3)它通常爲非抽象類方法。

4)native方法在異地實現,象抽象方法同樣,因此沒有方法體,以分號結束。以下列5種聲明:

native public void f();       正確。
private native void f();      正確。 
protected int native f();     錯誤,返回類型位置不對,返回類型必須在native以後。
public abstract native void f();   native必然不是abstract的。 
native int f(){}       錯誤,由於存在方法體{}
public static native f();  正確。static與native方法位置隨意。

10. Integer與int的種種比較你知道多少?

Ingeter是int的包裝類,int的初值爲0,Ingeter的初值爲null。 int是數據類型;

Integer i = 1;int ii = 1; i==ii爲true仍是爲false?

public static void main(String[] args) {
13         int i = 128;
14         Integer i2 = 128;
15         Integer i3 = new Integer(128);
16         //Integer會自動拆箱爲int,因此爲true
17         System.out.println(i == i2);
18         System.out.println(i == i3);
19         System.out.println("**************");
20         Integer i5 = 127;//java在編譯的時候,被翻譯成-> Integer i5 = Integer.valueOf(127);
21         Integer i6 = 127;
22         System.out.println(i5 == i6);//true
23         /*Integer i5 = 128;
24         Integer i6 = 128;
25         System.out.println(i5 == i6);//false
26 */        Integer ii5 = new Integer(127);
27         System.out.println(i5 == ii5); //false
28         Integer i7 = new Integer(128);
29         Integer i8 = new Integer(123);
30         System.out.println(i7 == i8);  //false
31     }
首先,17行和18行輸出結果都爲true,由於Integer和int比都會自動拆箱(jdk1.5以上)。
22行的結果爲true,而25行則爲false,不少人都不動爲何。其實java在編譯Integer i5 = 127的時候,被翻譯成-> Integer i5 = Integer.valueOf(127);因此關鍵就是看valueOf()函數了。只要看看valueOf()函數的源碼就會明白了。JDK源碼的valueOf函數式這樣的:
看一下源碼你們都會明白,對於-128到127之間的數,會進行緩存,Integer i5 = 127時,會將127進行緩存,下次再寫Integer i6 = 127時,就會直接從緩存中取,就不會new了。因此22行的結果爲true,而25行爲false。

 

11. IP協議屬於()層。

  • 應用層

  • 數據鏈路層

  • 網絡互聯層

  • 傳輸層

答案:C

IP協議是網絡層協議

A,應用層協議有http ftp smtp pop3 等

B,數據鏈路層協議有PPP ARP RARP等

D,傳輸層協議有TCP UDP

12.十六進制數30轉換成二進制數是()

  • 110000

  • 100000

  • 111000

  • 101010

答案:A

十六進制轉換爲二進制快捷的方法是將每個十六進制字符轉換成4個二進制字符,不足4個的前面補零

3轉換爲二進制是0011,0轉換爲二進制是0000

合起來就是00110000

將前面兩個無用的0去掉就是110000

13.List<? extends T>和List<? super T>之間有什麼區別?

List<? extends T>要求List中的泛型對象只能夠是T或者T的子類對象

List<? super T>要求List中的泛型對象只能夠是T或者T的父類對象

14.對於IP地址爲200.5.6.3,屬於()類

  • A

  • B

  • C

  • D

答案:C

第一字節範圍1到127屬於A類IP

第一字節範圍128到191屬於B類IP

第一字節範圍192到223屬於C類IP 

15. 某系統中有11臺打印機,N個進程共享打印機資源,每一個進程要求3臺,當N的取值不超過()時系統不會發生死鎖。

  • 4

  • 5

  • 6

  • 7

答案:B

不發生死鎖的條件是至少能保證一個進程能得到三臺打印機資源。

最壞的狀況是1個進程獲取三臺打印機資源,另外N-1個進程獲取到兩臺打印機,等待獲取第三臺。

3+(N-1)*2=11

N=5

16.  排序

一、java類自帶排序:

組成int數組,再調用Arrays.sort(int[] a)實現升序;降序可從尾部開始輸出;

二、方法二:重複for循環比較兩值大小存入ArrayList中;

17. JAVA序列化

序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。能夠對流化後的對象進行讀寫操做,也可將流化後的對象傳輸於網絡之間。序列化是爲了解決在對對象流進行讀寫操做時所引起的問題。

序 列化的實現:將須要被序列化的類實現Serializable接口,該接口沒有須要實現的方法,implements Serializable只是爲了標註該對象是可被序列化的,而後使用一個輸出流(如:FileOutputStream)來構造一個 ObjectOutputStream(對象流)對象,接着,使用ObjectOutputStream對象的writeObject(Object obj)方法就能夠將參數爲obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。

 

18.數據結構有哪些

集合、線性結構、樹形結構、圖狀結構

相關文章
相關標籤/搜索