2025年二期JAVA语言及数据库笔试题目答案_第1页
2025年二期JAVA语言及数据库笔试题目答案_第2页
2025年二期JAVA语言及数据库笔试题目答案_第3页
2025年二期JAVA语言及数据库笔试题目答案_第4页
2025年二期JAVA语言及数据库笔试题目答案_第5页
已阅读5页,还剩11页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

2025年二期JAVA语言及数据库笔试题目答案一、Java语言基础与核心特性1.简述Java基本数据类型及其包装类,并说明自动装箱与拆箱的原理及潜在陷阱。Java共有8种基本数据类型:整型:byte(Byte)、short(Short)、int(Integer)、long(Long)浮点型:float(Float)、double(Double)字符型:char(Character)布尔型:boolean(Boolean)自动装箱指基本数据类型自动转换为对应包装类(如`Integeri=10`),本质是调用包装类的`valueOf()`方法;拆箱则是包装类转为基本类型(如`intj=i`),本质是调用`xxxValue()`方法(如`intValue()`)。潜在陷阱:包装类缓存:部分包装类(如Integer)对小范围数值(默认-128~127)缓存,直接赋值时会复用对象。例如`Integera=127;Integerb=127`时`a==b`为true,但超出范围(如128)则为false。空指针异常:若包装类对象为null时拆箱,会抛出`NullPointerException`(如`Integerc=null;intd=c`)。性能损耗:频繁装箱拆箱会增加内存开销,需避免在循环中大量使用。2.抽象类与接口的核心区别是什么?JDK8及之后对接口的扩展有哪些?核心区别:定义与继承:抽象类可包含构造方法、实例变量、具体方法;接口仅能定义常量(`publicstaticfinal`)和抽象方法(JDK8前)。单继承与多实现:类只能继承1个抽象类,但可实现多个接口。设计目的:抽象类用于抽取子类的公共行为("是不是"关系);接口定义规范("能不能"关系)。JDK8及之后的扩展:默认方法(defaultmethod):接口中可定义带方法体的默认实现(如`List.sort()`),解决接口升级时子类需重写所有方法的问题。静态方法(staticmethod):接口中可定义静态方法(如`Comparator.naturalOrder()`),通过接口名直接调用。JDK9私有方法:支持接口内定义私有方法(`privatemethod`),复用默认方法和静态方法的公共逻辑。3.对比ArrayList与LinkedList的底层实现及适用场景。底层实现:ArrayList:基于动态数组(`Object[]elementData`),默认初始容量10,扩容时新容量为原1.5倍(`oldCapacity+(oldCapacity>>1)`),通过`Arrays.copyOf()`复制数组。LinkedList:基于双向链表(`Node<E>`节点,含prev、next、item),每个节点保存前后指针。适用场景:ArrayList:随机访问(`get(i)`)时间复杂度O(1),适合频繁读取、少量增删(尤其尾部)的场景(如数据展示列表)。LinkedList:插入/删除(非首尾)时间复杂度O(1)(需先定位节点),但随机访问需遍历链表(O(n)),适合频繁插入删除(如队列、栈)或未知容量扩展的场景。二、多线程与并发编程4.简述synchronized与ReentrantLock的核心差异,并说明ReentrantLock的适用场景。核心差异:特性synchronizedReentrantLock锁获取方式JVM内置关键字,自动释放(同步块结束)需手动调用`lock()`/`unlock()`(需`try-finally`)公平性支持非公平锁(默认)可通过构造参数`newReentrantLock(true)`实现公平锁可中断性不可中断(除非抛出异常)支持`lockInterruptibly()`可中断获取锁条件变量仅1个`wait()`/`notify()`可通过`newCondition()`创建多个Condition对象(如生产者-消费者多条件控制)性能JDK6后优化(偏向锁、轻量级锁、自旋),与ReentrantLock接近高并发下可通过`tryLock()`优化锁竞争ReentrantLock适用场景:需要支持公平锁(如对线程执行顺序有严格要求);需要可中断锁(避免死锁)或尝试锁(`tryLock(longtimeout,TimeUnitunit)`);需要多个条件变量(如区分不同类型的等待线程)。5.线程池的核心参数有哪些?说明其工作机制及拒绝策略的类型。核心参数(`ThreadPoolExecutor`构造函数):`corePoolSize`:核心线程数(即使空闲也保留);`maximumPoolSize`:最大线程数(核心+临时线程);`keepAliveTime`:临时线程空闲存活时间;`unit`:时间单位;`workQueue`:任务队列(如`ArrayBlockingQueue`、`LinkedBlockingQueue`);`threadFactory`:线程工厂(自定义线程命名、优先级);`handler`:拒绝策略(任务无法处理时的行为)。工作机制:1.新任务提交时,若运行线程数<`corePoolSize`,创建新线程执行;2.若≥`corePoolSize`,任务加入`workQueue`;3.若队列已满且运行线程数<`maximumPoolSize`,创建临时线程执行;4.若线程数达`maximumPoolSize`且队列已满,触发拒绝策略。拒绝策略类型:`AbortPolicy`(默认):抛出`RejectedExecutionException`;`CallerRunsPolicy`:调用者线程直接执行任务;`DiscardPolicy`:静默丢弃新任务;`DiscardOldestPolicy`:丢弃队列中最旧任务,尝试重新提交当前任务。三、JVM与内存管理6.JVM内存区域中哪些部分可能发生OOM(内存溢出)?请分别说明原因及典型场景。JVM内存区域包括:堆(Heap):存储对象实例及数组,是OOM最常见区域。原因:对象数量过多且无法被GC回收(如内存泄漏,或大对象分配)。典型场景:循环创建未释放的大对象(如未关闭的数据库连接对象)、缓存数据未设置过期策略。方法区(元空间,MetaSpace,JDK8+):存储类元信息、常量池、静态变量。原因:动态生成大量类(如CGLIB动态代理、反射生成类),或常量池过大(如字符串常量未回收)。典型场景:使用动态字节码技术(如SpringAOP)的高并发系统,或加载大量第三方Jar包的应用。虚拟机栈(JavaStack)与本地方法栈(NativeMethodStack):存储栈帧(局部变量、操作数栈等)。原因:线程请求的栈深度超过JVM允许的最大值(如递归方法无终止条件)。典型场景:无限递归调用(如`voidrecur(){recur();}`)。直接内存(DirectMemory):通过`Unsafe`或`ByteBuffer.allocateDirect()`分配的堆外内存。原因:分配内存超过`-XX:MaxDirectMemorySize`(默认与堆最大值相同)。典型场景:频繁使用NIO的`DirectByteBuffer`且未及时释放(需手动调用`cleaner().clean()`)。四、数据库与SQL高级应用7.简述事务的ACID特性,并说明四种隔离级别及对应的并发问题。ACID特性:原子性(Atomicity):事务的操作要么全部成功,要么全部回滚;一致性(Consistency):事务执行前后数据状态符合业务规则(如转账后总金额不变);隔离性(Isolation):多个事务并发执行时,彼此互不干扰;持久性(Durability):事务提交后,修改永久保存(即使系统崩溃)。隔离级别与并发问题:隔离级别脏读(DirtyRead)不可重复读(Non-RepeatableRead)幻读(PhantomRead)读未提交(ReadUncommitted)可能发生可能发生可能发生读已提交(ReadCommitted,RC)避免可能发生(两次读同一行结果不同)可能发生可重复读(RepeatableRead,RR,MySQL默认)避免避免(两次读同一行结果一致)可能发生(两次读范围结果不同)串行化(Serializable)避免避免避免(事务串行执行,无并发)8.编写SQL:查询每个部门中薪资最高的员工姓名、部门名称及薪资(要求使用窗口函数)。假设表结构:`employees`(emp_id,emp_name,dept_id,salary)`departments`(dept_id,dept_name)```sqlWITHranked_employeesAS(SELECTe.emp_name,e.dept_id,e.salary,DENSE_RANK()OVER(PARTITIONBYe.dept_idORDERBYe.salaryDESC)ASrankFROMemployeese)SELECTre.emp_name,d.dept_name,re.salaryFROMranked_employeesreJOINdepartmentsdONre.dept_id=d.dept_idWHEREre.rank=1;```说明:使用`DENSE_RANK()`窗口函数按部门分区(`PARTITIONBYdept_id`),按薪资降序排序(`ORDERBYsalaryDESC`),相同薪资的员工排名相同;通过CTE(公共表表达式)`ranked_employees`获取各部门薪资排名;最终筛选排名为1的记录,并关联部门表获取部门名称。9.索引优化的核心原则有哪些?如何通过EXPLAIN分析慢查询?索引优化原则:列选择性:优先在高选择性列(如用户ID、订单号)建索引(区分度=唯一值数量/总记录数>0.1);覆盖索引:索引包含查询所需的所有列(如`SELECTcol1,col2FROMtWHEREcol3=?`,索引`(col3,col1,col2)`),避免回表;复合索引顺序:左前缀匹配(如索引`(a,b,c)`支持`a`、`a,b`、`a,b,c`查询),将高频过滤列、等值查询列放前面,范围查询列放后面;避免索引失效:不使用函数/表达式(如`WHEREYEAR(create_time)=2024`)、类型不匹配(如字符串列用数字查询)、`!=`/`NOTIN`、`OR`(可拆分为UNION);索引数量控制:索引越多,写操作(INSERT/UPDATE/DELETE)性能越低(需维护索引树),单表索引建议不超过5个。EXPLAIN分析慢查询步骤:1.执行`EXPLAINSELECT...`获取执行计划;2.关注关键字段:`type`:访问类型(`ALL`全表扫描需优化,`ref`/`eq_ref`较优,`const`最佳);`key`:实际使用的索引(`NULL`表示未使用索引);`rows`:扫描的行数(值越大性能越差);`Extra`:额外信息(如`Usingfilesort`需文件排序,`Usingtemporary`使用临时表,均需优化);3.示例优化:若`type=ALL`且`key=NULL`,需检查WHERE条件列是否有索引;若`Extra=Usingfilesort`,需添加复合索引覆盖ORDERBY列。五、综合应用与设计10.设计一个高并发场景下的用户订单表(t_order),要求考虑索引优化、分库分表策略及事务一致性。设计要点:表结构设计:```sqlCREATETABLEt_order(order_idBIGINTUNSIGNEDPRIMARYKEYCOMMENT'订单ID(雪花算法生成)',user_idBIGINTUNSIGNEDNOTNULLCOMMENT'用户ID',create_timeDATETIMENOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'创建时间',total_amountDECIMAL(10,2)NOTNULLCOMMENT'总金额',statusTINYINTNOTNULLDEFAULT1COMMENT'状态(1未支付,2已支付,3已取消)',INDEXidx_user_create(user_id,create_time)COMMENT'用户最近订单查询索引',INDEXidx_status(status)COMMENT'

温馨提示

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

评论

0/150

提交评论