SSM(Spring + Springmvc + Mybatis)框架面試題
一、Spring面試題
1花颗、Spring 在ssm中起什么作用?
- Spring:輕量級框架
- 作用:Bean工廠,用來管理Bean的生命周期和框架集成。
- 兩大核心:
- IOC/DI(控制反轉(zhuǎn)/依賴注入) :把dao依賴注入到service層裙顽,service層反轉(zhuǎn)給action層,Spring頂層容器為BeanFactory
- AOP:面向切面編程
2宣谈、Spring的事務(wù)愈犹?
- 編程式事務(wù)管理:編程方式管理事務(wù),極大靈活性蒲祈,難維護(hù)甘萧。
- 聲明式事務(wù)管理:可以將業(yè)務(wù)代碼和事務(wù)管理分離,用注解和xml配置來管理事務(wù)梆掸。
3、IOC 在項(xiàng)目中的作用牙言?
作用:Ioc解決對象之間的依賴問題酸钦,把所有Bean的依賴關(guān)系通過配置文件或注解關(guān)聯(lián)起來,降低了耦合度咱枉。
4卑硫、Spring的配置文件中的內(nèi)容?
- 開啟事務(wù)注解驅(qū)動
- 事務(wù)管理器
- 開啟注解功能蚕断,并配置掃描包
- 配置數(shù)據(jù)庫
- 配置SQL會話工廠欢伏,別名,映射文件
- 不用編寫Dao層的實(shí)現(xiàn)類
5亿乳、Spring下的注解硝拧?
- 注冊
@Controller @Service @Component - 注入
@Autowired @Resource - 請求地址
@RequestMapping - 返回具體數(shù)據(jù)類型而非跳轉(zhuǎn)
@ResponseBody
6、Spring DI 的三種方式?
構(gòu)造器注入:通過構(gòu)造方法初始化
<constructor-arg index="0" type="java.lang.String" value="寶馬"></constructor-arg>setter方法注入:通過setter方法初始化
<property name="id" value="1111"></property>接口注入
7葛假、Spring主要使用了什么模式障陶?
- 工廠模式:每個Bean的創(chuàng)建通過方法
- 單例模式:默認(rèn)的每個Bean的作用域都是單例
- 代理模式:關(guān)于Aop的實(shí)現(xiàn)通過代理模式
8、IOC聊训,AOP的實(shí)現(xiàn)原理抱究?
- IOC:通過反射機(jī)制生成對象注入
- AOP:動態(tài)代理
二、SpringMvc面試題
1带斑、SpringMvc 的控制器是不是單例模式鼓寺,如果是,有什么問題勋磕,怎么解決妈候?
- 問題:單例模式,在多線程訪問時有線程安全問題
- 解決方法:不要用同步朋凉,在控制器里面不能寫字段
2州丹、SpringMvc 中控制器的注解?
- @Controller:該注解表明該類扮演控制器的角色
3、@RequestMapping 注解用在類上的作用墓毒?
- 作用:用來映射一個URL到一個類或者一個特定的處理方法上
4吓揪、前臺多個參數(shù),這些參數(shù)都是一個對象所计,快速得到對象柠辞?
- 方法:直接在方法中聲明這個對象,SpringMvc就自動把屬性賦值到這個對象里面
5主胧、SpringMvc中函數(shù)的返回值叭首?
String,ModelAndView踪栋,List焙格,Set 等
一般String,Ajax請求夷都,返回一個List集合
6眷唉、SpringMvc中的轉(zhuǎn)發(fā)和重定向?
- 轉(zhuǎn)發(fā): return:"hello"
- 重定向 :return:"redirect:hello.jsp"
7、SpringMvc和Ajax之間的相互調(diào)用囤官?
通過JackSon框架把java里面對象直接轉(zhuǎn)換成js可識別的json對象冬阳,具體步驟如下:
1、加入JackSon.jar
2党饮、在配置文件中配置json的映射
3肝陪、在接受Ajax方法里面直接返回Object,list等刑顺,方法前面需要加上注解@ResponseBody
8氯窍、SpringMvc的工作流程圖?
9、Struts2 和 SpringMvc的區(qū)別?
- 入口不同:
- Struts2:filter過濾器
- SpringMvc:一個Servlet即前端控制器
- 開發(fā)方式不同:
- Struts2:基于類開發(fā)捏检,傳遞參數(shù)通過類的屬性荞驴,只能設(shè)置為多例
- SpringMvc:基于方法開發(fā)(一個url對應(yīng)一個方法),請求參數(shù)傳遞到方法形參贯城,可以為單例也可以為多例(建議單例)
- 請求方式不同:
- Struts2:值棧村塾請求和響應(yīng)的數(shù)據(jù)熊楼,通過OGNL存取數(shù)據(jù)
- SpringMvc:通過參數(shù)解析器將request請求內(nèi)容解析,給方法形參賦值能犯,將數(shù)據(jù)和視圖封裝成ModelAndView對象鲫骗,最后又將ModelAndView中的模型數(shù)據(jù)通過request域傳輸?shù)巾撁妫琷sp視圖解析器默認(rèn)使用的是jstl踩晶。
三执泰、Mybatis面試題
1、Ibatis和Mybatis渡蜻?
- Ibatis:2010年术吝,apache的Ibatis框架停止更新计济,并移交給了google團(tuán)隊(duì),同時更名為MyBatis排苍。從2010年后Ibatis在沒更新過沦寂,徹底變成了一個孤兒框架。一個沒人維護(hù)的框架注定被mybatis拍在沙灘上淘衙。
- Mybatis:Ibatis的升級版本传藏。
2、什么是Mybatis的接口綁定彤守,有什么好處毯侦?
Mybatis實(shí)現(xiàn)了DAO接口與xml映射文件的綁定,自動為我們生成接口的具體實(shí)現(xiàn)具垫,使用起來變得更加省事和方便侈离。
3、什么情況用注解做修,什么情況用xml綁定霍狰?
- 注解使用情況:Sql語句簡單時
- xml綁定使用情況:xml綁定 (@RequestMap用來綁定xml文件)
4、Mybatis在核心處理類叫什么?
SqlSession
5饰及、查詢表名和返回實(shí)體Bean對象不一致,如何處理康震?
映射鍵值對即可
<result column="title" property="title" javaType="java.lang.String"/>
- column:數(shù)據(jù)庫中表的列名
- property:實(shí)體Bean中的屬性名
6燎含、Mybatis的好處?
- 把Sql語句從Java中獨(dú)立出來腿短。
- 封裝了底層的JDBC屏箍,API的調(diào)用,并且能夠?qū)⒔Y(jié)果集自動轉(zhuǎn)換成JavaBean對象橘忱,簡化了Java數(shù)據(jù)庫編程的重復(fù)工作赴魁。
- 自己編寫Sql語句,更加的靈活钝诚。
- 入?yún)o需用對象封裝(或者map封裝),使用@Param注解
7颖御、Mybatis配置一對多?
<collection property="topicComment" column="id" ofType="com.tmf.bbs.pojo.Comment" select="selectComment" />
- property:屬性名
- column:共同列
- ofType:集合中元素的類型
- select:要連接的查詢
8凝颇、Mybatis配置一對一潘拱?
<association property="topicType" select="selectType" column="topics_type_id" javaType="com.tmf.bbs.pojo.Type"/>
- property:屬性名
- select:要連接的查詢
- column:共同列
- javaType:集合中元素的類型
9 、${} 和 #{}的區(qū)別拧略?
- ${}:字符串替換芦岂,sql中的${}替換成?垫蛆,有效的防止Sql語句注入禽最。
- #{}:預(yù)編譯處理腺怯,把#{}直接替換成變量的值,不做任何轉(zhuǎn)換川无。
總結(jié):一般用#{}來進(jìn)行列的代替
10呛占、獲取上一次自動生成的主鍵值?
select last _insert_id()
11舀透、Mybatis如何分頁栓票,分頁原理?
- RowBounds對象分頁
- 在Sql內(nèi)直接書寫愕够,帶有物理分頁
12走贪、Mybatis工作原理?
原理:
- 通過SqlSessionFactoryBuilder從mybatis-config.xml配置文件中構(gòu)建出SqlSessionFactory惑芭。
- SqlSessionFactory開啟一個SqlSession坠狡,通過SqlSession實(shí)例獲得Mapper對象并且運(yùn)行Mapper映射的Sql語句。
- 完成數(shù)據(jù)庫的CRUD操作和事務(wù)提交遂跟,關(guān)閉SqlSession逃沿。
四、結(jié)語
前面如有不正確的地方還希望大家多多指教幻锁,希望和志同道合的朋友一起學(xué)習(xí)凯亮,一起進(jìn)步,先更新到這里哄尔,下次繼續(xù)補(bǔ)充假消。