知己知彼,百戰不殆:「金三銀四」橫掃BAT面試之Spring108問!

說在前面

過年以後相信有一部分的人,早已磨刀霍霍向大廠。勢必要大展拳腳,必將在大廠內創出一片天地。可是,想必你們都知道:最近幾年的最嚴重的互聯網寒冬來臨,各位兄弟都會說「江湖再見」。耳邊老是充刺着流言蜚語,這個地方裁人了,這個地方縮減HC。弄得人心慌慌。年後將是一片血雨腥風,程序界的江湖將在這一天精彩斑斕。前端

但咱們要知道,寒冬之中,什麼是最珍貴,就讓鄙人告訴你:人才。只要有過硬的技術和裝備,在逆風直下的狀況下,我們也能迎難而上,打他個戳手不及。不是「李雲龍」大哥說:「過狹路相逢勇者勝。」java

金三銀四俗稱跳槽黃金季,雖然今年的狀況可能「特殊」點,但也不影響你們拿高薪,去更牛逼的公司,認識更多大牛,提高本身的職場競爭力的想法。mysql

那怎樣才能經過BAT面試官的考覈?怎樣成爲一名Offer收割機?程序員

收割Offer有一個最直接的公示:Offer=硬實力+軟實力+好的心態,三者缺一不可web

硬實力

這裏說的硬實力,也就是技術上的真實積累。面試

怎麼來體現你的技術實力?總的分爲:技術深度和技術廣度這兩方面算法

技術廣度通俗的講,就是你熟悉該技術點的使用以及基本原理。通常面試官在面試首輪會問不少技術點,來考覈你是否能正確使用。spring

技術深度通俗的講,就是深刻技術原理的同時,還知道優劣勢比較,以及同類產品的橫向和縱向比較,以及很是重要的應用場景。好比:消息隊列MQ,市面有哪些MQ,RabbitMQ、RocketMQ、ActiveMQ…等等他們各自的架構設計,優劣勢比較,各自的應用場景(併發量和使用優劣比較等)。以及MQ的消息去重,如何保證消息不丟失等。這樣就沿着MQ這個話題,深刻的去考覈你對MQ的掌握程度。sql

技術包括了數據庫

網絡編程

  • Http和Https
  • OSI7層模型
  • 網絡安全防範:CSRF、XSS等

算法和數據結構

  • 數組、鏈表、二叉樹、隊列
  • 紅黑樹、AVL樹、Hash樹、Tire樹、B樹、B+樹
  • 各種排序算法以及複雜度分析(快排、歸併、堆)
  • 二分查找和各類變種的二分查找
  • 手寫算法等

JVM

  • 內存回收算法
  • 垃圾收集器
  • 性能調優

併發編程

  • 多線程
  • NIO
  • 併發容器
  • 併發工具類
  • …等

數據庫

  • mysql和nosql
  • 索引、慢查詢、事務
  • 大數據方案:分庫分表、讀寫分離、數據主從同步

分佈式架構設計

  • Redis問得比較多(建議重點掌握)
  • 消息隊列Kafka、RabbitMQ、RocketMQ(阿里會問)
  • 微服務:Dubbo、Spring Cloud等

負載均衡

  • 分佈式理論:CAP、BASE等
  • 應用系統拆分
  • 分佈式鎖、分佈式事務、分佈式全局惟一ID…等

軟實力

軟實力在面試過程當中也尤其重要(有時候真的要更重要),主要是指和麪試官的溝通,對一個問題的闡述方式和表達方式,邏輯思惟能力等。

面試過程全程微笑,項目描述須要嚴謹的表述,我的的優缺點基本要作到隨口而出…等這些其實就是軟實力的體現。

Spring面試108問

一個好的面試問題能使應聘者的本性顯露出來——誠實,可信,反應敏銳等等。這裏我整理出關於 Spring 的面試題。但願這個總結能爲面試官和應聘者提供一些參考,若你能垂手可得回答全部問題,相信這一塊的面試就沒必要擔憂了。

PS:因文章篇幅問題,我這裏沒有所有進行解答,我已經整理打包成PDF文檔,有須要的能夠關注個人公衆號【風平浪靜如碼】獲取資料!

Spring基礎68題

