2026年后端Java工程师校园招聘笔试题及答案_第1页
2026年后端Java工程师校园招聘笔试题及答案_第2页
2026年后端Java工程师校园招聘笔试题及答案_第3页
2026年后端Java工程师校园招聘笔试题及答案_第4页
2026年后端Java工程师校园招聘笔试题及答案_第5页
已阅读5页,还剩8页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026年后端Java工程师校园招聘笔试题及答案一、单项选择题(每题2分,共30分)1.Java语言中,下列哪个选项是合法的标识符?A.2abcB._varC.classD.null答案B解析Java标识符由字母、数字、下划线和美元符号组成,且不能以数字开头,不能与关键字或字面量重名。2abc以数字开头;class是关键字;null是字面量。2.关于Java基本数据类型,下列说法正确的是?A.char类型占用2个字节B.boolean类型在内存中固定占用1个字节C.long类型占用4个字节D.float类型占用8个字节答案A解析char为16位无符号整数,占2字节。boolean的大小没有严格规定,JVM依实现而定;long占8字节,float占4字节。3.阅读以下代码,输出结果为?Strings1="java";

Strings2=newString("java");

System.out.println(s1==s2);

System.out.println(s1.equals(s2));A.truetrueB.falsefalseC.falsetrueD.truefalse答案:C解析:s1指向字符串常量池中的对象,s2在堆中新建对象,==比较引用地址,因此不相等;equals比较内容,因此相等。4.关于JDK8中HashMap的实现,下列说法错误的是?A.允许null键和null值B.加载因子默认是0.75C.当链表长度大于等于8且数组长度大于等于64时,链表转为红黑树D.HashMap是线程安全的集合类答案D解析HashMap不是线程安全的,多线程环境下应使用ConcurrentHashMap或通过Collections.synchronizedMap包装。5.关于synchronized关键字,下列说法正确的是?A.synchronized只能修饰方法B.synchronized修饰静态方法时,锁对象是当前类的Class对象C.synchronized修饰实例方法时,锁对象是当前类的Class对象D.synchronized不能修饰代码块答案B解析synchronized可以修饰方法或代码块。修饰实例方法时锁的是当前实例对象;修饰静态方法时锁的是当前类的Class对象。6.关于ThreadPoolExecutor,下列说法错误的是?A.当提交的任务数大于核心线程数且队列未满时,任务会进入阻塞队列等待B.当队列已满且线程数达到最大线程数时,新任务会被拒绝C.核心线程数默认为10D.allowCoreThreadTimeOut可以设置核心线程超时回收答案C解析ThreadPoolExecutor没有“核心线程数默认为10”的设定,核心线程数由构造参数指定。A、B描述的是线程池处理任务的完整流程,D是ThreadPoolExecutor提供的能力。7.关于JVM垃圾回收,下列说法正确的是?A.新生代主要采用复制算法,老年代主要采用标记整理或标记清除算法B.JDK8默认垃圾收集器是CMSC.对象创建时永远优先分配在老年代D.调用System.gc()一定会立即触发FullGC答案A解析JDK8默认垃圾收集器是ParallelScavenge+ParallelOld,B错;新对象优先分配在Eden区,C错;System.gc()只是建议触发,不保证立即执行,D错。8.关于Spring中Bean的作用域,下列说法错误的是?A.默认作用域是singletonB.prototype作用域每次获取都会创建新实例C.request作用域仅在Web应用环境下有效D.自定义作用域需要实现BeanFactoryPostProcessor接口答案D解析自定义Bean作用域需要实现Scope接口,并注册到容器中,而不是实现BeanFactoryPostProcessor。9.MySQLInnoDB存储引擎默认的事务隔离级别是?A.READUNCOMMITTEDB.READCOMMITTEDC.REPEATABLEREADD.SERIALIZABLE答案C解析InnoDB默认隔离级别是REPEATABLEREAD,并且通过MVCC和间隙锁能在该级别下有效避免幻读。10.关于HTTP协议,下列说法正确的是?A.HTTP是无状态协议,通常借助Cookie和Session维持会话状态B.HTTP/1.1默认使用短连接C.POST请求方法是幂等的D.HTTPS是在HTTP协议上直接增加了一个TCP加密层答案A解析HTTP/1.1默认使用持久连接(长连接),B错;POST不一定幂等,GET通常幂等,C错;HTTPS是在HTTP与TCP之间加入TLS/SSL协议层,D错。11.下列哪个状态不会出现在TCP三次握手过程中?A.SYN_SENTB.SYN_RCVDC.ESTABLISHEDD.TIME_WAIT答案D解析三次握手涉及SYNSENT、SYNRCVD、ESTABLISHED;TIME_WAIT出现在四次挥手主动关闭方。12.对于以下代码,哪一行会导致编译错误?List<?extendsNumber>list=newArrayList<Integer>();//第一行

