小山博客--面試題答案


面試題鏈接:https://www.cnblogs.com/peke/p/7894685.html

贏在面試之Java基礎篇(1)

1.可以有多個類,但只能有一個public的類,並且public的類名必須與文件名一致。

2.java有goto,但是是保留字,目前還沒有被應用

3.相同點:&和&&都可以用作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都為true時整個結果才為true

 不同點:&&具有短路功能,即第一個表達式為false則不在計算第二個表達式;&還可以用作位運算符,當&操作符兩邊的表達式不是boolean類型時,&表示按位與操作,如3&1結果是1

4.跳出循環使用break關鍵字,跳出多重循環可以在最外層循環使用標記,或者是用外層的循環可以受到內存循環的控制

5.switch可作用於char byte short int和對應的包裝類,不能作用於long double float boolean和他們的包裝類

6.對於short s1= 1; s1 = s1 + 1;由於s1+1運算時會自動提升表達式的類型,所以結果是int型,再賦值給short類型s1時,編譯器將報告需要強制轉換類型的錯誤。

 對於short s1= 1; s1 += 1;由於 +=是java語言規定的運算符,java編譯器會對它進行特殊處理,因此可以正確編譯。 

7.可以,因為 char型變量是用來存儲Unicode編碼的字符的,unicode編碼字符集中包含了漢字,所以char型變量中當然可以存儲漢字啦。不過,如果某個特殊的漢字沒有被包含在unicode編碼字符集中,那么,這個char型變量中就不能存儲這個特殊漢字

8.利用位運算2 << 3

9.如果final修飾的是一個基本數據類型的變量,那么這個變量的值就定了,不能變了,而如果修飾的是一個引用變量,那么該變量存的是一個內存地址,該地址就不能變了,但是該內存地址所指向的那個對象還是可以變的,就像你記住了人家的門牌號,但你不能管人家家里人員數量。

10. a.靜態變量(類變量)前要加 static 關鍵字,而實例變量(成員變量)前則不加

  b.靜態變量屬於類的,使用時直接用類名點,實列變量屬於對象的,必須用對象才能點

  c.靜態變量存在於方法區中,實例變量存在於堆中

贏在面試之Java基礎篇(2)

11.不可以。因為非static方法是要與對象關聯在一起的,必須創建一個對象后,才可以在該對象上進行方法調用,而static方法調用時不需要創建對象,可以 直接調用。

12.a.int是一個基本數據類型,Integer是int對應的包裝類

  b.int的默認值是0,Integer默認值是null

    c、Integer實際是對象的引用,而int則是直接存儲數據值 。

13.結果是12 和 -11 Math.round(11.5)的方法可以理解為將括號內的數+0.5之后,向下取值,

  Math.ceil求最小的整數,但不小於本身 ---向上取整

  Math.floor求最大的整數,但不大於本身.  ----向下取整

  Math.round求本身的四舍五入.

  Math.abs求本身的絕對值.   

14.Overload是重載,發生在同一個類中,方法名稱相同,參數列表不同,Overload不能改變返回值類型

   Override是重寫,發生在父子類中,方法名稱相同,參數列表相同,方法體不同

15,接口可以繼承接口,抽象類可以實現接口?抽象類是可以繼承具體類(concreteclass),抽象類中可以有靜態的main方法

16.靠的是父類引用變指向子類的對象,而程序調用的方法在運行期才動態綁定,就是引用變量所指向的具體實例對象的方法,也就是內存里正在運行的那個對象的方法,而不是引用變量的類型中定義的方法。

17.參考鏈接:https://blog.csdn.net/shuaijunlan/article/details/51378019

18.都不能

19.完全可以。如果不是靜態內部類,那沒有什么限制!,如果內部類是靜態的則只能訪問外部的靜態變量

20.沒有,因為String對象時不可變的,所以s = s + "world!"會創建一個新的對象,然后將s的引用指向新建的對象

贏在面試之Java集合框架篇(3)

 21.ArrayLis:底層是數組結構,查詢速度快,增加/刪除速度較慢,是線程不安全的

   Vector和ArrayList一樣都實現了List接口,但是線程安全

  LinkedList:底層是鏈表結構,查詢速度慢,增加/刪除速度快,是線程不安全的

22.HashMap:線程不安全,key和value可以是null值

   HashTable:線程安全,key和value都不可以是null值,和HashMap一樣都是Map的實現類

23.List:是存儲單列數據的集合,存儲的數據是有序並且是可以重復的 

  Map:存儲雙列數據的集合,通過鍵值對存儲數據,存儲 的數據是無序的,Key值不能重復,value值可以重復

24.List/Set是、Map不是

25.參考鏈接:https://www.cnblogs.com/guweiwei/p/6635530.html   

