前言
金九銀十一過,面試看題不停,今年準備不充分,明年面試不得行,
作為已經邁過面試這道大坎的人,近幾日利用閑暇的時間梳理了一遍之前的一些面試題,不整理不知道,一整理嚇一跳,整整1000道不多不少,
這份整理合集內容很多,需要細啃,看完絕壁穩賺不虧!之前面試官常問到的高頻技術問題+解答都涵蓋其中:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等,
由于篇幅有限僅展示部分試題,已經整理出pdf合集,點這里可以看到全部內容,免費進行下載,
MyBatis 面試題
什么是 Mybatis?
1.Mybatis 是一個半 ORM(物件關系映射)框架,它內部封裝了 JDBC,開發時只需要關注 SQL 陳述句本身,不需要花費精力去處理加載驅動、創建連接、創建statement 等繁雜的程序,程式員直接撰寫原生態 sql,可以嚴格控制 sql 執行性能,靈活度高,
2、MyBatis 可以使用 XML 或注解來配置和映射原生資訊,將 POJO 映射成資料庫中的記錄,避免了幾乎所有的 JDBC 代碼和手動設定引數以及獲取結果集,
3、通過 xml 檔案或注解的方式將要執行的各種 statement 配置起來,并通過java 物件和 statement 中 sql 的動態引數進行映射生成最終執行的 sql 陳述句,最后由 mybatis 框架執行 sql 并將結果映射為 java 物件并回傳,(從執行 sql 到回傳 result 的程序),
Mybaits 的優點:
1、基于 SQL 陳述句編程,相當靈活,不會對應用程式或者資料庫的現有設計造成任何影響,SQL 寫在 XML 里,解除 sql 與程式代碼的耦合,便于統一管理;提供 XML標簽,支持撰寫動態 SQL 陳述句,并可重用,
2、與 JDBC 相比,減少了 50%以上的代碼量,消除了 JDBC 大量冗余的代碼,不需要手動開關連接
3、很好的與各種資料庫兼容(因為 MyBatis 使用 JDBC 來連接資料庫,所以只要JDBC 支持的資料庫 MyBatis 都支持),
4、能夠與 Spring 很好的集成;
5、提供映射標簽,支持物件與資料庫的 ORM 欄位關系映射;提供物件關系映射標簽,支持物件關系組件維護,
MyBatis 與 Hibernate 有哪些不同?
1、Mybatis 和 hibernate 不同,它不完全是一個 ORM 框架,因為 MyBatis 需要程式員自己撰寫 Sql 陳述句,
2、Mybatis 直接撰寫原生態 sql,可以嚴格控制 sql 執行性能,靈活度高,非常適合對關系資料模型要求不高的軟體開發,因為這類軟體需求變化頻繁,一但需求變化要求迅速輸出成果,但是靈活的前提是 mybatis 無法做到資料庫無關性,如果需要實作支持多種資料庫的軟體,則需要自定義多套 sql 映射檔案,作業量大,
3、Hibernate 物件/關系映射能力強,資料庫無關性好,對于關系模型要求高的軟體,如果用 hibernate 開發可以節省很多代碼,提高效率,

ZooKeeper 面試題
ZAB 協議?
ZAB 協議是為分布式協調服務 Zookeeper 專門設計的一種支持崩潰恢復的原子廣播協議,
ZAB 協議包括兩種基本的模式:崩潰恢復和訊息廣播,當整個 zookeeper 集群剛剛啟動或者 Leader 服務器宕機、重啟或者網路故障導致不存在過半的服務器與 Leader 服務器保持正常通信時,所有行程(服務器)進入崩潰恢復模式,首先選舉產生新的 Leader 服務器,然后集群中 Follower 服務器開始與新的 Leader 服務器進行資料同步,當集群中超過半數機器與該 Leader服務器完成資料同步之后,退出恢復模式進入訊息廣播模式,Leader 服務器開始接收客戶端的事務請求生成事物提案來進行事務請求處理,
服務端處理 Watcher 實作
1、服務端接收 Watcher 并存盤
接收到客戶端請求,處理請求判斷是否需要注冊 Watcher,需要的話將資料節點的節點路徑和 ServerCnxn(ServerCnxn 代表一個客戶端和服務端的連接,實作了 Watcher 的 process 介面,此時可以看成一個 Watcher 物件)存盤在WatcherManager 的 WatchTable 和 watch2Paths 中去,
2、Watcher 觸發
以服務端接收到 setData() 事務請求觸發 NodeDataChanged 事件為例:
2.1 封裝 WatchedEvent
將通知狀態(SyncConnected)、事件型別(NodeDataChanged)以及節點路徑封裝成一個 WatchedEvent 物件
2.2 查詢 Watcher
從 WatchTable 中根據節點路徑查找 Watcher
2.3 沒找到;說明沒有客戶端在該資料節點上注冊過 Watcher
2.4 找到;提取并從 WatchTable 和 Watch2Paths 中洗掉對應 Watcher(從這里
可以看出 Watcher 在服務端是一次性的,觸發一次就失效了)
3、呼叫 process 方法來觸發 Watcher
這里 process 主要就是通過 ServerCnxn 對應的 TCP 連接發送 Watcher 事件通知,
Zookeeper 檔案系統
Zookeeper 提供一個多層級的節點命名空間(節點稱為 znode),與檔案系統不同的是,這些節點都可以設定關聯的資料,而檔案系統中只有檔案節點可以存放資料而目錄節點不行,
Zookeeper 為了保證高吞吐和低延遲,在記憶體中維護了這個樹狀的目錄結構,這種特性使得 Zookeeper 不能用于存放大量的資料,每個節點的存放資料上限為1M,