list.add(1);//第二行

Numbern=list.get(0);//第三行A.第一行B.第二行C.第三行D.三行均合法答案:B解析:List<?extendsNumber>是上界通配符,只能读取,不能写入(null除外)。因此第二行list.add(1)编译错误。13.关于SpringBoot自动配置,下列说法错误的是?A.通过@EnableAutoConfiguration开启自动配置B.自动配置基于@Conditional系列条件注解实现C.可以通过外部配置文件覆盖自动配置的属性D.自动配置是在运行时动态生成字节码实现的答案D解析自动配置是在应用启动时根据条件装配相应的Bean,并不是动态生成字节码。14.关于Redis,下列说法正确的是?A.Redis是单线程模型,所有操作都具备原子性B.Redis事务执行失败时可以回滚C.Redis提供RDB和AOF两种持久化方式D.Redis的key过期后会立即被删除答案C解析Redis命令执行阶段是单线程的,但网络IO在6.0后支持多线程,且“所有操作都是原子性”并不准确,A错;Redis事务不支持回滚,B错;过期删除采用惰性删除和定期删除,不一定立即删除,D错。15.下列JVM运行时数据区中,哪一个不会抛出OutOfMemoryError?A.Java堆B.方法区C.程序计数器D.虚拟机栈答案C解析程序计数器是唯一在Java虚拟机规范中没有规定任何OOM情况的区域。二、多项选择题(每题2分,共10分)1.下列哪些措施可以用于实现Java中的线程安全?A.使用synchronized同步块B.使用volatile修饰变量C.使用ReentrantLock加锁D.使用ThreadLocal保存共享数据答案AC解析volatile只保证可见性和有序性,不保证复合操作的原子性,不能单独保证线程安全;ThreadLocal通过线程隔离避免共享,也不属于“线程安全”手段。故选择A、C。2.关于JVM垃圾收集器,下列说法正确的有?A.G1收集器在JDK8中已经可以使用B.ZGC是一款低延迟垃圾收集器C.Serial收集器适用于单核处理器或客户端模式D.CMS收集器与用户线程并发执行,可能产生内存碎片答案ABCD解析G1在JDK7u4引入,JDK8可用;ZGC是JDK11引入的低延迟收集器;Serial是单线程收集器,适合单核或客户端;CMS并发收集,采用标记清除算法,会产生碎片。故全选。3.关于Spring事务的传播行为,下列说法正确的有?A.REQUIRED:当前存在事务则加入,不存在则新建事务B.REQUIRES_NEW:必须新建一个事务,并挂起当前事务C.NESTED:嵌套事务,依赖外部事务,回滚时会标记保存点D.SUPPORTS:必须以非事务方式执行,如果当前存在事务则直接抛异常答案ABC解析SUPPORTS表示当前存在事务则加入,不存在则以非事务方式执行,不会抛异常。D描述的是NOT_SUPPORTED(但也不是抛异常,而是挂起当前事务)。故选择A、B、C。4.关于数据库索引,下列说法正确的有?A.经常出现在WHERE子句中的列适合建立索引B.对列进行函数运算后,索引仍然有效C.联合索引遵循最左前缀原则D.索引数量越多越好答案AC解析对列使用函数运算会使索引失效,B错;索引过多会增加写入开销和存储成本,D错。5.关于TCP与UDP,下列说法正确的有?A.TCP是面向连接的,UDP是无连接的B.TCP提供可靠传输,UDP提供尽力而为的交付C.TCP首部开销比UDP大D.TCP支持一对一、一对多、多对多的通信模式答案ABC解析TCP只能点对点通信,不支持一对多和多对多;UDP支持单播、广播和多播。故D错误。三、简答题(每题10分,共20分)1.简述JDK8中HashMap的底层存储结构,并描述put(k,v)方法的完整执行流程。答案(1)底层结构:HashMap采用“数组+链表+红黑树”实现。数组中的每个位置是一个桶(bucket),当发生哈希冲突时,同桶内的元素以链表形式存储;当链表长度大于等于8且数组长度大于等于64时,链表会转换为红黑树,以降低查询复杂度。(2)put流程:•对key的哈希值进行扰动计算(高16位异或低16位),然后通过(n-1)&hash计算桶下标;•如果桶数组为null或长度为0,先触发扩容;•如果目标桶为空,直接新建节点放入该桶;•如果目标桶不为空,则遍历节点,比较哈希值和key是否相等,若找到相同key则更新value;•如果未找到相同key,则在链表尾部插入新节点(JDK8尾插法),并检查链表长度是否达到转红黑树阈值;•插入完成后,如果size大于阈值(容量×加载因子),则执行扩容,将原有节点重新分布到新数组中。解析该题考察对HashMap源码和哈希冲突处理机制的理解。回答时还应强调JDK8中红黑树引入、尾插法、扩容时机的意义。2.简述数据库事务的ACID特性,并说明数据库通常通过哪些机制实现这些特性。答案(1)ACID:•原子性(Atomicity):事务中的所有操作要么全部成功,要么全部回滚;•一致性(Consistency):事务执行前后,数据库从一个一致性状态变为另一个一致性状态;•隔离性(Isolation):并发事务之间相互隔离,互不干扰;•持久性(Durability):事务一旦提交,其对数据库的修改是永久性的。(2)实现机制:•原子性通过undolog(回滚日志)实现,记录事务修改前的数据快照,用于回滚;•持久性通过redolog(重做日志)实现,事务提交时保证日志先落盘,崩溃后可以重放恢复;•隔离性通过锁机制(共享锁、排他锁、间隙锁)和MVCC(多版本并发控制)实现;•一致性由应用层保证,并由原子性、隔离性、持久性共同支撑。解析回答时应分别说明日志和锁的作用,并强调一致性需要数据库和应用共同保证。四、编程题(每题20分,共40分)1.给定一个整数数组nums和一个整数目标值target,请在该数组中找出和为目标值的两个整数,并返回它们的数组下标。假设每种输入只对应一个答案,且不能重复使用同一个元素。要求时间复杂度为`O(importjava.util.HashMap;

