前言
由於疫情的原因金三銀四也不是那么好找工作了,雖然沒打算換工作,不過每年這個時候出去面試一下也是不錯的,確認一下自己當前的技術水平,順便了解一下當前業內流行的技術。當然,要是有好的工作機會,跳槽也無妨..話不多說,總結一下Java的知識點,以后復習起來也容易些
一、Java基礎
- 面向對象的概念
- ArrayList,LinkedList
- String為什么final,它的equals方法怎么重寫的,String.internal,字符串常量池相關
- HashMap底層實現及在jdk1.7,1.8的區別,HashMap 的長度為什么是 2 的冪次方、HashMap 多線程操作導致死循環問題、HashMap 的線程安全實現有哪些、ConcurrentHashMap 的底層實現
- fail-fast 和 fail-safe
- Integer 緩存池(自動裝拆箱)
- JDK 動態代理和 GClib 動態代理、JDK 動態代理具體實現原理、CGLib 動態代理、兩者對比。
- 設計模式:單例模式、工廠模式、代理模式、策略模式等
二、多線程
- 悲觀鎖、樂觀鎖
- 分布式鎖的實現(redis,zookeeper)
- Threadlocal 內存泄漏問題
- Synchronized是悲觀鎖,CAS是樂觀鎖
- CAS 帶來的 ABA 問題。CAS 帶來的循環時間長開銷大問題。CAS 帶來的只能保證一個共享變量的原子操作問題。CAS 是如何保證原子操作的。
- volatile關鍵字,指令重排序的問題
- 可重入鎖,偏向鎖,自旋鎖
- ThreadPoolExecutor線程池創建參數
- 線程池的5種狀態:
- 1.Running: 接受新task, 處理等待的task
- 2.ShutDown: 不接受新task,但處理等待的task;
- 3.Stop: 不接受新task, 不處理等待的task, 嘗試打斷正在執行的task;
- 4.Tidying:但所有task都被終止, worCount == 0的時候(workCount是指有效的線程數);
- 5.Terminated: 執行完terminated()方法;
- 多線程間通信的幾種方式:
- 使用 volatile 關鍵字。
- 鎖機制
- final 關鍵字
- ThreadLocal 類
- JUC 包中的相關 lock 類
三、框架
- Spring IOC AOP,如何解決循環依賴
- Spring中FactoryBean,BeanFactory與ApplicationContext
- Spring中的bean是否線程安全?(不安全)
- bean的生命周期,加載過程
- Springboot啟動流程
- SpringMVC工作流程
- Mybatis核心對象及流程,緩存機制,與Hibernate對比
- hibernate的對象狀態
- SpringCloud隔離,限流,熔斷,降級
四、數據庫
- MySQL、Oracle、索引、存儲過程、查詢優化,默認事務隔離級別:可重復讀
- MySQL索引分為hash和B+,哈希表的特點就是可以快速的精確查詢,但是不支持范圍查詢,B+樹范圍查詢效率更高,B+樹中一個節點為一頁或頁的倍數最為合適
- InnoDb 和 MyISAM 有什么區別,這兩個引擎實現 BTree 索引方式的區別
- 索引的最左匹配原則,索引失效的幾種情況,聚簇索引與非聚簇索引
- 事務特性,隔離級別。分布式事務的解決方案
- 慢Sql定位及優化,分庫分表等
五、中間件
- Redis數據類型,消息隊列,Lua腳本,Redis哨兵模式,持久化RDB和AOF。一致性hash
- Redis作為緩存時的數據一致性,緩存的三個問題及解決方案:緩存雪崩,緩存擊穿,緩存穿透
- Kafka,RocketMQ,重復消費,順序消息,事務消息,高可用,消息丟失,擠壓場景,整個消息發送消費的流程
- Zookeeper:zookpeer 選舉算法。Paxos 算法。Raft 算法。ZAB 協議
六、JVM
- JVM內存模型
- 程序計數器(記錄當前線程)
- Java棧(虛擬機棧)
- 本地方法棧
- 堆
- 方法區
- 直接內存
- JVM 垃圾回收
- 垃圾判斷標准
- 引用計數法
- 可達性分析算法(根索法)
- 垃圾回收算法
- 標記清除
- 復制算法(新生代From、To)
- 標記整理(老年代)
- 分代回收
- 垃圾收集器
- Serial 垃圾收集器(單線程、復制算法) (新生代)
- ParNew 垃圾收集器(Serial+多線程) (新生代)
- Parallel Scavenge 收集器(多線程復制算法、高效) (新生代)
- Serial Old 收集器(單線程標記整理算法 ) (老年代)
- Parallel Old 收集器(多線程標記整理算法)(老年代)
- CMS 收集器(多線程標記清除算法) (老年代)
- G1垃圾回收器
- Minor GC 和 Full GC,Full GC 觸發條件
七、計算機網絡
- OSI七層模型
- HTTP請求流程
- GET/POST區別
- UDP/TCP區別
- TCP三次握手及衍生問題:
- 什么是TIME-WAIT
- 為什么一定是三次握手不是兩次
- 流量控制,滑動窗口,擁塞控制,慢啟動,擁塞避免,快重傳,快恢復
- HTTP 1.0、1.1、2.0
- HTTPS的流程
- SSL是什么
- TCP/IP四層協議
- DNS,ARP協議原理
- DOS攻擊如何解決
- DNS欺騙如何解決,ARP欺騙等
- XSS、CSRF、iFrame安全問題
- Session的實現機制,分布式環境下的注意事項
- 如何判斷遠程機器上某個端口是否開啟
- nginx+tomcat,服務端如何獲取客戶端請求IP
八、算法
- 數據結構:隊列,數組,棧,鏈表,樹,散列,堆,圖
- 二叉樹遍歷方式:前序,中序,后序遍歷,層次遍歷
- 最短路徑算法:dijkstra 迪傑斯特拉算法(時間復雜度O(n²)),floyd 弗洛依德算法(時間復雜度O(n³))
- 圖:深度優先搜索(DFS),廣度優先搜索(BFS)
- 八種數組排序:
-
九、Linux
- 常用命令ls,netstat -anp,top,ifconfig,df -h,ps -ef
- JVM調優命令jstat,jmap,jstack
- 進程調度算法
- 先來先服務FCFS
- 短作業優先SPN
- 最短剩余時間優先SRT
- 高響應比優先HRRN
- 時間片輪轉
- 優先權
- 多級反饋隊列
- 用戶態與內核態轉換
遇到的主要問題基本是這些,還沒有面試過大廠,不知道大廠面試會問一些什么其他問題,以后有機會面試了再記錄下來。