JavaSe 變數和運算符: 基本數據類型介紹 java中浮點數精度怎麼解決,有瞭解過實現嗎,為什麼有精度問題 BigDecimal,如何判斷BigDecimal是否相等。如何進行計算、怎麼四捨五入 基本類型幾種,分別占用空間 int和Integer區別--包裝類,int有幾個位元組。 包裝類常量池 ...
JavaSe
-
變數和運算符:
- 基本數據類型介紹
- java中浮點數精度怎麼解決,有瞭解過實現嗎,為什麼有精度問題
- BigDecimal,如何判斷BigDecimal是否相等。如何進行計算、怎麼四捨五入
- 基本類型幾種,分別占用空間
- java中浮點數精度怎麼解決,有瞭解過實現嗎,為什麼有精度問題
- int和Integer區別--包裝類,int有幾個位元組。
- 包裝類常量池
- 怎麼判斷相等的?為什麼不用 == ?
- Integer緩存是放在哪裡的。緩衝池範圍
- integer valueof 和 new有啥區別,誰更快
- Int i =1 和 integer i=1存儲區別。
- 如何聲明一個int的List(不能,只能聲明Integer的List)
- Integer是線程安全的嗎,哪些類是線程安全的。是的
- 給Integer最大值+1,是什麼結果
- Long 緩存池,包裝類
- 數據傳輸,比如RPC or HTTP,使用數據類型,用基本類型還是包裝類型好?
- switch可以放哪些類型
- 基本數據類型介紹
-
Java自動裝箱和自動拆箱
-
方法參數傳遞:
- JAVA中值傳遞還是引用傳遞的問題,參數傳遞都是值傳遞。
-
面向對象
-
怎麼樣唯一確定一個類?如果要載入的兩個類的全限定名相同怎麼辦?
-
json 封裝:通過private修飾,通過get和set獲取。
- 為什麼要有封裝類
-
static和final區別。
- static表示屬於類,只有一個
- final修飾一個對象是什麼不變。final關鍵字使用
- static修飾的欄位什麼時候初始化
- 對於static變數的理解?static變數分配記憶體的時候發生在哪個環節?
- static關鍵字,static加在類上和不加區別,除了修飾類、屬性、方法還有嗎?(現在想起還有代碼塊!)
- 寫一個static main方法,能調用非靜態方法嗎?如果要調用要怎麼調用?為什麼不能不創建對象調用?
- 靜態方法和非靜態方法的區別
-
final和繼承:
- final修飾的對象,如果是變數,和靜態變數,在哪裡可以賦值。
- Java支持多繼承嗎?從開發的角度說一下為什麼不支持多繼承
-
介面和抽象類的區別?應用場景?
- 兩者是否可以實例化
- set介面可以定義私有成員變數嗎
-
多態用在哪裡,有什麼用處。
-
實例化:
-
class B { static B t1 = new B(); static B t2 = new B(); { System.out.println("代碼塊"); } static { System.out.println("靜態塊"); } } public class Main { public static void main(String[] args) throws Exception { B b = new B(); } } //輸出什麼
-
-
重載重寫,構造方法的重載
-
面向對象的三個特性,三大特性深層次。
- 說一說面向對象編程的特點?和麵向過程編程有什麼區別?
- 生成一個對象的全過程,對象的組成
- Java許可權修飾符
-
編程範式:什麼是結構化編程、面向對象編程以及函數式編程?
-
內部類: 匿名內部類訪問外部成員變數時編譯器會提示需要final修飾為什麼
- java原生類中用的最多的類
API
-
Object 類有什麼方法,舉出常用方法
- == 和equals的區別
- == 判斷堆記憶體地址,指針
- equals是判斷引用是否一樣。看是否重寫。
- 預設使用 ==
- 重寫equals 要重寫hashcode 自己實現equals要註意什麼
- ava底層集合框架中,為了提高查詢效率,往往使用hashCode方法來確定元素的保存位置。 hashcode返回值不同。
- String str = "i"; String str2 = new String("i") || 不一樣-常量池
- String類裡面的equals方法實現看過嗎
- 淺拷貝和深拷貝的區別,深拷貝怎麼實現,引用拷貝。
- 淺拷貝會在堆上創建一個新的對象。引用類型/值類型
- 基本類型淺克隆可以
- 引用類型在淺克隆後,要對引用的變數再進行嵌套克隆。
- 可以看javaguide,引用/淺拷貝/深拷貝的區別 圖
- == 和equals的區別
-
String類
-
7-String 存儲結構和API 變更
-
string為什麼設計成不可變
- 底層char數組,hash。 final
- 在 Java 9 之後,String 類的實現改用 byte 數組存儲字元串
- javaguide
- 私有且final無法繼承。
-
String直接賦值 stringpoll 和 new一個對象的區別。
String str = new String("abc")
創建字元串對象 --這裡涉及兩個對象new String("a") + new String("b")
涉及幾個對象- String a = "str_a", String b = new String(a + "str_b"); 創建了幾個對象
-
String 的最大長度
-
字元串常量池 --字面量
- 如何設置大小
- intern( )方法
- string的一些題。
- 記憶體位置,堆中。
- 優化常量池的方法:
-
不可變好處
-
StringBuffer(synchronized)和StringBuilder的區別,和String的區別
-
StringBuilder的方法
-
String是不可變的,那麼StringBuffer和StringBuilder是如何實現可變的呢?底層原理是什麼? 如果讓你來實現StringBuffer和StringBuilder,你會怎麼實現?
-
-
java的string類的設計思想,jdk1.9前後區別。String類,底層實現
-
string底層的char[]數組存儲都是兩個位元組,如果我換成不定長的存儲數組會有什麼問題,比如字元串 "12我是",12占用兩個位元組,我是占用應該是6個位元組,這樣存在什麼問題?
-
-
-
Arrays類,常用方法
-
DateFormat
- 正則表達式掠過。
集合框架:單列Collection-雙列Map
怎麼理解隨機存放
那定義一個Object[] o, 那它可以存放各種類型的數據,底層怎麼存放的呢
Object o = 1L 是怎麼存儲的
集合和集合概述、特點存儲結構紅黑樹。java常見容器,如何升級成線程安全的容器
-
介紹Java集合,說幾個常用的數據結構的底層原理
- 介紹Java裡面常見的集合、整體框架,父類之類的
-
Collection--可以看pdf的繼承圖
- collection的方法:add clear remove
- toArray()
- Collection集合的輸出方式:
-
簡單講講List和Set的區別(都是介面),List和Set都繼承了哪個介面,Map繼承了上述介面嗎
-
List, Set, Queue, Map 四者的區別
- List 和 map的實現類 和各自的底層結構
-
List:
- ArrayList和LinkedList區別,優缺點,底層結構,使用場景。
-
ArrayList:
-
為什麼平時都用arraylist,無需同步
-
惰性初始化
-
arraylist擴容機制,底層arraycopy函數,刪除和加入代價都很大
-
數組為什麼可以隨機讀取,底層Object[]數組
-
寫時複製 併發安全CopyOnWriteArrayList 寫入操作的實現
-
copyOnWriteArrayList
-
ArrayList中刪除偶數,不能用remove
-
多線程往ArrayList中寫10萬條數據,會出現什麼問題
-
-
LinkedList
- arraylist對大片的連續記憶體有很高要求,linkedlist只需要碎片空間
- LinkedList為什麼是雙端鏈表,如果一個鏈表沒有被引用,會被立馬刪除嗎
- 分別分析一下插入、刪除、查找的時間複雜度。LinkedList,增刪快查詢慢,
- 可以通過什麼數據結構來加快LinkedList的訪問
-
這兩個插入哪個快。插入海量數據,arraylist和linkedlist哪個快
-
數組是否有併發安全問題(如何解決),ArrayList和linkedlist的多線程問題
-
- ArrayList和LinkedList區別,優缺點,底層結構,使用場景。
-
Set:
-
HashSet: hashset是怎麼基於hashmap實現的。
- 如果自己什麼設計
-
如何去重:兩步
- 如果保存的是一個自定義的對象的話,那我這個對象應該是有什麼動作嗎
-
Set的底層:是哈希表。--即為下麵的HashMap
- 什麼時候轉為紅黑樹。--為什麼是無序的。
-
LinkedHashSet為什麼有序:
- 多一個順序存儲的鏈占據空間。
-
HashSet和TreeSet有什麼區別?
- 集合是如何排序的
- 如果傳入TreeMap的key值是對象,那麼對象應該滿足什麼條件(有Comparable介面)
- 為對象的類//用的集合設置比較器,implements Comparable介面。重寫compareTo方法。
- 代碼
- 比較器底層原理
- treeSet和treeMap的區別?
-
-
Queue
- 常用的方法。
-
Collections的區別
Map:
-
集合關係(Collection、Map)
- Map集合的體系特點。鍵的特點,有key重覆的Map嗎。
- Map是介面,HashMap是實現,用new
- map集合下常用的子類有哪些/實現類
-
常用的api
- 如何獲取鍵值對,keySet( ) 和 .values( )
-
Map集合的遍歷方式:有幾種
- 通過鍵,函數KeySet, entrySet()
Iterator<Map.Entry<String, Integer>> iterator = maps.entrySet().iterator();
-
hashmap
-
特點:
-
key如何保證唯一,是否可為null
-
是有序還是無序的
-
-
hashmap在1.7和1.8的區別
-
底層結構--源碼
- 1.8之前為什麼這麼設置,解決hash衝突有別的辦法嗎
- 閾值初始大小
- 為什麼引入紅黑樹(為什麼不用avl樹,而不是BST、B+、堆等等)? 。紅黑樹自旋條件? 紅黑樹的性質、紅黑樹如何調節平衡
-
成員屬性:
- 什麼時候轉紅黑樹,為什麼紅黑樹閾值是8不是6或者10
- 紅黑樹會退化成鏈表嗎
- 為什麼負載因數是0.75 ,初始容量
-
成員方法:
- Put,如果Key衝突的是怎麼處理的?如何判斷是覆蓋還是加數據?
- JDK1.7 衝突的時候為什麼採用頭插法,添加元素怎麼確定。頭插法和尾插法的區別。迴圈鏈表問題
- 頭插的問題,單線程擴容時先遍曆數組table,接著遍歷table[i]對應的鏈表。
- hash去重的方法,hash碰撞的解決方法。(哈希演算法有幾種、一次性哈希、如何判斷這個哈希演算法優秀)。hash表怎麼實現?答了線性探測,二次探測和開鏈,追問會在不同情況下會用哪種實現方式。瞭解一致性哈希嗎
- resize()
- 1.7存在擴容死鏈問題,1.7和1.8都存在數據丟失問題
- 擴容機制的區別
- 視頻講解-多線程指向同一個引用
- get流程、怎麼哈希
- hashCode()在HashMap的containsKey()函數中的用法,底層實現
- hashCode()和equals()有什麼作用、區別。
- Put,如果Key衝突的是怎麼處理的?如何判斷是覆蓋還是加數據?
-
併發異常
-
java的hashmap的fastfail機制。
-
為什麼不是線程安全的。它在什麼情況下會出現線程不安全的問題,不安全情況下會出現什麼現象?說一下場景
-
如何線程安全,回答讀寫鎖或者concurrenthashmap
-
平時使用hashmap要關註那些方面的東西
-
有措施能讓Hashmap變得線程安全嗎?除了ConcrrentHashmap和Hashtable呢?
- 加鎖()--synchronize-讀寫鎖-reentrylock
- 讀寫鎖的實現原理
- cas(樂觀鎖)cas和syn加在哪
- 加鎖()--synchronize-讀寫鎖-reentrylock
-
-
-
hashmap和treemap有什麼區別,什麼時候用?treemap底層數據結構是什麼?
-
concurrentHashmap
泛型的理解和應用場景
-
使用泛型有什麼好處
-
類方法介面
-
通配符
- 泛型中如何確定上下限(
<? extends T
><? super T>
)
- 泛型中如何確定上下限(
-
泛型檢查
異常:
- 基本介紹
- exception和error區別。
- 異常繼承的根類, 根類有哪些方法
- 編譯期異常和非編譯期異常區別
- 編譯異常:
- Exception , throws,的作用
- try/catch機制
- try finally不用catch行嗎
- 運行時異常:
- 遇到過哪些異常,(空指針在哪遇到了、SQL 異常、類型轉換異常)
- Exception有哪些,從上往下說說看
- 談談 Java 異常處理機制
- final/finally/finalize的使用?
IO:
-
File
- 打開一個文件的流程
-
IO stream
- 序列化Serializable。
- 實現 Serializable 的類修改了類包的路徑,那麼反序列化還能成功嗎?使用 JSON 可以反序列化成功嗎?上面的問題,使用 Object write 的方式會不會有影響
- serializable 介面的作用 是否實現這個介面在類上有什麼區別。自帶的序列化方法有哪些
- 序列化的相容性問題
- jdk的stream,Java streamAPI,parallel StreamAPI
-
IO瞭解嗎
- BIO、AIO、NIO用過嗎。談一下 I/O 多路復用,基於IO多路復用(epoll),兩個線程之間如何通信。epoll的優點。
- 非同步IO是如何實現的
-
IO流都有哪些、繼承關係和應用場景;Stream流的實現原理;
反射
- 反射的理解
- 能幹嗎
- 原理和思想
- 優缺點
- 應用場景:什麼時候用,怎麼用,用過嗎
- 第一步: 獲取類
- 獲取構造: 你自己寫過反射嗎,反射可以調用私有構造函數嗎
- 私有構造器
- 一個類的某個屬性是私有的沒有get/set方法,如何通過反射獲取,代碼上怎麼具體實現
- 獲取私有變數要怎麼做,獲取註解的信息要怎麼做,反射效率低將反射結果進行緩存有遇到過嗎
設計模式
-
單例模式:
-
兩種分類:
- 區別
- 分別應用在什麼場景下
-
餓漢式:
- 靜態變數的方式:
-
懶漢式:
- 靜態內部類實現單例模式為什麼屬於懶漢式的?
- 安全嗎,如何實現安全,鎖加在哪
- 加鎖比較影響性能,那除了加鎖以外有什麼其他方法嗎
- 單例模式雙check,太慢
- 為什麼進行第二次非null判斷
- 如何實現線程安全單例模式?
-
手寫單例模式,各種情況,怎麼保證線程安全
- 為什麼要用DCL,為什麼要用volatile,為什麼要用synchronized,為什麼要鎖住類的.class
-
-
代理模式:
-
代理模式的作用:代理包一層,通過代理對象訪問原始對象
- 代理對象,訪問對象
-
靜態代理
-
動態代理原理
- 什麼時候用
- JDK代理 和 CGLib 對比區別
- 優缺點
- 常用處CGLib在哪用到了
- 如果被代理對象不實現介面怎麼實現代理
- 具體實現
-
方式對比:
- 優缺點
- 動態代理和靜態代理區別
-
-
觀察者模式,說說怎麼設計相應的類
-
工廠模式
-
裝飾器模式,代理模式,以及兩者的區別
-
適配器和裝飾器模式的區別?裝飾者模式和策略模式的區別
-
OOP設計模式六大原則
-
說一下模板模式,舉一些例子
-
實現工廠模式
-
手寫單例模式
-
責任鏈模式在哪裡用到了
-
Java新特性
-
java8?Java11?Java17?
-
java裡面對於不可修改集合怎麼實現
-
最近用的jdk 什麼版本?
-
為什麼要重構,重構解決了什麼問題,怎麼檢驗重構的正確性
java開發規範,看過阿裡的開發規範嗎
類載入順序,構造器,代碼塊,哪個先載入