Java开发笔试真题(含详细答案)_第1页
Java开发笔试真题(含详细答案)_第2页
Java开发笔试真题(含详细答案)_第3页
Java开发笔试真题(含详细答案)_第4页
Java开发笔试真题(含详细答案)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

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

文档简介

Java开发笔试真题(含详细答案)本次试题为企业通用Java开发笔试题型,涵盖Java基础、面向对象、集合框架、多线程、JVM、数据库、Spring核心、编程算法八大模块,题型包含选择题、填空题、简答题、编程题,贴合实际职场笔试场景,答案详细易懂、无书面化套话。一、Java基础选择题(10题)1、以下关于基本数据类型说法正确的是()A.String是基本数据类型

B.byte类型取值范围是-127~128

C.float类型必须加f/F后缀

D.boolean可以赋值为0和1答案:C解析:String是引用类型;byte取值范围是-128~127;boolean只有true/false两个值,不能用0/1赋值;浮点数字面量默认double类型,float必须加f后缀。2、shorts=1;s=s+1;会编译报错的原因是()A.数值超出范围

B.int自动转换为short失败

C.变量未初始化

D.语法错误答案:B解析:s+1运算时,short会自动提升为int类型,运算结果是int,直接赋值给short变量会出现类型不匹配,需要强制转换:s=(short)(s+1);而s++不会报错,因为自增运算自带强制转换。3、以下关于final关键字说法错误的是()A.final修饰的类不能被继承

B.final修饰的方法不能被重写

C.final修饰的变量不可修改引用地址

D.final修饰的变量必须初始化答案:C解析:final修饰基本类型变量,数值不可修改;修饰引用类型变量,引用地址不可变,但对象内部属性可以修改。例如final修饰的ArrayList,不能重新赋值新集合,但可以add、remove元素。4、==和equals的区别,说法正确的是()A.两者作用完全一致

B.==比较引用地址,equals默认比较内容

C.==比较基本类型数值、引用类型地址;equals默认比较地址,重写后比较内容

D.equals可以比较基本数据类型答案:C解析:基本类型只能用==比较数值;引用类型==比较内存地址。Object类的equals方法本质就是==,String、Integer等类重写了equals方法,用于比较对象内容。基本数据类型没有equals方法。5、以下不会产生空指针异常的是()A.null.equals("abc")

B.Stringstr=null;str.length()

C."abc".equals(null)

D.null.toString()答案:C解析:调用null对象的任何方法都会报空指针;常量字符串调用equals方法,参数为null时,直接返回false,不会报错。日常开发推荐将常量写在前面,规避空指针。6、Java中异常分类正确的是()A.编译异常、运行异常、自定义异常

B.受检异常、运行时异常、错误

C.可捕获异常、不可捕获异常

D.系统异常、业务异常答案:B解析:Java异常体系顶层为Throwable,分为Error(系统级错误,如OOM,无需处理)、Exception(程序异常);Exception又分为受检异常(编译期必须处理)和RuntimeException运行时异常。7、try-catch-finally中,finally代码块执行时机正确的是()A.出现异常才执行

B.return语句执行后、方法结束前执行

C.代码正常执行完后不执行

D.程序退出时才执行答案:B解析:无论try代码块正常执行还是抛出异常,finally都会执行;即使try中有return,也会先执行finally再返回结果。唯一不执行finally的场景:手动执行System.exit(0)退出JVM。8、以下关于接口和抽象类区别错误的是()A.抽象类可以有构造方法,接口没有

B.抽象类可以有普通成员变量,接口只能有常量

C.一个类只能继承一个抽象类,可实现多个接口

D.抽象类和接口都可以被实例化答案:D解析:抽象类和接口都不能直接new实例化,都需要子类继承/实现后,通过子类实例调用方法。9、Java中访问权限修饰符权限最大的是()A.private

B.default

C.protected

D.public答案:D解析:权限范围:public(全局)>protected(同包+子类)>default(同包)>private(本类)。10、下列关于字符串说法正确的是()A.String、StringBuilder、StringBuffer都是不可变字符串

B.StringBuilder线程安全,效率高

C.StringBuffer线程安全,效率低于StringBuilder

