JAVA 基礎
1、JAVA 中的幾種基本數據類型是什麼,各自佔用多少字節。
答案:8位:Byte(字節型); 16位:short(短整型)、char(字符型); 32位:int(整型)、float(單精度型/浮點型); 64位:long(長整型)、double(雙精度型); 最後一個:boolean(布爾類型
2、String 類能被繼承嗎,爲什麼。
答案:不可以,因爲String類有final修飾符,而final修飾的類是不能被繼承的,實現細節不允許改變。
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {}
3、String,Stringbuffer,StringBuilder 的區別。
答案:String是字符串常量、StringBuffer 是字符串變量(線程安全)、StringBuilder是字符串變量(非線程安全)
String面試總結:https://blog.csdn.net/bingxuesiyang/article/details/89920445
4、ArrayList 和 LinkedList 有什麼區別。
答案:https://www.cnblogs.com/Jacck/p/8034900.html
5、講講類的實例化順序,比如父類靜態數據,構造函數,字段,子類靜態數據,構造函數,字段,當 new 的時候,他們的執行順序。
答案:父類靜態成員變量>父類靜態代碼塊>子類靜態成員變量>子類靜態代碼塊>父類普通成員變量>父類普通代碼塊>父類構造函數>子類普通成員變量>子類普通代碼塊>子類構造函數
6、用過哪些 Map 類,都有什麼區別,HashMap 是線程安全的嗎,併發下使用的 Map 是什麼,他們內部原理分別是什麼,比如存儲方式,hashcode,擴容,默認容量等。
答案:https://blog.csdn.net/bingxuesiyang/article/details/89146742 主要是HashMap與currentHashMap的對比
7、JAVA8 的 ConcurrentHashMap 爲什麼放棄了分段鎖,有什麼問題嗎,如果你來設計,你如何設計。
答案:https://blog.csdn.net/bingxuesiyang/article/details/89146742 主要是HashMap與currentHashMap的對比有沒有有順序的
8、有沒有有順序的 Map 實現類,如果有,他們是怎麼保證有序的。
答案:https://www.cnblogs.com/chen-lhx/p/8432422.html
TreeMap和LinkedHashMap是有序的。 TreeMap默認是升序的,定製化排序使用Comparator。
9、抽象類和接口的區別,類可以繼承多個類麼,接口可以繼承多個接口麼,類可以實現多個接口麼。
答案:類用class關鍵字修飾,接口用interface關鍵字修飾。
類只可以單繼承但是可以多級繼承,類可以實現多個接口。接口可以多繼承,一個接口可以繼承多個其他接口。
10、繼承和聚合的區別在哪。
答案:https://blog.csdn.net/qq_31655965/article/details/54645220
11、IO 模型有哪些,講講你理解的 nio,他和 bio,aio 的區別是啥,談談 reactor 模型。
答案:https://blog.csdn.net/bingxuesiyang/article/details/89883093 IO 模型
答案:https://blog.csdn.net/bingxuesiyang/article/details/89888664 Linux的五種IO模型
12、反射的原理,反射創建類實例的三種方式是什麼。
答案:https://blog.csdn.net/qq_35415600/article/details/70199995
13、反射中,Class.forName 和 ClassLoader 區別。
答案:https://blog.csdn.net/bingxuesiyang/article/details/89946315
Class.forName("com.test.mytest.ClassForName");會初始化類
ClassLoader.getSystemClassLoader().loadClass("com.test.mytest.ClassForName");不會初始化類
14、描述動態代理的幾種實現方式,分別說出相應的優缺點 、動態代理與 cglib 實現的區別、爲什麼 CGlib 方式可以對接口實現代理。
答案:1、https://blog.csdn.net/nimqbiyq/article/details/81166893
2、https://blog.csdn.net/riemann_/article/details/86849078
3、https://www.cnblogs.com/PerkinsZhu/p/6549211.html
15、final 的用途。
答案:
- 被final修飾的類不可以被繼承,final類中的所有成員方法都會被隱式地指定爲final方法。
- 被final修飾的方法不可以被重寫
- 被final修飾的變量不可以被改變,不可變的是變量的引用,引用指向對象的內容是可以變的。
16、寫出三種單例模式實現。
懶漢式單例,餓漢式單例,雙重檢查等
答案:https://blog.csdn.net/bingxuesiyang/article/details/88620263
17、如何在父類中爲子類自動完成所有的 hashcode 和 equals 實現?這麼做有何優劣。
答案:https://java-min.iteye.com/blog/1416727
18、請結合 OO 設計理念,談談訪問修飾符 public、private、protected、default 在應用設計中的作用。
答案:
public: Java語言中訪問限制最寬的修飾符,一般稱之爲“公共的”。被其修飾的類、屬性以及方法不
僅可以跨類訪問,而且允許跨包(package)訪問。
protect: 介於public 和 private 之間的一種訪問修飾符,一般稱之爲“保護形”。被其修飾的類、
屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。
default:即不加任何訪問修飾符,通常稱爲“默認訪問模式“。該模式下,只允許在同一個包中進行訪
問。
private: Java語言中對訪問權限限制的最窄的修飾符,一般稱之爲“私有的”。被其修飾的類、屬性以
及方法只能被該類的對象訪問,其子類不能訪問,更不能允許跨包訪問。
19、深拷貝和淺拷貝區別。
答案:https://blog.csdn.net/tounaobun/article/details/8491392
淺拷貝:拷貝的是引用,兩個引用指向內存中同一個對象。深拷貝拷貝的是對象,會在內存中新建一個對象,兩個引用分別指向不同的對象。
20、數組和鏈表數據結構描述,各自的時間複雜度。
答案:https://blog.csdn.net/bingxuesiyang/article/details/90023989
21、error 和 exception 的區別,CheckedException,RuntimeException 的區別,請列出 5 個運行時異常, error 和 exception 的區別
答案: https://blog.csdn.net/woshixuye/article/details/8230407
22、在自己的代碼中,如果創建一個 java.lang.String 類,這個類是否可以被類加載器加載?爲什麼。
答案:https://blog.csdn.net/bingxuesiyang/article/details/90033405 類與類加載器
https://blog.csdn.net/bingxuesiyang/article/details/90036983 雙親委派模型
23、說一說你對 java.lang.Object 對象中 hashCode 和 equals 方法的理解。在什麼場景下需要重新實現這兩個方法。
答案:https://blog.csdn.net/bingxuesiyang/article/details/90041772
24、在 jdk1.5 中,引入了泛型,泛型的存在是用來解決什麼問題。
答案:https://www.cnblogs.com/wuqinglong/p/9456193.html
25、這樣的 a.hashcode() 有什麼用,與 a.equals(b)有什麼關係。
答案:https://blog.csdn.net/bingxuesiyang/article/details/90041772
26、有沒有可能 2 個不相等的對象有相同的 hashcode。
答案:有可能,只不過概率比較低,取決於hashcode的算法實現。
27、Java 中的 HashSet 內部是如何工作的。
答案:http://www.importnew.com/19208.html 內部主要通過HashMap實現
28、什麼是序列化,怎麼序列化,爲什麼序列化,反序列化會遇到什麼問題,如何解決。
答案:https://blog.csdn.net/bingxuesiyang/article/details/90080587 https://blog.csdn.net/riemann_/article/details/87835260
序列化時,如果沒有聲明serialVersionUID,在反序列化之前如果修改了類的屬性,就會發生“java.io.InvalidClassException”錯誤,如果序列化時聲明瞭serialVersionUID,那麼反序列化時,即使修改了類的屬性也可以反序列化成功,只不過如果是修改原來的屬性,或者新增屬性,反序列化後修改的或新增的屬性爲null,因爲匹配不上原來序列化的屬性了。
29、java8 的新特性。