Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(51)
承蒙各位厚愛,我們一起每天進(jìn)步一點(diǎn)點(diǎn)?。ㄊ髽?biāo)選中空白處查看答案)
1、一個抽象類并不需要其中所有的方法都是抽象的。( )
正確答案: A
正確
錯誤
題解:
1)抽象類可以包括抽象方法和非抽象方法
2)如果類里面有抽象方法的話,那么類一定要聲明為抽象的!
2、下列程序的運(yùn)行結(jié)果
public static void main(String args[]) { Thread t = new Thread() { public void run() { pong(); } }; t.run(); System.out.print("ping"); } static void pong() { System.out.print("pong"); }
正確答案: B
pingpong
pongping
pingpong和pongping都有可能
都不輸出
題解:
這里需要注意Thread的start和run方法
用start方法才能真正啟動線程,此時線程會處于就緒狀態(tài),一旦得到時間片,則會調(diào)用線程的run方法進(jìn)入運(yùn)行狀態(tài)。
而run方法只是普通方法,如果直接調(diào)用run方法,程序只會按照順序執(zhí)行主線程這一個線程。
3、在Java中,關(guān)于HashMap類的描述,以下錯誤的是()?
正確答案: A
HashMap能夠保證其中元素的順序
HashMap允許將null用作值
HashMap允許將null用作鍵
HashMap使用鍵/值得形式保存數(shù)據(jù)
題解:
A.HashMap不能保證元素的順序,而LinkedHashMap可以保持?jǐn)?shù)據(jù)的插入順序,TreeMap可以按照鍵值進(jìn)行排序(可自定比較器)
B.HashMap允許存在多條null值
C.HashMap允許且僅允許一條null鍵
D.Map就是通過鍵/值形式保存數(shù)據(jù)的
4、以下程序的運(yùn)行結(jié)果是:( )
TreeSet<Integer> set = new TreeSet<Integer>(); TreeSet<Integer> subSet = new TreeSet<Integer>(); for(int i=606;i<613;i++){ if(i%2==0){ set.add(i); } } subSet = (TreeSet)set.subSet(608,true,611,true); set.add(629); System.out.println(set+" "+subSet);
正確答案: C
編譯失敗
發(fā)生運(yùn)行時異常
[606, 608, 610, 612, 629] [608, 610]
[606, 608, 610, 612, 629] [608, 610,629]
題解:
subset(form,true,to,true)是Treeset的非靜態(tài)方法,該方法返回從form元素到to元素的一個set集合,兩個boolean類型是確認(rèn)是否包含邊境值用的。
subset方法是求set的范圍內(nèi)的子集,兩個true是表示是否包含端點(diǎn)(608和611),故subSet的值為[608,610]
5、下列關(guān)于Java并發(fā)的說法中正確的是()
正確答案: B
CopyOnWriteArrayList適用于寫多讀少的并發(fā)場景
ReadWriteLock適用于讀多寫少的并發(fā)場景
ConcurrentHashMap的寫操作不需要加鎖,讀操作需要加鎖
只要在定義int類型的成員變量i的時候加上volatile關(guān)鍵字,那么多線程并發(fā)執(zhí)行i++這樣的操作的時候就是線程安全的了
題解:
A,CopyOnWriteArrayList適用于寫少讀多的并發(fā)場景
B,ReadWriteLock即為讀寫鎖,他要求寫與寫之間互斥,讀與寫之間互斥,
讀與讀之間可以并發(fā)執(zhí)行。在讀多寫少的情況下可以提高效率
C,ConcurrentHashMap是同步的HashMap,讀寫都加鎖
D,volatile只保證多線程操作的可見性,不保證原子性
6、下面有關(guān)struts1和struts2的區(qū)別,描述錯誤的是?
正確答案: B
Struts1要求Action類繼承一個抽象基類。Struts 2 Action類可以實(shí)現(xiàn)一個Action接口
Struts1 Action對象為每一個請求產(chǎn)生一個實(shí)例。Struts2 Action是單例模式并且必須是線程安全的
Struts1 Action 依賴于Servlet API,Struts 2 Action不依賴于容器,允許Action脫離容器單獨(dú)被測試
Struts1 整合了JSTL,Struts2可以使用JSTL,但是也支持OGNL
題解:
Struts1和Struts2的區(qū)別和對比:
Action 類:
• Struts1要求Action類繼承一個抽象基類。Struts1的一個普遍問題是使用抽象類編程而不是接口,而struts2的Action是接口。
• Struts 2 Action類可以實(shí)現(xiàn)一個Action接口,也可實(shí)現(xiàn)其他接口,使可選和定制的服務(wù)成為可能。Struts2提供一個ActionSupport基類去 實(shí)現(xiàn) 常用的接口。Action接口不是必須的,任何有execute標(biāo)識的POJO對象都可以用作Struts2的Action對象。
線程模式:
• Struts1 Action是單例模式并且必須是線程安全的,因?yàn)閮H有Action的一個實(shí)例來處理所有的請求。單例策略限制了Struts1 Action能作的事,并且要在開發(fā)時特別小心。Action資源必須是線程安全的或同步的。
• Struts2 Action對象為每一個請求產(chǎn)生一個實(shí)例,因此沒有線程安全問題。(實(shí)際上,servlet容器給每個請求產(chǎn)生許多可丟棄的對象,并且不會導(dǎo)致性能和垃圾回收問題)
Servlet 依賴:
• Struts1 Action 依賴于Servlet API ,因?yàn)楫?dāng)一個Action被調(diào)用時HttpServletRequest 和 HttpServletResponse 被傳遞給execute方法。
• Struts 2 Action不依賴于容器,允許Action脫離容器單獨(dú)被測試。如果需要,Struts2 Action仍然可以訪問初始的request和response。但是,其他的元素減少或者消除了直接訪問HttpServetRequest 和 HttpServletResponse的必要性。
可測性:
• 測試Struts1 Action的一個主要問題是execute方法暴露了servlet API(這使得測試要依賴于容器)。一個第三方擴(kuò)展--Struts TestCase--提供了一套Struts1的模擬對象(來進(jìn)行測試)。
• Struts 2 Action可以通過初始化、設(shè)置屬性、調(diào)用方法來測試,“依賴注入”支持也使測試更容易。
捕獲輸入:
• Struts1 使用ActionForm對象捕獲輸入。所有的ActionForm必須繼承一個基類。因?yàn)槠渌鸍avaBean不能用作ActionForm,開發(fā)者經(jīng)常創(chuàng)建多余的類捕獲輸入。動態(tài)Bean(DynaBeans)可以作為創(chuàng)建傳統(tǒng)ActionForm的選擇,但是,開發(fā)者可能是在重新描述(創(chuàng)建)已經(jīng)存 在的JavaBean(仍然會導(dǎo)致有冗余的javabean)。
• Struts 2直接使用Action屬性作為輸入屬性,消除了對第二個輸入對象的需求。輸入屬性可能是有自己(子)屬性的rich對象類型。Action屬性能夠通過 web頁面上的taglibs訪問。Struts2也支持ActionForm模式。rich對象類型,包括業(yè)務(wù)對象,能夠用作輸入/輸出對象。這種 ModelDriven 特性簡化了taglib對POJO輸入對象的引用。
表達(dá)式語言:
• Struts1 整合了JSTL,因此使用JSTL EL。這種EL有基本對象圖遍歷,但是對集合和索引屬性的支持很弱。
• Struts2可以使用JSTL,但是也支持一個更強(qiáng)大和靈活的表達(dá)式語言--“Object Graph Notation Language” (OGNL).
Struts2是多例的
7、以下哪一個正則表達(dá)式不能與字符串“https://www.tensorflow.org/”(不含引號)匹配?()
正確答案: B
[a-z]+://[a-z.]+/
https[://]www[.]tensorflow[.]org[/]
[htps]+://www.tensorflow.org/
[a-zA-Z.:/]+
題解:
[]只能匹配一個既定字符,://只能匹配一個。
8、多態(tài)的作用()
正確答案: B C
隱藏細(xì)節(jié)
提高可重用性
擴(kuò)展代碼模塊
提高編譯可靠性
題解:
c++里面也有多態(tài),題目說的多態(tài)并不只限于java中里面的多態(tài),這題不用深究,理解多態(tài)的概念就行。
9、關(guān)于struts項(xiàng)目中的類與MVC模式的對應(yīng)關(guān)系,說法錯誤的是
正確答案: C D
Jsp文件實(shí)現(xiàn)視圖View的功能
ActionServlet這一個類是整個struts項(xiàng)目的控制器
ActionForm、Action都屬于Model部分
一個struts項(xiàng)目只能有一個Servlet
題解:
Action是不屬于Model部分的。
不只是有一個
這題有點(diǎn)老了
10、下列哪些方法是針對循環(huán)優(yōu)化進(jìn)行的
正確答案: A B D
強(qiáng)度削弱
刪除歸納變量
刪除多余運(yùn)算
代碼外提
題解:
多余運(yùn)算在編譯期就會自動優(yōu)化
答案匯總:
1、正確答案: A
2、正確答案: B
3、正確答案: A
4、正確答案: C
5、正確答案: B
6、正確答案: B
7、正確答案: B
8、正確答案: B C
9、正確答案: C D
10、正確答案: A B D
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望你能給多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
PostMan如何傳參給@RequestBody(接受前端參數(shù))
這篇文章主要介紹了PostMan如何傳參給@RequestBody(接受前端參數(shù)),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10SpringBoot自動配置實(shí)現(xiàn)流程詳細(xì)分析
這篇文章主要介紹了SpringBoot自動配置原理分析,SpringBoot是我們經(jīng)常使用的框架,那么你能不能針對SpringBoot實(shí)現(xiàn)自動配置做一個詳細(xì)的介紹。如果可以的話,能不能畫一下實(shí)現(xiàn)自動配置的流程圖。牽扯到哪些關(guān)鍵類,以及哪些關(guān)鍵點(diǎn)2022-12-12Springboot集成Mybatis-plus、ClickHouse實(shí)現(xiàn)增加數(shù)據(jù)、查詢數(shù)據(jù)功能
本文給大家講解Springboot + mybatis-plus 集成ClickHouse,實(shí)現(xiàn)增加數(shù)據(jù)、查詢數(shù)據(jù)功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08SpringBoot實(shí)現(xiàn)快遞物流查詢功能(快遞鳥)
本文將基于springboot2.4.0實(shí)現(xiàn)快遞物流查詢,物流信息的獲取通過快遞鳥第三方實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-10-10關(guān)于java.lang.IncompatibleClassChangeError錯誤解決方案
最近開發(fā)中遇到類沖突報錯 java.lang.IncompatibleClassChangeError,所以下面這篇文章主要給大家介紹了關(guān)于java.lang.IncompatibleClassChangeError錯誤的解決方案,需要的朋友可以參考下2024-02-02SpringBoot結(jié)合dev-tool實(shí)現(xiàn)IDEA項(xiàng)目熱部署的流程步驟
這篇文章主要給大家介紹了SpringBoot結(jié)合dev-tool實(shí)現(xiàn)IDEA項(xiàng)目熱部署的流程步驟,文章通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)有一定的幫助,需要的朋友可以參考下2023-10-10