養成每年都去面試市場看看的好習慣很重要,看清形勢,也認清自己 zzz ...
知識點都要見識過,至少有印象 (否則:喔唷~~~ 不給性感面試官,在線發offer的機會嘍)
目錄
1.Java入門知識點分析
- 什麼是面向對象 *
- java有哪幾種基本數據類型
- java語言基本格式
- 普通類/ 接口類 / 抽象類 / 枚舉類 的共性
- 普通類/ 接口類 區別?
- 普通類/ 抽象類 區別?
- 普通類/ 枚舉類 區別?
- 接口類/ 抽象類 區別?
- 繼承注意事項?
- 接口實現注意事項?
- 訪問修飾符有幾種?
- 訪問修飾符對 類 / 屬性 / 方法上分別起什麼作用?
- static 修飾符有什麼作用?
- final 修飾符作用?
- java中對象怎麼創建?
- i++ 與 ++i的區別?
- = 與 == 分別是什麼含義?
- 數組有幾種創建方式?
- 字符串創建有幾種方式?
- java中超類是哪個,有什麼特點?
- java集合有哪幾種?
- 數組和鏈表的區別?(數據結構)
2.java基礎知識
java基礎語法
- 繼承和接口實現有什麼區別?
- 多態是什麼?
- 重寫和重載的區別?
- java中根據數據類型區分:可以分爲哪2種?
java基本數據類型
- java有哪幾種基本數據類型 ,對應的包裝類是哪些?
- int 類型能否爲null?
- byte / short / int / long,在內存中存儲 對應字的節數爲多少?
- float / double 精度 ?
- boolean默認值是? 在內存中存儲的值是怎麼樣?
- int 類型引用 能指向 long類型空間 嗎?反之呢? (可以從內存角度分析)爲什麼?
- int類型值上下限是多少?
- byte類型 與 bit 區別?
- 基本數據類型 --- 自動類型轉換順序知道嗎?從高到底依次是怎麼樣的?
- 能把大容量類型轉換爲小容量類型嗎?
- char類型轉int類型的結果可以去哪兒查? (有對應的表)
- 精度值強轉成整型,是進行4舍5入還是其它?
- 整型 3/2 結果是多少?
- Math中取餘數的方法對負數是怎麼處理的?
java包裝類
- Object類中有多少個方法?每個方法的作用
- 其中的clone() 方法與序列化相比有什麼區別?
- finalize() 方法什麼作用?
- Integer包裝類瞭解多少?
-
Integer a= 128; int a1 = 128; Integer a2= 128; Integer b= 129; int b1 = 129; Integer c= new Integer(128); Integer d= new Integer(129); System.out.println( a == 128); System.out.println( a == (Integer) 128); System.out.println( a == a1); System.out.println( a == a2); System.out.println( a == c); System.out.println( b == b1); System.out.println( b == d);
- 交換Integer類型的2個值,方法怎麼寫?
Integer a= 128; Integer b= 129; System.out.println( "交換前:a = " + a + ", b = " + b); swap(a, b); System.out.println( "交換後:a = " + a + ", b = " + b); public static void swap(Integer i, Integer j){ Integer temp = new Integer(i.intValue()); try { Field intValue = Integer.class.getDeclaredField("value"); intValue.setAccessible(true); intValue.set(i, j); intValue.set(j, temp); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }
上面這個方法對嗎?裏面有涉及到多少知識點?
- String 類能否被繼承?
- String對象能否修改?
- String類中常用方法有哪些?
- 字符串比較
String a = "abc"; String b = "abc"; String c = new String("abc"); System.out.println( a == b); System.out.println( a == c);
結果怎麼樣?能從內存模型角度解析一下嗎?
-
字符串比較
public static void main(String[] args) { String a = "ab"; String c = "cd"; String d = "abcd" String e = "ab" + "cd" + ""; String f = a + "cd"; String g = a + c; }
判斷上面 d == e / e == f / e == g / f == g ,哪些爲true,哪些爲false?爲什麼(String運行反編譯文章 傳送門)
-
StringBuffer 和 StringBuild的比較?
-
String 類的 indexof() 方法什麼意思?
-
String類的replace() 和 replaceAll () 有什麼區別?
-
trim() 能去除字符串中間的空白符嗎?
-
intern() 方法有什麼用,jdk5之後該方法做了什麼修改?
java集合容器
-
數組與集合有什麼區別 ?*(傳送門)
-
java中集合類有哪些 ?
-
collection 與collects 有什麼區別 ?
-
iterator和 Iterable 有什麼區別 ?
-
comparator<T> 比較函數式接口理解多少,compareable 排序接口 怎麼使用?寫個程序舉例子
-
Collection中有remove方法 Iterator中也有remove,2者有什麼區別 ?
-
List 和 Set的區別 ?
-
List是否可以存儲重複的值嗎 ?有順序嗎?可以存儲null嗎? Map呢 ?
-
數組和鏈表 數據結構上的區別 ?
-
List是否是線程安全的?如果不安全,能否舉個例子說明不安全 ?
-
CopyOnWriteArrayList 的使用瞭解嗎 ?
-
Set有什麼特點?一般什麼場景使用它 ?
-
HashSet 和 TreeSet有什麼區別?內部實現能描述嗎?
-
Collection 常用方法有哪些知道嗎 ?1.8之後加入什麼方法 ?
-
Map 常用方法知道嗎 ?Properties實現了什麼接口 ?
-
Map中k-v,key能存儲空值嗎?value能存儲空值嗎?
-
HashMap也是變長的,默認長度是多少?什麼情況下,會進行擴容 ?
-
HashMap 1.7 中put操作的流程大概記得嗎?大概描述一下?
-
HashMap 1.7 中get操作的流程大概記得嗎?大概描述一下?
-
HashMap 1.7 中size操作的流程大概記得嗎?大概描述一下?
-
HashMap和HashTable的區別?
-
CurrentHashMap 與 HashMap有什麼區別?
-
HashMap底層實現?1.8版本有什麼新改動?
-
HashMap 1.8 中put操作的流程大概記得嗎?大概描述一下?
-
HashMap 1.8 中get操作的流程大概記得嗎?大概描述一下?
-
HashMap 1.8 中size操作的流程大概記得嗎?大概描述一下?
-
Hash衝突問題怎麼解決?
-
CurrentHashMap1.7 如何實現同步,可以談談內部結構? 1.8版本做了些什麼改動
-
CurrentHashMap在1.7中segment初始化都在什麼時候?
-
CurrentHashMap在1.7中put中先獲取鎖還是先擴容?(送分)
-
CurrentHashMap在1.7中size會發生什麼問題,推薦使用嗎?
-
CurrentHashMap 1.8版本如何實現同步?取消使用AQS機制,用到了synchronized,爲什麼這麼選擇?
-
核心方法: tabAt / casTabAt / setTabAt 這幾個方法如何實現保證線程安全?
-
CurrentHashMap 1.8版本中紅黑樹 與 鏈表什麼時候互相開始轉換?8 ,6
-
CurrentHashMap 1.8版本的併發度?
-
CurrentHashMap 1.8 中put操作的流程大概記得嗎?大概描述一下?
-
CurrentHashMap 1.8 中get操作的流程大概記得嗎?大概描述一下?
-
CurrentHashMap 1.8 中size操作的流程大概記得嗎?大概描述一下?
-
SkipList - 跳錶的數據結構?
-
SkipList - 跳錶出現的目的?增快查詢的數據
-
SkipList - 跳錶的查詢思想?空間換時間!
-
普通二分概念? 二叉樹的概念?
-
當二叉樹出現最壞情況變成鏈表的情況,怎麼解決?通過左右旋靠近平衡二叉樹,紅黑樹!
-
CopyOnWriteArrayList 寫時復置容器,用空間換時間,單服務可以使用做白名單/黑名單!
java工具類
-
Number類瞭解多少?
-
數組的創建方式?
-
日期類Date() 與JDK8新加入的日期類 LocalDateTime() 橫向比較.
-
計算2個時間之間相隔多少天? (多方法實現)
-
正則語法不要忘記>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
java運算符/循環結構
-
循環有哪幾種方法,continue, break; return; 在循環中分別起到什麼作用?
-
switch () 入參類型限制? 字符串類型可以嗎(什麼版本jdk加入)?
-
下面的代碼最終輸出什麼內容?
public static void main(String args[]){ int i = 1; switch(i){ case 0: System.out.println("0"); case 1: System.out.println("1"); case 2: System.out.println("2"); default: System.out.println("default"); } }
-
普通for循環, 增強for 循環, foreach循環有什麼區別嗎?
-
java8新增的循環方式: IntStream.range(a, b).forEach(),與普通for循環相比優勢和劣勢?
-
IntStream.range(a, b)循環想要加入stop條件?(java9中加入了那些方法)
-
位運算符>> 與 >>> 的區別?位運算了解多少?
java反射
-
創建一個對象有那些方式?
-
Java中的反射可以怎麼理解?
-
獲取Class有哪些方式?
-
反射怎麼獲取屬性/方法?
-
對象的私有屬性,沒有公用方法,怎麼修改值?
-
Junit中是否使用到反射知識?
-
Spring的Bean創建是否使用了反射? 如果有是Cglib 還是java自帶動態代理proxy?
-
註解解析是否使用反射,怎麼使用的?
java 流IO (這塊不大熟悉)
-
字節流,字符流了解多少?
-
BIO是什麼,有什麼特點?
-
NIO是什麼,有什麼特點?
java 錯誤/異常Throwable
-
java語言中所有錯誤/異常的超類是什麼?
-
throw 和 throws的區別是什麼?
-
Exception 和 RuntimeException 怎麼理解?舉例子說明更棒
-
什麼是編譯期異常?什麼是運行時異常?
-
常見的異常知道多少?列舉20個(😄,直接榨乾)
-
Error 和 Exception有什麼區別?能舉例說明嗎?
-
java中什麼是異常鏈?我們一般利用異常鏈做什麼?
-
try / catch / finally
public static void main(String[] args) { System.out.println(test1(0)); System.out.println(test2(0)); System.out.println(test3(0)); System.out.println(test4(0)); } public static Integer test1(Integer a) { try { a += 1; return a; } catch (Exception e) { a += 10; } finally { a += 100; System.out.println("finally:" + a); } return a; } public static Integer test2(Integer a) { try { a += 1; } catch (Exception e) { a += 10; } finally { a += 100; System.out.println("finally:" + a); } return a; } public static Integer test3(Integer a) { try { a += 1/0; } catch (Exception e) { a += 10; return a; } finally { a += 100; System.out.println("finally:" + a); } return a; } public static Integer test4(Integer a) { try { a += 1/0; return a; } catch (Exception e) { a += 10; } finally { a += 100; System.out.println("finally:" + a); } return a; }
輸出結果如何,能解釋一下嗎?
-
catch方法
try { XXXX } catch (Exception ex) { ex.printStackTrace(); } catch (RuntimeException re) { re.printStackTrace(); }
上面的代碼會報錯嗎?屬於什麼時期的異常?
java線程知識
-
多線程的意義?
-
時間片輪轉概念?
-
線程的並行數和併發數的區別?
-
多線程之間是協作式還是搶佔式工作?
-
Java內存模型瞭解嗎?多線程運行,內存如何分配!
-
java中創建新線程的方式有哪些?
-
Thread類瞭解多少?裏面有哪些常用方法?
-
Runnable接口瞭解嗎?
-
run() / start() 方法有什麼區別?
-
runnable 接口和 callable接口有什麼區別?
-
帶返回值的新起線程,怎麼獲取返回值?
-
對Future<V> 瞭解多少,get()獲取線程返回值,會等待嗎還是直接返回null?
-
(函數式方法)lambad表達式實現一個線程創建?
-
以前對於線程知識也有過一些提問(傳送門)
-
線程運行的流轉狀態有那些?
-
wait 與 notify 有什麼作用? notify 和 notfiyAll 有什麼區別?一般怎麼選擇
-
sleep與wait有什麼區別?
-
interrupt 與interrupted 有什麼區別?分別是什麼作用
-
怎麼安全的停止線程,停止服務?
-
什麼是死鎖?(死鎖例子:傳送門)
-
synchronized關鍵字能在基本數據類型上使用嗎?能在 Integer 上使用嗎?
-
synchronized能在哪些位置使用,方法?方法塊?靜態方法?
-
volatile關鍵字的作用,與synchronized相比有什麼區別,結合內存模型談談?
-
ThreadLocal 概念?線程局部變量!
-
在ThreadLocal中內存泄漏怎麼發生? (tip:Thread類中ThreadLocalMap -- Entry extends WeakReference<ThreadLocal<?>>)
-
strongReference / softReference / weakReference / 虛引用 的區別?
-
線程池大概是什麼,有什麼作用?
-
線程池創建入參有哪些?分別有什麼作用?
-
線程池該如何選擇?針對不同的情況:IO密集型和 CPU密集型
-
線程池的等待隊列如何選擇 =====> 什麼情況 ?有界or無界
-
拒絕策略的目的是什麼?拒絕策略我們如何選擇 ?
-
BlockingQueue:什麼是阻塞(等待)隊列?
-
BlockingQueue:對於生產者和消費者模式,什麼時候會出現阻塞?有界和無界的區別
-
DelayQueue :延遲隊列有什麼特點?
-
阻塞隊列的操作?隊列插入元素有哪幾種?移除元素有哪幾種?有什麼區別?
-
阻塞隊列的檢查方法有哪些?有什麼區別
-
Executors 類內部給我們實現了很多種類型的線程池,可以隨便取2個分析一下嗎?
-
除了java語言鎖synchronized,還有其它鎖嗎?
-
CAS原理?與synchronized相比較呢?
-
cas的使用會出現哪些問題? ABA問題怎麼發生? 怎麼避免?(和volatile搭配使用香不香?)
-
JDK併發包 - 代碼實現的鎖 Lock 瞭解多少?
-
ReentrantLock鎖瞭解多少?幾個核心方法是什麼?
-
ReentrantLock鎖的使用固定格式知道嗎?
-
公平鎖和非公平鎖區別在哪兒?效率怎麼比較?
-
ReentrantLock是否可重入?可重入的概念是什麼?
-
當讀多寫少的時候如何選擇鎖?讀寫鎖瞭解多少?如何使用?
-
關於AQS瞭解多少?能否自己實現一個簡單的可重入鎖?
-
鎖的對象是什麼?繼承AbstractQueuedSynchronize 需要實現那幾個主要方法?(標記當前獲取鎖線程方法, trylock / release)
-
關於tryAcquire() 方法的核心操作怎麼一個實現流程知道嗎?傳送門
-
AQS中有一個condition類的使用,瞭解多少呢?
-
AQS中LockSupport這個又瞭解多少呢?
-
對於AQS實現的鎖,能畫一張圖來描述一下嗎?