国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) Java Java面試題 java高頻率基礎(chǔ)面試題-(八)

java高頻率基礎(chǔ)面試題-(八)

Sep 11, 2020 pm 03:59 PM
java 面試題

java高頻率基礎(chǔ)面試題-(八)

91,什麼是ORM?

(更多相關(guān)面試題推薦:java面試題目

物件關(guān)係映射(Object-Relational Mapping,簡(jiǎn)稱(chēng)ORM)是一種為了解決程序的物件導(dǎo)向模型與資料庫(kù)的關(guān)係模型互不匹配問(wèn)題的技術(shù);

簡(jiǎn)單的說(shuō),ORM是透過(guò)使用描述物件和資料庫(kù)之間映射的元資料(在Java中可以用XML或註解),將程式中的物件自動(dòng)持久化到關(guān)聯(lián)式資料庫(kù)中或?qū)㈥P(guān)聯(lián)式資料庫(kù)表中的行轉(zhuǎn)換成Java對(duì)象,其本質(zhì)上就是將資料從一種形式轉(zhuǎn)換到另外一種形式。

92,Hibernate中SessionFactory是執(zhí)行緒安全的嗎? Session是線程安全的嗎(兩個(gè)線程能夠共享同一個(gè)Session嗎)?
SessionFactory對(duì)應(yīng)Hibernate的一個(gè)資料儲(chǔ)存的概念,它是執(zhí)行緒安全的,可以被多個(gè)執(zhí)行緒並發(fā)存取。 SessionFactory一般只會(huì)在啟動(dòng)的時(shí)候建置。對(duì)於應(yīng)用程序,最好將SessionFactory透過(guò)單例模式進(jìn)行封裝以便於存取。

Session是一個(gè)輕量級(jí)非執(zhí)行緒安全的物件(執(zhí)行緒間不能共享session),它表示與資料庫(kù)互動(dòng)的一個(gè)工作單元。 Session是由SessionFactory創(chuàng)建的,在任務(wù)完成之後它會(huì)關(guān)閉。 Session是持久層服務(wù)對(duì)外提供的主要介面。

Session會(huì)延遲取得資料庫(kù)連線(也就是在需要的時(shí)候才會(huì)取得)。為了避免創(chuàng)建太多的session,可以使用ThreadLocal將session和當(dāng)前線程綁定在一起,這樣可以讓同一個(gè)線程獲得的總是同一個(gè)session。 Hibernate 3中SessionFactory的getCurrentSession()方法就可以做到。

93,Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分別是做什麼的?有什麼區(qū)別?
????????Hibernate的物件有三種狀態(tài):瞬時(shí)態(tài)(transient)、持久態(tài)(persistent)和遊離態(tài)(detached)。

????????瞬時(shí)態(tài)的實(shí)例可以透過(guò)呼叫save()、persist()或是saveOrUpdate()方法變成持久態(tài);

????????遊離態(tài)的實(shí)例可以透過(guò)呼叫Upupate(date)、OraveUp lock()或replicate()變成持久態(tài)。 save()和persist()將會(huì)引發(fā)SQL的INSERT語(yǔ)句,而update()或merge()會(huì)引發(fā)UPDATE語(yǔ)句。

????????save()和update()的差異在於一個(gè)是將瞬時(shí)態(tài)物件變成持久態(tài),一個(gè)是將遊離態(tài)物件變成持久態(tài)。 merge()方法可以完成save()和update()方法的功能,它的意圖是將新的狀態(tài)合併到現(xiàn)有的持久化物件上或建立新的持久化物件。

????????為persist()方法,依照官方文件的說(shuō)明:

????????1、persist()方法立即將一個(gè)瞬時(shí)態(tài)的實(shí)例填入持久化,但並不能保證填入持久化在持久化實(shí)例中,標(biāo)識(shí)符的填入可能被推遲到flush的時(shí)間;

????????2、persist()方法保證當(dāng)它在一個(gè)事務(wù)外部被調(diào)用的時(shí)候並不觸發(fā)一個(gè)INSERT語(yǔ)句,當(dāng)需要封裝一個(gè)長(zhǎng)會(huì)話流程的時(shí)候,persist()方法是很有必要的;

