【精挑細選】史上最全Java工程師面試題彙總,沒有之一,不接受反駁

帥地發表於2019-05-05

前言

為了方便之後的面試複習,我把各類面試題給彙總了一下,每道題都是經過自己篩選後覺得需要掌握的,此次整理包括 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,訊息佇列以及一些情景題,暫時先放這麼多,後面會陸續給出解答。

最後推薦下我的公眾號:苦逼的碼農,主要分享一下技術文章、面試題、演算法題,各種工具、視訊資源等,裡面已有100多篇原創文章,期待各路英雄來交流,點選即可掃碼關注戳我即可關注

相關文章