Java 并發編程(一)
在 java 中守護執行緒和本地執行緒區別?
java 中的執行緒分為兩種:守護執行緒(Daemon)和用戶執行緒(User),任何執行緒都可以設定為守護執行緒和
用戶執行緒,通過方法 Thread.setDaemon(boolon);true 則把該執行緒設定為守護執行緒,反之則為用戶執行緒,
Thread.setDaemon()必須在 Thread.start()之前呼叫,否則運行時會拋出例外,
兩者的區別:
唯一的區別是判斷虛擬機(JVM)何時離開,Daemon 是為其他執行緒提供服務,如果全部的 User Thread 已
經撤離,Daemon 沒有可服務的執行緒,JVM 撤離,也可以理解為守護執行緒是 JVM 自動創建的執行緒(但不
一定),用戶執行緒是程式創建的執行緒;比如 JVM 的垃圾回收執行緒是一個守護執行緒,當所有執行緒已經撤離,
不再產生垃圾,守護執行緒自然就沒事可干了,當垃圾回收執行緒是 Java 虛擬機上僅剩的執行緒時,Java 虛擬
機會自動離開,擴展:Thread Dump 列印出來的執行緒資訊,含有 daemon 字樣的執行緒即為守護行程,可
能會有:服務守護行程、編譯守護行程、windows 下的監聽 Ctrl+break的守護行程、Finalizer 守護行程、
參考處理守護行程、GC 守護行程,
死鎖與活鎖的區別,死鎖與饑餓的區別?
死鎖:是指兩個或兩個以上的行程(或執行緒)在執行程序中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去,產生死鎖的必要條件:
1、互斥條件:所謂互斥就是行程在某一時間內獨占資源,
2、請求與保持條件:一個行程因請求資源而阻塞時,對已獲得的資源保持不放,
3、不剝奪條件:行程已獲得資源,在末使用完之前,不能強行剝奪,
4、回圈等待條件:若干行程之間形成一種頭尾相接的回圈等待資源關系,
活鎖:任務或者執行者沒有被阻塞,由于某些條件沒有滿足,導致一直重復嘗試,失敗,嘗試,失敗,活
鎖和死鎖的區別在于,處于活鎖的物體是在不斷的改變狀態,所謂的“活”, 而處于死鎖的物體表現為等
待;活鎖有可能自行解開,死鎖則不能,
饑餓:一個或者多個執行緒因為種種原因無法獲得所需要的資源,導致一直無法執行的狀態,
什么是 FutureTask?使用 ExecutorService 啟動任務,
在 Java 并發程式中 FutureTask 表示一個可以取消的異步運算,它有啟動和取消運算、查詢運算是否完成
和取回運算結果等方法,只有當運算完成的時候結果才能取回,如果運算尚未完成 get 方法將會阻塞,一
個 FutureTask 物件可以對呼叫了 Callable 和 Runnable 的物件進行包裝,由于 FutureTask 也是呼叫了
Runnable介面所以它可以提交給 Executor 來執行,

Spring合集
Spring Framework 有哪些不同的功能?
輕量級 - Spring 在代碼量和透明度方面都很輕便,IOC - 控制反轉 AOP - 面向切面編程可以將應用業務邏
輯和系統服務分離,以實作高內聚,容器 - Spring 負責創建和管理物件(Bean)的生命周期和配置,
MVC - 對 web 應用提供了高度可配置性,其他框架的集成也十分方便,事務管理 - 提供了用于事務管理的
通用抽象層,Spring 的事務支持也可用于容器較少的環境,JDBC 例外 - Spring的 JDBC 抽象層提供了一
個例外層次結構,簡化了錯誤處理策略,
不同版本的 Spring Framework 有哪些主要功能?
Version Feature
Spring 2.5 發布于 2007 年,這是第一個支持注解的版本,
Spring 3.0 發布于 2009 年,它完全利用了 Java5 中的改進,并為 JEE6 提供了支
持,
Spring 4.0 發布于 2013 年,這是第一個完全支持 JAVA8 的版本,
解釋 JDBC 抽象和 DAO 模塊,
通過使用 JDBC 抽象和 DAO 模塊,保證資料庫代碼的簡潔,并能避免資料庫資源錯誤關閉導致的問題,
它在各種不同的資料庫的錯誤資訊之上,提供了一個統一的例外訪問層,它還利用 Spring 的 AOP 模塊給
Spring 應用中的物件提供事務管理服務,


如何獲得這份優質的資料呢?
——點這里可以看到全部內容,免費進行下載,
整理不易,覺得有幫助的朋友可以幫忙點贊分享支持一下小編~
你的支持,我的動力;祝各位前程似錦,offer不斷!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/204628.html
標籤:其他