????????3、save()方法不保證第2條,它要回傳標(biāo)識(shí)符,所以它會(huì)立即執(zhí)行INSERT語(yǔ)句,不管是在事務(wù)內(nèi)部還是外部。至於lock()方法和update()方法的區(qū)別,update()方法是把一個(gè)已經(jīng)更改過(guò)的脫管狀態(tài)的對(duì)象變成持久狀態(tài);lock()方法是把一個(gè)沒(méi)有更改過(guò)的脫管狀態(tài)的對(duì)象變成持久狀態(tài)。

94,闡述Session載入實(shí)體物件的過(guò)程。
????????1、Session在呼叫資料庫(kù)查詢功能之前,首先會(huì)在一級(jí)快取中透過(guò)實(shí)體類(lèi)型和主鍵進(jìn)行查找,如果一級(jí)快取查找命中且資料狀態(tài)合法,則直接回傳;
????????2、如果一一等級(jí)快取沒(méi)有命中??,接下來(lái)Session會(huì)在目前NonExists記錄(相當(dāng)於一個(gè)查詢黑名單,如果出現(xiàn)重複的無(wú)效查詢可以迅速做出判斷,從而提升效能)中進(jìn)行查找,如果NonExists中存在同樣的查詢條件,則回傳null;
????????3、如果一級(jí)快取查詢失敗查詢二級(jí)快取,如果二級(jí)快取命中直接回傳;
????????4、如果先前的查詢都未命中,則發(fā)出SQL語(yǔ)句,如果查詢未發(fā)現(xiàn)對(duì)應(yīng)記錄則將此查詢加入Session的NonExists中加以記錄,並回傳null;
????????5、依據(jù)對(duì)位設(shè)定和SQL語(yǔ)句得到ResultSet,並建立對(duì)應(yīng)的實(shí)體物件;
???#???(一級(jí)快?。┑墓芾?;
????????7、如果有對(duì)應(yīng)的攔截器,執(zhí)行攔截器的onLoad方法;
????????8、如果開(kāi)啟並設(shè)定了要使用二級(jí)快取,則將資料物件納入二????8、如果開(kāi)啟並設(shè)定了要使用二級(jí)快取級(jí)快取;
????????9、返回資料物件。

95,MyBatis中使用#和$書(shū)寫(xiě)佔(zhàn)位符有什麼區(qū)別?
????????#將傳入的資料都當(dāng)成字串,並且會(huì)以傳入的資料自動(dòng)加上引號(hào);

????$將傳入的資料直接顯示產(chǎn)生在SQL中。

????????注意:使用$佔(zhàn)位符可能會(huì)導(dǎo)致SQL注射攻擊,能用#的地方就不要使用$,寫(xiě)order by子句的時(shí)候應(yīng)該用$而不是#。

96,說(shuō)明MyBatis中命名空間(namespace)的功能。
????????在大型專(zhuān)案中,且可能有大量的SQL語(yǔ)句,而這時(shí)候?yàn)槊總€(gè)SQL語(yǔ)句起一個(gè)唯一的識(shí)別(ID)就變得不容易了。為了解決這個(gè)問(wèn)題,在MyBatis中,可以為每個(gè)映射檔案起一個(gè)唯一的命名空間,這樣定義在這個(gè)映射檔案中的每個(gè)SQL語(yǔ)句就成了定義在這個(gè)命名空間中的一個(gè)ID。只要我們能夠保證每個(gè)命名空間中這個(gè)ID是唯一的,即使在不同映射檔案中的語(yǔ)句ID相同,也不會(huì)再產(chǎn)生衝突了。