1.什 麼 是 spring?

2.使 用 Spring 框 架 的 好 處 是 什 麼 ?

  • 輕 量:Spring 是 輕 量 的 , 基 本 的 版 本 大 約 2MB。
  • 控 制 反 轉 :Spring 通 過 控 制 反 轉 實 現 了 鬆 散 耦 合 , 對 象們 給 出 它 們 的 依 賴 , 而 不 是 創 建 或 查 找 依 賴 的 對 象 們 。
  • 面 向 切 面 的 編 程(AOP):Spring 支 持 面 向 切 面 的 編 程 ,並 且 把 應 用 業 務 邏 輯 和 系 統 服 務 分 開 。
  • 容 器 :Spring 包 含 並 管 理 應 用 中 對 象 的 生 命 周 期 和 配置 。
  • MVC 框 架:Spring 的 WEB 框 架 是 個 精 心 設 計 的 框 架 ,是 Web 框 架 的 一 個 很 好 的 替 代 品 。
  • 事 務 管 理:Spring 提 供 一 個 持 續 的 事 務 管 理 接 口 , 可 以擴 展 到 上 至 本 地 事 務 下 至 全 局 事 務 (JTA) 。
  • 異 常 處 理:Spring 提 供 方 便 的 API 把 具 體 技 術 相 關 的 異常 ( 比 如 由 JDBC,Hibernate or JDO 拋 出 的 ) 轉 化 爲一 致 的 unchecked 異 常 。

3.Spring 由 哪 些 模 塊 組 成?

4.核 心 容 器 ( 應 用 上 下 文) 模 塊

這 是 基 本 的 Spring 模 塊 , 提 供 spring 框 架 的 基 礎 功能 ,BeanFactory 是 任 何 以 spring 爲 基 礎 的 應 用 的 核心 。Spring 框 架 建 立 在 此 模 塊 之 上 , 它 使 Spring 成 爲一 個 容 器。

5.BeanFactory – BeanFactory 實 現 舉 例

Bean 工 廠 是 工 廠 模 式 的 一 個 實 現 , 提 供 了 控 制 反 轉 功能 , 用 來 把 應 用 的 配 置 和 依 賴 從 正 真 的 應 用 代 碼 中 分離 。最 常 用 的 BeanFactory 實 現 是 XmlBeanFactory 類 。

6.XMLBeanFactory

最 常 用 的 就 是org.springframework.beans.factory.xml.XmlBeanFactory , 它 根 據 XML 文 件 中 的 定 義 加 載 beans。 該 容 器從 XML 文 件 讀 取 配 置 元 數 據 並 用 它 去 創 建 一 個 完 全 配 置的 系 統 或 應 用。

7.解 釋 AOP 模 塊

AOP 模 塊 用 於 發 給 我 們 的 Spring 應 用 作 面 向 切 面 的 開發 , 很 多 支 持 由 AOP 聯 盟 提 供 , 這 樣 就 確 保 了 Spring和 其 他 AOP 框 架 的 共 通 性 。 這 個 模 塊 將 元 數 據 編 程 引 入Spring。

8.解 釋 JDBC 抽 象 和 DAO 模 塊

通 過 使 用 JDBC 抽 象 和 DAO 模 塊 , 保 證 數 據 庫 代 碼 的 簡潔 , 並 能 避 免 數 據 庫 資 源 錯 誤 關 閉 導 致 的 問 題 , 它 在 各類 不 同 的 數 據 庫 的 錯 誤 信 息 之 上 , 提 供 了 一 個 統 一 的 異常 訪 問 層 。 它 還 利 用 Spring 的 AOP 模 塊 給 Spring 應用 中 的 對 象 提 供 事 務 管 理 服 務 。

9.解 釋 對 象/關 系 映 射 集 成 模 塊

10.解 釋 WEB 模 塊

11.Spring 配 置 文 件

12.什 麼 是 Spring IOC 容 器

