版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025年java中级考试试题及答案一、选择题(每题2分,共20分)1.关于Java泛型的说法,正确的是()A.泛型信息在编译阶段保留,运行时会被擦除B.泛型类中可以定义静态方法使用类的泛型参数C.声明泛型类时,类型参数只能有一个D.通配符“?”可以与extends或super同时使用2.以下代码执行后,输出结果是()```javaList<Integer>list=newArrayList<>();list.add(1);list.add(2);list.add(3);list.removeIf(n->n%2==0);System.out.println(list);```A.[1,2,3]B.[1,3]C.[2]D.编译错误3.关于线程状态的描述,错误的是()A.调用Thread.sleep()会使线程进入TIMED_WAITING状态B.线程执行完run()方法后进入TERMINATED状态C.调用wait()方法的线程需要通过notify()唤醒才能回到RUNNABLE状态D.线程获取对象锁失败时进入BLOCKED状态4.以下哪个类实现了RandomAccess接口()A.LinkedListB.ArrayListC.HashMapD.HashSet5.关于异常处理,正确的做法是()A.在finally块中执行return语句覆盖try块的返回值B.捕获异常后仅打印堆栈跟踪而不做任何处理C.使用throws声明可能抛出的受检异常D.对所有异常都使用RuntimeException包装后抛出6.以下代码中,obj的最终类型是()```javaObjectobj=newArrayList<>();if(objinstanceofList<?>list){obj=list.stream().toList();}```A.ArrayListB.ListC.ImmutableList(不可变列表)D.LinkedList7.关于Java8的StreamAPI,说法错误的是()A.stream()方法创建的是串行流,parallelStream()创建的是并行流B.collect()是终端操作,用于将流转换为集合或其他数据结构C.filter()是中间操作,用于筛选符合条件的元素D.mapToInt()可以将对象流转换为基本类型流,但无法转换回对象流8.以下单例模式实现中,线程安全的是()A.饿汉式(静态变量直接初始化)B.懒汉式(无synchronized修饰getInstance方法)C.双重检查锁定(未使用volatile修饰实例变量)D.枚举单例(未显式定义构造方法)9.关于JVM内存区域,不属于线程私有区域的是()A.程序计数器B.虚拟机栈C.本地方法栈D.方法区10.以下代码执行时,会抛出哪种异常()```javaStringstr=null;System.out.println(str.length());```A.NullPointerExceptionB.IllegalArgumentExceptionC.ArrayIndexOutOfBoundsExceptionD.NoSuchMethodException二、填空题(每空2分,共20分)1.Java中,使用______关键字声明一个不可变的常量(非final类的成员变量)。2.集合框架中,______接口的实现类允许存储重复元素,且元素有序;______接口的实现类不允许存储重复元素,通常基于哈希表实现。3.多线程编程中,______方法可以让当前线程释放对象锁并进入等待状态,直到其他线程调用______或______方法唤醒。4.JavaIO流中,______流用于处理二进制数据,______流用于处理文本数据;缓冲流(如BufferedInputStream)的主要作用是______。5.反射机制中,通过Class对象的______方法可以获取类的所有公共方法(包括父类),通过______方法可以获取类的私有构造方法(需设置setAccessible(true))。三、简答题(每题6分,共30分)1.简述接口与抽象类的区别(至少列出4点)。2.说明synchronized关键字与ReentrantLock的区别(从锁获取方式、可中断性、条件变量支持等方面)。3.解释Java中的“哈希冲突”及常见解决方法(至少两种)。4.说明StreamAPI中中间操作与终端操作的区别,并各举两个例子。5.描述JVM的类加载过程(加载、验证、准备、解析、初始化)的主要任务。四、编程题(共30分)1.(10分)实现一个线程安全的懒汉式单例模式,要求避免指令重排序导致的线程不安全问题,并说明关键代码的作用。2.(10分)使用Java8及以上的StreamAPI,对给定的用户列表(User类包含id、name、age字段)进行以下操作:过滤出年龄大于等于18岁的用户;按年龄降序排序,年龄相同则按id升序排序;将结果收集为一个不可变的List<User>。3.(10分)编写一个方法,读取指定路径的文本文件(UTF-8编码),统计其中每个单词(以空格分隔)的出现次数,并按次数降序输出(次数相同则按单词字典序升序)。要求处理可能的IO异常,使用try-with-resources语句。--答案一、选择题1.A(泛型擦除是Java泛型的核心机制;B错误,静态方法无法使用类的泛型参数;C错误,可定义多个类型参数如<K,V>;D错误,通配符只能与extends或super其一结合)2.B(removeIf删除满足n%2==0的元素,即删除2,剩余[1,3])3.C(wait()唤醒后进入BLOCKED状态,等待获取锁后才回到RUNNABLE)4.B(ArrayList实现RandomAccess,支持快速随机访问;LinkedList未实现)5.C(A错误,finally的return会覆盖try的返回值,易导致逻辑混乱;B错误,空捕获会隐藏问题;D错误,应根据场景选择异常类型)6.C(Java16+的Stream.toList()返回不可变列表,类型为java.util.ImmutableCollections$ListN)7.D(mapToInt()返回IntStream,可通过boxed()转换为对象流Stream<Integer>)8.A(饿汉式静态初始化由类加载机制保证线程安全;B非线程安全;C未使用volatile可能导致其他线程看到未初始化的实例;D枚举单例默认线程安全)9.D(方法区是线程共享区域,其他三项为线程私有)10.A(null调用length()抛出空指针异常)二、填空题1.final(注意:final修饰的变量不可重新赋值,实现常量语义)2.List;Set(List允许重复且有序,如ArrayList;Set不允许重复,如HashSet)3.wait();notify();notifyAll()(wait()释放锁并等待,notify()唤醒一个等待线程,notifyAll()唤醒所有)4.字节(如InputStream/OutputStream);字符(如Reader/Writer);减少IO次数,提高读写效率(缓冲流通过内部缓冲区暂存数据,减少系统调用)5.getMethods();getDeclaredConstructors()(getMethods()获取所有public方法,包括父类;getDeclaredConstructors()获取所有构造方法,包括private)三、简答题1.接口与抽象类的区别:定义关键字:接口用interface,抽象类用abstractclass;成员变量:接口默认publicstaticfinal(常量),抽象类可以是任意访问修饰符的变量;方法实现:接口中方法默认publicabstract(Java8前),抽象类可以有抽象方法(无实现)和具体方法(有实现);继承关系:类只能单继承抽象类,但可以实现多个接口;设计目的:接口强调“行为规范”,抽象类强调“共性抽取”(如模板方法模式)。2.synchronized与ReentrantLock的区别:锁获取方式:synchronized是关键字,自动获取/释放锁(基于JVM);ReentrantLock是类,需手动lock()/unlock()(基于AQS);可中断性:synchronized不可中断(除非抛出异常),ReentrantLock可通过lockInterruptibly()实现可中断;条件变量:synchronized通过wait()/notify()实现单一条件队列;ReentrantLock通过Condition对象支持多个条件队列(如不同线程等待不同条件);公平性:synchronized默认非公平锁,ReentrantLock可通过构造参数指定公平/非公平锁。3.哈希冲突:不同键值对通过哈希函数计算得到相同的哈希值,导致映射到哈希表的同一位置。解决方法:链地址法(拉链法):哈希表每个桶存储一个链表,冲突元素加入链表(如HashMap的实现,JDK8后链表长度≥8时转为红黑树);开放定址法:冲突时寻找下一个空闲桶(线性探测、二次探测等);再哈希法:使用多个哈希函数,冲突时换用另一个函数计算哈希值。4.中间操作与终端操作的区别:中间操作:返回新的流,不会触发数据处理(延迟执行),可链式调用;例如filter()(筛选)、map()(转换);终端操作:触发流的执行,产生最终结果或副作用(如收集、遍历);例如collect()(收集为集合)、forEach()(遍历)。5.JVM类加载过程:加载:通过类加载器将.class文件字节码加载到内存,提供Class对象;验证:检查字节码格式、语义是否合法(如是否有非法指令);准备:为类的静态变量分配内存并设置初始值(如int初始为0,引用初始为null);解析:将符号引用(如类名、方法名)替换为直接引用(内存地址);初始化:执行类的初始化代码(静态变量赋值、静态代码块),调用<clinit>()方法(由编译器提供)。四、编程题1.线程安全的懒汉式单例(双重检查锁定):```javapublicclassSingleton{//使用volatile防止指令重排序(避免其他线程看到未初始化的实例)privatestaticvolatileSingletoninstance;//私有构造方法防止外部实例化privateSingleton(){}publicstaticSingletongetInstance(){//第一次检查:避免不必要的锁竞争if(instance==null){synchronized(Singleton.class){//第二次检查:防止多个线程同时通过第一次检查后重复创建实例if(instance==null){instance=newSingleton();//volatile保证写操作对其他线程可见}}}returninstance;}}```关键代码说明:volatile修饰instance:禁止JVM对“instance=newSingleton()”的指令重排序(防止分配内存但未初始化时其他线程获取到实例);双重检查:外层检查避免每次调用都加锁,内层检查确保多线程下仅创建一个实例;私有构造方法:防止外部通过new创建实例。2.使用StreamAPI处理用户列表:```javaimportjava.util.List;importjava.util.stream.Collectors;publicclassUserProcessor{staticclassUser{privateintid;privateStringname;privateintage;//构造方法、getter省略}publicstaticList<User>processUsers(List<User>users){returnusers.stream()//过滤年龄≥18岁.filter(user->user.getAge()>=18)//排序:年龄降序,id升序.sorted((u1,u2)->{if(u1.getAge()!=u2.getAge()){returnIpare(u2.getAge(),u1.getAge());//降序}else{returnIpare(u1.getId(),u2.getId());//升序}})//收集为不可变List(Java10+的Collectors.toUnmodifiableList()).collect(Collectors.toUnmodifiableList());}}```3.统计文本文件单词频率:```javaimportjava.io.BufferedReader;importjava.io.IOException;importjava.nio.charset.StandardCharsets;importjava.nio.file.Files;importjava.nio.file.Path;importjava.util.;importjava.util.stream.Collectors;publicclassWordCounter{publicstaticvoidcountWords(PathfilePath){try(BufferedReaderreader=Files.newBufferedReader(filePath,StandardCharsets.UTF_8)){//读取所有行并合并为流,按空格分割单词(忽略空字符串)Map<String,Integer>wordCounts=reader.lines().flatMap(line->Arrays.stream(line.split("\\s+")))//按任意空白分割.filter(word->!word.isEmpty())//过滤空单词.collect(Collectors.toMap(word->word.toLowerCase(),//单词转为小写(不区分大小写)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 进货查验和索证索票制度
- 现代家庭教育指南全解析
- Java性能优化要领及实践方法
- 超市消防控制室值班制度
- 组织胚胎学基础:骨发生课件
- 诊所病历书写制度
- 警务室调解制度
- 2025年幸运公务员笔试题及答案
- 2025年美国商业驾照笔试题库及答案
- 2025年广州市番禺区事业编考试及答案
- 2026年全职家庭教育指导师模拟测试题
- 2026河北石家庄技师学院选聘事业单位工作人员36人笔试备考试题及答案解析
- (正式版)DB41∕T 2987-2025 《在线教育课程资源制作规范》
- AOI培训课件教学课件
- 厂房钢结构安装测量方案
- 钢结构桥梁维修施工方案
- 电缆沟施工安全方案
- 中医护理在精神科疾病中的应用
- 多维空间建筑施工方案
- 2026春译林版新版八年级下册英语单词默写表
- 马年猜猜乐+(新年祝福篇41题)主题班会课件
评论
0/150
提交评论