1. 程式人生 > >面試題3-Spring和Mybatis

面試題3-Spring和Mybatis

1.Spring的IOC和DI?
1)控制反轉IOC(Inversion of Control):IOC意味著將你設計好的物件交給容器控制,而不是在你的物件內部控制。容器幫我們查詢及注入依賴的物件,物件只是被動的接受依賴的物件;
2)依賴注入DI(Dependency Injection):元件之間依賴關係由容器在執行期決定,形象的說,即由容器動態的將某個依賴關係注入到元件之中。依賴注入的目的並非為軟體系統帶來更多功能,而是為了提升元件重用的頻率,併為系統搭建一個靈活、可擴充套件的平臺。
2.BeanFactory 介面和 ApplicationContext 介面有什麼區別 ?
1)ApplicationContext 介面繼承BeanFactory介面,Spring核心工廠是BeanFactory ,BeanFactory採取延遲載入,第一次getBean時才會初始化Bean, ApplicationContext是會在載入配置檔案時初始化Bean;
2)ApplicationContext是對BeanFactory擴充套件,它可以進行國際化處理、事件傳遞和bean自動裝配以及各種不同應用層的Context實現 ;
3.Spring配置Bean例項化的方式?


1)使用類的構造器例項化
2)使用靜態工廠方法例項化
3)使用例項工廠方法例項化
4.Spring中Bean的生命週期?
1)例項化一個Bean(new);
2)按照Spring的上下文對例項化的Bean進行配置(DI);
3)如果實現了BeanNameAware介面,呼叫setBeanName(String name)方法(可以獲取到Spring配置檔案中bean的ID的值);
4)如果實現了BeanFactoryAware介面,呼叫setBeanFactory(BeanFactory beanFactory)(可以獲取Spring容器,通過容器可以獲取其它的Bean);
5)如果實現了ApplicationContextAware介面,呼叫setApplicationContext(ApplicationContext context)方法(可以獲取Spring的上下文);
6)如果實現了BeanPostProcessor介面,呼叫postProcessBeforeInitialization(Object obj, String s)方法( 第一個引數初始化的Bean,第二個引數是Bean 例項的名稱,可以用作Bean內容的修改);
7)如果Bean在Spring配置檔案中配置了init-method屬性會自動呼叫其配置的方法;
8)如果實現了BeanPostProcessor介面,將會呼叫postProcessAfterInitialization(Object obj, String s)方法;
9)執行業務處理
10)當Bean不再需要時,會經過清理階段,如果Bean實現了DisposableBean這個介面,會呼叫destroy()方法;
11)如果Bean在Spring中配置了destroy-method屬性,會自動呼叫其配置的銷燬方法;
5.Spring中Bean的屬性注入有哪幾種方式?

1)介面注入
2)構造器注入
3)set注入
6.Spring中Bean的作用域?
1)singleton:Spring的IOC容器中只會存在一個共享的Bean的例項;
2)prototype:每次對Bean的請求(將其注入到另一個Bean中,或者呼叫getBean())都會建立一個新的Bean的例項;
3)request:在一個HTTP請求中,一個Bean定義對應一個例項,每個HTTP請求都會建立各自的Bean例項(ApplicationContext情形下有效);
4)session:HTTP Session中,一個Bean對應一個例項(ApplicationContext情形下有效);
5)global session:在一個全域性的HTTP Session中,一個Bean對應一個例項(ApplicationContext情形下有效);
7.Spring中的註解?

1)@Component:標準的一個普通的Spring Bean類;
2)@Controller:標註一個控制器元件類;
3)@Service:標註一個業務邏輯元件類;
3)@Repository:標註一個DAO元件類;
4)@Resource:為目標的Bean指定協作的Bean,修飾屬性和方法,預設按照ByName自動注入;
5)@Scope:指定Bean例項的作用域;
6)@PostConstruct:修飾的方法是Bean的初始化之前的方法;
7)@PreDestory:修飾的方法是Bean銷燬之前的方法;
8.Spring MVC 中的註解?
1)@Controller:控制器Controller負責處理由DispatcherServlet分發的請求,它把使用者請求的資料經過業務處理層處理之後封裝成一個Model,然後再把該Model返回給對應的View進行展示;
2)@RequestMapping:RequestMapping是一個用來處理請求地址對映的註解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑;
3)@Autowired:Autowired註解是按照型別裝配依賴物件,如果想按照名稱(byName)來裝配,可以結合@Qualifier註解一起使用;
4)@ModelAttribute 和 @SessionAttributes :該Controller的所有方法在呼叫前,先執行此@ModelAttribute方法,可用於註解和方法引數中,可以把這個@ModelAttribute特性,應用在BaseController當中,所有的Controller繼承BaseController,即可實現在呼叫Controller時,先執行@ModelAttribute方法。@SessionAttributes即將值放到session作用域中,寫在class上面。
5)@PathVariable:用於將請求URL中的模板變數對映到功能處理方法的引數上,即取出uri模板中的變數作為引數。
9.TransactionDefinition介面中定義的五個隔離級別?
1)ISOLATION_DEFAULT:使用資料庫預設的事物的隔離級別;
2)ISOLATION_READ_UNCOMMITTED:事務隔離的最低級別,它允許另外一個事務可以看到這個事務未提交的資料,這種隔離可能產生髒讀,不可重複讀和幻像讀;
3)ISOLATION_READ_COMMITTED:保證一個事務修改的資料提交後才能被另外一個事務讀取,這一避免髒讀的產生,但是可能出現不可重複讀和幻像讀;
4)ISOLATION_REPEATABLE_READ:保證一個事務不能讀取另一個事務未提交的資料外還能避免不可重複讀的產生,可能出現幻像讀;
5)ISOLATION_SERIALIZABLE:事務被處理為順序執行,可以防止所有的問題;
10.髒讀、不可重複讀、幻像讀?
1)髒讀:事務A未提交的資料被事務B讀走,如果事務A失敗回滾,會導致事務B所讀取的資料是錯誤的;
2)資料不可重複讀:比如事務A中兩處讀取資料的值,第一次讀取時100,然後事務B把資料的值改為200,事務A再讀取的時候資料就改變了;
3)幻像讀:資料不可重複讀改變的是資料本身的值,而幻像讀改變的是條件資料及,可能讀取的資料的條數會變多;
11.Spring中事務傳播的行為?
1)PROPAGATION_REQUIREDS:如果存在一個事務,則支援當前事務,如果沒有事務則開啟一個新的事務;
2)PROPAGATION_SUPPORTS:如果存在一個事務,則支援當前事務。如果沒有事務,則非事務的執行。但是對於事務同步的事務管理器,PROPAGATION_SUPPORTS與不使用事務有少許不同;
3)PROPAGATION_MANDATORY:如果已經存在一個事務,支援當前事務。如果沒有一個活動的事務,則丟擲異常;
4)PROPAGATION_REQUIRES_NEW:總是開啟一個新的事務,如果事務已經存在,則將這個存在的事務掛起;
5)PROPAGATION_NOT_SUPPORTED:總是非事務的執行,並掛起任何存在的事務;
6)PROPAGATION_NEVER:總是非事務的執行,如果存在一個活動的事務,則丟擲異常;
7)PROPAGATION_NESTED:如果一個活動的事務存在,則執行在一個巢狀的事務中,如果沒有活動的事務,則按PROPAGATION_REQUIRED屬性執行;