面試時間將近兩個小時(期間等待二面面試官來面我的時候等了半個多小時)面試官問的東西很多,還挖了好幾個坑,一個技術點套着一個技術點的問,一定要做好萬全的準備。問了一些基本層面上的技術點都答出來了,稍微問深一點我就有點懵了(實戰經驗還是不足)。
回來之後把這些題目做了一個分類並整理出答案(每次去面試的時候面試官問的問題面試結束後我都會做筆記)分爲Spring+邏輯算法+MySQL+Java+Redis+併發編程+JVM+RabbitMQ等,接下來分享一下我的這次螞蟻二面面經+一些我的學習筆記。
注意注意!!!:需要小編整理的Spring+邏輯算法+MySQL+Java+Redis+併發編程+JVM+RabbitMQ等面試答案、學習文檔筆記、思維導圖(xmind)的朋友可以點個喜歡,私信我免費領取!!!
1. 阿里面試官問的Spring Boot問題
- 什麼是 Spring Boot?
- 爲什麼要用 Spring Boot?
- Spring Boot 的核心配置文件有哪幾個?它們的區別是什麼?
- Spring Boot 的配置文件有哪幾種格式?它們有什麼區別?
- Spring Boot 的核心註解是哪個?它主要由哪幾個註解組成的?
- 開啓 Spring Boot 特性有哪幾種方式?
- Spring Boot 需要獨立的容器運行嗎?
- 運行 Spring Boot 有哪幾種方式?
- Spring Boot 自動配置原理是什麼?
- Spring Boot 的目錄結構是怎樣的?
1.1 我的Spring Boot學習筆記
- Spring Boot、Spring MVC 和 Spring 有什麼區別?
- 什麼是自動配置?
- 什麼是 Spring Boot Stater ?
- 你能否舉一個例子來解釋更多 Staters 的內容?
- Spring Boot 還提供了其它的哪些 Starter Project Options?
- Spring 是如何快速創建產品就緒應用程序的?
- 創建一個 Spring Boot Project 的最簡單的方法是什麼?
- Spring Initializr 是創建 Spring Boot Projects 的唯一
- 爲什麼我們需要 spring-boot-maven-plugin?
- 如何使用 SpringBoot 自動重裝我的應用程序?
- 什麼是嵌入式服務器?我們爲什麼要使用嵌入式服務器呢?
- 如何在 Spring Boot 中添加通用的 JS 代碼?
1.2 Spring學習路線思維導圖
2. 阿里面試官問的RabbitMQ問題
- 使用RabbitMQ有什麼好處?
- RabbitMQ 中的 broker 是指什麼?cluster 又是指什麼?
- RabbitMQ 概念裏的 channel、exchange 和 queue 是邏輯概念,還是對應着進程實體?分別起什麼作用?
- vhost 是什麼?起什麼作用?
- 消息基於什麼傳輸?
- 消息如何分發?
- 消息怎麼路由?
- 什麼是元數據?元數據分爲哪些類型?包括哪些內容?與 cluster 相關的元數據有哪些?元數據是如何保存的?元數據在 cluster 中是如何分佈的?
2.1 我的RabbitMQ學習筆記
- 什麼是rabbitmq
- 爲什麼要使用rabbitmq
- 使用rabbitmq的場景
- 如何確保消息正確地發送至RabbitMQ? 如何確保消息接收方消費了消息?
- 如何避免消息重複投遞或重複消費?
- 消息基於什麼傳輸?
- 消息如何分發?
- 消息怎麼路由?
- 如何確保消息不丟失?
- 使用RabbitMQ有什麼好處?
- rabbitmq的集羣
- mq的缺點
3. 阿里面試官問的MySQL問題
- 事務四大特性
- MySQL的事務隔離級別
- 數據庫的索引
- 數據庫三範式
- 髒讀&不可重複讀&幻讀
- 存儲引擎 MyISAM和InnoDB區別
- Mysql中有哪幾種鎖?
- 講一下存儲過程
3.1 我的MySQL靈魂拷問筆記
- Mysql的技術特點是什麼?
- Heap表是什麼?
- Mysql服務器默認端口是什麼?
- 與Oracle相比,Mysql有什麼優勢?
- 如何區分FLOAT和DOUBLE?
- 如何獲取當前的Mysql版本?
- Mysql中使用什麼存儲引擎?
- Mysql驅動程序是什麼?
- 主鍵和候選鍵有什麼區別?
- 如何使用Unix shell登錄Mysql?
- 你怎麼看到爲表格定義的所有索引?
- InnoDB是什麼?
3.2 MySQL學習路線思維導圖
4. 阿里面試官問的設計模式問題
- 請列舉出在JDK中幾個常用的設計模式?
- 什麼是設計模式?你是否在你的代碼裏面使用過任何設計模式?
- Java 中什麼叫單例設計模式?請用Java 寫出線程安全的單例模式
- 在 Java 中,什麼叫觀察者設計模式(observer design pattern)?
- 使用工廠模式最主要的好處是什麼?在哪裏使用?
- 舉一個用 Java 實現的裝飾模式(decorator design pattern)?它是作用於對象層次還是類層次?
- 在 Java 中,爲什麼不允許從靜態方法中訪問非靜態變量?
- 例說明什麼情況下會更傾向於使用抽象類而不是接口?
4.1 我的23種設計模式知識要點筆記
- 單例模式
- 工廠模式
- 抽象工廠模式
- 模板方法模式
- 建造者模式
- 代理模式
- 原型模式
- 中介者模式
- 命令模式
- 責任鏈模式
4.2 設計模式學習路線思維導圖
5. 阿里面試官問的併發編程問題
- Java中有幾種方法可以實現一個線程?
- 如何停止一個正在運行的線程?
- 什麼是Daemon線程?它有什麼意義?
- ava如何實現多線程之間的通訊和協作?
- 樂觀鎖和悲觀鎖的理解及如何實現,有哪些實現方式?
- 什麼是可重入鎖(ReentrantLock)?
- 什麼叫線程安全?servlet是線程安全嗎?
- 同步有幾種實現方法?
5.1 我的併發編程面試專題筆記
- Java中守護線程和本地線程區別
- 什麼是多線程中的上下文切換
- 死鎖與活鎖的區別,死鎖與飢餓的區別
- 線程與進程的區別
- Java中用到的線程調度算法是什麼
- 什麼是線程組,爲什麼在Java中不推薦使用
- 在Java中Executor和Executors的區別
- 什麼是原子操作,在Java Concurrency API中有哪些原子類(atomic classes)
- 什麼是Executors框架
- 什麼是阻塞隊列,阻塞隊列的實現原理是什麼,如何使用阻塞隊列來實現生產者-消費者模型
5.2 併發編程學習路線思維導圖
6. 阿里面試官問的JVM虛擬機問題
- 什麼是Java虛擬機?爲什麼Java被稱作是“平臺無關的編程語言”?
- 什麼是類的加載
- 描述一下JVM加載class文件的原理機制?
- 如何判斷對象可以被回收?
- 什麼時候一個對象會被GC?
- 爲什麼要在這種時候對象纔會被GC?
- JVM內存分爲哪幾部分,這些部分分別都存儲哪些數據?
- 一個對象從創建到銷燬都是怎麼在這些部分裏存活和轉移的?
6.1 我的JVM虛擬機面試專題筆記
- Java 類加載過程?
- 描述一下 JVM 加載 Class 文件的原理機制?
- Java 內存分配。
- GC 是什麼? 爲什麼要有 GC?
- 簡述 Java 垃圾回收機制。
- 如何判斷一個對象是否存活?(或者 GC 對象的判定方法)
- 垃圾回收的優點和原理。並考慮 2 種回收機制。
- 垃圾回收器的基本原理是什麼?垃圾回收器可以馬上回收內存嗎?有什麼辦法主動通知虛擬機進行垃圾回收?
- Java 中會存在內存泄漏嗎,請簡單描述。
- 深拷貝和淺拷貝
6.2 JVM虛擬機學習路線思維導圖
7. 阿里面試官問的Redis問題
- 什麼是Redis?簡述它的優缺點?
- Redis相比memcached有哪些優勢?
- Redis支持哪幾種數據類型?
- Redis主要消耗什麼物理資源?
- Redis的全稱是什麼?
- Redis有哪幾種數據淘汰策略?
- Redis官方爲什麼不提供Windows版本?
- Redis集羣方案應該怎麼做?都有哪些方案?
- 爲什麼Redis需要把所有數據放到內存中?
- Redis有哪些適合的場景?
7.1 我的Redis面試學習筆記
- 爲什麼要用 redis /爲什麼要用緩存
- 爲什麼要用 redis 而不用 map/guava 做緩存?
- redis 和 memcached 的區別
- redis 常見數據結構以及使用場景分析
- redis 設置過期時間
- redis 內存淘汰機制(MySQL裏有2000w數據,Redis中只存20w的數據,如何保證Redis中的數據都是熱點數據?)
- redis 持久化機制(怎麼保證 redis 掛掉之後再重啓數據可以進行恢復)
- redis 事務
- Redis 常見異常及解決方案
- 分佈式環境下常見的應用場景
7.2 Redis學習路線思維導圖
8. 我的參考學習資料:Java核心知識點整理
JVM,集合,HTTP網絡,多線程併發,JAVA基礎,Spring,微服務,Zookeeper,Kafka,RabbitMQ,Hbase,消息中間件,MongoDB,設計模式,負載均衡,數據庫,一致性哈希,算法,數據結構,加密算法,分佈式緩存,Netty,Linux,Tomcat,Nginx,Redis等
9. 各類學習書籍整理
10. 各類面試題整理
最後
對於很多Java工程師而言,想要提升技能,往往是自己摸索成長,不成體系的學習效果低效漫長且無助。
整理的這些資料希望對Java開發的朋友們有所參考以及少走彎路,本文的重點是你有沒有收穫與成長,其餘的都不重要,希望讀者們能謹記這一點。