还剩15页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
java中级试题及答案
一、文档说明本文档为Java中级技术能力测试题集,涵盖Java核心技术、框架应用、并发编程、JVM原理等中级开发必备知识点,共包含4种题型(单选、多选、判断、简答),适合Java中级学习者自测或备考使用试题难度基于行业中级开发岗位实际要求设计,答案部分附详细解析,可帮助读者巩固知识、提升技术能力
二、试题部分第一部分单项选择题(共30题,每题1分)(每题只有一个正确答案,将正确选项的字母填入括号内)以下关于Java面向对象特性的描述,错误的是()A.封装的核心是隐藏内部实现细节,只暴露对外接口B.继承允许子类复用父类的属性和方法,提高代码复用性C.多态的实现依赖于方法重写和接口实现,同一方法可表现不同行为D.抽象类可以实例化对象,接口不能实例化对象Java8引入的新特性不包括()A.Lambda表达式B.Stream APIC.泛型D.Optional类HashMap和ConcurrentHashMap的核心区别是()A.HashMap允许key为null,ConcurrentHashMap不允许B.HashMap线程安全,ConcurrentHashMap非线程安全C.ConcurrentHashMap在并发场景下通过分段锁(Segment)实现线程安全D.HashMap的扩容因子默认为
0.75,ConcurrentHashMap默认为
0.5以下关于Java多线程的描述,正确的是()A.Thread类的start方法会直接执行run方法中的代码第1页共17页B.Runnable接口的实现类中,run方法可以抛出受检异常C.使用synchronized修饰静态方法时,锁对象是当前类的Class实例D.CountDownLatch的await方法会阻塞当前线程,直到计数器为0Java IO流中,用于读取字符流的类是()A.FileInputStream B.BufferedReader C.ObjectOutputStreamD.DataOutputStreamJVM内存模型中,以下哪块区域会抛出StackOverflowError()A.堆(Heap)B.方法区(Method Area)C.虚拟机栈(VMStack)D.本地方法栈(Native MethodStack)Spring IoC容器初始化过程中,Bean的生命周期不包括以下哪个阶段()A.实例化Bean对象B.设置Bean属性C.执行Bean的构造方法D.执行Bean的销毁方法以下关于Spring事务传播行为的描述,错误的是()A.REQUIRED如果当前存在事务,则加入该事务;否则创建新事务B.REQUIRES_NEW创建新事务,暂停当前事务C.SUPPORTS支持当前事务,若不存在则以非事务方式执行D.MANDATORY支持当前事务,若不存在则抛出NoSuchTransactionException以下关于Java并发包(java.util.concurrent)中类的描述,错误的是()A.ReentrantLock是可重入的互斥锁,需手动释放锁B.Semaphore可以控制访问资源的线程数量C.CyclicBarrier和CountDownLatch的功能完全相同第2页共17页D.CopyOnWriteArrayList适用于读多写少的并发场景Java9引入的模块系统(Module)的主要作用是()A.简化集合框架操作B.实现代码模块化管理,提高代码安全性和可维护性C.优化JVM启动速度D.增强多线程并发性能以下关于接口和抽象类的区别,错误的是()A.抽象类可以有构造方法,接口不能有构造方法B.抽象类可以包含普通成员方法,接口只能包含抽象方法(Java8前)C.一个类可以继承多个抽象类,实现多个接口D.抽象类中的成员变量可以有访问修饰符,接口中的成员变量默认是public staticfinal以下关于JDBC的描述,正确的是()A.使用PreparedStatement可以防止SQL注入攻击B.Connection对象的close方法会立即释放数据库连接C.ResultSet对象必须在Statement关闭前关闭D.Statement接口的executeQuery方法用于执行INSERT语句以下关于Java内存可见性的描述,错误的是()A.volatile关键字可以保证变量的可见性和原子性B.synchronized关键字可以保证变量的可见性和原子性C.ThreadLocal可以为每个线程提供独立的变量副本D.锁机制(如synchronized)可以实现线程间的通信Spring Boot自动配置的核心原理是()A.通过@ComponentScan自动扫描并注册Bean第3页共17页B.通过@EnableAutoConfiguration加载META-INF/spring.factories中的配置类C.通过@Configuration注解手动配置BeanD.通过@Bean注解显式定义Bean以下关于Java泛型的描述,正确的是()A.泛型在编译时会进行类型擦除,运行时无法获取泛型的具体类型B.泛型类可以继承其他泛型类,如List extendsListC.通配符extends T表示只能读取T类型及其子类的对象D.泛型方法必须在方法返回值前声明泛型参数,如public TmethodTtJVM垃圾回收(GC)中,以下哪款垃圾收集器是SerialGC的并行版本()A.Parallel ScavengeB.CMS C.G1D.ZGC以下关于线程池参数的描述,错误的是()A.corePoolSize核心线程数,线程池长期维持的线程数量B.maximumPoolSize最大线程数,线程池允许的最大线程数量C.keepAliveTime非核心线程空闲时的存活时间,单位为毫秒D.workQueue任务队列,用于存放等待执行的任务以下关于Spring AOP的描述,正确的是()A.AOP的核心是动态代理,目标对象必须实现接口才能生成代理对象B.@Aspect注解用于定义切面,@Before注解用于定义前置通知C.切入点表达式execution*com.example.service....表示匹配com.example.service包下所有类的所有方法D.通知(Advice)只能在目标方法执行前或执行后执行,不能在方法抛出异常时执行第4页共17页以下关于Java NIO的描述,错误的是()A.NIO基于通道(Channel)和缓冲区(Buffer)实现,支持非阻塞IOB.Selector允许单线程管理多个通道,提高IO效率C.Path接口是Java7引入的,用于替代传统的File类操作文件路径D.NIO的FileChannel支持随机访问文件,而传统IO的FileInputStream/OutputStream只能顺序访问以下关于事务ACID特性的描述,错误的是()A.Atomicity原子性,事务中的操作要么全部成功,要么全部失败B.Consistency一致性,事务执行前后,数据状态从一个合法状态转换到另一个合法状态C.Isolation隔离性,多个事务并发执行时,一个事务的执行不会被其他事务干扰D.Durability持久性,事务提交后,数据变更必须持久化到缓存中以下关于Java11引入的特性,错误的是()A.String类新增isBlank方法,用于判断字符串是否为空白(空格、制表符等)B.支持局部变量类型推断(var)在所有场景下使用C.移除了永久代(PermGen),改用元空间(Metaspace)D.HttpClient成为标准API,替代了HttpURLConnection以下关于HashMap的扩容机制,描述正确的是()A.当元素数量超过capacity(容量)时触发扩容B.扩容时,新容量为原容量的2倍,且必须是2的幂次方C.扩容过程中,链表会保持原有顺序,红黑树不会重新排序D.扩容时会将旧数组中的元素直接复制到新数组,无需重新计算索引第5页共17页以下关于Spring事务失效的场景,错误的是()A.事务方法被final修饰,无法被代理,导致事务失效B.事务方法内部调用同一类中的其他事务方法,由于this调用无法被代理,导致事务失效C.异常被捕获后未抛出,导致事务无法回滚D.事务传播行为设置为REQUIRES_NEW,且外层事务未抛出异常,导致内层事务不回滚以下关于Java异常体系的描述,正确的是()A.Exception是Error的父类,所有异常都继承自ExceptionB.受检异常(Checked Exception)必须在方法中声明throws,或使用try-catch捕获C.RuntimeException及其子类是受检异常,编译时会强制检查D.throw关键字用于捕获异常,throws关键字用于抛出异常以下关于JVM类加载过程的描述,正确的是()A.类加载过程包括加载、验证、准备、解析、初始化5个阶段B.加载阶段通过类加载器将.class文件加载到内存,生成Class对象C.验证阶段的作用是确保类的结构符合JVM规范D.初始化阶段执行类构造器方法,为静态变量赋初值以下关于Spring BootStarter的描述,正确的是()A.Starter是Spring Boot提供的一个接口,用于定义应用入口B.Starter自动引入相关依赖,并配置默认参数,简化开发C.自定义Starter只需在META-INF目录下创建spring.factories文件D.Starter不支持自定义配置,只能使用默认配置以下关于Java并发中的锁机制,描述错误的是()第6页共17页A.ReentrantLock可中断,而synchronized不可中断B.ReentrantLock支持公平锁和非公平锁,synchronized只支持非公平锁C.ReentrantLock的tryLock方法可以尝试获取锁,成功返回true,失败返回false,不阻塞D.读写锁(ReentrantReadWriteLock)中,写锁是共享锁,读锁是独占锁以下关于Java IO流的分类,描述正确的是()A.按数据单位分为字节流和字符流,按流向分为输入流和输出流B.字节流的父类是InputStream和OutputStream,字符流的父类是Reader和WriterC.FileReader和FileWriter是字节流,用于读取和写入文本文件D.BufferedReader的readLine方法可以读取一行文本,返回null表示到达流的末尾以下关于Spring Bean作用域的描述,正确的是()A.singleton每次请求创建一个Bean实例B.prototype整个应用生命周期中只有一个Bean实例C.request在一个HTTP请求内有效,仅在Web环境中可用D.session在一个用户会话内有效,仅在Web环境中可用以下关于Java8Stream API的描述,错误的是()A.Stream操作分为中间操作(Intermediate)和终端操作(Terminal)B.中间操作会立即执行,终端操作会触发整个流的处理C.Stream不存储数据,处理后原数据源不会被修改D.Stream的并行处理可以通过parallelStream方法实现第7页共17页第二部分多项选择题(共20题,每题2分)(每题有多个正确答案,将正确选项的字母填入括号内,多选、少选、错选均不得分)以下关于Java集合框架的描述,正确的有()A.ArrayList的底层是数组,查询效率高,增删效率低B.LinkedList的底层是双向链表,增删效率高,查询效率低C.HashSet基于HashMap实现,不允许重复元素,无序D.TreeSet基于TreeMap实现,元素会自动排序,允许null元素以下关于线程安全的集合类,正确的有()A.Vector是线程安全的List实现,其方法通过synchronized修饰B.Hashtable是线程安全的Map实现,不允许key或value为nullC.ConcurrentHashMap支持并发读写,性能优于HashtableD.CopyOnWriteArraySet是线程安全的Set实现,基于CopyOnWriteArrayList以下关于JVM内存参数的描述,正确的有()A.-Xms设置JVM初始堆内存大小B.-Xmx设置JVM最大堆内存大小C.-XX:NewRatio设置新生代与老年代的内存比例,默认2:1D.-XX:SurvivorRatio设置Eden区与Survivor区的内存比例,默认8:1:1以下关于Spring核心组件的描述,正确的有()A.IoC容器是Spring的核心,负责Bean的创建、管理和依赖注入B.BeanFactory是Spring IoC容器的顶层接口,ApplicationContext是其子接口C.@Autowired默认按类型注入,@Qualifier可用于指定按名称注入第8页共17页D.@Component、@Service、@Controller、@Repository均为Spring的Bean注解以下关于Java多线程的创建方式,正确的有()A.继承Thread类,重写run方法B.实现Runnable接口,重写run方法,通过Thread包装后启动C.实现Callable接口,重写call方法,通过FutureTask包装后交给Thread启动D.使用线程池创建线程以下关于Java并发工具类的描述,正确的有()A.CountDownLatch让一个线程等待多个线程执行完毕后再执行B.CyclicBarrier让多个线程等待到达同一个同步点后再一起执行C.Semaphore控制访问资源的线程数量,如连接池管理D.Exchanger用于两个线程交换数据,每个线程执行exchange方法时会阻塞直到对方到达以下关于JVM垃圾回收算法的描述,正确的有()A.标记-清除算法(Mark-Sweep)会产生内存碎片B.标记-整理算法(Mark-Compact)会移动对象,解决内存碎片问题C.复制算法(Copying)适用于对象存活率高的场景,如新生代D.分代收集算法(Generational GC)根据对象生命周期不同,采用不同回收策略以下关于Spring事务传播行为的描述,正确的有()A.REQUIRED默认传播行为,若存在事务则加入,否则创建新事务B.REQUIRES_NEW创建新事务,暂停当前事务,新事务执行完毕后恢复当前事务第9页共17页C.NESTED嵌套事务,外层事务回滚会导致内层事务回滚,内层事务独立回滚不影响外层D.NEVER不允许在事务中执行,若存在事务则抛出IllegalTransactionStateException以下关于Java IO/NIO的描述,正确的有()A.NIO的Selector可以监听多个通道的事件(如连接、可读、可写)B.NIO的ByteBuffer有flip和rewind方法,分别用于切换读写模式和重置指针C.Java IO的BufferedReader的readLine方法可能抛出IOException,需try-catch处理D.NIO的Path接口支持文件系统无关的路径操作,而传统IO的File类依赖具体操作系统以下关于Spring Boot的自动配置类的描述,正确的有()A.自动配置类通过@Configuration注解定义,且被@Conditional条件注解控制B.自动配置类的生效依赖于@EnableAutoConfiguration注解或@ComponentScan扫描C.自定义自动配置类需在META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中注册D.自动配置类中定义的Bean可以被用户自定义Bean覆盖以下关于Java8Stream API的中间操作,正确的有()A.filter过滤元素,保留满足条件的元素B.map将元素转换为另一种类型,返回新的StreamC.sorted自然排序,需要元素实现Comparable接口第10页共17页D.distinct去重,基于元素的equals方法判断重复以下关于HashMap和Hashtable的区别,正确的有()A.HashMap允许key和value为null,Hashtable不允许B.HashMap非线程安全,Hashtable线程安全C.HashMap的初始容量是16,Hashtable的初始容量是11D.HashMap的迭代器是快速失败(Fail-Fast)的,Hashtable的迭代器是安全失败(Fail-Safe)的以下关于JVM类加载器的描述,正确的有()A.Bootstrap ClassLoader加载核心类库(如rt.jar),无法被Java程序直接引用B.Extension ClassLoader加载扩展类库(如JRE的lib/ext目录)C.Application ClassLoader加载应用程序类路径下的类D.类加载器遵循双亲委派模型,避免类重复加载和安全问题以下关于Spring AOP的术语,正确的有()A.切面(Aspect)通知、切入点和引介的组合B.连接点(Join Point)程序执行过程中的某个特定点,如方法调用、字段修改C.切入点(Pointcut)用于匹配连接点的表达式,定义哪些连接点会被增强D.引介(Introduction)为目标类添加新的方法和属性以下关于Java并发中的锁优化,正确的有()A.偏向锁无竞争时,将对象头标记为偏向状态,关联当前线程IDB.轻量级锁竞争不激烈时,通过CAS操作避免重量级锁的阻塞C.重量级锁依赖操作系统互斥量(如mutex)实现,性能开销大第11页共17页D.自旋锁线程获取锁失败时不立即阻塞,而是循环尝试获取锁,减少上下文切换以下关于JDBC操作数据库的步骤,正确的有()A.加载数据库驱动Class.forNamecom.mysql.cj.jdbc.DriverB.获取数据库连接DriverManager.getConnectionurl,username,passwordC.创建Statement对象connection.createStatementD.执行SQL语句并处理结果ResultSet rs=statement.executeQuerysql以下关于Java异常处理的最佳实践,正确的有()A.避免捕获Exception父类,应捕获具体异常类型B.异常捕获后应记录日志,便于问题排查C.不要在catch块中什么都不做(空catch块),应处理或记录异常D.自定义异常应继承Exception或RuntimeException,提供有意义的消息以下关于Spring Boot配置文件的描述,正确的有()A.application.properties和application.yml是两种常用配置文件,功能相同B.配置文件中的属性可以通过@Value注解注入到Bean中C.不同环境的配置文件可命名为application-dev.yml、application-prod.yml,通过spring.profiles.active激活D.命令行参数的优先级高于配置文件(如--server.port=8081会覆盖配置文件中的server.port)以下关于Java17引入的特性,正确的有()第12页共17页A.密封类(Sealed Classes)限制类的继承,只能继承自指定的类或接口B.模式匹配(Pattern Matching)在switch表达式中支持类型模式和常量模式C.Records不可变数据类,自动生成equals、hashCode、toString等方法D.弃用了Applet API,不再支持浏览器中的Java小程序以下关于事务隔离级别的描述,正确的有()A.Read Uncommitted读未提交,可能读取到其他事务未提交的数据(脏读)B.Read Committed读已提交,避免脏读,但可能出现不可重复读C.Repeatable Read可重复读,避免不可重复读,但可能出现幻读D.Serializable串行化,最高隔离级别,完全避免所有并发问题第三部分判断题(共20题,每题1分)(对的打“√”,错的打“×”)Java是跨平台语言,因为Java程序在不同操作系统上运行时,不需要重新编译,只需安装对应的JVM()接口中的方法默认是public abstract的,成员变量默认是publicstatic final的()线程调用wait方法后,会释放对象锁;调用sleep方法后,不会释放对象锁()HashMap的size方法返回的是集合中元素的数量,而capacity方法返回的是集合的容量(数组长度)()Spring中,Bean的作用域为singleton时,每次获取Bean都是同一个实例()第13页共17页JVM的永久代(PermGen)和元空间(Metaspace)的主要区别是永久代使用JVM堆内存,元空间使用本地内存()事务传播行为REQUIRES_NEW和NESTED的区别是REQUIRES_NEW创建新事务,NESTED使用现有事务()Java中的多线程可以通过synchronized关键字或Lock接口实现同步,两者都能保证线程安全()Spring Boot的主启动类必须包含@SpringBootApplication注解,该注解等价于@Configuration+@ComponentScan+@EnableAutoConfiguration()Java8中的Stream API只能处理集合,不能直接处理数组()volatile关键字可以保证变量的原子性,即对变量的修改对其他线程立即可见()异常捕获时,子类异常必须放在父类异常之前,否则子类异常无法被捕获()ConcurrentHashMap在JDK
1.7中使用分段锁(Segment)实现线程安全,JDK
1.8中改用CAS+synchronized()Spring事务默认只对RuntimeException及其子类回滚,对受检异常(如IOException)不回滚()Java NIO的FileChannel的read和write方法是阻塞的,而SocketChannel可以通过configureBlockingfalse设置为非阻塞()方法引用::可以简化Lambda表达式,如Integer::compareTo等价于a,b-a.compareTob()Java中的String是不可变的,对String的修改会创建新的String对象()第14页共17页Spring AOP的目标对象必须实现接口才能生成代理对象,否则使用CGLIB代理()JVM的垃圾回收器中,G1是面向服务端应用的低延迟垃圾回收器,兼顾吞吐量和延迟()事务的隔离级别越高,并发性能越好,数据一致性越有保障()第四部分简答题(共2题,每题5分)请简述Java线程池的核心参数及其作用请简述JVM内存模型的各区域及其作用
三、参考答案第一部分单项选择题D
2.C
3.C
4.C
5.B
6.C
7.D
8.D
9.C
10.BC
12.A
13.A
14.B
15.C
16.A
17.C
18.B
19.C
20.DC
22.B
23.D
24.B
25.C
26.B
27.D
28.A
29.C
30.B第二部分多项选择题ABC
32.ABC
33.ABCD
34.ABCD
35.ABCD
36.ABCD
37.ABD
38.ABCD
39.ABCD
40.ABCDABCD
42.ABC
43.ABCD
44.ABCD
45.ABCD
46.ABCD
47.ABCD
48.ABCD
49.ABCD
50.ABCD第三部分判断题√
52.√
53.√
54.√
55.√
56.√
57.√
58.√
59.√
60.××
62.√
63.√
64.√
65.√
66.√
67.√
68.×
69.√
70.×第四部分简答题Java线程池核心参数及作用第15页共17页corePoolSize核心线程数,线程池长期维持的线程数量,即使线程空闲也不会销毁(除非设置allowCoreThreadTimeOut)maximumPoolSize最大线程数,线程池允许的最大线程数量,包含核心线程和临时线程keepAliveTime非核心线程空闲时的存活时间,超过此时间未执行任务则销毁workQueue任务队列,用于存放等待执行的任务,常见类型有SynchronousQueue(无缓冲)、LinkedBlockingQueue(无界)、ArrayBlockingQueue(有界)threadFactory线程工厂,用于创建线程,可自定义线程名称、优先级等handler拒绝策略,当线程池和队列都满时,如何处理新任务(如AbortPolicy抛出异常、CallerRunsPolicy由提交线程执行)JVM内存模型各区域及作用堆(Heap)JVM管理的最大内存区域,存放所有对象实例,是GC的主要区域,分新生代(Eden+S0+S1)和老年代虚拟机栈(VM Stack)每个线程私有,存储方法执行时的栈帧(局部变量表、操作数栈、方法出口等),线程创建时创建,方法调用时入栈,方法结束时出栈,可能抛出StackOverflowError(栈溢出)本地方法栈(Native MethodStack)与虚拟机栈类似,但服务于本地方法(Native Method),可能抛出StackOverflowError或OutOfMemoryError方法区(Method Area)所有线程共享,存储类信息(类名、属性、方法等)、常量、静态变量等,JDK8后元空间替代永久代,使用本地内存第16页共17页程序计数器(Program CounterRegister)每个线程私有,存储当前线程执行的字节码行号指示器,线程切换时恢复,无OOM风险文档说明试题及答案严格基于Java中级开发核心知识点设计,答案解析简洁准确,可帮助学习者巩固技术基础、提升面试/考试竞争力建议结合实际项目实践理解知识点,避免死记硬背第17页共17页。
个人认证
优秀文档
获得点赞 0