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

下载本文档

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

文档简介

Java实习生面试高频题及详细答案(真实职场版)一、Java基础语法高频题1、String、StringBuilder、StringBuffer的区别?日常开发怎么选?详细答案:首先核心区别在于可变性和线程安全:String是不可变字符串,一旦创建就不能修改,每次拼接、修改字符串都会生成一个新的String对象,频繁操作会产生大量无用对象,占用内存。StringBuilder和StringBuffer是可变字符串,底层是字符数组,修改时不会新建对象,效率更高。其中StringBuffer加了同步锁,是线程安全的,但执行速度慢;StringBuilder没有锁,线程不安全,速度最快。开发选择原则:1.字符串极少修改、仅做赋值、常量定义,直接用String;2.单线程下频繁拼接、修改字符串(比如循环拼接),优先用StringBuilder;3.多线程环境下操作字符串,必须用StringBuffer,避免并发异常。2、==和equals()的区别是什么?详细答案:==是比较运算符,有两种使用场景:基本数据类型:比较的是变量的实际数值;引用数据类型:比较的是对象的内存地址,也就是判断是不是同一个对象。equals()是Object类的方法,默认情况下和==效果一样,也是比较内存地址。但像String、Integer这些常用类,都重写了equals方法,重写后只比较对象的内容值,不比较地址。日常开发中,比较两个字符串内容是否一致,必须用equals,不能用==。3、final、finally、finalize的区别?详细答案:三个单词只是长得像,功能完全无关:1.final是修饰符:可以修饰类、方法、变量。final修饰的类不能被继承,修饰的方法不能被重写,修饰的变量是常量,只能赋值一次。2.finally是异常处理关键字:搭配try-catch使用,finally中的代码无论是否发生异常、是否执行return,最终都会执行,主要用于释放资源,比如关闭流、关闭数据库连接。3.finalize()是Object类的废弃方法:JVM垃圾回收前会调用这个方法,用来做对象的收尾清理。现在开发基本不用,效率低且时机不可控,已经被淘汰。4、基本数据类型有哪些?包装类和基本类型的区别?详细答案:Java一共8种基本数据类型:整型:byte、short、int、long浮点型:float、double字符型:char布尔型:boolean基本类型和包装类区别:1.基本类型是底层数据类型,不创建对象,直接存在栈内存,效率高,默认有初始值;2.包装类是对象类型,对应每个基本类型(如Integer、Double),存在堆内存,默认值为null;3.集合(List、Map)只能存包装类,不能存基本类型;日常开发中会自动装箱、拆箱,基本可以混用,但要注意null空指针问题。5、接口和抽象类的区别?开发中怎么选用?详细答案:核心区别:1.继承限制:抽象类只能单继承,接口可以多实现;2.构造方法:抽象类有构造方法,接口没有构造方法;3.变量修饰:抽象类变量可私有、常量、变量;接口默认都是publicstaticfinal常量;4.方法特性:抽象类可以有普通方法、静态方法、抽象方法;JDK8后接口可以有默认方法、静态方法,之前只能有抽象方法;5.设计思想:抽象类是模板复用,抽取子类公共代码;接口是行为规范,定义统一标准。选用原则:需要复用代码、有父子层级关系,用抽象类;需要定义统一行为、解耦、多规范实现,用接口。二、集合框架高频题1、ArrayList和LinkedList的区别?工作中怎么选?详细答案:1.底层结构:ArrayList底层是动态数组,LinkedList底层是双向链表;2.查询效率:ArrayList支持下标随机访问,查询速度极快;LinkedList必须从头遍历,查询慢;3.增删效率:ArrayList增删会涉及数组扩容、元素移位,速度慢;LinkedList只需要修改节点指针,增删速度快;4.内存占用:ArrayList会预留冗余容量,浪费内存;LinkedList每个节点存数据和指针,单个元素占用内存更大。选用原则:业务中查询多、增删少(90%的业务场景)用ArrayList;频繁增删、极少查询用LinkedList。2、HashMap的底层原理?JDK1.7和JDK1.8的区别?详细答案:HashMap底层是数组+链表+红黑树,用于存储键值对,允许null键和null值,线程不安全。存储流程:通过key的哈希值计算数组下标,下标位置为空则直接存入;有值则发生哈希冲突,挂链表;链表长度超过8、数组容量大于64,链表转为红黑树,提升查询效率。JDK1.7与1.8核心区别:1.底层结构:1.7只有数组+链表;1.8新增红黑树结构;2.冲突插入方式:1.7头插法,多线程容易出现环形链表死循环;1.8尾插法,规避了死循环问题;3.扩容优化:1.8优化了扩容重新计算哈希的逻辑,效率更高。3、HashMap为什么线程不安全?并发场景用什么替代?详细答案:HashMap所有操作都没有加锁,多线程并发put数据时,会出现数据覆盖、丢失,JDK1.7还会出现环形链表导致死循环、CPU飙高。并发替代方案:1.ConcurrentHashMap:日常开发首选,分段锁机制,并发效率高;2.Hashtable:全局锁,效率极低,基本废弃,不推荐使用。三、异常与IO基础1、checked异常和unchecked异常的区别?详细答案:1.编译时异常(checked):继承Exception,除RuntimeException外的所有异常。编译阶段必须捕获(try-catch)或者抛出(throws),否则代码报错无法编译,比如IOException、SQLException。2.运行时异常(unchecked):继承RuntimeException,编译不报错,运行程序才会触发,比如空指针、数组越界、类型转换异常。日常开发大部分异常都是运行时异常。2、IO流分为哪几类?字节流和字符流的区别?详细答案:IO流按数据类型分为字节流、字符流;按方向分为输入流、输出流。核心区别:字节流(InputStream/OutputStream):读写字节,万能流,可以读写所有文件(图片、视频、文档、文本),不会出现乱码;字符流(Reader/Writer):读写字符,专门用于文本文件,读写非文本文件会损坏数据,优势是处理中文不会乱码,操作更简便。开发规范:文本文件用字符流,媒体、压缩包等文件用字节流。四、面向对象核心1、面向对象的三大特性是什么?分别怎么理解?详细答案:三大特性:封装、继承、多态。1.封装:将类的属性私有化,通过public的get/set方法访问属性,隐藏内部细节,保证数据安全,降低代码耦合度;2.继承:子类继承父类,复用父类的属性和方法,避免重复代码,是代码复用的核心手段;3.多态:父类引用指向子类对象,同一个方法,不同子类实现不同效果。核心作用是解耦,方便代码扩展,新增子类无需修改原有代码。2、重写和重载的区别?详细答案:1.重载(Overload):同一个类中,方法名相同,参数个数、类型、顺序不同,和返回值无关。编译期绑定,属于静态多态,主要用于方法适配多种参数场景;2.重写(Override):父子类之间,子类重写父类的非私有、非静态方法,方法名、参数列表、返回值必须一致,权限不能比父类更小。运行期绑定,属于动态多态,用于改写父类逻辑。五、数据库基础(实习生必考)1、MySQL常用索引有哪些?索引的优缺点?详细答案:常用索引:主键索引、唯一索引、普通索引、联合索引。优点:极大提升查询速度,减少数据库IO,优化检索效率;缺点:占用磁盘空间,新增、修改、删除数据时,需要同步更新索引结构,会降低增删改效率。所以索引不是越多越好,只给高频查询字段建索引。2、什么是事务?事务的四大特性(ACID)?详细答案:事务是一组数据库操作,要么全部执行成功,要么全部失败回滚,保证数据一致性。四大特性:1.原子性:事务不可分割,全部成功或全部失败;2.一致性:事务执行前后,数据整体状态合法、一致;3.隔离性:多个事务并发执行,互相不干扰;4.持久性:事务提交成功后,数据永久保存,不会丢失。3、leftjoin、rightjoin、innerjoin的区别?详细答案:1.innerjoin(内连接):只查询两张表中匹配关联条件的数据,不匹配的数据直接过滤;2.leftjoin(左连接):以左表为基准,左表所有数据全部展示,右表匹配不到的字段显示null;3.rightjoin(右连接):以右表为基准,右表所有数据全部展示,左表匹配不到的字段显示null。日常开发中,左连接使用频率最高。六、Spring/SpringBoot基础1、Spring的核心两大特性是什么?详细答案:核心是IOC(控制反转)和AOP(面向切面编程)。IOC:把对象的创建、管理、依赖赋值的权限,从代码中交给Spring容器管理,不用自己new对象,实现代码解耦;AOP:在不修改原有业务代码的前提下,对方法进行增强,比如统一日志记录、事务控制、权限校验、接口耗时统计等。2、SpringBoot自动配置原理?详细答案:SpringBoot核心是自动注解@SpringBootApplication,启动时会扫描项目依赖的jar包,根据依赖自动加载对应的配置类,自动创建Bean、装配环境。简单说:引入什么依赖,SpringBoot就自动帮我们配置对应功能,无需像SSM那样手动写大量xml配置文件,简化开发、快速搭建项目。3、@Component、@Controller、@Service、@Repository的区别?详细答案:四个注解功能一致,都是将类交给Spring容器管理,只是用途不同,用于分层规范代码:1.@Controller:控制层,接收前端请求、返回响应;2.@Service:业务层,处理核心业务逻辑;3.@Repository:持久层,操作数据库;4.@Component:通用注解,不属于以上三层的工具类、普通类,用这个注解。七、实战项目常见面试题(实习生必问)1、你项目中遇到过什么Bug?怎么解决的?参考回答(真实落地版):项目开发中遇到过高频的空指针异常,大多是因为直接调用对象的方法,没有做非空判断。后期我养成习惯,在获取参数、查询数据库结果后,先做非空校验,再执行业务逻辑,也会用工具类简化判空,彻底解决了这类问题。另外遇到过接口查询速度慢的问题,排查后是因为查询字段没有索引,我对高频查询的条件字段建立索引,接口响应速度明显提升。2、Git常用命令有哪些?日常怎么协作?详细答案:常用基础命令:gitadd:添加文件到暂存区;gitcommit:提交代码到本地仓库;gitpull:拉取远程最新代码;gitpush:推送本地代码到远程;gitbranch:查看、创建分支;gitcheckout:切换分支。日常协作:从开发分

温馨提示

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

评论

0/150

提交评论