importjava.util.Map;

publicclassTwoSum{

publicint[]twoSum(int[]nums,inttarget){

Map<Integer,Integer>map=newHashMap<>();

for(inti=0;i<nums.length;i++){

intcomplement=target-nums[i];

if(map.containsKey(complement)){

returnnewint[]{map.get(complement),i};

}

map.put(nums[i],i);

}

thrownewIllegalArgumentException("Notwosumsolution");

}

}解析:使用哈希表记录已遍历元素的值与下标,在遍历过程中查询target-nums[i]是否已存在,可将时间复杂度降到`O(n)2.设计并实现一个LRU(最近最少使用)缓存。需要支持get(key)和put(key,value)两个操作:•get(key):如果key存在,返回对应的值,并将该键值对标记为最近使用;否则返回-1。•put(key,value):如果key存在,则更新其值;如果不存在,则插入该键值对。若缓存容量已满,则淘汰最久未使用的键值对。•要求get和put的时间复杂度均为`O(importjava.util.HashMap;

importjava.util.Map;

publicclassLRUCache{

privatefinalintcapacity;

privatefinalMap<Integer,Node>map;

privatefinalNodehead;

privatefinalNodetail;

privatestaticclassNode{

intkey;

intvalue;

Nodeprev;

Nodenext;

Node(intkey,intvalue){

this.key=key;

this.value=value;

}

}

publicLRUCache(intcapacity){

this.capacity=capacity;

this.map=newHashMap<>();

this.head=newNode(-1,-1);

this.tail=newNode(-1,-1);

head.next=tail;

tail.prev=head;

}

publicintget(intkey){

Nodenode=map.get(key);

if(node==null){

return-1;

}

moveToHead(node);

returnnode.value;

}

publicvoidput(intkey,intvalue){

Nodenode=map.get(key);

if(node!=null){

node.value=value;

moveToHead(node);

return;

}

node=newNode(key,value);

map.put(key,node);

addToHead(node);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论