Spring主要使用了什么模式?
工廠模式:每個(gè)Bean的創(chuàng)建通過(guò)方法
單例模式:默認(rèn)的每個(gè)Bean的作用域都是單例
代理模式:關(guān)于Aop的實(shí)現(xiàn)通過(guò)代理模式
${}和#{}的區(qū)別?
${}:簡(jiǎn)單字符串替換,把${}直接替換成變量的值,不做任何轉(zhuǎn)換,這種是取值以后再去編譯SQL語(yǔ)句。
#{}:預(yù)編譯處理,sql中的#{}替換成?,補(bǔ)全預(yù)編譯語(yǔ)句,有效的防止Sql語(yǔ)句注入,這種取值是編譯好SQL語(yǔ)句再取值。
總結(jié):一般用#{}來(lái)進(jìn)行列的代替。
談?wù)勣D(zhuǎn)發(fā)和重定向的區(qū)別
第一個(gè)差別點(diǎn),就是重定向是兩次請(qǐng)求,轉(zhuǎn)發(fā)是一次請(qǐng)求,因此轉(zhuǎn)發(fā)的速度要快于重定向。
第二個(gè)差別點(diǎn),重定向之后地址欄上的地址會(huì)發(fā)生變化,變化成第二次請(qǐng)求的地址,轉(zhuǎn)發(fā)之后地址欄上的地址不會(huì)變化,還是第一次請(qǐng)求的地址。
談?wù)刢ookie跟session的區(qū)別
cookie數(shù)據(jù)保存在客戶端,session數(shù)據(jù)保存在服務(wù)器端。
一般情況下,服務(wù)器會(huì)在一定時(shí)間內(nèi)(默認(rèn)30分鐘)保存這個(gè)Session,過(guò)了時(shí)間限制,就會(huì)銷毀這個(gè)Session。
如果不設(shè)置這個(gè)過(guò)期時(shí)間,那么cookie將不存放在硬盤上,當(dāng)瀏覽器關(guān)閉的時(shí)候,cookie就消失了,這個(gè)SessionID就丟失了。如果我們?cè)O(shè)置這個(gè)時(shí)間為若干天之后,那么這個(gè)cookie會(huì)保存在客戶端硬盤中,即使瀏覽器關(guān)閉,這個(gè)值仍然存在,下次訪問(wèn)相應(yīng)網(wǎng)站時(shí),同樣會(huì)發(fā)送到服務(wù)器上。
關(guān)系數(shù)據(jù)庫(kù)中的主鍵和外鍵有什么關(guān)系?
定義主鍵和外鍵主要是為了維護(hù)關(guān)系數(shù)據(jù)庫(kù)的完整性。
主鍵是能確定一條記錄的唯一標(biāo)識(shí),比如,一條用戶記錄包括身份證號(hào),姓名等。身份證號(hào)是唯一能確定你這個(gè)人的,其他都可能有重復(fù),所以,身份證號(hào)可以是主鍵。
外鍵用于與另一張表的關(guān)聯(lián)。是能確定另一張表記錄的字段,用于保持?jǐn)?shù)據(jù)的一致性,一表的外鍵是另一張表的主鍵或唯一字段。
比如,A表中的一個(gè)字段,是B表的主鍵,那他就可以是A表的外鍵。
談?wù)勈聞?wù)的隔離級(jí)別
Readuncommitted
讀未提交,顧名思義,就是一個(gè)事務(wù)可以讀取另一個(gè)未提交事務(wù)的數(shù)據(jù)。
Readcommitted
讀提交,顧名思義,就是一個(gè)事務(wù)要等另一個(gè)事務(wù)提交后才能讀取數(shù)據(jù)。
Repeatableread
重復(fù)讀,就是在開(kāi)始讀取數(shù)據(jù)(事務(wù)開(kāi)啟)時(shí),不再允許修改操作
Serializable序列化
Serializable是最高的事務(wù)隔離級(jí)別,在該級(jí)別下,事務(wù)串行化順序執(zhí)行,可以避免臟讀、不可重復(fù)讀與幻讀。但是這種事務(wù)隔離級(jí)別效率低下,比較耗數(shù)據(jù)庫(kù)性能,一般不使用。
描述一下spring的工作原理
Spring中兩大核心思想IOC和AOP,IOC控制反轉(zhuǎn)將對(duì)象創(chuàng)建的權(quán)利交給了Spring容器,可以自動(dòng)生產(chǎn)。利用的就是反射的原理,動(dòng)態(tài)的創(chuàng)建對(duì)象,調(diào)用對(duì)象,Spring就是運(yùn)行的時(shí)候根據(jù)配置文件來(lái)動(dòng)態(tài)的創(chuàng)建對(duì)象和維護(hù)對(duì)象之間的關(guān)系,實(shí)現(xiàn)了松耦合的思想。
AOP是面向切面編程,就是可以很好的把業(yè)務(wù)邏輯和系統(tǒng)服務(wù)分離(事務(wù),日志等),業(yè)務(wù)邏輯只關(guān)心業(yè)務(wù)的處理而不再去處理其他事情,這些都是通過(guò)配置來(lái)實(shí)現(xiàn)。
談?wù)凷pring如何配置聲明式事務(wù)控制
聲明式事務(wù)管理也有兩種常用的方式,一種是基于tx和aop名字空間的xml配置文件,另一種就是基于@Transactional注解
配置文件
-配置事務(wù)管理器
-事務(wù)的策略(這里可以配置事務(wù)的隔離級(jí)別,傳播屬性,是否可讀等)
-配置事務(wù)的切入點(diǎn),注入事務(wù)屬性
注解
-配置事務(wù)管理器
-開(kāi)啟事務(wù)控制的注解支持
-在類或者方法上面添加@Transactiona,事務(wù)的屬性都在該注解的屬性上設(shè)置
spring的特點(diǎn)?如何手寫(xiě)實(shí)現(xiàn)spring原理?
Spring量大核心思想AOP和IOC(具體上面有)
Spring是個(gè)巨大的工廠,這個(gè)工廠就是專門用來(lái)生成Bean,所以如果要手寫(xiě)的一定要用到工廠設(shè)計(jì)模式
寫(xiě)一個(gè)工廠類,對(duì)外提供一個(gè)靜態(tài)方法,這個(gè)方法接受用戶要?jiǎng)?chuàng)建對(duì)象的一個(gè)id,對(duì)象和id可以寫(xiě)到配置文件里面,工廠再提供一個(gè)init方法進(jìn)行讀取配置文件。用戶調(diào)用的是傳入id根據(jù)id在配置文件中找到要?jiǎng)?chuàng)建的對(duì)象,最后通過(guò)反射創(chuàng)建對(duì)象并返回給用戶。
springMVC中的常用注解
@RequestMapping--請(qǐng)求和方法映射
@RequsetBody--接收客戶端出傳入的JOSN數(shù)據(jù)
@ResponceBody--返回客戶端JOSN數(shù)據(jù)
@Controller--代表控制層
@Service--代表業(yè)務(wù)層
@Repository--代表數(shù)據(jù)層
@Component--把Bean添加到Spring容器中
@Autowired--自動(dòng)注入,按照類型注入
@Resource--自定注入,可以按照類型注入也可以按照名字注入
@PathVariable--restFul風(fēng)格的時(shí)候使用
@Param--表單參數(shù)和方法形參不一樣時(shí)使用
更多Java相關(guān)面試題,登錄天津卓眾教育IT培訓(xùn)官網(wǎng),Java面試題專欄。
Java面試題