2017年java面試題及答案

Java語言作爲靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。下面是小編整理的關於2017年java面試題及答案,歡迎大家練習!

2017年java面試題及答案
  java面試題及答案

1、String 是最基本的數據類型嗎?

答:不是。Java中的基本數據類型只有8個:byte、short、int、long、float、double、char、boolean;除了基本類型(primitive type),剩下的都是引用類型(reference type),Java 5以後引入的枚舉類型也算是一種比較特殊的引用類型。

2、float f=3.4;是否正確?

答:不正確。3.4是雙精度數,將雙精度型(double)賦值給浮點型(float)屬於下轉型(down-casting,也稱爲窄化)會造成精度損失,因此需要強制類型轉換float f =(float)3.4; 或者寫成float f =3.4F;。

3、short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1;有錯嗎?

答:對於short s1 = 1; s1 = s1 + 1;由於1是int類型,因此s1+1運算結果也是int 型,需要強制轉換類型才能賦值給short型。而short s1 = 1; s1 += 1;可以正確編譯,因爲s1+= 1;相當於s1 = (short)(s1 + 1);其中有隱含的強制類型轉換。

4、Java有沒有goto?

答:goto 是Java中的保留字,在目前版本的Java中沒有使用。(根據James Gosling(Java之父)編寫的《The Java Programming Language》一書的附錄中給出了一個Java關鍵字列表,其中有goto和const,但是這兩個是目前無法使用的關鍵字,因此有些地方將其稱之爲保留字,其實保留字這個詞應該有更廣泛的意義,因爲熟悉C語言的程序員都知道,在系統類庫中使用過的有特殊意義的單詞或單詞的組合都被視爲保留字)

中,throw 和 throws 有什麼區別?

答:throw 用於拋出 wable 類的一個實例化對象,意思是說你可以通過關鍵字 throw 拋出一個 Error 或者 一個Exception,如: throw new IllegalArgumentException(“size must be multiple of 2〃) 而throws 的作用是作爲方法聲明和簽名的一部分,方法被拋出相應的異常以便調用者能處理。Java 中,任何未處理的受檢查異常強制在 throws 子句中聲明。

中,Serializable 與 Externalizable 的區別?

答:Serializable 接口是一個序列化 Java 類的接口,以便於它們可以在網絡上傳輸或者可以將它們的狀態保存在磁盤上,是 JVM 內嵌的默認序列化方式,成本高、脆弱而且不安全。Externalizable 允許你控制整個序列化過程,指定特定的二進制格式,增加安全機制。

中,DOM 和 SAX 解析器有什麼不同?

答:”DOM 解析器將整個 XML 文檔加載到內存來創建一棵 DOM 模型樹,這樣可以更快的查找節點和修改 XML 結構,而 SAX 解析器是一個基於事件的解析器,不會將整個 XML 文檔加載到內存。由於這個原因,DOM 比 SAX 更快,也要求更多的內存,不適合於解析大 XML 文件。

  Java開發崗位面試題

  一、Java基礎

1、String類爲什麼是final的。

2、HashMap的源碼,實現原理,底層結構。

3、說說你知道的幾個Java集合類:list、set、queue、map實現類咯。。。

4、描述一下ArrayList和LinkedList各自實現和區別

5、Java中的隊列都有哪些,有什麼區別。

6、反射中,ame和classloader的區別

7、Java7、Java8的新特性(baidu問的,好BT)

8、Java數組和鏈表兩種結構的操作效率,在哪些情況下(從開頭開始,從結尾開始,從中間開始),哪些操作(插入,查找,刪除)的效率高

9、Java內存泄露的問題調查定位:jmap,jstack的使用等等

10、string、stringbuilder、stringbuffer區別

11、hashtable和hashmap的'區別

13、異常的結構,運行時異常和非運行時異常,各舉個例子

14、String a= “abc” String b = "abc" String c = new String("abc") String d = "ab" + "c" .他們之間用 == 比較的結果

15、String 類的常用方法

16、Java 的引用類型有哪幾種

17、抽象類和接口的區別

18、java的基礎類型和字節大小。

19、Hashtable,HashMap,ConcurrentHashMap 底層實現原理與線程安全問題(建議熟悉 jdk 源碼,才能從容應答)

20、如果不讓你用Java Jdk提供的工具,你自己實現一個Map,你怎麼做。說了好久,說了HashMap源代碼,如果我做,就會借鑑HashMap的原理,說了一通HashMap實現

21、 Hash衝突怎麼辦?哪些解決散列衝突的方法?

22、HashMap衝突很厲害,最差性能,你會怎麼解決?從O(n)提升到log(n)咯,用二叉排序樹的思路說了一通

23、rehash

24、hashCode() 與 equals() 生成算法、方法怎麼重寫

  二、Java IO

1、講講IO裏面的常見類,字節流、字符流、接口、實現類、方法阻塞。

2、講講NIO。

3、String 編碼UTF-8 和GBK的區別?

4、什麼時候使用字節流、什麼時候使用字符流?

5、遞歸讀取文件夾下的文件,代碼怎麼實現

  三、Java Web

1、session和cookie的區別和聯繫,session的生命週期,多個服務部署時session管理。

2、servlet的一些相關問題

3、webservice相關問題

4、jdbc連接,forname方式的步驟,怎麼聲明使用一個事務。舉例並具體代碼

5、無框架下配置的主要配置內容

6、jsp和servlet的區別

  四、JVM

1、Java的內存模型以及GC算法

2、jvm性能調優都做了什麼

3、介紹JVM中7個區域,然後把每個區域可能造成內存的溢出的情況說明

4、介紹GC 和GC Root不正常引用。

5、自己從classload 加載方式,加載機制說開去,從程序運行時數據區,講到內存分配,講到String常量池,講到JVM垃圾回收機制,算法,hotspot。反正就是各種擴展

6、jvm 如何分配直接內存, new 對象如何不分配在堆而是棧上,常量池解析

7、數組多大放在 JVM 老年代(不只是設置 PretenureSizeThreshold ,問通常多大,沒做過一問便知)

8、老年代中數組的訪問方式

9、GC 算法,永久代對象如何 GC , GC 有環怎麼處理

10、誰會被 GC ,什麼時候 GC

11、如果想不被 GC 怎麼辦

12、如果想在 GC 中生存 1 次怎麼辦

  五、開源框架

1、hibernate和ibatis的區別

2、講講mybatis的連接池。

3、spring框架中需要引用哪些jar包,以及這些jar包的用途

4. springMVC的原理

5、springMVC註解的意思

6、spring中beanFactory和ApplicationContext的聯繫和區別

7、spring注入的幾種方式(循環注入)

8、spring如何實現事物管理的

9、springIOC

10、spring AOP的原理

11、hibernate中的1級和2級緩存的使用方式以及區別原理(Lazy-Load的理解)

12、Hibernate的原理體系架構,五大核心接口,Hibernate對象的三種狀態轉換,事務管理。