![互聯網大廠面試334題:JVM+數據庫+緩存+Spring+Linux+Netty等](http://p2.ttnews.xyz/loading.gif)
前言
2019年即將結束,一邊是大批同學湧入職場,另一邊是大群職場人打算跳槽,在這個重要的節點,Java程序員如何才能把握時機,搞定面試官,拿到一份心儀的工作呢?
除了掌握紮實的專業技能之外,在面試之前還需要刷足夠的真題,才能在萬千面試者中殺出重圍,成功拿下offer。
這份面試題合集來自於百度、騰訊、字節跳動和美團4個互聯網大廠,裡面涉及到的技術知識點包括:JAVA基礎、多線程、設計模式、JVM、數據結構與算法、數據庫、Spring、Netty、緩存、分佈式等知識點,甚至對一些技術框架和技術深度都有探究。
因為篇幅原因,只展示了部分專題和部分答案,需要完整版的可以直接私信【面試】即可免費獲取!
![互聯網大廠面試334題:JVM+數據庫+緩存+Spring+Linux+Netty等](http://p2.ttnews.xyz/loading.gif)
JAVA 基礎
- 八種基本數據類型的大小,以及他們的封裝類
- 引用數據類型
- Switch 能否用 string 做參數
- equals與==的區別
- 自動裝箱,常量池
- Object有哪些公用方法
- Java的四種引用,強弱軟虛,用到的場景
- Hashcode的作用
- HashMap的hashcode的作用
- 為什麼重載hashCode方法
- ArrayList、LinkedList、Vector的區別
- String、StringBuffer與StringBuilder的區別
- Map、Set、List、Queue、Stack的特點與用法。
- JDK7與JDK8中HashMap的實現
- HashMap和ConcurrentHashMap的區別,HashMap的底層源碼
- ConcurrentHashMap能完全替代HashTable嗎?
- 為什麼HashMap是線程不安全的
- 多併發情況下HashMap是否還會產生死循環
- TreeMap、HashMap、LindedHashMap的區別
- Collection包結構,與Collections的區別
- try?catch?finally,try裡有return,finally還執行麼
- Excption與Error包結構,OOM你遇到過哪些情況,SOF你遇到過哪些情況
- Java(OOP)面向對象的三個特徵與含義
- Override和Overload的含義去區別
- Interface與abstract類的區別
- Static?class?與non?static?class的區別
- foreach與正常for循環效率對比
- Java?IO與NIO
- java反射的作用與原理
- 泛型常用特點
- 解析XML的幾種方式的原理與特點:DOM、SAX
- Java1.7與1.8,1.9,10 新特性
- 設計模式:單例、工廠、適配器、責任鏈、觀察者等等
- JNI的使用
- AOP是什麼
- OOP是什麼
- AOP與OOP的區別
Java基礎面試題答案:
多線程面試題
- 什麼是線程?
- 什麼是線程?
- 什麼是自旋鎖?
- 什麼是Java內存模型?
- 什麼是CAS?
- 什麼是樂觀鎖和悲觀鎖?
- 什麼是AQS?
- 什麼是原子操作?在Java Concurrency API中有哪些原子類(atomic classes)?
- 什麼是Executors框架?
- 什麼是阻塞隊列?如何使用阻塞隊列來實現生產者-消費者模型?
- 什麼是Callable和Future?
- 什麼是FutureTask?
- 什麼是同步容器和併發容器的實現?
- 什麼是多線程?優缺點?
- 什麼是多線程的上下文切換?
- ThreadLocal的設計理念與作用?*(需要在深入下源代碼原理)
- ThreadPool(線程池)用法與優勢?
- Concurrent包裡的其他東西:ArrayBlockingQueue、CountDownLatch等等。
- synchronized和ReentrantLock的區別?
- Semaphore有什麼作用?
- Java Concurrency API中的Lock接口(Lock interface)是什麼?對比同步它有什麼優勢?
- Hashtable的size()方法中明明只有一條語句”return count”,為什麼還要做同步?
- ConcurrentHashMap的併發度是什麼?
- ReentrantReadWriteLock讀寫鎖的使用?
- CyclicBarrier和CountDownLatch的用法及區別?
- LockSupport工具?
- Condition接口及其實現原理?*
- Fork/Join框架的理解?
- wait()和sleep()的區別?
- 線程的五個狀態(五種狀態,創建、就緒、運行、阻塞和死亡)?
- start()方法和run()方法的區別?
- Runnable接口和Callable接口的區別?
- Java中如何獲取到線程dump文件?
- 線程和進程有什麼區別?
- 線程實現的方式有幾種(四種)?
- 高併發、任務執行時間短的業務怎樣使用線程池?併發不高、任務執行時間長的業務怎樣使用線程池?併發高、業務執行時間長的業務怎樣使用線程池?
- 如果你提交任務時,線程池隊列已滿,這時會發生什麼?
- 鎖的等級:方法鎖、對象鎖、類鎖?
- 如果同步塊內的線程拋出異常會發生什麼?
- 併發編程(concurrency)並行編程(parallellism)有什麼區別?
- 如何保證多線程下 i++ 結果正確?
- 一個線程如果出現了運行時異常會怎麼樣?
- 如何在兩個線程之間共享數據?
- 生產者消費者模型的作用是什麼?
- 怎麼喚醒一個阻塞的線程?
- Java中用到的線程調度算法是什麼?
- 單例模式的線程安全性?
- 線程類的構造方法、靜態塊是被哪個線程調用的?
- 同步方法和同步塊,哪個是更好的選擇?
- 如何檢測死鎖?怎麼預防死鎖?
多線程面試題答案:
JVM
- 內存模型以及分區,需要詳細到每個區放什麼?
- 對象創建方法,對象的內存分配,對象的訪問定位。
- GC的兩種判定方法:引用計數與引用鏈。
- GC的三種收集方法:標記清除、標記整理、複製算法的原理與特點,分別用在什麼地方,如果讓你優化收集方法,有什麼思路?
- GC收集器有哪些?CMS收集器與G1收集器的特點。
- Minor?GC與Full?GC分別在什麼時候發生?
- 幾種常用的內存調試工具:jmap、jstack、jconsole。
- 類加載的五個過程:加載、驗證、準備、解析、初始化。
- 雙親委派模型:Bootstrap?ClassLoader、Extension?ClassLoader、ApplicationClassLoader。
- 分派:靜態分派與動態分派。
- JVM過去過來就問了這麼些問題,沒怎麼變,內存模型和GC算法這塊問得比較多,可以在網上多找幾篇博客來看看。
- 推薦書籍:《深入理解Java 虛擬機》
JVM答案:
數據結構與算法
- 鏈表與數組。
- 隊列和棧,出棧與入棧。
- 鏈表的刪除、插入、反向。
- 字符串操作。
- Hash表的hash函數,衝突解決方法有哪些?
- 各種排序:冒泡、選擇、插入、希爾、歸併、快排、堆排、桶排、基數的原理、平均時間複雜度、最壞時間複雜度、空間複雜度、是否穩定。
- 快排的partition函數與歸併的Merge函數。
- 對冒泡與快排的改進。
- 二分查找,與變種二分查找。
- 二叉樹、B+樹、AVL樹、紅黑樹、哈夫曼樹。
- 二叉樹的前中後續遍歷:遞歸與非遞歸寫法,層序遍歷算法。
- 圖的BFS與DFS算法,最小生成樹prim算法與最短路徑Dijkstra算法。
- KMP算法。
- 排列組合問題。
- 動態規劃、貪心算法、分治算法。
- 大數據處理:類似10億條數據找出最大的1000個數
答案:
數據庫
- 事務四大特性(ACID)原子性、一致性、隔離性、持久性
- 數據庫隔離級別,每個級別會引發什麼問題,mysql默認是哪個級別
- innodb和myisam存儲引擎的區別
- MYSQL的兩種存儲引擎區別(事務、鎖級別等等),各自的適用場景
- 查詢語句不同元素(where、jion、limit、group by、having等等)執行先後順序
- 數據庫的優化(從sql語句優化和索引兩個部分回答)
- 索引有B+索引和hash索引,各自的區別
- B+索引數據結構,和B樹的區別
- 索引的分類(主鍵索引、唯一索引),最左前綴原則,哪些情況索引會失效
- 聚集索引和非聚集索引區別
- 有哪些鎖(樂觀鎖悲觀鎖),select時怎麼加排它鎖
- 關係型數據庫和非關係型數據庫區別
- 數據庫三範式,根據某個場景設計數據表(可以通過手繪ER圖)
- 數據庫的讀寫分離、主從複製
- 使用explain優化sql和索引
- long_query怎麼解決
- 內連接、外連接、交叉連接、笛卡兒積等
- 死鎖判定原理和具體場景,死鎖怎麼解決*
- Archaic和char的使用場景。
- mysql併發情況下怎麼解決(通過事務、隔離級別、鎖)
- 數據庫崩潰時事務的恢復機制(REDO日誌和UNDO日誌)
- 查詢語句不同元素(where、jion、limit、group by、having等等)執行先後順序
數據庫面試題答案:
Spring
- IOC和DI是什麼?
- Spring IOC 的理解,其初始化過程?*
- BeanFactory 和 FactoryBean的區別?
- BeanFactory和ApplicationContext的區別?
- ApplicationContext 上下文的生命週期?
- Spring Bean 的生命週期?*
- Spring AOP的實現原理
- Spring 是如何管理事務的,事務管理機制?
- Spring 的不同事務傳播行為有哪些,幹什麼用的?
- Spring 中用到了那些設計模式?
- Spring MVC 的工作原理?
- Spring如何解決循環依賴?
- Spring 如何保證 Controller 併發的安全?
Spring 答案:
Netty
- BIO、NIO和AIO
- Netty 的各大組件
- Netty的線程模型
- TCP 粘包/拆包的原因及解決方法
- 瞭解哪幾種序列化協議?包括使用場景和如何去選擇?
- Netty的零拷貝實現
- Netty的高性能表現在哪些方面
Netty面試題答案:
緩存
- Redis用過哪些數據數據,以及Redis底層怎麼實現
- Redis緩存穿透,緩存雪崩
- 如何使用Redis來實現分佈式鎖
- Redis的併發競爭問題如何解決
- Redis持久化的幾種方式,優缺點是什麼,怎麼實現的
- Redis的緩存失效策略
- Redis集群,高可用,原理
- Redis緩存分片
- Redis的數據淘汰策略
緩存面試題答案:
Linux 面試題
- 硬鏈接和軟連接區別
- kill用法,某個進程殺不掉的原因(進入內核態,忽略kill信號)
- Linux用過的命令
- 系統管理命令(如查看內存使用、網絡情況)
- 管道的使用
- grep的使用,一定要掌握,每次都會問在文件中查找
- shell腳本
以上展示的部分面試真題(包括未展示的)均含有詳細的解析,整理成了PDF,需要完整版的小夥伴,評論+轉發,關注我,然後私信回覆【面試】即可免費獲取哦!
閱讀更多 Java高級架構師阿谷 的文章