版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2025年Java程序設(shè)計考試試題及答案一、單項選擇題(每題2分,共20分)1.以下關(guān)于Java虛擬機(JVM)內(nèi)存區(qū)域的描述,錯誤的是()A.程序計數(shù)器是線程私有的,用于記錄當(dāng)前線程執(zhí)行的字節(jié)碼行號B.虛擬機棧為每個線程分配,存儲局部變量表、操作數(shù)棧等信息C.方法區(qū)(元空間)存儲類信息、常量、靜態(tài)變量,屬于堆內(nèi)存的一部分D.堆內(nèi)存是所有線程共享的,對象實例和數(shù)組在此分配答案:C(方法區(qū)在JDK8后使用元空間實現(xiàn),不屬于堆內(nèi)存)2.執(zhí)行以下代碼后,輸出結(jié)果是()```javaStrings1="abc";Strings2=newString("abc");System.out.println(s1==s2);System.out.println(s1.equals(s2));```A.truetrueB.falsetrueC.truefalseD.falsefalse答案:B(==比較引用地址,equals比較內(nèi)容)3.關(guān)于Java泛型的描述,正確的是()A.泛型在編譯期生效,運行時會進行類型擦除B.泛型類可以定義多個類型參數(shù),如classMyClass<T1,T2>C.List<Object>可以直接賦值給List<String>D.泛型方法的類型參數(shù)聲明必須在返回值類型之前答案:C錯誤,正確為ABD(C選項涉及泛型協(xié)變,Java不支持直接賦值)4.以下集合類中,底層基于哈希表實現(xiàn)且允許null鍵的是()A.TreeMapB.HashMapC.HashtableD.LinkedHashMap答案:B(TreeMap基于紅黑樹,不允許null鍵;Hashtable不允許null鍵;LinkedHashMap是HashMap的子類,允許null鍵)5.線程調(diào)用start()方法后,進入的狀態(tài)是()A.RUNNABLEB.TIMED_WAITINGC.BLOCKEDD.TERMINATED答案:A(start()啟動線程,進入可運行狀態(tài),等待CPU調(diào)度)6.以下異常處理代碼中,可能出現(xiàn)編譯錯誤的是()A.try{...}catch(IOExceptione){...}B.try{...}catch(SQLException|IOExceptione){...}C.try(FileInputStreamfis=newFileInputStream("test.txt")){...}D.try{...}finally{return;}答案:無錯誤(D選項finally中的return會覆蓋try/catch的返回,但語法合法)7.自定義注解時,用于指定注解可用位置的元注解是()A.@RetentionB.@TargetC.@InheritedD.@Documented答案:B(@Target指定注解作用目標(biāo),如METHOD、FIELD等)8.以下關(guān)于JavaIO流的描述,錯誤的是()A.FileInputStream是字節(jié)流,用于讀取二進制文件B.BufferedReader的readLine()方法返回字符串,可能返回nullC.ObjectOutputStream的writeObject()方法可以序列化任意對象D.PrintWriter支持自動刷新緩沖區(qū),可通過構(gòu)造參數(shù)設(shè)置答案:C(被序列化的對象需實現(xiàn)Serializable接口)9.反射機制中,獲取類Class對象的方式不包括()A.對象.getClass()B.類名.classC.Class.forName("包名.類名")D.構(gòu)造方法.newInstance()答案:D(newInstance()是創(chuàng)建實例的方法,非獲取Class對象)10.以下Lambda表達式中,能正確實現(xiàn)Comparator<String>的是()A.(s1,s2)->s1.length()s2.length()B.s->s.toUpperCase()C.()->System.out.println("test")D.(List<String>list)->list.size()答案:A(Comparator需要比較兩個參數(shù),返回int)二、填空題(每空2分,共20分)1.在子類構(gòu)造方法中,使用______關(guān)鍵字調(diào)用父類無參構(gòu)造方法,該調(diào)用必須位于構(gòu)造方法的第一行。答案:super2.HashMap的默認初始容量是______,負載因子默認是______。答案:16;0.753.線程同步時,使用______關(guān)鍵字修飾方法或代碼塊,可保證同一時刻只有一個線程執(zhí)行。答案:synchronized4.try-with-resources語句要求資源類必須實現(xiàn)______接口。答案:AutoCloseable5.對List<String>進行排序時,可調(diào)用Collections.sort(list,______),其中第二個參數(shù)是Comparator實現(xiàn)。答案:Comparator(或具體比較器實例)6.StringBuilder的默認初始容量是______,當(dāng)容量不足時會自動擴容。答案:167.自定義注解時,使用______元注解可指定注解被包含在Javadoc中。答案:@Documented8.在異常處理中,無論try塊是否拋出異常,______塊中的代碼都會執(zhí)行(除非JVM退出)。答案:finally9.泛型通配符中,<?superT>表示______通配符,允許傳入T的父類類型。答案:下界10.Stream流的______操作會觸發(fā)實際計算,如collect()、forEach()等。答案:終止三、簡答題(每題8分,共40分)1.比較ArrayList和LinkedList的區(qū)別,說明各自適用場景。答案:ArrayList基于動態(tài)數(shù)組,隨機訪問(get/set)時間復(fù)雜度O(1),但插入/刪除(非尾部)需移動元素,時間復(fù)雜度O(n);LinkedList基于雙向鏈表,插入/刪除(任意位置)時間復(fù)雜度O(1)(需先定位節(jié)點),但隨機訪問需遍歷,時間復(fù)雜度O(n)。ArrayList適用于頻繁查詢、少量增刪的場景;LinkedList適用于頻繁增刪、少量查詢的場景(如隊列、棧)。2.說明synchronized和ReentrantLock的區(qū)別及各自優(yōu)勢。答案:synchronized是關(guān)鍵字,JVM層面實現(xiàn),自動釋放鎖(同步塊/方法結(jié)束);ReentrantLock是Lock接口實現(xiàn)類,需手動釋放(finally塊中調(diào)用unlock())。區(qū)別:(1)鎖的獲取方式:synchronized不可中斷,ReentrantLock可通過tryLock()嘗試獲取或設(shè)置超時;(2)公平性:synchronized非公平鎖(默認),ReentrantLock可指定公平/非公平;(3)條件變量:ReentrantLock支持多個Condition對象,更細粒度的線程等待/喚醒。優(yōu)勢:synchronized代碼簡潔,適合簡單同步;ReentrantLock靈活,適合復(fù)雜同步邏輯(如讀寫鎖、條件等待)。3.簡述JVM的類加載機制,包括加載、鏈接、初始化的主要步驟。答案:類加載機制分為加載、鏈接(驗證、準(zhǔn)備、解析)、初始化三個階段。(1)加載:通過類加載器(如Bootstrap、Ext、App)將.class文件字節(jié)碼加載到內(nèi)存,提供Class對象;(2)鏈接:①驗證:檢查字節(jié)碼格式、語義合法性;②準(zhǔn)備:為類靜態(tài)變量分配內(nèi)存并設(shè)置默認值(如int默認0);③解析:將符號引用(如類名、方法名)替換為直接引用(內(nèi)存地址);(3)初始化:執(zhí)行類構(gòu)造器<clinit>()方法,為靜態(tài)變量賦初始值,執(zhí)行靜態(tài)代碼塊。4.設(shè)計一個線程安全的單例模式(懶漢式),并說明其線程安全的實現(xiàn)原理。答案:```javapublicclassSingleton{//volatile禁止指令重排序,保證多線程可見性privatestaticvolatileSingletoninstance;privateSingleton(){}//私有構(gòu)造publicstaticSingletongetInstance(){if(instance==null){//第一次檢查synchronized(Singleton.class){//同步代碼塊if(instance==null){//第二次檢查instance=newSingleton();}}}returninstance;}}```線程安全原理:使用volatile修飾instance,防止JVM對“實例化對象”的指令重排序(避免其他線程獲取到未初始化的對象);雙重檢查鎖定(DCL)減少同步開銷,第一次檢查避免不必要的同步,第二次檢查確保只有一個線程創(chuàng)建實例。5.分析String、StringBuilder、StringBuffer的區(qū)別及使用場景。答案:(1)String是不可變類,每次修改會提供新對象,適合字符串不頻繁修改的場景(如常量、少量拼接);(2)StringBuilder是可變類,非線程安全,拼接效率高,適合單線程下頻繁字符串操作(如循環(huán)拼接);(3)StringBuffer是可變類,線程安全(方法用synchronized修飾),效率略低于StringBuilder,適合多線程下頻繁字符串操作(如共享字符串緩沖區(qū))。四、編程題(每題10分,共30分)1.編寫一個多線程程序,使用Callable和Future實現(xiàn)兩個線程分別復(fù)制文件(源文件1.txt和2.txt,目標(biāo)路徑為D:/backup/),并輸出每個文件的復(fù)制時間(單位:毫秒)。答案:```javaimportjava.io.;importjava.util.concurrent.;publicclassFileCopyCallable{publicstaticvoidmain(String[]args){ExecutorServiceexecutor=Executors.newFixedThreadPool(2);Future<Long>future1=executor.submit(newFileCopyTask("1.txt","D:/backup/1.txt"));Future<Long>future2=executor.submit(newFileCopyTask("2.txt","D:/backup/2.txt"));try{System.out.println("1.txt復(fù)制耗時:"+future1.get()+"ms");System.out.println("2.txt復(fù)制耗時:"+future2.get()+"ms");}catch(InterruptedException|ExecutionExceptione){e.printStackTrace();}executor.shutdown();}staticclassFileCopyTaskimplementsCallable<Long>{privateStringsrcPath;privateStringdestPath;publicFileCopyTask(StringsrcPath,StringdestPath){this.srcPath=srcPath;this.destPath=destPath;}@OverridepublicLongcall()throwsException{longstart=System.currentTimeMillis();try(InputStreamis=newFileInputStream(srcPath);OutputStreamos=newFileOutputStream(destPath)){byte[]buffer=newbyte[1024];intlen;while((len=is.read(buffer))!=-1){os.write(buffer,0,len);}}returnSystem.currentTimeMillis()start;}}}```2.讀取當(dāng)前目錄下的sales.csv文件(格式:日期,商品,銷售額),使用Java8Stream統(tǒng)計:(1)總銷售額;(2)按商品分組的銷售額總和;(3)銷售額最高的商品。假設(shè)sales.csv內(nèi)容示例:2024-01-01,手機,250002024-01-01,電腦,380002024-01-02,手機,18000答案:```javaimportjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Paths;importjava.util.;importjava.util.stream.Collectors;publicclassSalesAnalyzer{publicstaticvoidmain(String[]args){try{List<String>lines=Files.readAllLines(Paths.get("sales.csv"));//總銷售額doubletotalSales=lines.stream().skip(1)//跳過標(biāo)題行(假設(shè)首行為標(biāo)題).map(line->line.split(",")).mapToDouble(parts->Double.parseDouble(parts[2])).sum();System.out.println("總銷售額:"+totalSales);//按商品分組的銷售額總和Map<String,Double>salesByProduct=lines.stream().skip(1).map(line->line.split(",")).collect(Collectors.groupingBy(parts->parts[1],Collectors.summingDouble(parts->Double.parseDouble(parts[2]))));System.out.println("按商品分組銷售額:"+salesByProduct);//銷售額最高的商品Optional<Map.Entry<String,Double>>maxEntry=salesByProduct.entrySet().stream().max(Map.EparingByValue());maxEntry.ifPresent(entry->System.out.println("銷售額最高的商品:"+entry.getKey()+",銷售額:"+entry.getValue()));}catch(IOExceptione){e.printStackTrace();}}}```3.編寫Java程序連接MySQL數(shù)據(jù)庫(驅(qū)動類com.mysql.cj.jdbc.Driver,URLjdbc:mysql://localhost:3306/testdb,用戶名root,密碼123456),實現(xiàn)學(xué)生表(student,字段:idINT主鍵,nameVARCHAR(20),ageINT,scoreDOUBLE)的增刪改查操作。要求使用PreparedStatement防止SQL注入,查詢時輸出所有學(xué)生信息。答案:```javaimportjava.sql.;publicclassStudentDAO{privatestaticfinalStringURL="jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC";privatestaticfinalStringUSER="root";privatestaticfinalStringPASSWORD="123456";//增加學(xué)生publicvoidaddStudent(intid,Stringname,intage,doublescore)throwsSQLException{Stringsql="INSERTINTOstudent(id,name,age,score)VALUES(?,?,?,?)";try(Connectionconn=DriverManager.getConnection(URL,USER,PASSWORD);PreparedStatementpstmt=conn.prepareStatement(sql)){pstmt.setInt(1,id);pstmt.setString(2,name);pstmt.setInt(3,age);pstmt.setDouble(4,score);pstmt.executeUpdate();}}//刪除學(xué)生(根據(jù)id)publicvoiddeleteStudent(intid)throwsSQLException{Stringsql="DELETEFROMstudentWHEREid=?";try(Connectionconn=DriverManager.getConnection(URL,USER,PASSWORD);PreparedStatementpstmt=conn.prepareStatement(sql)){pstmt.setInt(1,id);pstmt.executeUpdate();}}//修改學(xué)生分數(shù)(根據(jù)id)publicvoidupdateScore(intid,doublenewScore)throwsSQLException{Stringsql="UPDATEstudentSETscore=?WHEREid=?";try(Connectionconn=DriverManager.getConnection(URL,USER,PASSWORD);PreparedStatementpstmt=conn.prepareStatement(sql)){pstmt.setDouble(1,newScore);pstmt.setInt(2,id);pstmt.executeUpdate();}}//查詢所有學(xué)生publicvoidqueryAllStudents()throwsSQ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 吸入劑護理科普
- 養(yǎng)老院老人健康信息管理規(guī)范制度
- 聽診胎心音技術(shù)
- 老年終末期認知功能評估的時效性優(yōu)化方案
- 老年終末期尿失禁的護理干預(yù)方案循證框架
- 中藥酒(酊)劑工崗前安全實踐考核試卷含答案
- 水解蒸餾工持續(xù)改進考核試卷含答案
- 老年糖尿病合并高血壓的綜合管理策略-1
- 名著介紹教學(xué)課件
- 黃酒釀造工崗前技巧考核試卷含答案
- 云南省玉溪市2025-2026學(xué)年八年級上學(xué)期1月期末物理試題(原卷版+解析版)
- 2026年哈爾濱通河縣第一批公益性崗位招聘62人考試參考試題及答案解析
- 六年級寒假家長會課件
- 就業(yè)協(xié)議書解約函模板
- 物流鐵路專用線工程節(jié)能評估報告
- DL-T976-2017帶電作業(yè)工具、裝置和設(shè)備預(yù)防性試驗規(guī)程
- 建筑材料進場報告
- YY/T 1543-2017鼻氧管
- YS/T 903.1-2013銦廢料化學(xué)分析方法第1部分:銦量的測定EDTA滴定法
- GB/T 9414.9-2017維修性第9部分:維修和維修保障
- GB/T 21781-2008化學(xué)品的熔點及熔融范圍試驗方法毛細管法
評論
0/150
提交評論