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物件的三種狀態轉換,事務管理。