Java 校园招聘高频面试题及详细答案(应届生专用)_第1页
Java 校园招聘高频面试题及详细答案(应届生专用)_第2页
Java 校园招聘高频面试题及详细答案(应届生专用)_第3页
Java 校园招聘高频面试题及详细答案(应届生专用)_第4页
Java 校园招聘高频面试题及详细答案(应届生专用)_第5页
已阅读5页,还剩5页未读, 继续免费阅读

下载本文档

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

文档简介

Java校园招聘高频面试题及详细答案(应届生专用)本次面试题贴合校招笔试、一面、二面高频考点,主打基础扎实、实操性强,摒弃空洞理论,答案贴合日常开发和面试官考察侧重点,适合应届生复习、刷题、面试复盘。一、Java基础核心(校招必问)1.简述JDK、JRE、JVM的区别与联系答案:三者是层层包含的关系,范围从大到小依次为JDK>JRE>JVM。JVM是Java虚拟机,是Java程序运行的核心载体,只负责解析、执行字节码文件(.class),不包含任何开发工具,是整个Java跨平台的核心,不同系统有对应适配的JVM。JRE是Java运行环境,包含JVM+Java核心类库。普通用户只需要安装JRE就可以运行Java程序,不需要开发功能。JDK是Java开发工具包,包含JRE+编译、调试、打包等开发工具(javac、java、jar等)。开发人员必须安装JDK,才能编写、编译、运行Java项目。2.==和equals()的区别答案:==是运算符,可以用于基本数据类型和引用数据类型:基本类型比较数值是否相等;引用类型比较对象的内存地址是否相同,也就是判断是否是同一个对象。equals()是Object类的方法,默认情况下和==效果一致,比较对象内存地址。但像String、Integer等包装类、自定义实体类都会重写该方法,重写后只比较对象的内容值,不比较地址。日常开发中,字符串、对象内容对比统一用equals,基本类型对比用==。同时使用equals时建议常量在前,避免空指针异常。3.String、StringBuilder、StringBuffer的区别答案:1.可变性:String是不可变字符串,每次拼接、修改都会生成新的字符串对象,浪费内存;StringBuilder和StringBuffer是可变字符串,修改操作直接在原对象上执行,不会新建对象。2.线程安全:StringBuffer的方法加了synchronized锁,线程安全,多线程环境可用;StringBuilder无锁,线程不安全,效率更高。3.使用场景:单线程字符串频繁拼接、修改优先用StringBuilder;多线程并发操作字符串用StringBuffer;字符串几乎不修改、仅做常量定义时用String。4.final、finally、finalize的区别答案:1.final是修饰符:修饰变量表示常量,只能赋值一次;修饰方法表示方法不能重写;修饰类表示类不能被继承。2.finally是异常处理关键字:搭配try-catch使用,代码块中的代码无论是否出现异常都会执行,常用于关闭流、释放资源,唯一不执行的场景是执行了System.exit()。3.finalize()是Object类的废弃方法:原本用于垃圾回收前的资源清理,该方法执行时机不确定、容易导致内存泄漏,JDK9之后已被废弃,开发中完全不使用。二、面向对象OOP高频题1.面向对象的四大特性及理解答案:封装:将类的属性私有化,通过public方法对外提供访问、修改入口,隐藏内部实现细节,提高代码安全性,避免外部随意篡改数据。继承:子类继承父类的属性和方法,实现代码复用,减少重复代码,同时子类可以拓展自有功能,是多态的前提。Java只支持单继承,支持多接口实现。多态:同一行为在不同子类中有不同实现,核心是父类引用指向子类对象,分为编译多态(方法重载)和运行多态(方法重写),大幅提升代码扩展性。抽象:抽取事物的核心共性,忽略次要细节,通过抽象类、接口实现,约束子类行为,统一代码规范。2.重载和重写的区别答案:重载(Overload):发生在同一个类中,方法名相同,参数列表(个数、类型、顺序)不同,返回值、访问修饰符无要求。属于编译期多态,常用于方法参数适配。重写(Override):发生在父子类中,子类重写父类的非私有、非静态、非final方法。方法名、参数列表、返回值必须一致;访问权限不能比父类更严格;抛出的异常范围不能大于父类。属于运行期多态。3.接口和抽象类的区别答案:1.继承方式:抽象类是单继承;接口是多实现。2.成员修饰:抽象类可以有普通成员变量、构造方法、静态方法;接口只能有常量(默认publicstaticfinal),无构造方法,JDK8后支持默认方法、静态方法,JDK9支持私有方法。3.设计理念:抽象类是模板设计,描述一类事物的共性;接口是行为规范,描述对象能做什么,不关心归属。4.使用场景:需要统一子类模板、包含属性和通用方法用抽象类;需要定义行为标准、解耦拓展用接口。三、Java集合框架(校招重中之重)1.ArrayList和LinkedList的区别答案:1.底层结构:ArrayList基于动态数组;LinkedList基于双向链表。2.访问效率:ArrayList支持随机访问,通过下标查询速度极快;LinkedList只能从头节点遍历查询,随机访问效率低。3.增删效率:ArrayList增删元素会涉及数组扩容、元素移位,效率低;LinkedList只需要修改节点指针,首尾增删效率极高。4.内存占用:ArrayList会预留冗余容量,存在内存浪费;LinkedList每个节点包含前后指针,单个元素内存占用更大。日常开发:查询多、增删少优先用ArrayList;频繁首尾增删用LinkedList。2.HashMap的底层原理(JDK1.8)答案:JDK1.8后HashMap底层是数组+链表+红黑树,核心是哈希表寻址。1.存储流程:通过key的hashCode计算哈希值,经过扰动算法优化后,算出数组下标;如果下标位置无元素,直接存入数组。2.哈希冲突:如果下标已有元素,发生哈希冲突,挂载到对应链表上。3.树化规则:当链表长度大于8,且数组容量大于64时,链表转为红黑树,提升查询效率;若数组容量小于64,优先扩容而非树化。4.降级规则:红黑树节点数量小于6时,重新退化为链表。5.扩容机制:默认初始容量16,负载因子0.75,当元素数量超过容量*0.75时触发双倍扩容,重新哈希迁移元素。3.HashMap和HashTable的区别答案:1.线程安全:HashTable所有方法加synchronized锁,线程安全但效率极低;HashMap线程不安全,效率高。2.null支持:HashTable不允许key、value为null;HashMap允许一个key为null,多个value为null。3.初始容量:HashTable默认初始容量11,扩容为2倍+1;HashMap默认16,扩容2倍。4.迭代方式:HashTable是Enumeration迭代;HashMap是Iterator迭代。注:多线程场景不推荐HashTable,优先用ConcurrentHashMap。四、多线程与并发1.Java实现多线程的几种方式答案:1.继承Thread类:重写run()方法,调用start()启动线程。缺点是单继承限制,无法再继承其他类。2.实现Runnable接口:重写run()方法,传入Thread对象启动。无继承限制,可共享线程资源,常用。3.实现Callable接口:重写call()方法,有返回值、可抛出异常,搭配FutureTask使用,适合需要获取线程执行结果的场景。4.线程池创建:通过Executors或ThreadPoolExecutor创建,统一管理线程,避免频繁创建销毁线程的资源消耗,开发首选。2.synchronized和Lock的区别答案:1.底层层面:synchronized是JVM原生锁,底层依赖对象头的监视器锁;Lock是代码层面的锁(接口),基于AQS实现。2.锁特性:synchronized是隐式锁,自动加锁、释放锁;Lock是显式锁,需要手动lock()加锁、unlock()释放锁。3.灵活性:Lock可实现公平锁、非公平锁、可中断锁、超时锁;synchronized只能是非公平锁,不可中断。4.条件等待:Lock可以绑定多个Condition条件队列,精准唤醒指定线程;synchronized只能随机唤醒或全部唤醒。简单场景优先用synchronized,高并发、精细化控锁场景用ReentrantLock。3.线程池的核心参数(ThreadPoolExecutor)答案:核心7大参数:1.核心线程数:常驻线程,即使空闲也不会被回收2.最大线程数:线程池能容纳的最大线程数量3.空闲超时时间:非核心线程空闲超过该时间会被回收4.时间单位:超时时间的单位5.阻塞队列:存放等待执行的任务6.线程工厂:创建线程的工厂,可自定义线程名、优先级7.拒绝策略:任务队列和线程数都满时,处理新任务的策略开发中禁止使用Executors快捷创建线程池,必须手动自定义ThreadPoolExecutor,避免OOM风险。五、JVM与内存机制1.JVM内存区域划分答案:JVM运行时数据区分为5个区域,线程私有和线程共享两类:线程私有(随线程创建销毁):1.程序计数器:记录当前线程执行的字节码行号,无内存溢出,是唯一一个JVM规范无OOM的区域2.虚拟机栈:存储局部变量、方法栈帧,方法调用即入栈,执行结束即出栈3.本地方法栈:为Native本地方法服务线程共享(全局唯一):1.堆内存:所有对象、数组的存储区域,垃圾回收的核心区域,分为新生代、老年代2.方法区:存储类信息、常量、静态变量、即时编译代码等,JDK1.8后替换为元空间2.垃圾回收GC的原理,哪些对象会被回收答案:GC核心是回收堆内存中无有效引用的对象,释放空闲内存,避免内存泄漏。判定垃圾对象的方式:主流是可达性分析算法,以GCRoots为根节点,遍历所有引用链,没有被引用到的对象即为垃圾对象。可作为GCRoots的对象:虚拟机栈中引用的对象、静态变量引用对象、常量引用对象、本地方法栈引用对象。不会被回收的对象:有有效引用、正在使用的对象。3.新生代和老年代的GC特点答案:1.新生代:对象大多朝生夕灭,存活时间短,使用复制算法,分为Eden、From、To区,频繁执行MinorGC,速度快。2.老年代:存储长期存活的对象、大对象,对象存活率高,使用标记整理、标记清除算法,GC频率低,执行速度慢,触发FullGC。频繁FullGC会严重影响系统性能,是项目调优的重点排查点。六、Spring核心面试题1.SpringIOC的原理答案:IOC即控制反转,核心是将对象的创建、管理、依赖注入权限交给Spring容器,而非开发者手动new对象,实现代码解耦。执行流程:项目启动时,Spring扫描所有带注解的类(@Component、@Service等),通过反射创建对象,存入IOC容器(单例池);程序需要使用对象时,容器自动注入依赖,无需手动创建。核心优势:降低代码耦合度、统一管理对象、方便事务、切面等功能拓展。2.SpringAOP的原理及使用场景答案:AOP即面向切面编程,核心是在不修改原有业务代码的前提下,对方法进行增强,基于动态代理实现。底层原理:目标类有接口时用JDK动态代理,无接口时用CGLIB字节码代理。常用场景:统一日志记录、权限校验、事务控制、接口限流、方法耗时统计、异常统一处理。核心术语:切点、通知(前置、后置、环绕、异常、最终通知)、切面、连接点。3.SpringBean的生命周期答案:1.实例化:Spring通过反射创建Bean实例2.属性填充:自动完成依赖注入(DI)3.初始化前置处理:执行BeanPostProcessor前置方法4.初始化:执行InitializingBean方法、自定义init方法5.初始化后置处理:执行BeanPostProcessor后置方法6.销毁:容器关闭时,执行DisposableBean销毁方法、自定义destroy方法日常开发中,大部分Bean只需经历实例化、赋值、使用、销毁四个核心步骤。七、MySQL数据库(Java校招核心)1.InnoDB和MyISAM的区别答案:1.事务支持:InnoDB支持事务、ACID特性;MyISAM不支持事务。2.锁机制:InnoDB支持行锁、表锁,并发性能高;MyISAM只有表锁,并发读写冲突严重。3.外键:InnoDB支持外键约束;MyISAM不支持。4.崩溃恢复:InnoDB有日志机制,崩溃可恢复数据;MyISAM崩溃易丢失数据、损坏表结构。5.索引缓存:InnoDB缓存数据和索引;MyISAM只缓存索引。开发中默认全部使用InnoDB,MyISAM基本被淘汰。2.索引失效的常见场景答案:1.索引列使用函数、运算、类型转换2.like模糊查询以%开头(%xxx),尾部匹配(xxx%)不失效3.使用or连接无索引字段4.复合索引不遵循最左前缀原则5.字段数据类型隐式转换(字符串不加引号、数字查字符串字段)6.MySQL优化器判断全表扫描比索引查询更快,自动放弃索引3.事务的四大特性和隔离级别答案:四大特性ACID:原子性:事务要么全部执行成功,要么全部回滚一致性:事务执行前后,数据完整性一致隔离性:多个事务之间相互隔离,互不干扰持久性:事务提交后,数据永久落地,崩溃不丢失四大隔离级别(从低到高):1.读未提交:可读取未提交数据,存在脏读、不可重复读、幻读2.读已提交:只能读已提交数据,解决脏读,存在不可重复读、幻读(MySQL默认级别)3.可重复读:保证同一事务多次读取数据一致,解决脏读、不可重复读,存在幻读4.串行化:最高级别,事务串行执行,解决所有并发问题,性能最差八、常见手写代码/实操题(校招笔试高频)1.手写单例模式(双重校验锁)答案:java

publicclassSingleton{

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

privatestaticvolatileSingletoninstance;

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

privateSingleton(){}

//双重校验锁获取单例

publicstaticSingletongetInstance(){

if(instance==null){

synchronized(Singleton.class){

if(instance==null){

instance=newSingleton();

}

}

}

returninstance;

}

}优势:线程安全、

温馨提示

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

评论

0/150

提交评论