Java面试笔试真题及详细答案(企业高频版)_第1页
Java面试笔试真题及详细答案(企业高频版)_第2页
Java面试笔试真题及详细答案(企业高频版)_第3页
Java面试笔试真题及详细答案(企业高频版)_第4页
Java面试笔试真题及详细答案(企业高频版)_第5页
已阅读5页,还剩4页未读, 继续免费阅读

下载本文档

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

文档简介

Java面试笔试真题及详细答案(企业高频版)本套试题为互联网、传统软件公司通用Java笔试高频题型,包含Java基础、集合框架、多线程、JVM、Spring核心、数据库基础六大模块,题型包含选择题、填空题、简答题、编程题,答案通俗易懂、贴合实际开发,无书面化空洞表述。一、Java基础选择题(共10题)1、以下关于String、StringBuilder、StringBuffer的说法正确的是()A、StringBuilder是线程安全的

B、StringBuffer效率高于StringBuilder

C、String是不可变字符序列,后两者是可变的

D、三者都是可变字符序列答案:C详细解析:String底层是final修饰的字符数组,内容一旦创建不可修改;StringBuilder和StringBuffer底层数组可动态扩容,内容可变。StringBuffer所有方法加了synchronized锁,线程安全但效率低;StringBuilder无锁,线程不安全、效率最高。2、float和double的区别,说法错误的是()A、double精度更高

B、float占4字节,double占8字节

C、两者都可以精准表示所有小数

D、double取值范围更大答案:C详细解析:浮点型数据存储规则导致无法精准表示所有小数,比如0.1无法精准存储,会存在精度丢失,这也是开发中金额计算禁止使用float/double、必须用BigDecimal的原因。3、以下不属于基本数据类型的是()A、int

B、Boolean

C、char

D、short答案:B详细解析:Java八大基本数据类型:byte、short、int、long、float、double、char、boolean(小写)。Boolean是包装类,属于引用类型。4、==和equals的区别,说法正确的是()A、两者作用完全一致

B、基本类型用equals比较

C、==比较引用地址,equals默认比较地址,可重写比较内容

D、String类型只能用==比较答案:C详细解析:基本类型==比较数值;引用类型==比较对象内存地址。Object类的equals方法默认就是==比较地址,String、Integer等类重写了equals方法,改为比较对象内容,开发中字符串比较统一用equals。5、final、finally、finalize的说法正确的是()A、finally关键字用于修饰常量

B、final修饰的类可以被继承

C、finally是异常处理的代码块,一定会执行

D、finalize是主动调用垃圾回收的方法答案:C详细解析:final用于修饰变量(常量)、方法(不可重写)、类(不可继承);finally是try-catch异常体系的代码块,除JVM退出等极端情况外,必定执行;finalize是Object的废弃方法,是垃圾回收器回收对象前触发的方法,不是主动GC方法。6、Java中接口和抽象类的区别,错误的是()A、抽象类可以有构造方法,接口无构造方法

B、抽象类只能单继承,接口可多实现

C、抽象类和接口都可以有普通成员变量

D、接口默认方法是publicabstract答案:C详细解析:抽象类可以有普通成员变量、常量、普通方法、抽象方法;接口中只能有常量(默认publicstaticfinal)、抽象方法、默认方法、静态方法,不能定义普通成员变量。7、以下集合中,线程安全的是()A、ArrayList

B、HashMap

C、Vector

D、LinkedList答案:C详细解析:ArrayList、LinkedList、HashMap都是线程不安全集合;Vector、Hashtable是老旧的线程安全集合,底层通过同步锁实现,现在开发中多使用ConcurrentHashMap替代Hashtable。8、try-catch-finally结构中,以下代码执行结果是什么()publicstaticinttest(){

try{return1;}

catch(Exceptione){return2;}

finally{return3;}

}A、1B、2C、3D、报错答案:C详细解析:finally代码块优先级最高,当try和finally都有return时,最终会返回finally中的结果。开发中禁止在finally中写return,会覆盖正常返回值,隐藏异常。9、重载和重写的区别,说法错误的是()A、重载是同一类中方法名相同、参数列表不同

