今年跳槽想跳去哪一個大廠呢,這是個問題。說實話,去年我面試也被虐了,爲了能找到一份心怡的工做,特意的從朋友那裏討來一份面試聖經(阿里某大牛),980道面試真題和解析,一共485頁PDF。囊括Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技術棧。java
因爲面試真題涉及全面,解析詳細,全部的解析就不在文中給你們所有列出,整個980道面試真題都整理在一個pdf文檔裏面,須要這一份pdf的朋友,末尾可領取:node
每一個專題總結將近50道真題(含解析),一共包含java、MyBatis、ZooKeeper、Dubbo等二十個多個專題。485頁PDF。程序員
20多個專題:面試
正文:
MyBatis 面試題(27道):
什麼是 Mybatis?算法
一、Mybatis 是一個半 ORM(對象關係映射)框架,它內部封裝了 JDBC,開發時只須要關注 SQL 語句自己,不須要花費精力去處理加載驅動、建立鏈接、建立statement 等繁雜的過程。程序員直接編寫原生態 sql,能夠嚴格控制 sql 執行性能,靈活度高。spring
二、MyBatis 可使用 XML 或註解來配置和映射原生信息,將 POJO 映射成數據庫中的記錄,避免了幾乎全部的 JDBC 代碼和手動設置參數以及獲取結果集。sql
三、經過 xml 文件或註解的方式將要執行的各類 statement 配置起來,並經過java 對象和 statement 中 sql 的動態參數進行映射生成最終執行的 sql 語句,最後由 mybatis 框架執行 sql 並將結果映射爲 java 對象並返回。(從執行 sql 到返回 result 的過程)。數據庫
- Mybaits 的優勢:
- MyBatis 框架的缺點:
- MyBatis 框架適用場合:
- MyBatis 與 Hibernate 有哪些不一樣?
- #{}和${}的區別是什麼?
- 當實體類中的屬性名和表中的字段名不同 ,怎麼辦 ?
- 模糊查詢 like 語句該怎麼寫?
- 一般一個 Xml 映射文件,都會寫一個 Dao 接口與之對應,請問,這個 Dao 接口的工做原理是什麼?Dao 接口裏的方法,參數不一樣時,方法能重載嗎?
- Mybatis 是如何進行分頁的?分頁插件的原理是什麼?
- Mybatis是如何將sql執行結果封裝爲目標對象並返回的?都有哪些映射形式?
ZooKeeper 面試題(28道):
ZooKeeper 面試題?編程
ZooKeeper 是一個開放源碼的分佈式協調服務,它是集羣的管理者,監視着集羣中各個節點的狀態根據節點提交的反饋進行下一步合理操做。最終,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。分佈式應用程序能夠基於 Zookeeper 實現諸如數據發佈/訂閱、負載均衡、命名服務、分佈式協調/通知、集羣管理、Master 選舉、分佈式鎖和分佈式隊列等功能。緩存
- ZooKeeper 提供了什麼?
- Zookeeper 文件系統
- ZAB 協議?
- 四種類型的數據節點 Znode
- Zookeeper Watcher 機制--數據變動通知
- 客戶端註冊 Watcher 實現
- 服務端處理 Watcher 實現
- 客戶端回調 Watcher
Dubbo 面試題(30道):
爲何要用 Dubbo?
隨着服務化的進一步發展,服務愈來愈多,服務之間的調用和依賴關係也愈來愈複雜,誕生了面向服務的架構體系(SOA),也所以衍生出了一系列相應的技術,如對服務提供、服務調用、鏈接處理、通訊協議、序列化方式、服務發現、服務路由、日誌輸出等行爲進行封裝的服務框架。就這樣爲分佈式系統的服務治理框架就出現了,Dubbo 也就這樣產生了。
- Dubbo 的總體架構設計有哪些分層?
- 默認使用的是什麼通訊框架,還有別的選擇嗎?
- 服務調用是阻塞的嗎?
- 服務調用是阻塞的嗎?
- 通常使用什麼註冊中心?還有別的選擇嗎?
- 默認使用什麼序列化框架,你知道的還有哪些?
- 服務提供者能實現失效踢出是什麼原理?
- 服務上線怎麼不影響舊版本?
每一個專題的解析都很全面,包含400多頁PDF,整理不易.若是以爲ok,記得點贊給個支持,謝謝
Elasticsearch 面試題(24道):
詳細描述一下 Elasticsearch 索引文檔的過程?
面試官:想了解 ES 的底層原理,再也不只關注業務層面了。
解答:這裏的索引文檔應該理解爲文檔寫入 ES,建立索引的過程。文檔寫入包含:單文檔寫入和批量 bulk 寫入,這裏只解釋一下:單文檔寫入流程。記住官方文檔中的這個圖。
第一步:客戶寫集羣某節點寫入數據,發送請求。(若是沒有指定路由/協調節點,請求的節點扮演路由節點的角色。)
第二步:節點 1 接受到請求後,使用文檔_id 來肯定文檔屬於分片 0。請求會被轉到另外的節點,假定節點 3。所以分片 0 的主分片分配到節點 3 上。
第三步:節點 3 在主分片上執行寫操做,若是成功,則將請求並行轉發到節點 1和節點 2 的副本分片上,等待結果返回。全部的副本分片都報告成功,節點 3 將向協調節點(節點 1)報告成功,節點 1 向請求客戶端報告寫入成功。
若是面試官再問:第二步中的文檔獲取分片的過程?
回答:藉助路由算法獲取,路由算法就是根據路由和文檔 id 計算目標的分片 id 的過程。
shard = hash(_routing) % (num_of_primary_shards)
- elasticsearch 瞭解多少,說說大家公司 es 的集羣架構,索引數據大小,分片有多少,以及一些調優手段 。
- elasticsearch 的倒排索引是什麼
- elasticsearch 索引數據多了怎麼辦,如何調優,部署
- elasticsearch 是如何實現 master 選舉的
- 詳細描述一下 Elasticsearch 搜索的過程?
- Elasticsearch 在部署時,對 Linux 的設置有哪些優化方法
- lucence 內部結構是什麼?
Memcached 面試題(23道):
Memcached 是什麼,有什麼做用?
Memcached 是一個開源的,高性能的內存綬存軟件,從名稱上看 Mem 就是內存的意思,而 Cache 就是緩存的意思。Memcached 的做用:經過在事先規劃好的內存空間中臨時綬存數據庫中的各種數據,以達到減小業務對數據庫的直接高併發訪問,從而達到提高數據庫的訪問性能,加速網站集羣動態應用服務的能力。
- Memcached 服務分佈式集羣如何實現?
- Memcached 服務特色及工做原理是什麼?
- 簡述 Memcached 內存管理機制原理?
- memcached 是怎麼工做的?
- memcached 最大的優點是什麼?
- memcached 和 MySQL 的 query
- memcached 和服務器的 local cache(好比 PHP 的 APC、mmap 文件等)相比,有什麼優缺點?
Redis 面試題(40道):
什麼是 Redis?
Redis 是徹底開源免費的,遵照 BSD 協議,是一個高性能的 key-value 數據庫。
Redis 與其餘 key-value 緩存產品有如下三個特色:
- Redis 支持數據的持久化,能夠將內存中的數據保存在磁盤中,重啓的時候能夠再次加載進行使用。
- Redis 不只僅支持簡單的 key-value 類型的數據,同時還提供 list,set,zset,hash 等數據結構的存儲。
- Redis 支持數據的備份,即 master-slave 模式的數據備份。
Redis 優點
- 性能極高–Redis 能讀的速度是 110000 次/s,寫的速度是 81000 次/s 。
- 豐富的數據類型–Redis 支持二進制案例的 Strings, Lists, Hashes, Sets 及Ordered Sets 數據類型操做。
- 原子–Redis 的全部操做都是原子性的,意思就是要麼成功執行要麼失敗徹底不執行。單個操做是原子性的。多個操做也支持事務,即原子性,經過 MULTI 和 EXEC指令包起來。
- 豐富的特性–Redis 還支持 publish/subscribe, 通知, key 過時等等特性。
Redis 與其餘 key-value 存儲有什麼不一樣?
Redis 有着更爲複雜的數據結構而且提供對他們的原子性操做,這是一個不一樣於其餘數據庫的進化路徑。Redis 的數據類型都是基於基本數據結構的同時對程序員透明,無需進行額外的抽象。
Redis 運行在內存中可是能夠持久化到磁盤,因此在對不一樣數據集進行高速讀寫時須要權衡內存,由於數據量不能大於硬件內存。在內存數據庫方面的另外一個優勢是,相比在磁盤上相同的複雜的數據結構,在內存中操做起來很是簡單,這樣 Redis能夠作不少內部複雜性很強的事情。同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,由於他們並不須要進行隨機訪問。
- Redis 的數據類型?
- 使用 Redis 有哪些好處?
- Redis 相比 Memcached 有哪些優點?
- Memcache 與 Redis 的區別都有哪些?
- Redis 是單進程單線程的?
- 一個字符串類型的值能存儲最大容量是多少?
- Redis 的持久化機制是什麼?各自的優缺點?
- Redis 常見性能問題和解決方案:
MySQL 面試題(50道):
MySQL 中有哪幾種鎖?
一、表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的機率最高,併發度最低。
二、行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的機率最低,併發度也最高。
三、頁面鎖:開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,併發度通常。
- MySQL 中有哪些不一樣的表格?
- 簡述在 MySQL 數據庫中 MyISAM 和 InnoDB 的區別
- MySQL 中 InnoDB 支持的四種事務隔離級別名稱,以及逐級之間的區別?
- CHAR 和 VARCHAR 的區別?
- 主鍵和候選鍵有什麼區別?
- myisamchk 是用來作什麼的?
- 若是一個表有一列定義爲 TIMESTAMP,將發生什麼?
總結:
上面給你們展現了八個專題的一部分真題和一部分解析,還有,Java併發編程123道,Java面試題228道,spring面試題116道,微服務面試題50道,Linux 面試題45道,Spring Boot 面試題22道,Spring Cloud 面試題8道,RabbitMQ 面試題12道,kafka 面試題18道。
答案,關注公衆號下面二維碼,便可