(影片教學(xué)推薦:java課程

97、MyBatis中的動(dòng)態(tài)SQL是什麼意思?
????????對(duì)於一些複雜的查詢,我們可能會(huì)指定多個(gè)查詢條件,但是這些條件可能存在也可能不存在,如果不使用持久層框架我們可能需要自己拼裝SQL語(yǔ)句,不過(guò)MyBatis提供了動(dòng)態(tài)SQL的功能來(lái)解決這個(gè)問(wèn)題。 MyBatis中用於實(shí)現(xiàn)動(dòng)態(tài)SQL的元素主要有:
- if??? - choose / when / otherwise??? - trim??? - where??? - set??#?? - foreach

#lt; ;select id="foo" parameterType="Blog" resultType="Blog"> ? ? ? ?

? select * from t_blog where 1 = 1 ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? and title = #{title} ? ? ? ?
? ? ? ? ? ? ? ? ? ?

? ?? ? ? ?and content = #{content} ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? and owner = #{owner} ? ? ? ? ?

98,JDBC程式設(shè)計(jì)有哪些不足之處,MyBatis是如何解決這些問(wèn)題的?

????????1、JDBC:資料庫(kù)連結(jié)建立、釋放頻繁造成系統(tǒng)資源浪費(fèi)進(jìn)而影響系統(tǒng)效能,若使用資料庫(kù)連結(jié)池可解決此問(wèn)題。

????????MyBatis:在SqlMapConfig.xml中設(shè)定資料連結(jié)池,並使用連接池管理資料庫(kù)連結(jié)。

??? ????2、JDBC:Sql語(yǔ)句寫(xiě)在程式碼中造成程式碼不易維護(hù),且實(shí)際應(yīng)用sql變化的可能較大,sql變動(dòng)需要改變java程式碼。

????????MyBatis:將Sql語(yǔ)句配置在XXXXmapper.xml檔案中與java程式碼分離。
????????3、JDBC:向sql語(yǔ)句傳參數(shù)麻煩,因?yàn)閟ql語(yǔ)句的where條件不一定,可能多也可能少,佔(zhàn)位符需要和參數(shù)一一對(duì)應(yīng)。

????????MyBatis:?Mybatis自動(dòng)將java物件對(duì)應(yīng)至sql語(yǔ)句。
????????4,JDBC:對(duì)結(jié)果集解析麻煩,sql變化導(dǎo)致解析程式碼變化,解析前需遍歷,若能將資料庫(kù)記錄封裝成pojo物件解析比較方便。

????????MyBatis:Mybatis自動(dòng)將sql執(zhí)行結(jié)果對(duì)應(yīng)至java物件。

99,MyBatis與Hibernate有哪些不同?

??? ????1、Mybatis和hibernate不同,它不完全是一個(gè)ORM框架,因?yàn)镸yBatis需要程式設(shè)計(jì)師自己寫(xiě)Sql語(yǔ)句,不過(guò)mybatis可以透過(guò)XML或註解方式靈活設(shè)定要執(zhí)行的sql語(yǔ)句,並將java物件和sql語(yǔ)句映射產(chǎn)生最終執(zhí)行的sql,最後將sql執(zhí)行的結(jié)果再映射生成java物件。
??? ????2、Mybatis學(xué)習(xí)門(mén)檻低,簡(jiǎn)單易學(xué),程式設(shè)計(jì)師直接撰寫(xiě)原生態(tài)sql,可嚴(yán)格控制sql執(zhí)行效能,彈性高,非常適合關(guān)係資料模式要求不高的軟體開(kāi)發(fā),例如網(wǎng)路軟體、企業(yè)營(yíng)運(yùn)軟體等,因?yàn)檫@類(lèi)軟體需求變化頻繁,一但需求變化要求成果輸出迅速。但是靈活的前提是mybatis無(wú)法做到資料庫(kù)無(wú)關(guān)性,如果需要實(shí)作支援多種資料庫(kù)的軟體則需要自訂多套sql映射文件,工作量大。? ? ? ? ?? ??? 3、Hibernate物件/關(guān)聯(lián)映射能力強(qiáng),資料庫(kù)無(wú)關(guān)性佳,對(duì)於關(guān)係模式要求高的軟體(例如需求固定的客製化軟體)如果用hibernate開(kāi)發(fā)可以節(jié)省許多程式碼,提高效率。但是Hibernate的缺點(diǎn)是學(xué)習(xí)門(mén)檻高,要精通門(mén)檻更高,而且怎麼設(shè)計(jì)O/R映射,在性能和對(duì)像模型之間如何權(quán)衡,以及怎樣用好Hibernate需要具有很強(qiáng)的經(jīng)驗(yàn)和能力才行。? ? ? ? ?
????????總之,以使用者的需求為已在有限的資源環(huán)境中做出維護(hù)性、可擴(kuò)展性良好的軟體架構(gòu)為好架構(gòu),因此架構(gòu)只有適合才是最好。