B、重写是子类覆盖父类的非私有、非final方法

C、重载方法返回值必须一致

D、重写方法权限不能比父类更严格答案:C详细解析:重载只要求方法名相同、参数个数/类型/顺序不同,对返回值、修饰符无要求;重写要求方法名、参数列表、返回值(协变返回)完全一致,访问权限大于等于父类。10、泛型的作用是()A、提高代码执行速度

B、强制类型检查,避免类型转换异常

C、简化代码编译流程

D、优化内存占用答案:B详细解析:泛型是编译期语法校验,核心作用是约束集合存储类型,编译阶段校验类型合法性,避免运行时类型转换异常,无性能优化效果。二、填空题(共5题,含详细答案)1、Java中创建对象的四种方式:new关键字、反射、克隆、反序列化。2、ArrayList底层是动态扩容数组,LinkedList底层是双向链表。3、HashMap在JDK1.8后的底层结构:数组+链表+红黑树,链表长度大于8且数组容量大于64时转为红黑树。4、Java线程的五大状态:新建、就绪、运行、阻塞、终止。5、异常分为两大类:编译期异常(受检异常)和运行期异常(非受检异常)。三、简答题(共8题,企业高频考点)1、简述HashMap的工作原理(JDK1.8)参考答案:HashMap基于哈希表思想实现,底层是数组+链表+红黑树。存储数据时,先通过key的hash值计算数组下标,找到对应位置:1、如果下标位置无数据,直接插入键值对;2、如果下标位置有数据,发生哈希冲突,遍历链表比对key:key相同则覆盖value,key不同则追加到链表尾部;3、当链表长度达到8且数组容量≥64时,链表转为红黑树,提升查询效率;4、当数组元素数量超过负载因子(默认0.75)*容量时,触发数组扩容,扩容为原容量2倍,并重新哈希散列数据。负载因子0.75是时间和空间成本的平衡值,过低浪费空间,过高哈希冲突概率变大。2、ArrayList和LinkedList的区别及使用场景参考答案:1、底层结构:ArrayList基于动态数组,LinkedList基于双向链表;2、查询效率:ArrayList支持随机索引查询,查询速度快;LinkedList只能从头尾遍历,随机查询慢;3、增删效率:ArrayList中间增删需要移动数组元素,效率低;LinkedList只需修改节点指针,增删效率高;4、内存占用:ArrayList会预留扩容空间,存在内存冗余;LinkedList每个节点存储前后指针,内存开销更大;使用场景:查询多、增删少用ArrayList;频繁头尾增删、随机查询少用LinkedList。3、synchronized和Lock锁的区别参考答案:1、底层层面:synchronized是JVM原生锁,底层依赖操作系统实现;Lock是Java代码层面的锁(接口),基于AQS实现;2、锁特性:synchronized是隐式锁,自动加锁释放锁;Lock是显式锁,需要手动lock()加锁、unlock()释放锁;3、灵活性:Lock可实现公平锁、非公平锁、可中断锁、超时锁;synchronized只能是非公平锁,不可中断;4、条件等待:Lock可以绑定多个Condition条件,精准唤醒指定线程;synchronized只能随机唤醒或全部唤醒;5、性能:JDK1.6之后synchronized引入偏向锁、轻量级锁、重量级锁优化,性能和Lock基本持平。4、简述Java线程池的核心参数及作用参考答案:线程池核心参数共7个:1、核心线程数:线程池常驻线程,即使空闲也不会被回收;2、最大线程数:线程池允许创建的最大线程数量;3、空闲超时时间:非核心线程的空闲存活时间,超时无任务则被回收;4、时间单位:超时时间的单位;5、任务队列:存储等待执行的任务,核心线程满了之后任务进入队列;6、线程工厂:用于创建线程,可自定义线程名称、优先级;7、拒绝策略:当核心线程、队列、最大线程全部饱和,触发的任务拒绝规则。核心执行流程:任务到来→核心线程执行→核心线程满→进入队列→队列满→创建非核心线程→达到最大线程数→触发拒绝策略。5、JVM的内存区域划分及各区域作用参考答案:JVM运行时数据区分为5个区域:1、程序计数器:线程私有,记录当前线程执行的字节码行号,是唯一无内存溢出的区域;2、虚拟机栈:线程私有,存储方法栈帧、局部变量、操作数栈,方法执行完毕栈帧弹出;3、本地方法栈:线程私有,作用和虚拟机栈一致,专门为Native本地方法服务;4、堆内存:线程共享,所有对象、数组均在堆中分配内存,是垃圾回收的主要区域;5、方法区:线程共享,存储类信息、常量、静态变量、即时编译代码等元数据。6、SpringIOC的原理和作用参考答案:IOC即控制反转,是Spring的核心思想。传统开发中程序员主动new对象创建依赖,IOC将对象的创建、管理、依赖注入全权交给Spring容器,控制权从程序代码反转到容器。核心原理:通过XML、注解等方式扫描Bean,解析类的依赖关系,容器统一实例化对象、管理对象生命周期,通过依赖注入(DI)完成组件装配。核心作用:解耦代码,降低组件之间的依赖耦合,统一管理对象,方便后续扩展、测试和维护。7、SpringAOP的应用场景参考答案:AOP即面向切面编程,核心是在不修改原有业务代码的前提下,对方法进行增强,实现业务与通用功能解耦。常见场景:1、统一日志记录:接口入参、出参、异常日志统一打印;2、权限校验:接口访问前校验用户权限;3、事务控制:方法前后开启、提交、回滚事务;4、性能监控:统计方法执行耗时;5、缓存处理、防重复提交、限流等通用功能。8、MySQL索引失效的常见场景参考答案:1、索引列使用like%xxx、%xxx%模糊查询,前缀模糊匹配失效;2、索引列参与运算、函数调用、类型转换;3、使用or连接查询,且左右字段未全部建立索引;4、违背最左匹配原则(联合索引);5、MySQL判断全表扫描比索引查询更快,自动放弃索引;6、字段使用isnull/isnotnull大概率导致索引失效。四、编程题(2道基础高频题,带完整代码+解析)1、编程实现字符串反转,禁止使用自带反转方法参考答案(完整可运行代码):java