Spring IOC 負 責 創 建 對 象 , 管 理 對 象 ( 通 過 依 賴 注 入(DI) , 裝 配 對 象 , 配 置 對 象 , 並 且 管 理 這 些 對 象 的 整個 生 命 周 期。

13.IOC 的 優 點 是 什 麼

IOC 或 依 賴 注 入 把 應 用 的 代 碼 量 降 到 最 低 。 它 使 應 用 容易 測 試 , 單 元 測 試 不 再 需 要 單 例 和 JNDI 查 找 機 制 。 最小 的 代 價 和 最 小 的 侵 入 性 使 鬆 散 耦 合 得 以 實 現 。IOC 容器 支 持 加 載 服 務 時 的 餓 漢 式 初 始 化 和 懶 加 載 。

14.ApplicationContext 通 常 的 實 現 是 什 麼?

  • FileSystemXmlApplicationContext :此 容 器 從 一 個XML 文 件 中 加 載 beans 的 定 義 ,XML Bean 配 置 文 件 的全 路 徑 名 必 須 提 供 給 它 的 構 造 函 數 。
  • ClassPathXmlApplicationContext:此 容 器 也 從 一 個XML 文 件 中 加 載 beans 的 定 義 , 這 裏 , 你 需 要 正 確 設 置classpath 因 爲 這 個 容 器 將 在 classpath 裏 找 bean 配置 。
  • WebXmlApplicationContext:此 容 器 加 載 一 個 XML文 件 , 此 文 件 定 義 了 一 個 WEB 應 用 的 所 有 bean。

15.Bean 工 廠 和 Application contexts 有 什 麼 區別

Application contexts 提 供 一 種 方 法 處 理 文 本 消 息 , 一個 通 常 的 作 法 是 加 載 文 件 資 源 ( 比 如 鏡 像 ) , 它 們 可 以向 注 冊 爲 監 聽 器 的 bean 發 布 事 件 。 另 外 , 在 容 器 或 容器 內 的 對 象 上 執 行 的 那 些 不 得 不 由 bean 工 廠 以 程 序 化方 式 處 理 的 操 做 , 可 以 在 Application contexts 中 以 聲明 的 方 式 處 理 。Application contexts 實 現 了MessageSource 接 口 , 該 接 口 的 實 現 以 可 插 拔 的 方 式 提供 獲 取 本 地 化 消 息 的 方 法 。

16.一 個 Spring 的 應 用 看 起 來 象 什 麼

  • 一 個 定 義 了 一 些 功 能 的 接 口 。
  • 這 實 現 包 括 屬 性 , 它 的 Setter , getter 方 法 和 函 數等 。
  • Spring AOP
  • Spring 的 XML 配 置 文 件
  • 使 用 以 上 功 能 的 客 戶 端 程 序

17.什 麼 是 Spring 的 依 賴 注 入

18.有 哪 些 不 同 類 型 的 IOC( 依 賴 注 入 )方 式

  • 構 造 器 依 賴 注 入 :構 造 器 依 賴 注 入 通 過 容 器 觸 發 一 個 類的 構 造 器 來 實 現 的 , 該 類 有 一 系 列 參 數 , 每 個 參 數 代 表一 個 對 其 他 類 的 依 賴 。
  • Setter 方 法 注 入:Setter 方 法 注 入 是 容 器 通 過 調 用 無 參構 造 器 或 無 參 static 工 廠 方 法 實 例 化 bean 之 後 , 調 用該 bean 的 setter 方 法 , 即 實 現 了 基 於 setter 的 依 賴 注入

19.哪 種 依 賴 注 入 方 式 你 建 議 使 用 , 構 造 器 注 入 , 還 是Setter 方 法 注 入

20.什 麼 是 Spring beans?

21.一 個 Spring Bean 定 義 包 含 什 麼

22.如 何 給 Spring 容 器 提 供 配 置 元 數 據?

23.你 怎 樣 定 義 類 的 做 用 域?

當 定 義 一 個 在 Spring 裏 , 我 們 還 能 給 這 個bean 聲 明 一 個 做 用 域 。 它 可 以 通 過 bean 定 義 中 的scope 屬 性來 定 義 。 如 , 當 Spring 要 在 需 要 的 時 候 每 次生 產 一 個 新 的 bean 實 例 ,bean 的 scope 屬 性 被 指 定 爲prototype。 另 一 方 面 , 一 個 bean 每 次 使 用 的 時 候 必 須返 回 同 一 個 實 例 , 這 個 bean 的 scope 屬 性 必 須 設 爲singleton。

24.解 釋 Spring 支 持 的 幾 種 bean 的 做 用 域

Spring 框 架 支 持 以 下 五 種 bean 的 做 用 域 :

  • singleton : bean 在 每 個 Spring ioc 容 器 中 只 有 一 個 實例 。
  • prototype: 一 個 bean 的 定 義 可 以 有 多 個 實 例 。
  • request: 每 次 http 請 求 都 會 創 建 一 個 bean, 該 做 用域 僅 在 基 於 web 的 Spring ApplicationContext 情 形 下有 效 。 session: 在 一 個 HTTP Session 中 , 一 個 bean 定 義 對應 一 個 實 例 。 該 做 用 域 僅 在 基 於 web 的Spring ApplicationContext 情 形 下 有 效 。
  • global-session: 在 一 個 全 局 的 HTTP Session 中 , 一個 bean 定 義 對 應 一 個 實 例 。 該 做 用 域 僅 在 基 於 web 的Spring ApplicationContext 情 形 下 有 效 。缺 省 的 Spring bean 的 做 用 域 是 Singleton.

25.Spring 框 架 中 的 單 例 bean 是 線 程 安 全 的 嗎

不 ,Spring 框 架 中 的 單 例 bean 不 是 線 程 安 全 的 。

26.解 釋 Spring 框 架 中 bean 的 生 命 周 期

27.哪 些 是 重 要 的 bean 生 命 周 期 方 法 ? 你 能 重 載 它 們嗎

28.什麼是 Spring 的內部 bean

29.在 Spring 中如何注入一個 java 集合

30.什麼是 bean 裝配

31.什麼是 bean 的自動裝配

32.解釋不一樣方式的自動裝配

33.自動裝配有哪些侷限性

34.你能夠在 Spring 中注入一個 null 和一個空字符串嗎

35.什 麼 是 基 於 Java 的 Spring 注 解 配 置? 給 一 些 注 解的 例 子

36.什 麼 是 基 於 注 解 的 容 器 配 置

37.怎 樣 開 啓 注 解 裝 配

38.@Required 注 解

39.@Autowired 注 解

40.@Qualifier 注 解

41.在 Spring 框 架 中 如 何 更 有 效 地 使 用 JDBC

42.JdbcTemplate

43.Spring 對 DAO 的 支 持

44.使 用 Spring 通 過 什 麼 方 式 訪 問 Hibernate

45.Spring 支 持 的 ORM

46.如 何 通 過 HibernateDaoSupport 將 Spring 和Hibernate 結 合 起 來

47.Spring 支 持 的 事 務 管 理 類 型

48.Spring 框 架 的 事 務 管 理 有 哪 些 優 點

49.你 更 傾 向 用 那 種 事 務 管 理 類 型

50.解 釋 AOP

51.Aspect 切 面

52.在 Spring AOP 中 , 關 注 點 和 橫 切 關 注 的 區 別 是 什麼

53.連 接 點

連 接 點 代 表 一 個 應 用 程 序 的 某 個 位 置 , 在 這 個 位 置 我 們可 以 插 入 一 個 AOP 切 面 , 它 實 際 上 是 個 應 用 程 序 執 行Spring AOP 的 位 置 。

54.通 知

通 知 是 個 在 方 法 執 行 前 或 執 行 後 要 作 的 動 做 , 實 際 上 是程 序 執 行 時 要 通 過 SpringAOP 框 架 觸 發 的 代 碼 段 。 Spring 切 面 可 以 應 用 五 種 類 型 的 通 知 :

  • before: 前 置 通 知 , 在 一 個 方 法 執 行 前 被 調 用 。
  • after: 在 方 法 執 行 之 後 調 用 的 通 知 , 無 論 方 法 執 行 是 否成 功 。
  • after-returning: 僅 當 方 法 成 功 完 成 後 執 行 的 通 知 。
  • after-throwing: 在 方 法 拋 出 異 常 退 出 時 執 行 的 通 知 。
  • around: 在 方 法 執 行 之 前 和 之 後 調 用 的 通 知 。

55.切 點

切 入 點 是 一 個 或 一 組 連 接 點 , 通 知 將 在 這 些 位 置 執 行 。可 以 通 過 表 達 式 或 匹 配 的 方 式 指 明 切 入 點 。

56.什 麼 是 引 入

57.什 麼 是 目 標 對 象

58.什 麼 是 代 理

59.有 幾 種 不 同 類 型 的 自 動 代 理

60.什 麼 是 織 入 。 什 麼 是 織 入 應 用 的 不 同 點

61. 解 釋 基 於 XML Schema 方 式 的 切 面 實 現

62.. 解 釋 基 於 注 解 的 切 面 實 現

63.什 麼 是 Spring 的 MVC 框 架

64.DispatcherServlet

Spring 的 MVC 框 架 是 圍 繞 DispatcherServlet 來 設 計的 , 它 用 來 處 理 所 有 的 HTTP 請 求 和 響 應 。

65.WebApplicationContext

WebApplicationContext 繼 承 了 ApplicationContext並 增 加 了 一 些 WEB 應 用 必 備 的 特有 功 能 , 它 不 同 於 通常 的 ApplicationContext , 因 爲 它 能 處 理 主 題 , 並 找到 被 關 聯 的 servlet。

66.什 麼 是 Spring MVC 框 架 的 控 制 器

控 制 器 提 供 一 個 訪 問 應 用 程 序 的 行 爲 , 此 行 爲 通 常 通 過服 務 接 口 實 現 。 控 制 器 解 析 用 戶 輸 入 並 將 其 轉 換 爲 一 個由 視 圖 呈 現 給 用 戶 的 模 型 。Spring 用 一 個 非 常 抽 象 的 方 式 實 現 了 一 個 控 制 層 , 允 許 用 戶 創 建 多 種 用 途 的 控 制器。

67.@Controller 注 解

68.@RequestMapping 注 解

Spring進階40題

1.什麼是 Spring 框架?

Spring 框架是一個爲 Java 應用程序的開發提供了綜合、普遍的基礎性支持的 Java 平臺。Spring 幫助開發者解決了開發中基礎性的問題,使得開發人員能夠專一於應用程序的開發。Spring 框架自己亦是按照設計模式精心打造,這使得咱們能夠在開發環境中安心的集成 Spring 框架,沒必要擔憂 Spring 是如何在後臺進行工做的。

2.使用 Spring 框架能帶來哪些好處

3.什麼是控制反轉(IOC)?什麼是依賴注入

4.請解釋下 Spring 框架中的 IoC?

5.BeanFactory 和 ApplicationContext 有什麼區別

6.Spring 有幾種配置方式

將 Spring 配置到應用開發中有如下三種方式:

  1. 基於 XML 的配置
  2. 基於註解的配置
  3. 基於 Java 的配置

7.如何用基於 XML 配置的方式配置 Spring

8.如何用基於 Java 配置的方式配置 Spring

9.怎樣用註解的方式配置 Spring

10.請解釋 Spring Bean 的生命週期

11.Spring Bean 的做用域之間有什麼區別

Spring 容器中的 bean 能夠分爲 5 個範圍。全部範圍的名稱都是自說明的,可是爲了不混淆,仍是讓咱們來解釋一下:

  • singleton:這種 bean 範圍是默認的,這種範圍確保無論接受到多少個請求,每一個容器中只有一個 bean 的實例,單例的模式由 bean factory 自身來維護。
  • prototype:原形範圍與單例範圍相反,爲每個 bean 請求提供一個實例。
  • request:在請求 bean 範圍內會每個來自客戶端的網絡請求建立一個實例,在請求完成之後,bean 會失效並被垃圾回收器回收。
  • Session:與請求範圍相似,確保每一個 session 中有一個 bean的實例,在 session 過時後,bean 會隨之失效。
  • global-session:global-session 和 Portlet 應用相關。當你的應用部署在 Portlet 容器中工做時,它包含不少 portlet。若是你想要聲明讓全部的 portlet 共用全局的存儲變量的話,那麼這全局變量須要存儲在 global-session 中。

12.什麼是 Spring inner beans

13.Spring 框架中的單例 Beans 是線程安全的麼

  • Spring 框架並無對單例 bean 進行任何多線程的封裝處理。關於單例 bean 的線程安全和併發問題須要開發者自行去搞定。但實際上,大部分的 Spring bean 並無可變的狀態(比 如 Serview 類和 DAO 類),因此在某種程度上說 Spring 的單例 bean 是線程安全的。若是你的 bean 有多種狀態的話(好比 View Model 對象),就須要自行保證線程安全。
  • 最淺顯的解決辦法就是將多態 bean 的做用域由「singleton」變動爲「prototype」。

14.請舉例說明如何在 Spring 中注入一個 Java Collection

15.如何向 Spring Bean 中注入一個 Java.util.Properties

16.請解釋 Spring Bean 的自動裝配

17.請解釋自動裝配模式的區別

18.如何開啓基於註解的自動裝配

19.請舉例解釋@Required 註解

20.請舉例解釋@Autowired 註解

21.請舉例說明@Qualifier 註解

22.構造方法注入和設值注入有什麼區別

23.Spring 框架中有哪些不一樣類型的事件

24.FileSystemResource 和 ClassPathResource 有何區別

在 FileSystemResource 中須要給出 spring-config.xml 文件在你項目中的相對路徑或者絕對路徑。在ClassPathResource中 spring 會在 ClassPath 中自動搜尋配置文件,因此要把ClassPathResource 文件放在 ClassPath 下。

若是將 spring-config.xml 保存在了 src 文件夾下的話,只需給出配置文件的名稱便可,由於 src 文件夾是默認。

簡而言之,ClassPathResource 在環境變量中讀取配置文件,FileSystemResource 在配置文件中讀取配置文件。

25.Spring 框架中都用到了哪些設計模式

Spring 框架中使用到了大量的設計模式,下面列舉了比較有表明性的:

  1. 代理模式—在 AOP 和 remoting 中被用的比較多。
  2. 單例模式—在 spring 配置文件中定義的 bean 默認爲單例模式。
  3. 模板方法—用來解決代碼重複的問題。好比. RestTemplate,JmsTemplate, JpaTemplate。 4. 前端控制器—Spring 提供了 DispatcherServlet 來對請求進行分發。
  4. 視圖幫助(View Helper )—Spring 提供了一系列的 JSP 標籤,高效宏來輔助將分散的代碼整合在視圖裏。
  5. 依賴注入—貫穿於 BeanFactory / ApplicationContext 接口的核心理念。
  6. 工廠模式—BeanFactory 用來建立對象的實例。

26.談談你對 spring IOC 和 DI 的理解,它們有什麼區別

27.BeanFactory 接口和 ApplicationContext 接口有什麼區別

28.spring 配置 bean 實例化有哪些方式

29.簡單的說一下 spring 的生命週期

30.請介紹一下 Spring 框架中 Bean 的生命週期和做用域

31.Bean 注入屬性有哪幾種方式

spring 支持構造器注入和 setter 方法注構造器注入, 經過元素完成注入 setter 方法注入,經過元素完成注入【開發中經常使用方式】

32.什麼是 AOP,AOP 的做用是什麼

33.Spring 的核心類有哪些,各有什麼做用

34.Spring 裏面如何配置數據庫驅動

35.Spring 裏面 applicationContext.xml 文件能不能改爲其餘文件名

36.Spring 裏面如何定義 hibernate mapping

37.Spring 如何處理線程併發問題

38.爲何要有事物傳播行爲

39.介紹一下 Spring 的事物管理

40.通知有哪些類型


共同進步,學習分享

沒有人會討厭和拒絕認真準備面試的人,因此不要認爲面試就是必須用一個「素顏」的你去「真誠」的面對。

因文章篇幅問題,我這裏沒有所有進行解答,我已經整理打包成PDF文檔,有須要的能夠關注個人公衆號【風平浪靜如碼】獲取資料!

最後祝你們工做順利,升職加薪,面試都能經過,offer拿到手軟,早日找到心儀的工做~

部分資料展現

最後,用 Martin Fowler 的一句話做爲結尾:「任何傻瓜都能寫計算機能理解的代碼,優秀的程序員編寫人類可以理解的代碼。」(Any fool can write code that a computer can understand. Good programmers write code that humans can understand)

相關文章
相關標籤/搜索