(這裡也可以結(jié)合自己的理解說(shuō),別說(shuō)的收不?。?/p>

100,簡(jiǎn)單的說(shuō)一下MyBatis的一級(jí)快取和二級(jí)快???

????????Mybatis先去快取查詢結(jié)果集,如果沒(méi)有則查詢資料庫(kù),如果有則從快取取出回傳結(jié)果集就不走資料庫(kù)。 Mybatis內(nèi)部?jī)?chǔ)存快取使用一個(gè)HashMap,key為hashCode sqlId Sql語(yǔ)句。 value為從查詢出來(lái)映射產(chǎn)生的java物件
????????Mybatis的二級(jí)快取即查詢快取,而它的作用域是一個(gè)mapper的namespace,即在同一個(gè)namespace中查詢sql可以從快取中取得資料。二級(jí)緩存是可以跨SqlSession的。

相關(guān)教學(xué)推薦:java入門(mén)教學(xué)

#

以上是java高頻率基礎(chǔ)面試題-(八)的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話題

如何在Java的地圖上迭代? 如何在Java的地圖上迭代? Jul 13, 2025 am 02:54 AM

遍歷Java中的Map有三種常用方法:1.使用entrySet同時(shí)獲取鍵和值,適用於大多數(shù)場(chǎng)景;2.使用keySet或values分別遍歷鍵或值;3.使用Java8的forEach簡(jiǎn)化代碼結(jié)構(gòu)。 entrySet返回包含所有鍵值對(duì)的Set集合,每次循環(huán)獲取Map.Entry對(duì)象,適合頻繁訪問(wèn)鍵和值的情況;若只需鍵或值,可分別調(diào)用keySet()或values(),也可在遍歷鍵時(shí)通過(guò)map.get(key)獲取值;Java8中可通過(guò)Lambda表達(dá)式使用forEach((key,value)-&gt

Java可選示例 Java可選示例 Jul 12, 2025 am 02:55 AM

Optional能清晰表達(dá)意圖並減少null判斷的代碼噪音。 1.Optional.ofNullable是處理可能為null對(duì)象的常用方式,如從map中取值時(shí)可結(jié)合orElse提供默認(rèn)值,邏輯更清晰簡(jiǎn)潔;2.通過(guò)鍊式調(diào)用map實(shí)現(xiàn)嵌套取值,安全地避免NPE,任一環(huán)節(jié)為null則自動(dòng)終止並返回默認(rèn)值;3.filter可用於條件篩選,滿足條件才繼續(xù)執(zhí)行後續(xù)操作,否則直接跳到o??rElse,適合輕量級(jí)業(yè)務(wù)判斷;4.不建議過(guò)度使用Optional,如基本類(lèi)型或簡(jiǎn)單邏輯中其反而增加複雜度,部分場(chǎng)景直接返回nu

如何修復(fù)java.io.notserializable Exception? 如何修復(fù)java.io.notserializable Exception? Jul 12, 2025 am 03:07 AM

遇到j(luò)ava.io.NotSerializableException的核心解決方法是確保所有需序列化的類(lèi)實(shí)現(xiàn)Serializable接口,並檢查嵌套對(duì)象的序列化支持。 1.給主類(lèi)添加implementsSerializable;2.確保類(lèi)中自定義字段對(duì)應(yīng)的類(lèi)也實(shí)現(xiàn)Serializable;3.用transient標(biāo)記不需要序列化的字段;4.檢查集合或嵌套對(duì)像中的非序列化類(lèi)型;5.查看異常信息定位具體哪個(gè)類(lèi)未實(shí)現(xiàn)接口;6.對(duì)無(wú)法修改的類(lèi)考慮替換設(shè)計(jì),如保存關(guān)鍵數(shù)據(jù)或使用可序列化的中間結(jié)構(gòu);7.考慮改

Java中的可比較與比較器 Java中的可比較與比較器 Jul 13, 2025 am 02:31 AM

在Java中,Comparable用於類(lèi)內(nèi)部定義默認(rèn)排序規(guī)則,Comparator用於外部靈活定義多種排序邏輯。 1.Comparable是類(lèi)自身實(shí)現(xiàn)的接口,通過(guò)重寫(xiě)compareTo()方法定義自然順序,適用於類(lèi)有固定、最常用的排序方式,如String或Integer。 2.Comparator是外部定義的函數(shù)式接口,通過(guò)compare()方法實(shí)現(xiàn),適合同一類(lèi)需要多種排序方式、無(wú)法修改類(lèi)源碼或排序邏輯經(jīng)常變化的情況。兩者區(qū)別在於Comparable只能定義一種排序邏輯且需修改類(lèi)本身,而Compar

如何處理Java中的字符編碼問(wèn)題? 如何處理Java中的字符編碼問(wèn)題? Jul 13, 2025 am 02:46 AM

處理Java中的字符編碼問(wèn)題,關(guān)鍵是在每一步都明確指定使用的編碼。 1.讀寫(xiě)文本時(shí)始終指定編碼,使用InputStreamReader和OutputStreamWriter並傳入明確的字符集,避免依賴(lài)系統(tǒng)默認(rèn)編碼。 2.在網(wǎng)絡(luò)邊界處理字符串時(shí)確保兩端一致,設(shè)置正確的Content-Type頭並用庫(kù)顯式指定編碼。 3.謹(jǐn)慎使用String.getBytes()和newString(byte[]),應(yīng)始終手動(dòng)指定StandardCharsets.UTF_8以避免平臺(tái)差異導(dǎo)致的數(shù)據(jù)損壞??傊?,通過(guò)在每個(gè)階段

如何在Java解析JSON? 如何在Java解析JSON? Jul 11, 2025 am 02:18 AM

解析JSON在Java中的常見(jiàn)方式有三種:使用Jackson、Gson或org.json。 1.Jackson適合大多數(shù)項(xiàng)目,性能好且功能全面,支持對(duì)象與JSON字符串之間的轉(zhuǎn)換及註解映射;2.Gson更適合Android項(xiàng)目或輕量級(jí)需求,使用簡(jiǎn)單但處理複雜結(jié)構(gòu)和高性能場(chǎng)景略遜;3.org.json適用於簡(jiǎn)單任務(wù)或小腳本,不推薦用於大型項(xiàng)目,因其靈活性和類(lèi)型安全不足。選擇應(yīng)根據(jù)實(shí)際需求決定。

Java方法參考解釋了 Java方法參考解釋了 Jul 12, 2025 am 02:59 AM

方法引用是Java中一種簡(jiǎn)化Lambda表達(dá)式的寫(xiě)法,使代碼更簡(jiǎn)潔。它不是新語(yǔ)法,而是Java8引入的Lambda表達(dá)式的一種快捷方式,適用於函數(shù)式接口的上下文。其核心在於將已有方法直接作為函數(shù)式接口的實(shí)現(xiàn)來(lái)使用。例如System.out::println等價(jià)於s->System.out.println(s)。方法引用主要有四種形式:1.靜態(tài)方法引用(ClassName::staticMethodName);2.實(shí)例方法引用(綁定到特定對(duì)象,instance::methodName);3.

新電子郵件的Outlook快捷方式 新電子郵件的Outlook快捷方式 Jul 11, 2025 am 03:25 AM

在Outlook中快速新建郵件的方法如下:1.桌面版使用快捷鍵Ctrl Shift M,可直接彈出新郵件窗口;2.網(wǎng)頁(yè)版可通過(guò)創(chuàng)建包含JavaScript的書(shū)籤(如javascript:document.querySelector("divrole='button'").click())實(shí)現(xiàn)一鍵新建郵件;3.使用瀏覽器插件(如Vimium、CrxMouseGestures)自定義快捷鍵觸發(fā)“新建郵件”按鈕;4.Windows用戶還可通過(guò)右鍵任務(wù)欄Outlook圖標(biāo)選擇“新建電

See all articles