版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025中级java工程师面试题及答案1.单选题(每题2分,共20分)1.1在JDK17中,以下关于密封类(sealedclass)的描述正确的是A.密封类必须被final修饰B.密封类的子类必须声明在同一个源文件中C.密封类使用permits关键字显式列出允许继承的子类D.密封类不能包含任何抽象方法答案:C1.2关于G1垃圾收集器,以下哪项陈述最准确A.G1在YoungGC时会对整个老年代做标记压缩B.G1的Humongous区只能存放大于50%Region大小的对象C.G1通过SATB算法保证并发标记的正确性D.G1的MixedGC只回收Eden区答案:C1.3在SpringBoot3.x中,若希望禁用SpringMVC的自动配置并保留WebFlux自动配置,应采用的正确方式是A.@EnableAutoConfiguration(exclude={WebMvcAutoConfiguration.class})B.spring.main.webapplicationtype=reactiveC.@SpringBootApplication(exclude={WebMvcAutoConfiguration.class})D.在application.yml中设置spring.autoconfigure.exclude=WebMvcAutoConfiguration答案:C1.4以下关于MySQL8.0的InnoDB行格式,哪项描述正确A.DYNAMIC格式下,变长字段完全溢出页外,本页只保留20字节指针B.COMPRESSED格式使用zlib算法压缩整页数据C.REDUNDANT格式不支持大字段前缀索引D.COMPACT格式下,NULL字段不占任何存储空间答案:B1.5在Java并发包中,以下哪个类底层使用CLH队列A.SemaphoreB.CountDownLatchC.ReentrantLockD.CyclicBarrier答案:C1.6关于JVM内存模型,以下哪项在JDK8之后仍存在于JVM内部A.永久代(PermGen)B.代码缓存(CodeCache)C.压缩类空间(CompressedClassSpace)D.运行时常量池位于永久代答案:C1.7在Kafka3.5中,以下关于KRaft模式的描述错误的是A.不再依赖ZooKeeperB.控制器元数据存储在内部的__cluster_metadata主题C.支持滚动升级从ZooKeeper模式到KRaft模式D.必须将所有broker节点同时切换为KRaft模式答案:D1.8使用Redisson实现分布式锁时,以下哪项参数可最大限度避免“锁续期”导致的“锁漂移”A.lockWatchdogTimeoutB.waitTimeC.leaseTimeD.retryAttempts答案:C1.9在JPA3.1中,以下哪种写法可触发一次左外连接抓取A.@EntityGraph(attributeNodes={"orderItems"})B.joinfetcho.orderItemswhereo.status=:statusC.selectofromOrderoleftjoino.orderItemsD.@QueryHints(@QueryHint(name="hibernate.fetchSize",value="50"))答案:B1.10关于Netty4.1的ChannelPipeline,以下哪项正确A.ChannelHandlerContext的fireChannelRead会从头开始传播事件B.ChannelInboundHandlerAdapter的channelRead0方法默认自动释放ByteBufC.在addLast时若指定EventExecutorGroup,则该Handler将在自定义线程池执行D.ChannelDuplexHandler只能处理出站事件答案:C2.多选题(每题3分,共30分)2.1以下哪些操作会导致JDK17中的G1收集器触发FullGCA.并发标记失败(concurrentmarkingfailure)B.晋升失败(promotionfailure)C.大对象分配失败(humongousallocationfailure)D.System.gc()且XX:+DisableExplicitGC未设置答案:ABCD2.2在SpringCloud2023.x中,以下哪些组件已宣布进入维护模式A.NetflixHystrixB.NetflixRibbonC.NetflixZuulD.SpringCloudConfig答案:ABC2.3关于Redis7.0的multipartAOF机制,以下说法正确的是A.将AOF拆分为base文件与incr文件B.incr文件采用RDB格式C.通过aofuserdbpreamble控制是否启用混合持久化D.支持在线切换AOF文件格式而不重启答案:ACD2.4在Java21中,以下哪些属于虚拟线程(VirtualThread)的调度特征A.由JVM而非操作系统调度B.默认使用ForkJoinPool作为载体线程池C.可通过Thread.ofVirtual().factory()创建工厂D.虚拟线程阻塞载体线程时会导致线程pinned答案:ABCD2.5以下哪些情况会导致MySQL8.0的索引下推(ICP)失效A.使用覆盖索引B.使用全文索引C.使用索引合并(indexmerge)D.使用聚簇索引范围查询答案:BC2.6关于JVM的JIT编译器,以下哪些优化属于“循环展开”A.将循环次数从16改为4次,每次处理4个元素B.将int数组赋值循环替换为System.arraycopyC.将循环不变量外提D.将循环计数器由int改为long答案:A2.7在分布式事务Seata2.0中,以下哪些模式支持最终一致性A.AT模式B.TCC模式C.Saga模式D.XA模式答案:BC2.8以下哪些HTTP状态码在RFC9110中被正式定义A.418I'mateapotB.422UnprocessableContentC.451UnavailableForLegalReasonsD.511NetworkAuthenticationRequired答案:BCD2.9关于Linux的epoll,以下哪些触发模式会保证在数据“剩余”时再次通知A.EPOLLONESHOTB.EPOLLETC.EPOLLLTD.EPOLLRDHUP答案:C2.10在Kubernetes1.29中,以下哪些资源属于非命名空间级别A.NodeB.PersistentVolumeC.NamespaceD.CustomResourceDefinition答案:ABCD3.编程填空题(每空4分,共40分)3.1使用JDK21的虚拟线程,实现一个并发下载器,要求最大并发200,超时5秒,补充缺失代码。```javapublicclassDownloader{privatestaticfinalHttpClientCLIENT=HttpClient.newHttpClient();publicstaticvoiddownload(List<URI>uris)throwsException{try(varexecutor=Executors.newVirtualThreadPerTaskExecutor()){List<Callable<Void>>tasks=uris.stream().map(uri>(Callable<Void>)()>{varreq=HttpRequest.newBuilder(uri).timeout(Duration.ofSeconds(5)).GET().build();varresp=CLIENT.send(req,HttpResponse.BodyHandlers.ofString());if(resp.statusCode()==200){Files.writeString(Path.of(uri.getHost()+".txt"),resp.body());}returnnull;}).toList();executor.invokeAll(tasks);}}}```3.2在SpringBoot3.x中,使用新的@Observed注解实现方法级可观测,补充缺失的Micrometer代码。```java@ComponentpublicclassPriceService{@Observed(name="price.calculate",contextualName="calculateprice",lowCardinalityKeyValues={"currency","USD"})publicBigDecimalcalculate(LongskuId){returnBigDecimal.valueOf(skuId0.99);}}```3.3使用MyBatisPlus3.5.4实现乐观锁插件,补充实体字段注解。```java@Data@TableName("t_order")publicclassOrder{@TableId(type=IdType.AUTO)privateLongid;privateStringstatus;@VersionprivateIntegerversion;}```3.4在Redisson3.24中,使用RFairLock实现公平锁,补充公平锁获取与释放。```javaRLockfairLock=redissonClient.getFairLock("order:123");try{booleanlocked=fairLock.tryLock(3,30,TimeUnit.SECONDS);if(locked){//biz}}finally{if(fairLock.isHeldByCurrentThread()){fairLock.unlock();}}```3.5使用JDK17的VectorAPI进行数组相加,补充缺失的向量运算。```javavarspecies=IntVector.SPECIES_256;varupper=species.loopBound(a.length);inti=0;for(;i<upper;i+=species.length()){varva=IntVector.fromArray(species,a,i);varvb=IntVector.fromArray(species,b,i);va.add(vb).intoArray(c,i);}for(;i<a.length;i++){c[i]=a[i]+b[i];}```4.代码阅读题(每题10分,共30分)4.1阅读以下基于Reactor3.5的代码,指出第几行会出现“歧义”订阅导致异常,并给出修改方案。```javaFlux<String>flux=Flux.just("A","B","C").publish().autoConnect(2);flux.subscribe(System.out::println);flux.subscribe(System.out::println);```答案:第5行;publish返回ConnectableFlux,autoConnect(2)表示需要两次订阅才触发,但代码只订阅一次,导致数据不会打印。修改:将autoConnect(2)改为refCount(2)或直接调用connect()。4.2阅读以下MyBatis二级缓存源码片段,指出导致脏读的根本原因,并给出解决方案。```java<cachereadWrite="true"blocking="true"/>```答案:readWrite=true时,MyBatis使用SerializedCache,要求实体实现Serializable,否则缓存put时报NotSerializableException,导致回退到数据库,出现看似“脏读”的重复查询。解决:实体实现Serializable或使用readWrite="false"配合自定义Cache实现。4.3阅读以下Netty4.1的ChannelHandler代码,指出内存泄漏隐患并修正。```javapublicclassEchoHandlerextendsChannelInboundHandlerAdapter{@OverridepublicvoidchannelRead(ChannelHandlerContextctx,Objectmsg){ByteBufbuf=(ByteBuf)msg;ctx.write(buf);}}```答案:未释放ByteBuf,导致内存泄漏。修正:使用ctx.writeAndFlush(buf.duplicate().retainedSlice())并在finally中释放原buf,或继承SimpleChannelInboundHandler让框架自动释放。5.设计题(每题20分,共40分)5.1设计一个支持千万级日活的IM系统消息已读回执功能,要求:1.已读状态实时同步;2.支持消息漫游;3.支持多端一致性;4.可水平扩展。请给出表结构、Redis缓存策略、MQ选型与最终一致性方案。答案:表结构:message(msg_id,conv_id,sender_uid,seq,content,ts)read_index(conv_id,uid,last_ack_seq,read_ts)缓存:RedisCluster按conv_id分片,使用Hash结构存储last_ack_seq,设置过期时间24h,利用Redisson分布式锁更新。MQ:使用Kafka单分区保序,key=conv_id,value=ReadReceiptEvent,消费者组按uid分库分表更新MySQL,幂等通过msg_id唯一索引。一致性:采用“读时修复”,客户端拉取消息时携带本地last_ack_seq,服务端对比返回diff,差异大于阈值触发批量修复任务。5.2设计一个基于SpringCloud2023.x的灰度发布平台,要求:1.支持按用户维度灰度;2.支持流量比例切流;3.支持实时回滚;4.对业务代码零侵入。请给出核心架构图、关键配置、以及灰度路由算法。答案:架构:Gateway+Nacos+LoadBalancer+GrayReactiveLoadBalancerClientFilter配置:在Nacos创建灰度配置项:gray.users=123,456gray.percent=20路由算法:1.Gateway过滤器从Header解析uid,命中白名单则路由到gray集群;2.未命中则取uid哈希值对100取模,小于percent则灰度;3.灰度版本实例打标签gray=true,LoadBalancer使用GrayRoundRobinRule;4.回滚时修改Nacos配置,Gateway监听配置变更实时刷新,整个过程无需业务方发布。6.性能调优题(每题10分,共20分)6.1某电商大促场景下,订单服务RT从80ms升至2s,CPU利用率仅30%,线程数爆满,日志出现大量“Poolisfull”。给出排查步骤与优化方案。答案:步骤:1.arthasthreadn3查看阻塞栈,发现大量线程阻塞在RedissonLock.tryLock;2.使用redissonlockmonitor发现锁粒度为商品维度,热点商品竞争;3.降级为分段锁,将商品ID哈希到16个桶,每桶独立锁;4.调整锁超时leaseTime=200ms,减少排队;5.开启Redisson的看门狗续期,避免业务超时导致锁提前释放;6.压测验证,RT降至90ms,线程数下降70%。6.2某MySQL8.0实例QPS3万出现慢查询,explain显示全表扫描,索引存在但优化器未选用,给出根因与干预手段。答案:根因:表使用utf8mb4,字段加索引后where条件使用utf8字符集常量,发生隐式字符集转换,导致索引失效。干预:1.将常量改为utf8mb4或表字段改为utf8;2.使用forceindex提示;3.调整eq_range_index_dive_limit=0,让优化器重新估算;4.收集统计信息analyzetable;5.上线后慢查询消失,QPS提升至5万。7.开放问答(每题20分,共40分)7.1你负责的系统从JDK8升级到JDK21,请给出完整升级checklist,包括编译、依赖、GC、监控、兼容性问题及回滚预案。答案:编译:使用release21编译,检查moduleinfo,移除sun.misc.Unsafe直接引用,替换为VarHandle。依赖:升级SpringBoot3.x、Jackson2.15、Lom
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026重庆永川区中山路街道办事处中山路社区招聘全日制公益性岗位人员1人备考题库【含答案详解】
- 2026北京大旺食品有限公司丰台分公司招聘8人备考题库含答案详解(综合卷)
- 上海欧华职业技术学院《幼儿音乐教育与活动指导》2025-2026学年期末试卷
- 上海音乐学院《中国古代文学批评史》2025-2026学年期末试卷
- 无锡太湖学院《国际贸易实务英文版》2025-2026学年期末试卷
- 邢台新能源职业学院《系统解剖学》2025-2026学年期末试卷
- 沈阳工业大学《中医儿科学》2025-2026学年期末试卷
- 四平职业大学《音乐教育学》2025-2026学年期末试卷
- 沈阳农业大学《播音主持创作基础》2025-2026学年期末试卷
- 上海杉达学院《临床技能学》2025-2026学年期末试卷
- 2026江苏省人民医院行风监督处管理辅助岗招聘1人考试备考题库及答案解析
- 2026年宁夏财经职业技术学院单招职业适应性考试题库及答案详解(各地真题)
- 无人机空中交通管控平台-洞察与解读
- 中医基础理论考试试题库(附答案)
- GB/Z 119-2026晶体硅光伏组件光热诱导衰减(LETID)试验检测
- 2025年首钢自动化笔试及答案
- 2026年社会学概论试题库200道附答案【能力提升】
- 空调人员安全培训课件
- 志愿服务与社区建设:共建共治共享的基层治理新实践
- 媛颂培训课件
- 器械临床试验中的方案偏离管理与纠正
评论
0/150
提交评论