publicclassStringReverse{

publicstaticStringreverse(Stringstr){

//空值和空字符串校验

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

returnstr;

}

char[]chars=str.toCharArray();

intleft=0;

intright=chars.length-1;

//双指针交换首尾字符

while(left<right){

chartemp=chars[left];

chars[left]=chars[right];

chars[right]=temp;

left++;

right--;

}

returnnewString(chars);

}

publicstaticvoidmain(String[]args){

System.out.println(reverse("Java面试笔试"));

}

}解析:采用双指针法,时间复杂度O(n),效率高于逐位拼接,是面试最优解法,同时做了空值防御,贴合开发规范。2、遍历HashMap的四种方式(开发常用)参考答案(完整可运行代码):java

importjava.util.HashMap;

importjava.util.Map;

importjava.util.Set;

publicclassHashMapIterate{

publicstaticvoidmain(String[]args){

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

map.put("张三",22);

map.put("李四",25);

map.put("王五",28);

//方式1:遍历key集合(常用)

Set<String>keySet=map.keySet();

for(Stringkey:keySet){

System.out.println("key:"+key+",value:"+map.get(key));

}

//方式2:遍历entry键值对(效率最高,推荐)

for(Map.Entry<String,Integer>entry:map.entrySet()){

System.out.println(entry.getKey()+":"+entry.getValue());

}

//方式3

温馨提示

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

评论

0/150

提交评论