- 全國計算機(jī)等級考試《二級Java》模擬試題(含答案) 推薦度:
- 相關(guān)推薦
計算機(jī)考試二級java模擬試題(含答案)
在社會的各個領(lǐng)域,我們或多或少都會接觸到試題,借助試題可以為主辦方提供考生某方面的知識或技能狀況的信息。一份好的試題都具備什么特點呢?下面是小編收集整理的計算機(jī)考試二級java模擬試題(含答案),供大家參考借鑒,希望可以幫助到有需要的朋友。
計算機(jī)考試二級java模擬試題(含答案) 1
1)Java 中能創(chuàng)建 Volatile 數(shù)組嗎?
能,Java 中可以創(chuàng)建 volatile 類型數(shù)組,不過只是一個指向數(shù)組的引用,而不是整個數(shù)組。我的意思是,如果改變引用指向的數(shù)組,將會受到 volatile 的保護(hù),但是如果多個線程同時改變數(shù)組的元素,volatile 標(biāo)示符就不能起到之前的保護(hù)作用了。
2)volatile 能使得一個非原子操作變成原子操作嗎?
一個典型的例子是在類中有一個 long 類型的成員變量。如果你知道該成員變量會被多個線程訪問,如計數(shù)器、價格等,你最好是將其設(shè)置為 volatile。為什么?因為 Java 中讀取 long 類型變量不是原子的,需要分成兩步,如果一個線程正在修改該 long 變量的值,另一個線程可能只能看到該值的一半(前 32 位)。但是對一個 volatile 型的 long 或 double 變量的讀寫是原子。
3)volatile 修飾符的有過什么實踐?
一種實踐是用 volatile 修飾 long 和 double 變量,使其能按原子類型來讀寫。double 和 long 都是64位寬,因此對這兩種類型的讀是分為兩部分的,第一次讀取第一個 32 位,然后再讀剩下的 32 位,這個過程不是原子的,但 Java 中 volatile 型的 long 或 double 變量的讀寫是原子的。volatile 修復(fù)符的另一個作用是提供內(nèi)存屏障(memory barrier),例如在分布式框架中的應(yīng)用。簡單的`說,就是當(dāng)你寫一個 volatile 變量之前,Java 內(nèi)存模型會插入一個寫屏障(write barrier),讀一個 volatile 變量之前,會插入一個讀屏障(read barrier)。意思就是說,在你寫一個 volatile 域時,能保證任何線程都能看到你寫的值,同時,在寫之前,也能保證任何數(shù)值的更新對所有線程是可見的,因為內(nèi)存屏障會將其他所有寫的值更新到緩存。
4)volatile 類型變量提供什么保證?(答案)
volatile 變量提供順序和可見性保證,例如,JVM 或者 JIT為了獲得更好的性能會對語句重排序,但是 volatile 類型變量即使在沒有同步塊的情況下賦值也不會與其他語句重排序。 volatile 提供 happens-before 的保證,確保一個線程的修改能對其他線程是可見的。某些情況下,volatile 還能提供原子性,如讀 64 位數(shù)據(jù)類型,像 long 和 double 都不是原子的,但 volatile 類型的 double 和 long 就是原子的。
5) 10 個線程和 2 個線程的同步代碼,哪個更容易寫?
從寫代碼的角度來說,兩者的復(fù)雜度是相同的,因為同步代碼與線程數(shù)量是相互獨(dú)立的。但是同步策略的選擇依賴于線程的數(shù)量,因為越多的線程意味著更大的競爭,所以你需要利用同步技術(shù),如鎖分離,這要求更復(fù)雜的代碼和專業(yè)知識。
6)你是如何調(diào)用 wait()方法的?使用 if 塊還是循環(huán)?為什么?(答案)
wait() 方法應(yīng)該在循環(huán)調(diào)用,因為當(dāng)線程獲取到 CPU 開始執(zhí)行的時候,其他條件可能還沒有滿足,所以在處理前,循環(huán)檢測條件是否滿足會更好。下面是一段標(biāo)準(zhǔn)的使用 wait 和 notify 方法的代碼:
// The standard idiom for using the wait method
參見 Effective Java 第 69 條,獲取更多關(guān)于為什么應(yīng)該在循環(huán)中來調(diào)用 wait 方法的內(nèi)容。
計算機(jī)考試二級java模擬試題(含答案) 2
1、編寫一個Java程序,用if-else語句判斷某年份是否為閏年。
閏年特點:
①、普通年能被4整除;且不能被100整除的為閏年。(如2004年就是閏年,1901年不是閏年)
②、世紀(jì)年能被400整除的是閏年。(如2000年是閏年,1900年不是閏年) ③、對于數(shù)值很大的年份,既能整除3200,又能整除172800是閏年。如172800年是閏年,86400年不是閏年(因為雖然能整除3200,但不能整除172800)。
2、編寫一個Java程序在屏幕上輸出1!+2!+3!+??+10!的和。
3、打印出所有的 "水仙花數(shù) ",所謂 "水仙花數(shù) "是指一個三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如:153是一個 "水仙花數(shù) ",因為153=1的三次方+5的三次方+3的三次方。
4、利用遞歸方法求5!。
5、一個5位數(shù),判斷它是不是回文數(shù)。即12321是回文數(shù),個位與萬位相同,十位與千位相同。
6、編寫一個Java應(yīng)用程序,要求如下
1)從控制臺輸入兩個字符串;
2)重載三個方法,方法名add,分別完成字符串拼接、整數(shù)相加、浮點數(shù)相加,返回 String,并在控制臺分別輸出返回結(jié)果;
3)要求處理異常,輸入字符串不符合要求時給出提示,不能使程序崩潰;
4)輸入“esc”時退出程序,否則可以重復(fù)執(zhí)行。
7、、有n個人圍成一圈,順序排號。從第一個人開始報數(shù)(從1到3報數(shù)),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。
8、大整數(shù)計算器,要求從控制臺輸入。
(例如:100000000000000000000+20000000000000000000)
9、(1)編寫一個圓類Circle,該類擁有:
①一個成員變量
Radius(私有,浮點型); // 存放圓的半徑;
②兩個構(gòu)造方法
Circle( ) // 將半徑設(shè)為0
Circle(double r ) //創(chuàng)建Circle對象時將半徑初始化為r
③ 三個成員方法
double getArea( ) //獲取圓的.面積
double getPerimeter( ) //獲取圓的周長
void show( ) //將圓的半徑、周長、面積輸出到屏幕
(2)編寫一個圓柱體類Cylinder,它繼承于上面的Circle類。還擁有:
Java筆試題
①一個成員變量
double hight(私有,浮點型); // 圓柱體的高;
②構(gòu)造方法
Cylinder (double r, double h ) //創(chuàng)建Circle對象時將半徑初始化為r ③ 成員方法
double getVolume( ) //獲取圓柱體的體積
void showVolume( ) //將圓柱體的體積輸出到屏幕
編寫應(yīng)用程序,創(chuàng)建類的對象,分別設(shè)置圓的半徑、圓柱體的高,計算并分別顯示圓半徑、圓面積、圓周長,圓柱體的體積。(20分)
計算機(jī)考試二級java模擬試題(含答案) 3
1.Spring的事務(wù)有哪些?
什么是數(shù)據(jù)庫事務(wù):訪問并可能改變數(shù)據(jù)庫中個數(shù)據(jù)項的一個程序執(zhí)行單元。
實現(xiàn)方式共有兩種:編碼方式即采用注解的方式(類頭的@Transactional為默認(rèn)事務(wù)配置);聲明式事務(wù)管理方式(bean)。
基于AOP技術(shù)實現(xiàn)的聲明式事務(wù)管理,實質(zhì)就是:在方法執(zhí)行前后進(jìn)行攔截,然后在目標(biāo)方法開始之前創(chuàng)建并加入事務(wù),執(zhí)行完目標(biāo)方法后根據(jù)執(zhí)行情況提交或回滾事務(wù)。
聲明式事務(wù)管理又有兩種方式:基于XML配置文件的方式;另一個是在業(yè)務(wù)方法上進(jìn)行@Transactional注解,將事務(wù)規(guī)則應(yīng)用到業(yè)務(wù)邏輯中。
2.Java的鎖有哪幾種?
1、自旋鎖:自旋鎖是采用讓當(dāng)前線程不停地的在循環(huán)體內(nèi)執(zhí)行實現(xiàn)的,當(dāng)循環(huán)的條件被其他線程改變時 才能進(jìn)入臨界區(qū)。
2、自旋鎖的其他種類
3、阻塞鎖:常用的有五個狀態(tài)的鎖都是阻塞所。
4、可重入鎖:ReentrantLock
5、讀寫鎖:寫鎖是排他鎖,讀鎖是共享鎖。
6、互斥鎖
7、悲觀鎖:在整個數(shù)據(jù)處理過程中,將數(shù)據(jù)處于鎖定狀態(tài)。 悲觀鎖的實現(xiàn),往往依靠數(shù)據(jù)庫提供的鎖機(jī)制。
8、樂觀鎖:樂觀鎖假設(shè)認(rèn)為數(shù)據(jù)一般情況下不會造成沖突,所以在數(shù)據(jù)進(jìn)行提交更新的時候,才會正式對數(shù)據(jù)的沖突與否進(jìn)行檢測,如果發(fā)現(xiàn)沖突了,則讓返回用戶錯誤的信息,讓用戶決定如何去做。
公平鎖(Fair):加鎖前檢查是否有排隊等待的線程,優(yōu)先排隊等待的線程,先來先得
非公平鎖(Nonfair):加鎖時不考慮排隊等待問題,直接嘗試獲取鎖,獲取不到自動到隊尾等待
18、信號量
3.join的優(yōu)勢是什么?
mysql不支持Full join。
select * from A inner join B on A.name = B.name;
在ON匹配階段 WHERE 子句的條件都不會被使用。僅在匹配階段完成以后,WHERE 子句條件才會被使用。它將從匹配階段產(chǎn)生的數(shù)據(jù)中檢索過濾。
cross join:交叉連接,得到的結(jié)果是兩個表的乘積,即笛卡爾積。
還有inner join,left join,right join。
4.用線程實現(xiàn)輸出1A2B3C....
5.抽象類和接口的區(qū)別
6.JDK1.8和之前版本的區(qū)別
JDK7新特性:
1,switch中可以使用字串了
2,"<>"這個玩意兒的運(yùn)用ListtempList = new ArrayList<>(); 即泛型實例化類型自動推斷
3. 自定義自動關(guān)閉類
4. 新增一些取環(huán)境信息的工具方法
5. Boolean類型反轉(zhuǎn),空指針安全,參與位運(yùn)算
6. 兩個char間的equals
7,安全的加減乘除
8.數(shù)值可加下劃線
例如:intone_million = 1_000_000;
9.支持二進(jìn)制文字
例如:int binary = 0b1001_1001;
10、在try catch異常撲捉中,一個catch可以寫多個異常類型,用"|"隔開
11、jdk7之前,你必須用try{}finally{}在try內(nèi)使用資源,在finally中關(guān)閉資源,不管try中的代碼是否正常退出或者異常退出。jdk7之后,你可以不必要寫finally語句來關(guān)閉資源,只要你在try()的括號內(nèi)部定義要使用的資源。
JDK8:
一、接口的默認(rèn)方法
Java 8允許我們給接口添加一個非抽象的方法實現(xiàn),只需要使用 default關(guān)鍵字即可,這個特征又叫做擴(kuò)展方法
二、Lambda 表達(dá)式
Collections.sort(names, (a, b) -> b.compareTo(a));
三、函數(shù)式接口?
四、方法與構(gòu)造函數(shù)引用 ::
Java 8 在包java.time下包含了一組全新的時間日期API。
7.常用集合類
我的說的HashMap,他問為什么不是List。
1。JSP的內(nèi)置對象及方法。
在JSP中無需創(chuàng)建就可以使用的9個對象,它們是:request、response、session、application、out、pagecontext、config、page、exception
lout(JspWriter):等同與response.getWriter(),用來向客戶端發(fā)送文本數(shù)據(jù);
1. void clear() ;
清除輸出緩沖區(qū)的內(nèi)容,但是不輸出到客戶端。
2. void clearBuffer() ;
清除輸出緩沖區(qū)的內(nèi)容,并輸出到客戶端。
3. void close() ;
關(guān)閉輸出流,清除所有內(nèi)容。
4. void flush() ;
輸出緩沖區(qū)里面的數(shù)據(jù)。
5. int getBufferSize() ;
獲取以kb為單位的目前緩沖區(qū)大小。
6. int getRemaining() ;
獲取以kb為單位的緩沖區(qū)中未被占用的空間大小。
7. boolean isAutoFlush() ;
是否自動刷新緩沖區(qū)。
8. void newLine() ;
輸出一個換行字符。
lconfig(ServletConfig):對應(yīng)“真身”中的ServletConfig,config對象用來存放Servlet初始的`數(shù)據(jù)結(jié)構(gòu);config 對象的主要作用是取得服務(wù)器的配置信息。通過 pageConext對象的 getServletConfig() 方法可以獲取一個config對象。當(dāng)一個Servlet 初始化時,容器把某些信息通過 config對象傳遞給這個 Servlet。
lpage(當(dāng)前JSP的真身類型):當(dāng)前JSP頁面的“this”,即當(dāng)前對象,page對象代表JSP對象本身,或者說代表編譯后的servlet對象,可以用( (javax.servlet.jsp.HttpJspPage)page )來取用它的方法和屬性;
lpageContext(PageContext):頁面上下文對象,它是最后一個沒講的域?qū)ο螅琾ageContext對象存儲本JSP頁面相關(guān)信息,如屬性、內(nèi)建對象等;pageContext 對象的作用是取得任何范圍的參數(shù),通過它可以獲取 JSP頁面的out、request、reponse、session、application 等對象。
lexception(Throwable):只有在錯誤頁面中可以使用這個對象,錯誤對象,只有在JSP頁面的page指令中指定isErrorPage="true"后,才可以在本頁面使用exception對象;
lrequest(HttpServletRequest):即HttpServletRequest類的對象,request對象包含所有請求的信息,如請求的來源、標(biāo)頭、cookies和請求相關(guān)的參數(shù)值等,request對象代表了客戶端的請求信息,主要用于接受通過HTTP協(xié)議傳送到服務(wù)器的數(shù)據(jù)。(包括頭信息、系統(tǒng)信息、請求方式以及請求參數(shù)等)。request對 象的作用域為一次請求。;
getParameterNames() 獲取客戶端提交的所有參數(shù)的名字。
lresponse(HttpServletResponse):即HttpServletResponse類的對象,response對象主要將JSP容器處理后的結(jié)果傳回到客戶端,response 代表的是對客戶端的響應(yīng),主要是將JSP容器處理過的對象傳回到客戶端。response對象也具有作用域,它只在JSP頁面內(nèi)有效;
response.sendRedirect(index.jsp)
lapplication(ServletContext):即ServletContext類的對象,主要功用在于取得或更改Servlet的設(shè)定;
setAttribute(String key,Object obj):將參數(shù)Object指定的對象obj添加到Application對象中,并為添加的對象指定一個索引關(guān)鍵字。
getAttribute(String key):獲取Application對象中含有關(guān)鍵字的對象。
lsession(HttpSession):即HttpSession類的對象,不是每個JSP頁面中都可以使用,如果在某個JSP頁面中設(shè)置<%@pagesession=”false”%>,說明這個頁面不能使用session,session對象表示目前個別用戶的會話狀態(tài),用來識別每個用戶。
public String getId():獲取Session對象編號。
public void setAttribute(String key,Object obj):將參數(shù)Object指定的對象obj添加到Session對象中,并為添加的對象指定一個索引關(guān)鍵字。
public Object getAttribute(String key):獲取Session對象中含有關(guān)鍵字的對象。
public Boolean isNew():判斷是否是一個新的客戶。
2.說說ArrayList(對比著LinkedList來說);
1.ArrayList是實現(xiàn)了基于動態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),ArrayList不具有線程安全性,LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu),LinkedList可以看做為一個雙向鏈表,LinkedList也是線程不安全的。
2.對于隨機(jī)訪問get和set,ArrayList覺得優(yōu)于LinkedList,因為LinkedList要移動指針。
3.對于新增和刪除操作add和remove,LinedList比較占優(yōu)勢,因為ArrayList要移動數(shù)據(jù)。
Vector是線程安全的
26.數(shù)組(Array)和列表(ArrayList)有什么區(qū)別?什么時候應(yīng)該使用Array而不是ArrayList?
下面列出了Array和ArrayList的不同點:
Array可以包含基本類型和對象類型,ArrayList只能包含對象類型。
Array大小是固定的,ArrayList的大小是動態(tài)變化的。
ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
對于基本類型數(shù)據(jù),集合使用自動裝箱來減少編碼工作量。但是,當(dāng)處理固定大小的基本數(shù)據(jù)類型的時候,這種方式相對比較慢。
27.ArrayList和LinkedList有什么區(qū)別?
ArrayList和LinkedList都實現(xiàn)了List接口,他們有以下的不同點:
ArrayList是基于索引的數(shù)據(jù)接口,它的底層是數(shù)組。它可以以O(shè)(1)時間復(fù)雜度對元素進(jìn)行隨機(jī)訪問。與此對應(yīng),LinkedList是以元素列表的形式存儲它的數(shù)據(jù),每一個元素都和它的前一個和后一個元素鏈接在一起,在這種情況下,查找某個元素的時間復(fù)雜度是O(n)。
相對于ArrayList,LinkedList的插入,添加,刪除操作速度更快,因為當(dāng)元素被添加到集合任意位置的時候,不需要像數(shù)組那樣重新計算大小或者是更新索引。
LinkedList比ArrayList更占內(nèi)存,因為LinkedList為每一個節(jié)點存儲了兩個引用,一個指向前一個元素,一個指向下一個元素。
28.Comparable和Comparator接口是干什么的?列出它們的區(qū)別。
Java提供了只包含一個compareTo()方法的Comparable接口。這個方法可以個給兩個對象排序。具體來說,它返回負(fù)數(shù),0,正數(shù)來表明輸入對象小于,等于,大于已經(jīng)存在的對象。
Java 提供了包含compare()和equals()兩個方法的Comparator接口。compare()方法用來給兩個輸入?yún)?shù)排序,返回負(fù)數(shù),0,正 數(shù)表明第一個參數(shù)是小于,等于,大于第二個參數(shù)。equals()方法需要一個對象作為參數(shù),它用來決定輸入?yún)?shù)是否和comparator相等。只有當(dāng) 輸入?yún)?shù)也是一個comparator并且輸入?yún)?shù)和當(dāng)前comparator的排序結(jié)果是相同的時候,這個方法才返回true。
3.寫一個單例模式。我寫的是靜態(tài)內(nèi)部類的單例,然后他問我這個地方為什么用private,這兒為啥用static,這就考察你的基本功啦
類的構(gòu)造函數(shù)定義為private的,保證其他類不能實例化此類,static保證每個類訪問到的都是同一個。
餓漢模式:
publicclassSingleton{
privatestaticSingletoninstance=newSingleton();
privateSingleton(){}
publicstaticSingletonnewInstance(){
returninstance;
}
}缺點,在類加載之后就被創(chuàng)建,即使沒有用到
懶漢模式:
publicclassSingleton{
privatestaticSingletoninstance=null;
privateSingleton(){}
publicstaticsynchronizedSingletonnewInstance(){
if(null==instance){
instance=newSingleton();
}
returninstance;
}
}在特定時間加載,延遲加載
雙重校驗鎖:
publicclassSingleton{
privatestaticvolatile Singletoninstance=null;
privateSingleton(){}
publicstaticSingletongetInstance(){
if(instance==null){
synchronized(Singleton.class){
if(instance==null){//2
instance=newSingleton();
}
}
}
returninstance;
}
}線程安全
靜態(tài)內(nèi)部類:
publicclassSingleton{
privatestaticclassSingletonHolder{
publicstaticSingletoninstance=newSingleton();
}
privateSingleton(){}
publicstaticSingletonnewInstance(){
returnSingletonHolder.instance;
}
}
枚舉:
publicenumSingleton{
instance;
publicvoidwhateverMethod(){}
}很少使用
【計算機(jī)考試二級java模擬試題(含答案)】相關(guān)文章:
全國計算機(jī)等級考試《二級Java》模擬試題(含答案)06-10
計算機(jī)二級JAVA考試模擬試題06-24
計算機(jī)二級考試JAVA模擬試題10-12
計算機(jī)java考試模擬試題10-23
計算機(jī)二級考試Java模擬試題及答案201710-25
計算機(jī)二級模擬試題含答案10-23