前言
為了方便之后的面試復習,我把各類面試題給匯總了一下,每道題都是經過自己篩選后覺得需要掌握的,此次整理包括 Java、數據結構與算法、計算機網絡、操作系統、數據庫等。后面我會把這些問題的解答陸續放出來。
1. Java 篇
(1). Java基礎知識
- java中==和equals和hashCode的區別
- int與integer的區別
- 抽象類的意義
- 接口和抽象類的區別
- 能否創建一個包含可變對象的不可變對象?
- 談談對java多態的理解
- String、StringBuffer、StringBuilder區別
- 泛型中extends和super的區別
- 進程和線程的區別
- final,finally,finalize的區別
- 序列化的方式
- string 轉換成 integer的方式及原理
- 靜態屬性和靜態方法是否可以被繼承?是否可以被重寫?以及原因?
- 成員內部類、靜態內部類、局部內部類和匿名內部類的理解,以及項目中的應用
- 講一下常見編碼方式?
- 如何格式化日期?
- Java的異常體系
- 什么是異常鏈
- throw和throws的區別
- 反射的原理,反射創建類實例的三種方式是什么。
- java當中的四種引用
- 深拷貝和淺拷貝的區別是什么?
- 什么是編譯器常量?使用它有什么風險?
- 你對String對象的intern()熟悉么?
- a=a+b與a+=b有什么區別嗎?
- 靜態代理和動態代理的區別,什么場景使用?
- Java中實現多態的機制是什么?
- 如何將一個Java對象序列化到文件里?
- 說說你對Java反射的理解
- 說說你對Java注解的理解
- 說說你對依賴注入的理解
- 說一下泛型原理,並舉例說明
- Java中String的了解
- String為什么要設計成不可變的?
- Object類的equal和hashCode方法重寫,為什么?
(2).多線程
- 開啟線程的三種方式?
- 說說進程,線程,協程之間的區別
- 線程之間是如何通信的?
- 什么是Daemon線程?它有什么意義?
- 在java中守護線程和本地線程區別?
- 為什么要有線程,而不是僅僅用進程?
- 什么是可重入鎖(ReentrantLock)?
- 什么是線程組,為什么在Java中不推薦使用?
- 樂觀鎖和悲觀鎖的理解及如何實現,有哪些實現方式?
- Java中用到的線程調度算法是什么?
- 同步方法和同步塊,哪個是更好的選擇?
- run()和start()方法區別
- 如何控制某個方法允許並發訪問線程的個數?
- 在Java中wait和seelp方法的不同;
- Thread類中的yield方法有什么作用?
- 什么是不可變對象,它對寫並發應用有什么幫助?
- 談談wait/notify關鍵字的理解
- 為什么wait, notify 和 notifyAll這些方法不在thread類里面?
- 什么導致線程阻塞?
- 講一下java中的同步的方法
- 談談對Synchronized關鍵字,類鎖,方法鎖,重入鎖的理解
- static synchronized 方法的多線程訪問和作用
- 同一個類里面兩個synchronized方法,兩個線程同時訪問的問題
- 你如何確保main()方法所在的線程是Java程序最后結束的線程?
- 談談volatile關鍵字的作用
- 談談ThreadLocal關鍵字的作用
- 談談NIO的理解
- 什么是Callable和Future?
- ThreadLocal、synchronized 和volatile 關鍵字的區別
- synchronized與Lock的區別
- ReentrantLock 、synchronized和volatile比較
- 在Java中CycliBarriar和CountdownLatch有什么區別?
- CopyOnWriteArrayList可以用於什么應用場景?
- ReentrantLock的內部實現
- lock原理
- Java中Semaphore是什么?
- Java中invokeAndWait 和 invokeLater有什么區別?
- 多線程中的忙循環是什么?
- 怎么檢測一個線程是否擁有鎖?
- 死鎖的四個必要條件?
- 對象鎖和類鎖是否會互相影響?
- 什么是線程池,如何使用?
- Java線程池中submit() 和 execute()方法有什么區別?
- Java中interrupted 和 isInterruptedd方法的區別?
- 用Java實現阻塞隊列
- BlockingQueue介紹:
- 多線程有什么要注意的問題?
- 如何保證多線程讀寫文件的安全?
- 多線程斷點續傳原理
- 斷點續傳的實現
- 實現生產者消費者模式
- Java中的ReadWriteLock是什么?
- 用Java寫一個會導致死鎖的程序,你將怎么解決?
- SimpleDateFormat是線程安全的嗎?
- Java中的同步集合與並發集合有什么區別?
- Java中ConcurrentHashMap的並發度是什么?
- 什么是Java Timer類?如何創建一個有特定時間間隔的任務?
(3).集合
- Collection 和Collections 的區別?
- 修改對象A的equals方法的簽名,那么使用HashMap存放這個對象實例的時候,會調用哪個equals方法?
- List,Set,Map的區別
- List和Map的實現方式以及存儲方式
- HashMap的實現原理
- HashMap如何put數據(從HashMap源碼角度講解)?
- HashMap的擴容操作是怎么實現的?
- HashMap在JDK1.7和JDK1.8中有哪些不同?
- ConcurrentHashMap的實現原理
- HashTable實現原理
- ArrayMap和HashMap的對比
- HashMap和HashTable的區別
- HashMap與HashSet的區別
- 集合Set實現Hash怎么防止碰撞
- 數組和鏈表的區別
- Array和ArrayList有何區別?什么時候更適合用Array
- .EnumSet是什么?
- Comparable和Comparator接口有何區別?
- Java集合的快速失敗機制 “fail-fast”?
- fail-fast 與 fail-safe 之間的區別?
- BlockingQueue是什么?
- Iterator類有什么作用
- poll()方法和remove()方法區別?
- JAVA8的ConcurrentHashMap為什么放棄了分段鎖,有什么問題嗎,如果你來設計,你如何設計。
(4).JVM
- 什么情況下會觸發類的初始化?
- 談談你對解析與分派的認識。
- 你知道哪些或者你們線上使⽤什么GC策略?它有什么優勢,適⽤於什么場景?
- Ja0v00a類加載器包00括⼏種0?它們之間的⽗⼦關系是怎么樣的?雙親委派機制是什么意思?有什么好處?
- 如何⾃定義⼀個類加載器?你使⽤過哪些或者你在什么場景下需要⼀個⾃定義的類加載器嗎?
- 堆內存設置的參數是什么?
- Perm Space中保存什么數據?會引起OutOfMemory嗎?
- 做GC時,⼀個對象在內存各個Space中被移動的順序是什么?
- 你有沒有遇到過OutOfMemory問題?你是怎么來處理這個問題的?處理 過程中有哪些收獲?
- StackOverflow異常有沒有遇到過?⼀般你猜測會在什么情況下被觸發?如何指定⼀個線程的堆棧⼤⼩?⼀般你們寫多少?
- 內存模型以及分區,需要詳細到每個區放什么。
- 分派:靜態分派與動態分派。
- 虛擬機在運行時有哪些優化策略
- 請解釋StackOverflowError和OutOfMemeryError的區別?
- .在JVM中,如何判斷一個對象是否死亡?
計算機網絡
- 從網絡加載一個10M的圖片,說下注意事項
- OSI網絡體系結構與TCP/IP協議模型
- TCP的3次握手和四次揮手
- 為什么TCP鏈接需要三次握手,兩次不可以么,為什么?
- TCP協議如何來保證傳輸的可靠性
- TCP與UDP的區別
- TCP與UDP的有哪些應用
- HTTP1.0與2.0的區別
- HTTP報文結構
- HTTP的長連接和短連接?
- HTTP與HTTPS的區別以及如何實現安全性
- 如何驗證證書的合法性
- Get與POST的區別
- TCP的擁塞處理
- TCP是如何進行流量控制
- TCP和UDP分別對應的常見應用層協議
- IP地址的分類
- 有了唯一的Mac地址為啥還需要IP地址?
- 交換機、集線器與路由器有什么區別?
- 網橋的作用
- ARP是地址解析協議,簡單語言解釋一下工作原理。
- 網絡接口卡(網卡)的功能?
- IO中同步與異步,阻塞與非阻塞區別
- URI和URL的區別
- GET請求中URL編碼的意義
- 常見狀態碼及原因短語
- 說說Session、Cookie 與 Application
- 如何避免瀏覽器緩存
- 什么是分塊傳送。
- 談談SQL 注入
- DDos 攻擊
- DDos攻擊有那些預防方法?
- 什么是XSS 攻擊
- 從輸入網址到獲得頁面的過程
數據結構與算法
這部分要會手動實現一些數據結構,我總結了以下一些重要的數據結構
數據結構
- 鏈表(增刪查操作)
- 單向鏈表
- 雙向鏈表
- 隊列(增刪查操作)
- 普通隊列
- 優先隊友
- 樹
- 二叉樹(前序、中序、后序)
- 平衡樹(盡量會實現代碼)
- 堆
- 紅黑樹(了解性質、應用場景)
- B樹(了解性質、應用場景)
- 圖
- 深度優先搜索
- 廣度優先搜索
- 最短路徑
- 最小生成樹
- Prim算法
- Kruskal算法
- 拓撲
- 字符串
- Knuth-Morris-Pratt算法
- Boyer-Moore算法
- 散列
幾種算法思想
- 遞歸
- 遞推
- 貪心
- 枚舉
- 動態規划
- 回溯法
- 分治
必學十大排序算法
- 選擇排序
- 插入排序
- 冒泡排序
- 希爾排序
- 歸並排序
- 快速排序
- 堆排序
- 計數排序
- 桶排序
- 基數排序
刷題
牛客網劍指offer六七十到題
leetcode
數據庫
- 請簡潔描述Mysql中InnoDB支持的四種事務隔離級別名稱,以及逐級之間的區別?
- 在Mysql中ENUM的用法是什么?
- CHAR和VARCHAR的區別?
- 事務是如何通過日志來實現的,說得越深入越好
- drop,delete與truncate的區別
- 局部性原理與磁盤預讀
- 數據庫范式
- 存儲過程與觸發器的區別
- 鎖的優化策略
- 什么情況下設置了索引但無法使用
- 什么情況下不宜建立索引?
- 解釋MySQL外連接、內連接與自連接的區別
- 完整性約束包括哪些?
- Mysql 的存儲引擎,myisam和innodb的區別。
- 如何進行SQL優化
- 樂觀鎖和悲觀鎖是什么,INNODB的標准行級鎖有哪2種,解釋其含義。
- MVCC的含義,如何實現的
- MYSQL的主從延遲怎么解決。
spring
1. spring概述
- 使用Spring框架的好處是什么?
- Spring由哪些模塊組成?
- 解釋AOP模塊
- 解釋WEB 模塊
- 核心容器(應用上下文) 模塊。
- 什么是Spring IOC 容器?
- IOC的優點是什么?
- ApplicationContext通常的實現是什么?
- Bean 工廠和 Application contexts 有什么區別?
- Bean 工廠和 Application contexts 有什么區別?
2. spring依賴注入
- 什么是Spring的依賴注入?
- 有哪些不同類型的IOC(依賴注入)方式?
- 什么是Spring beans?
- 一個 Spring Bean 定義 包含什么?
- 解釋Spring支持的幾種bean的作用域。
- Spring框架中的單例bean是線程安全的嗎?
- 解釋Spring框架中bean的生命周期
- 哪些是重要的bean生命周期方法? 你能重載它們嗎?
- 什么是bean裝配?
- 什么是bean的自動裝配?
- 解釋不同方式的自動裝配 。
- 自動裝配有哪些局限性 ?
3. spring 注解
- 怎樣開啟注解裝配?
- 談談@Required、 @Autowired、 @Qualifier注解。
4, spring 數據訪問
- 在Spring框架中如何更有效地使用JDBC?
- 使用Spring通過什么方式訪問Hibernate?
- Spring框架的事務管理有哪些優點?
5. Spring面向切面編程(AOP)
- 解釋AOP
- Aspect 切面
- 在Spring AOP 中,關注點和橫切關注的區別是什么?
- 通知
- 有幾種不同類型的自動代理?
- 什么是織入。什么是織入應用的不同點?
6. springMVC
- 什么是Spring的MVC框架?
- DispatcherServlet
- WebApplicationContext
- 什么是Spring MVC框架的控制器?
- @Controller 注解
- @RequestMapping 注解
JavaWeb
servlet與Tomcat
- Servlet生命周期
- forward和redirect的區別
- tomcat容器是如何創建servlet類實例?用到了什么原理?
- 什么是cookie?Session和cookie有什么區別?
- Servlet安全性問題
- Tomcat 有哪幾種Connector 運行模式(優化)?
JSP
- jsp靜態包含和動態包含的區別
- jsp有哪些內置對象?作用分別是什么?
- jsp和servlet的區別、共同點、各自應用的范圍?
- 寫出5種JSTL常用標簽
- JSP是如何被執行的?執行效率比SERVLET低嗎?
- 說出Servlet和CGI的區別?
- 簡述JSP的設計模式。
最后
后面還會陸續找一些其他的,例如 redis,消息隊列以及一些情景題,暫時先放這么多,后面會陸續給出解答。
最后推廣下我的公眾號:苦逼的碼農,文章都會首發於我的公眾號,期待各路英雄的關注交流。