D.字符串拼接优先使用+号答案:C解析:String不可变,后两者可变;StringBuffer方法加了synchronized,线程安全但效率低;StringBuilder无锁,效率高、线程不安全;频繁字符串拼接禁止使用+,会产生大量无用常量对象,推荐用StringBuilder。二、填空题(5题)1、Java中基本数据类型有______种,其中整型包含byte、short、int、______。答案:8、long2、重载和重写的区别:重载是同一个类中方法名相同、参数列表不同;重写是子类对父类方法的覆盖,______、______、返回值(协变)必须一致。答案:方法名、参数列表3、Java集合中,List是有序可重复,Set是______,Map是______。答案:无序不可重复、键唯一、值可重复4、多线程中,volatile关键字可以保证______,不能保证______。答案:可见性、原子性5、JVM内存区域中,线程共享的区域是堆和______,线程私有区域是虚拟机栈、本地方法栈、______。答案:方法区、程序计数器三、简答题(6题,企业高频)1、HashMap的底层原理是什么?JDK1.7和JDK1.8有什么区别?参考答案:HashMap底层是数组+链表+红黑树的哈希表结构,通过哈希算法计算key的索引位置,实现快速存取。核心区别:1.JDK1.7:纯数组+链表,采用头插法插入元素,多线程环境下容易出现循环链表、数据丢失问题;2.JDK1.8:数组+链表+红黑树,链表长度超过8且数组容量大于64时,链表转为红黑树,查询效率大幅提升;采用尾插法,避免循环链表;3.哈希算法优化:1.8简化了hash扰动算法,减少哈希冲突。2、ArrayList和LinkedList的区别?日常开发如何选择?参考答案:1.底层结构:ArrayList基于动态数组;LinkedList基于双向链表;2.查询效率:ArrayList支持随机访问,根据下标查询速度极快;LinkedList只能遍历查询,效率低;3.增删效率:ArrayList增删需要移动数组元素,效率低;LinkedList仅修改节点指针,效率高;4.内存占用:ArrayList内存连续,存在冗余容量;LinkedList每个节点保存前后指针,内存占用更高。选择原则:查询多、增删少用ArrayList;频繁增删、极少查询用LinkedList,绝大多数业务场景优先ArrayList。3、synchronized和Lock的区别?参考答案:1.语法层面:synchronized是Java内置关键字,无需手动释放锁;Lock是接口,需要手动加锁、解锁;2.锁机制:synchronized是隐式锁,自动获取和释放;Lock是显式锁,灵活性更高;3.功能拓展:Lock可实现可中断锁、超时锁、读写锁,支持公平锁/非公平锁;synchronized只能是非公平锁,功能单一;4.性能:低竞争场景两者性能相近,高并发场景下Lock性能更优。4、线程的生命周期有哪些状态?参考答案:Java线程共5种核心状态:1.新建(NEW):创建线程对象,未调用start();2.就绪(RUNNABLE):调用start(),等待CPU调度执行;3.运行(RUNNING):CPU分配时间片,线程正在执行;5.终止(TERMINATED):线程执行完毕或异常终止,生命周期结束。5、SpringIOC的原理和作用是什么?参考答案:IOC即控制反转,核心是将对象的创建、管理、依赖注入权限交给Spring容器,而非开发者手动new对象。原理:Spring启动时扫描配置的包路径,通过反射创建Bean对象,存入IOC容器(Map结构),并自动完成依赖注入。作用:解耦代码、统一管理对象、方便事务和切面管理、便于单元测试,大幅降低项目耦合度。6、MySQL索引失效的常见场景有哪些?参考答案:1.索引列使用函数、运算、类型转换;2.like查询以%开头(如%abc);3.or前后字段未全部建立索引;4.联合索引不满足最左前缀原则;5.字段隐式类型转换(字符串和数字对比);6.MySQL判断全表扫描比索引查询更快时,会主动放弃索引。四、编程题(2道,基础必考)1、编写代码,去除字符串中重复字符,保持原有顺序参考答案:java

publicclassStringRepeatTest{

publicstaticStringremoveRepeat(Stringstr){

if(str==null||str.length()==0){

returnstr;

}

//有序不重复集合,保证顺序且去重

LinkedHashSet<Character>set=newLinkedHashSet<>();

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

set.add(str.charAt(i));

}

//拼接结果

StringBuildersb=newStringBuilder();

for(Characterc:set){

sb.append(c);

}

returnsb.toString();

}

publicstaticvoidmain(String[]args){

Stringres=removeRepeat("aabbcc112233");

System.out.println(res);//输出结果:abc123

}

}2、手写单例模式(双重检查锁,线程安全)参考答案:java

publicclassSingleton{

//volatile禁止指令重排,保证多线程安全

privatestaticvolatileSingletoninstance;

//私有构造方法,禁止外部实例化

privateSingleton(){}

//双重检查锁实现单例

publicstaticSingletongetInstance(){

//第一次校验:避免每次进入同步方法,提高效率

if(instance==null){

synchronized(Singleton.class){

温馨提示

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

评论

0/150

提交评论