26.ArrayList和Vector:都是使用數組方式存儲數據,此 數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據 慢,Vector由於使用了synchronized方法(線程安全),通常性

能上較ArrayList差,Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的;當需要增長時,Vector 默認增長為原來一培,而ArrayList卻是原來的一半

LinkedList:使用雙向鏈表實現存 儲,按序號索引數據需要進行前向或后向遍歷,但是插入數據時只需要記錄本項的前后項即可,所以插入速度較快。
27.方式一:遍歷集合,新建一個集合,用contents()方法去判斷,添加到新集合

  方式二:利用set集合不可重復性,遍歷集合,新建一個集合,添加到set集合

28.Collection:是所有集合的父類

     Collections:是一個服務於Collection類的工具類

29.equals

30.參考鏈接:https://www.cnblogs.com/guweiwei/p/6638022.html

贏在面試之Java基礎篇(4)

31.2個,一個“xyz”,一個new String()對象;String類不能被繼承

32.String:String對象是不可變的,每次操作都會創建新的對象

  StringBu'f'fer:對象可操作,不會每次都產生新對象,線程安全

   StringBuider:和StringBuffer一樣,但是是線程不安全的

33.一個

34.會執行,在try中return后執行

35.final:是一個修飾符,修飾類時累不能被繼承,修飾變量時,變量值不能被更改,修飾方法時方法不能被重寫

     finally:是異常捕獲中的一部分,必須和try catch一起使用,常常用來釋放資源

     finalize:是一個方法,每個對象都會默認存在,在對象被GC收回時調用,一個對象的finalize()方法只會被調用一次,而且finalize()被調用不意味着gc會立即回收該對象

36.運行時異常:runtime exception,程序中可以不用手動捕獲,運行時異常一般是程序寫法不嚴謹造成,如:NullPointerException

  一般異常:一般異常要求程序中必須用進行手動捕獲,如:IO異常和Sql異常

37.Exception:是程序正常運行中,可以預料的意外情況,可以進行被捕獲,進行相應處理。

   Error:表示程序本身無法克服和恢復的一種嚴重問題,程序只有退的份了,例如說內存溢出和線程死鎖等系統問題。

38.java為系統異常和普通異常提供了不同的解決方案,編譯器強制普通異常必須try..catch處理或throws聲明繼續拋給上層調用方法處理。所以普通異常為checked異常,而系統異常可以處理也可以不處理。編譯器不強制用try..catch或throws聲明,所以系統異常成為uncheckde異常

39.堆和棧都是Java用來在RAM中存放數據的地方。

  棧:棧中存放着一個個的棧幀,每調用一個方法的時候就會在棧中開辟出一個棧幀用來存放調用方法的參數和局部變量等,棧不被線程共享(遞歸調用方法容易出現StackOverflowError(內存溢出))

  堆: 堆中存放着所有new出來的對象以及所有的成員變量等,堆能被線程共享(如果java堆空間不足了,程序會拋出OutOfMemoryError異常。)

40.可以強轉,超出范圍時,如果大於128就等於-128+大於128的部分得到結果:如(byte)129就等於:-128+(129-128)= -127    

贏在面試之Java基礎篇(5)

41 hashCode() 方法對應對象整型的 hash 值。它常用於基於 hash 的集合類,如 Hashtable、HashMap、LinkedHashMap等等。它與 equals() 方法關系特別緊密。根據 Java 規范,兩個使用 equal() 方法來判斷相等的對象,必須具有相同的 hash code。

42.字節流:按照字節進行讀寫(InputStream、OutputStream),默認不使用緩沖區

  字符流:按照字符進行讀寫,一般用於讀取純文本文件(Reader、Writer),字符流使用緩沖區。

43.JAVA對象轉換為字節序列的過程就稱為對象的序列化,只有實現了 serializable和Externalizable接口的類的對象才能被序列化  后者是前者的子類 ,可以使用對象流來進行序列化
44. JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader是一個重要的Java運行時系統組件。它負責在運行時查找和裝入類文件的類。

45.就是棧和堆的區別,看39題

46.GC是垃圾回收器,因為GC可以有效的防止內存泄露,有效的使用可以使用的內存

47.優點是:程序員不需要考慮空對象的處理,有了GC可以有效的防止內存泄露,有效的使用可以使用的內存

48.不可以馬上回收,可以調用System.gc()方法通知它,通知后也並不一定會馬上回收

49.throw語句用在方法體內,表示拋出異常,由方法體內的語句處理。

     throws語句用在方法聲明后面,表示再拋出異常,由該方法的調用者來處理。

50.會,比如:長生命周期的對象持有短生命周期對象的引用就很可能發生內存泄露。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM