前言
為了方便之後的面試複習,我把各類面試題給彙總了一下,每道題都是經過自己篩選後覺得需要掌握的,此次整理包括 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,訊息佇列以及一些情景題,暫時先放這麼多,後面會陸續給出解答。
最後推廣下我的公眾號:苦逼的碼農,文章都會首發於我的公眾號,期待各路英雄的關注交流。