目錄
82.Mybatis一級緩存,二級緩存?
83.Mybatis如何防止SQL注入?
84.mybatis中resultType和resultMap有什么區(qū)別?
85.如何在SpringBoot中禁用Actuator斷點安全性?
86.什么是SpringBoot?SpringBoot有哪些優(yōu)點?
87.SpringBoot中的監(jiān)視器是什么?
88.什么是yaml文件?
89.如何使用SpringBoot實現(xiàn)異常處理??
90.SpringBoot中有哪些常用注解?
91.SpringBoot中有哪些選擇器類?
92.SpringBoot中緩存相關的注解有哪些?
93.Springboot如何進行打包和部署?
94.SpringBoot如何訪問不同數(shù)據(jù)庫?
95.為什么要使用hibernate?
96.hibernate中如何在控制臺查看打印的SQL語句?
97.hibernate有幾種查詢方式?
98.hibernate實體類可以被綁定為final嗎?
99.在hibernate中使用integer和int做映射有什么區(qū)別?
100.如何搭建一個高可用的系統(tǒng)?
101.你認為項目中最重要的過程是哪些?
82.Mybatis一級緩存,二級緩存?
1.一級緩存:指的是Mybatis中sqlSession對象的緩存,當我們執(zhí)行查詢以后,查詢的結果會同時存入sqlSession中,再次查詢的時候,先去sqlSession中查詢,有的話直接拿出來,當sqlSession消失時,Mybatis的一級緩存也就消失了,當調(diào)用sqlSession的修改,添加,刪除,commit(),close()等方法時,會清空一級緩存。
2.二級緩存:指的是Mybatis中的sqlSessionFactory對象的緩存,由同一個sqlSessionFactory對象創(chuàng)建的sqlSession共享其緩存,但是其中緩存的是數(shù)據(jù)而不是對象。當命中二級緩存時,通過存儲的數(shù)據(jù)構造成對象返回。查詢數(shù)據(jù)的時候,查詢的流程是二級緩存>一級緩存>數(shù)據(jù)庫。
3.二級緩存執(zhí)行時機,如果開啟了二級緩存,sqlSession進行close()后,才會把sqlSession一級緩存中數(shù)據(jù)添加到二級緩存中,為了將緩存數(shù)據(jù)取出來執(zhí)行反序列化,還需要將要緩存的pojo實現(xiàn)Serializable接口,因為二級緩存數(shù)據(jù)存儲介質多種多樣,不一定只存在內(nèi)存中,也可能存在硬盤中。
4.Mybatis執(zhí)行步驟,Mybatis框架主要是圍繞SqlSessionFactory進行的,具體步驟:
? ?定義一個configuration對象,其中包含數(shù)據(jù)源,事務,mapper文件資源以及影響數(shù)據(jù)庫行為屬性設置settings.
? ?通過配置對象,則可以創(chuàng)建一個sqlSessionFactoryBuilder對象
? ?通過sqlSessionFactoryBuilder獲得sqlSessionFactory實例。
? ?通過sqlSessionFactory實例創(chuàng)建sqlSession實例,通過SqlSession對數(shù)據(jù)庫進行操作。
83.Mybatis如何防止SQL注入?
? ?注意:但凡是sql注入漏洞的程序,都是因為程序要結束來自客戶端用戶輸入的變量或者URL傳遞的參數(shù),并且這個變量或者參數(shù)組成sql語句的一部分。對于用戶輸入的內(nèi)容或傳遞的參數(shù),我們應該要時刻保持警惕,這是安全領域里的【外部數(shù)據(jù)不可信任】的原則??v觀Web安全領域的各種攻擊方式,大多數(shù)都是因為開發(fā)者違反了這個原則而導致的。所以自然能想到,就是變量的檢測,過濾,驗證下手,確保變量是開發(fā)者所預想的。
1.檢查變量數(shù)據(jù)類型和格式,數(shù)據(jù)類型檢查,SQL執(zhí)行前,要進行數(shù)據(jù)類型檢查,如果是郵箱??,參數(shù)就必須是郵箱的格式,如果是日期,就必須是日期格式;
? 只要是有固定格式的變量,在SQL語句執(zhí)行前,應該嚴格按照固定格式檢查,確保變量是我們預想的格式,這樣子很大程度上可以避免SQL注入攻擊。如果上述例子中ID是int型的,效果會怎么樣呢?無法注入,因為輸入注入?yún)?shù)會失敗。比如上述中的name字段,我們應該在用戶注冊的時候,就確定一個用戶名規(guī)則,比如5~20個字符,只能由大小寫字母,數(shù)字以及漢字組成,不包含特殊字符。此時我們應該有一個函數(shù)來完成統(tǒng)一的用戶名檢查。不過,仍然有很多場景并不能用到這個方法,比如寫博客,評論系統(tǒng),彈幕系統(tǒng),必須允許用戶可以提交任意形式的字符才行,否則用戶體驗感太差了。
2.過濾特殊符號
3.綁定變量,使用預編譯語句
84.mybatis中resultType和resultMap有什么區(qū)別?
? ? ?1.resultType是直接表示返回類型的(對應著我們的Model對象中的實體)
? ? ?2.resultMap則是對外部ResultMap的引用(提前定義了db和Model之間的映射key,value關系),但是resultType跟resultMap不能同時存在。
85.如何在SpringBoot中禁用Actuator斷點安全性?
? ? 默認情況下,所有敏感的HTTP端點都是安全的,只有具有Actuator角色的用戶才能訪問他們。安全性是使用標準的HTTPServletRequest.isUserInRole方法實施的。
? ?我們可以使用managerment.security.enable=false來禁用安全性。只有在執(zhí)行機構端點在防火墻后訪問時,才建議禁用安全性。
86.什么是SpringBoot?SpringBoot有哪些優(yōu)點?
? ? 1.SpringBoot簡介
? ? 基于Spring4.x的設計,不僅繼承了Spring框架原有的優(yōu)秀特性,而且還通過簡化配置來進一步簡化Spring應用的整個搭建和開發(fā)過程。另外SpringBoot通過集成大量的框架使得依賴包的版本沖突,引用的不穩(wěn)定性得到了解決。
? 2.SpringBoot有哪些優(yōu)點?
? ?快速構建項目,可以選擇一些必要的組件;
? ?對主流框架的無配置集成;
? ?內(nèi)嵌Tomcat容器,項目可獨立運行;
? ?刪除了繁瑣的xml配置文件;
? 極大地提高了開發(fā)和部署效率;
? 提供starter,簡化Maven配置;
3.SpringBoot有哪些缺點?
版本迭代速度快,一些模塊改動很大;
由于無需配置,報錯時很難定位。
87.SpringBoot中的監(jiān)視器是什么?
? ? 監(jiān)視器也叫l(wèi)istener,是servlet的監(jiān)聽器,可以用于監(jiān)聽Web應用程序中某些對象的創(chuàng)建,銷毀增加,修改,刪除等動作的發(fā)生,然后做出相應的響應處理。當范圍對象的狀態(tài)發(fā)生改變時,服務器自動調(diào)用監(jiān)聽器對象中的方法,常用于系統(tǒng)加載時進行信息初始化,統(tǒng)計在線人數(shù)和在線用戶,統(tǒng)計網(wǎng)站的訪問量。配置監(jiān)聽器的方法:
? ? 通過@Component把監(jiān)聽器加入Spring容器中管理;
? ? 在application.properties中添加context.listener.class配置
? ? 在方法上加上@EventListener注解
88.什么是yaml文件?
?yaml是JSON的一個超集,可以非常方便的將外部配置以層次結構形式存儲起來。yaml可以作為properties配置文件的替代。
yaml使用的注意事項:
?在properties文件中是以“."進行分割的,在yml中是用"."進行分割的;
?yml的數(shù)據(jù)格式和json的格式很像,都是KV格式,并且通過":"進行賦值;
?每個冒號后面一定要加一個空格;
89.如何使用SpringBoot實現(xiàn)異常處理??
? ? ?1.使用@ExceptionHandler注解處理局部異常,該方式只能處理當前Controller中的ArithmeticException和NullPointerException異常,缺點就是只能處理單個controller的異常。
? ?2.使用@ControllerAdvice+@ExceptionHandler注解處理全局異常
? ?3.配置SimpleMappingExceptionResolver類處理異常
? ?4.實現(xiàn)HandlerExceptionResolver接口處理異常
90.SpringBoot中有哪些常用注解?
?1.@SpringBootApplication替代@SPringBootConfiguration,@EnableAutoConfiguration,@ComponentScan
2.@ImportAutoConfiguration導入配置類,一般做測試的時候用,正常優(yōu)先使用@EnableAutoConfiguration.
3.@SpringBootConfiguration 替代@Configuration
4.@ImportResource將資源導入容器
5.@PropertySource導入properties文件
6.PropertySource? ?@PropertySource的集合
7.@Role Bean 角色定義為ROLE APPLICATION(默認值),ROLE SUPPORT(輔助角色),ROLE INFRASTRUCTURE(后臺角色,用戶無感)
8.@scope 指定bean的作用域,默認singleton,其他包括prototype,request,session,globalSession。
9.@Lazy使bean懶加載,取消bean與初始化。
10.@Primary自動裝配時出現(xiàn)多個Bean候選者時,被注解為@Primary的Bean將作為首選者,否則將拋出異常。
11.@Profile指定Bean在哪個環(huán)境下被激活
12.@DependsOn依賴的bean注冊完成,才注冊當前類,依賴bean不存在會報錯。用于控制bean加載順序。
13.@PostConstruct? bean的屬性都注入完畢后,執(zhí)行注解標注的方式進行初始化工作
14.@Autowired默認按類型裝配,如果我們想使用按名稱裝配,可以結合@Qualifier注解一起使用。
15.@Lookup根據(jù)方法返回的類型,去容器中撈出對應
16.@Qualifier申明bean名字,且可以按bean名字加載bean。
17.@Required檢查bean的屬性setXXX()方法,要求屬性在配置階段必須已經(jīng)配置。
18.@Description添加bean的文字描述。
19.@EnableAspectConfiguration啟動AspectJ自動配置
20.EnableLoadTimeWeaving啟動類加載器動態(tài)增強功能,使用instrucmentation實現(xiàn)
21.@AutoConfigurationPackage包含該注解的package會被AutoConfigurationPackages注冊
22.@AutoConfigureBefore在指定配置類初始化前加載
23.@AutoConfigureAfter在指定配置類初始化后加載
24.AutoConfigureOrder指定配置類初始化順序,越小初始化越早。
25.@ModelAttribute? ?注解可以被應用到方法上和方法參數(shù)上。
91.SpringBoot中有哪些選擇器類?
? ? 常用的選擇器如下:
@Conditional,當指定的條件都滿足時,組件才被注冊
@ConditionalOnBean,指定bean在上下文中時,才注冊當前bean。用在方法上,則默認依賴類為方法的返回類型。
@ConditionalOnClass,指定類在classpath上時,才初始化當前bean。用在方法上,則默認依賴類為方法的返回類型。
@ConditionalOnCloudPlateform,在指定云平臺才注冊配置。
@ConditionalOnExpression,指定spel為true時注冊配置。
@ConditionalOnJava,在指定Java版本時注冊配置;
@ConditionalOnMissingClass,指定類不在classpath上時,才初始化當前bean。用在方法上,則默認依賴類為方法的返回類型。
@ConditionalOnNotWebApplication,不是在Web環(huán)境才注冊配置。
@ConditionalOnProperty,配置文件中的值與指定值是否相等,相等才注冊配置
@ConditionalOnRespurce,指定resources都在classpath上才注冊配置。
@ConditionalOnSingleCondidate,上下文中只有一個候選者bean時才注冊配置
@ConditionalOnWebApplication,是在Web環(huán)境才注冊配置。
92.SpringBoot中緩存相關的注解有哪些?
? ? 緩存相關注解如下:
@EnableCaching,開啟緩存配置,支持子類代理或者Aspect增強;
@CacheConfig,在一個類下,提供公共緩存配置
@Cacheable,放在方法和類上,緩存方法或者類下所有方法的返回值
@CachePut,每次先執(zhí)行方法,再將結果放入緩存
@CacheEvict,刪除緩存
@Caching,可以配置@Cacheable,@CachePut,@CacheEvict
93.Springboot如何進行打包和部署?
? ?Spring和SpringBoot都支持Maven和gradle通用打包管理技術。SpringBoot相對Spring的一些優(yōu)點:
? 提供嵌入式容器支持;
?
部署時可以靈活指定配置文件;
最近項目是分布式的項目,都是通過分項目打包部署,然后部署在docker中運行。
94.SpringBoot如何訪問不同數(shù)據(jù)庫?
可以使用druidDataSource創(chuàng)建DataSource,然后通過jdbcTemplate執(zhí)行sql.
95.為什么要使用hibernate?
? ?hibernate對JDBC進行了封裝,簡化了JDBC的重復性代碼;
? hibernate對dao有一個封裝類hibernateTemplate,可以繼承他,實現(xiàn)簡單的CRUD接口。
? hibernate使用注解和配置文件,可以對實體類和映射文件進行映射;
?hibernate有事務管理機制,保證了數(shù)據(jù)的安全性;
? hibernate有一級緩存和二級緩存。
96.hibernate中如何在控制臺查看打印的SQL語句?
? ? ?需要在配置文件中進行如下配置:
??
97.hibernate有幾種查詢方式?
?1.導航對象圖查詢:根據(jù)已加載的對象,導航到其他對象。例如,對于已經(jīng)加載的Customer對象,調(diào)用他的getOrders().iterator()方法就可以導航到所有關聯(lián)的Order對象,假如在關聯(lián)級別使用了延遲加載檢索策略,那么首次執(zhí)行此方法時,hibernate會從數(shù)據(jù)庫中加載關聯(lián)的Order對象,否則就從緩存中獲得Order對象。
?2.OID方式:按照對象的OID來檢索對象Session的get()和load()方法提供了這種功能,如果在應用程序先知道了OID,就可以使用這種方式檢索對象。get()和Load()的用法完全一樣,都需要兩個參數(shù),一個是持久化對象類名class,一個是行號OID,返回固定的某一行的數(shù)據(jù),但是需要注意的是,當輸入的OID不存在時,get()會返回一個空對象,Load()則直接報錯。
3.HQL檢索方式使用面向對象的HQL查詢語言,session的find()方法用于執(zhí)行HQL查詢語句。此外,hibernate還提供了query接口,他是hibernate提供的專門的HQL查詢接口,能夠執(zhí)行各種復雜的HQL查詢語句。
?它具備以下功能:
? ? 在查詢語句中設定各種查詢條件
? ?支持投影查詢,即僅檢索出對象的部分屬性
? 支持鏈接查詢
支持分頁查詢
支持分組查詢
支持內(nèi)置函數(shù)
能夠調(diào)用用戶自定義的SQL函數(shù)
支持子查詢
支持動態(tài)綁定參數(shù)
4.QBC檢索方式:Query By Criteria的API來檢索對象,這種API封裝了基于字符串形式的查詢語句,提供了更加面向對象的接口。
5.利用原生SQL語句進行查詢
98.hibernate實體類可以被綁定為final嗎?
? ? ?可以將hibernate的實體類定義為final,但這種做法不好。
? ? 因為hibernate會使用代理模式在延遲關聯(lián)的情況下提高性能。如果你把實體類定義成final類之后,因為Java不允許對final類進行擴展,所以hibernate就無法再使用代理了,如此一來就限制了使用可以提升性能的手段。
不過,如果你的持久化類實現(xiàn)了一個接口,而且在該接口中聲明了所有定義實體類中的所有public的方法的話,就能避免出現(xiàn)前面所說的不利后果。
99.在hibernate中使用integer和int做映射有什么區(qū)別?
? hibernate是面向對象的ORM,所以一般定義成封裝類型,要看數(shù)據(jù)庫中的定義。
如果數(shù)據(jù)庫中有對應字段存在null值,就要定義integer。也可以定義基本類型,在配置文件中寫清楚即可。
100.如何搭建一個高可用的系統(tǒng)?
? 高可用系統(tǒng),就是說要保證系統(tǒng)在幾乎任何時候都要有正常運行,功能正常。我們來看下哪些情況會造成系統(tǒng)不可用。
單機系統(tǒng)下的可用性問題,單點問題會影響系統(tǒng)高可用,比如要是這個鏈路其中一個單點掛了,那么整個系統(tǒng)都不可用了。所以引申出來主備/集群模式,防止單點問題。
高并發(fā)場景下,請求過多也會因為后端瓶頸點引起整個系統(tǒng)down掉,所以一般情況下應對高并發(fā)場景我們會限流,比如肖戰(zhàn)演出搶票。
通過采用mq等隊列形式削峰,保證后端系統(tǒng)不會down掉。
熔斷機制。容災機制,多機房部署。
綜上所述:
1.主備/集群模式,防止單點故障。
2.限流,削峰,防止后端壓力過大。
3.熔斷機制,類似于限流。
4.容災機制,多機房/異地部署。
101.你認為項目中最重要的過程是哪些?
分析,設計階段,盡量找出進度的優(yōu)先級。文章來源:http://www.zghlxwxcb.cn/news/detail-774228.html
? ? ?文章來源地址http://www.zghlxwxcb.cn/news/detail-774228.html
到了這里,關于Java開發(fā)框架和中間件面試題(8)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!