版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaWeb工程师高频面试题及详细答案(实操完整版)本套面试题整合中小型企业、互联网公司JavaWeb岗位高频面试真题,覆盖Java基础核心、Web核心组件、主流框架、数据库、并发基础、项目实战、线上故障排查等核心模块,所有答案均结合实际项目开发经验编写,贴合面试答题逻辑与日常开发工作,无空洞理论,实用性极强。一、Java基础核心(必问基础)1、==和equals的区别是什么?详细答案:这是开发和面试最基础的知识点,两者核心区别在于比较的内容不同:==是运算符,既可以比较基本数据类型,也可以比较引用数据类型。基本数据类型比较的是数值本身是否相等;引用数据类型比较的是对象的内存地址,也就是判断两个对象是不是同一个对象。equals是Object类中的方法,默认情况下和==效果一致,也是比较对象内存地址。但像String、Integer这类常用类,都重写了equals方法,重写后不再比较地址,而是比较对象的内容、数值是否相同。实际开发规范:比较字符串、包装类对象内容是否一致,一律使用equals;基本类型数值判断用==。2、String、StringBuilder、StringBuffer的区别?日常开发如何选用?详细答案:三者核心差异集中在可变性、线程安全、性能三个维度:String是不可变字符串,一旦创建就不能修改。每次对String进行拼接、修改操作,都会生成新的字符串对象,频繁操作会产生大量垃圾对象,性能最差。StringBuilder是可变字符串,底层是字符数组,支持直接修改内容,不会生成新对象,性能高。但方法没有加锁,线程不安全,多线程环境下并发操作会出现数据错乱。StringBuffer同样是可变字符串,功能和StringBuilder几乎一致,所有方法都加了synchronized锁,线程安全,但加锁会带来性能损耗,性能低于StringBuilder。开发选用原则:日常单线程字符串拼接、修改优先用StringBuilder;多线程共享字符串操作场景用StringBuffer;字符串内容固定、无需修改的场景直接用String。3、重载和重写的区别?详细答案:重载和重写是面向对象多态的两种实现方式,区别非常明确:重载(Overload):发生在同一个类中,是方法名相同,参数列表不同(参数个数、类型、顺序不同),和返回值、访问修饰符无关。属于编译期多态,程序编译时就确定调用哪个方法。常用于同一个功能不同参数场景,比如工具类的多个构造方法。重写(Override):发生在父子类之间,子类重写父类的非私有、非静态、非final方法。要求方法名、参数列表、返回值完全一致,访问权限不能比父类更严格,抛出的异常范围不能比父类更大。属于运行期多态,程序运行时才确定调用子类方法。常用于子类个性化重写父类通用逻辑。4、final、finally、finalize的区别?详细答案:三者只是名字相似,功能完全无关:final是修饰符,可以修饰类、方法、变量。修饰类表示类不能被继承;修饰方法表示方法不能被重写;修饰变量表示变量是常量,只能赋值一次,引用类型变量地址不可变,但内部内容可以修改。finally是异常处理关键字,搭配try-catch使用。无论代码正常执行还是抛出异常,finally中的代码一定会执行(除了系统退出、断电极端情况),核心作用是释放资源,比如关闭流、数据库连接、Socket连接。finalize是Object类的废弃方法,JVM垃圾回收时会调用该方法清理对象资源。但该方法执行时机不确定、无法保证执行,日常开发完全不使用,已经被淘汰。5、ArrayList和LinkedList的区别?适用场景?详细答案:两者都是List接口的实现类,核心差异是底层数据结构不同:ArrayList底层是动态数组,内存连续。优点是查询、遍历速度极快,支持下标直接访问;缺点是增删元素时需要移动数组元素,效率低,且线程不安全。LinkedList底层是双向链表,内存不连续。优点是首尾增删元素效率极高,无需移动数据;缺点是没有下标,查询指定位置元素需要从头遍历,查询效率低,同样线程不安全。开发选用:绝大多数业务场景优先用ArrayList;只有频繁对集合首尾做增删操作、极少查询的场景,才用LinkedList。二、Web核心基础(Servlet+Cookie+Session)1、Servlet的生命周期是什么?详细答案:Servlet是JavaWeb的核心组件,生命周期由Tomcat服务器全权管理,分为三个核心阶段:1、初始化阶段:服务器启动或首次请求Servlet时,调用init()方法,只会执行一次,主要用于初始化配置、加载资源。2、服务处理阶段:每次客户端发起请求,服务器都会调用service()方法,根据请求方式分发doGet()、doPost()处理业务逻辑,可执行多次。3、销毁阶段:服务器关闭、项目卸载时,调用destroy()方法,只会执行一次,用于释放连接、关闭资源。补充:Servlet默认单例运行,整个项目中只有一个Servlet对象,所以绝对不能在Servlet中定义成员变量,会出现线程安全问题。2、Cookie和Session的区别?详细答案:两者都是Web会话跟踪技术,用于记录用户状态,核心区别如下:1、存储位置:Cookie数据存储在客户端浏览器;Session数据存储在服务器端内存。2、安全性:Cookie保存在本地,可被查看、篡改、删除,安全性低;Session数据在服务器,用户无法直接操作,安全性高。3、容量限制:Cookie有严格容量限制,单个Cookie不超过4KB,单个域名最多20个Cookie;Session容量仅受服务器内存限制。4、生命周期:Cookie可设置固定过期时间,持久化保存;Session默认浏览器关闭即失效,也可手动设置过期时间。5、依赖关系:Session的正常使用依赖Cookie,浏览器会通过Cookie存储SessionID,每次请求携带ID匹配服务器会话。3、GET和POST请求的区别?详细答案:作为Web最常用的两种请求方式,核心区别:1、参数传递:GET请求参数拼接在URL后面,明文展示;POST请求参数放在请求体中,隐藏传输。2、数据大小:GET受URL长度限制,只能传输少量数据;POST无明确大小限制,可传输大数据、文件。3、缓存特性:GET请求默认会被浏览器缓存,重复请求会读取缓存数据;POST请求不会缓存,每次都会请求服务器最新数据。4、安全性:GET参数暴露在地址栏,安全性差;POST参数在请求体,相对更安全。5、书签支持:GET请求可保存为书签,POST不支持。开发规范:查询数据用GET,新增、修改、提交数据用POST。三、SSM主流框架核心知识点1、SpringIOC的原理和作用?详细答案:IOC全称控制反转,是Spring的核心思想。传统开发中,对象的创建、依赖关系由开发者手动new控制;IOC就是把对象的创建、管理、依赖注入的权限反转交给Spring容器。工作原理:项目启动时,Spring容器扫描配置的包路径,解析注解或配置文件,创建所有需要的Bean对象,统一存入容器中。当程序需要使用对象时,直接从容器中获取,无需手动创建。核心作用:彻底解耦,降低代码耦合度。开发者无需关注对象创建和依赖关系,只需要专注业务逻辑开发,同时方便后续统一管理对象、做事务、拦截等增强操作。2、SpringAOP的原理和使用场景?详细答案:AOP全称面向切面编程,是Spring核心特性之一,核心思想是在不修改原有业务代码的前提下,对方法进行增强。底层原理:动态代理。针对有接口的类使用JDK动态代理,无接口的类使用CGLIB动态代理,在目标方法执行前后、异常、返回时植入增强逻辑。常用开发场景:统一日志记录、统一事务控制、权限校验、接口耗时统计、参数校验、异常统一处理,这些通用、重复的非业务逻辑,全部可以用AOP实现,避免代码冗余。3、Spring事务传播机制有哪些?常用的是哪几种?详细答案:Spring事务一共有7种传播机制,日常开发只用4种核心的,其余极少用到:1、REQUIRED(默认):当前有事务就加入当前事务,没有就新建事务,最常用,适配绝大多数增删改业务。2、SUPPORTS:当前有事务就加入,没有就以非事务方式运行,适合查询业务。3、REQUIRES_NEW:无论当前是否有事务,都会新建一个独立事务,原有事务会挂起,适合独立执行、不受外层事务影响的业务。4、NESTED:嵌套事务,外层事务回滚,内层必须回滚;内层事务回滚,外层事务可以不回滚。开发踩坑重点:默认REQUIRED机制下,同类中方法互相调用,事务会失效,因为没有经过Spring代理,这是线上高频问题。4、MyBatis#{}和${}的区别?详细答案:两者都是MyBatis取值符号,核心差异极大,也是面试高频考点:#{}是预编译占位符,底层会生成?占位,通过JDBC预编译赋值,可以有效防止SQL注入,自动处理字符串引号、转义,安全性高,日常传参优先使用。${}是字符串直接拼接,直接把参数内容拼接到SQL语句中,无法防止SQL注入,安全性差。但可以用于动态表名、动态排序字段,这类无法用预编译占位的场景。开发规范:普通参数查询、修改一律用#{};仅动态表名、排序、分页排序字段使用${},且必须手动做参数校验防注入。5、MyBatis一级缓存和二级缓存?详细答案:MyBatis缓存用于减少数据库查询次数,提升接口性能:一级缓存:默认开启,是SqlSession级别的缓存。同一个SqlSession中,相同的查询语句只会查一次数据库,后续直接读缓存。会话关闭、提交事务、执行增删改操作后,缓存会自动清空。二级缓存:默认关闭,是Mapper映射文件级别的缓存,全局共享。开启后,不同SqlSession、不同请求都可以共享缓存数据,生命周期更长。实际开发:一级缓存够用,二级缓存极少使用。因为二级缓存容易出现数据脏读,多表关联、多服务修改数据时,缓存更新不及时,业务风险高,生产环境一般不开启。四、SpringBoot核心知识点1、SpringBoot的核心优势?为什么不用SSM原生搭建项目?详细答案:SpringBoot是为了简化Spring、SSM开发而生,核心优势:1、自动配置:无需手动编写大量XML配置文件,内置自动装配机制,根据项目依赖自动加载配置,大幅减少配置代码。2、内置服务器:内嵌Tomcat、Jetty服务器,项目打包后可直接独立运行,无需额外部署服务器。3、依赖简化:提供starter启动器,整合所有常用依赖,无需手动匹配版本,解决版本冲突问题。4、监控完善:自带项目健康监控、日志监控,方便线上项目运维排查。原生SSM需要手动整合Spring、SpringMVC、MyBatis,编写大量XML配置、整合依赖、配置服务器,繁琐且容易出错,现在企业开发全部基于SpringBoot开发。2、SpringBoot自动装配原理?详细答案:核心依托启动类的@SpringBootApplication注解,底层由三个核心注解组成:1、@Configuration:标识当前类为配置类。2、@ComponentScan:自动扫描当前包及子包下所有带注解的组件,注册到容器。3、@EnableAutoConfiguration:核心自动装配注解,读取META-INF/spring.factories配置文件,根据项目引入的依赖,自动加载对应的自动配置类,完成组件初始化、参数配置。简单来说:引入什么依赖,SpringBoot就自动帮你配置对应的功能,无需手动干预。3、SpringBoot配置文件application.yml和perties的区别?详细答案:两者功能完全一致,都是SpringBoot全局配置文件,只是语法不同:properties是键值对格式,层级结构不明显,书写繁琐,重复代码多,早期项目常用。yml是树形层级格式,结构清晰、简洁,可读性高,支持对象、数组、集合批量配置,现在企业新项目全部统一使用yml配置文件。优先级:同一配置项,properties优先级高于yml,会覆盖yml配置。五、MySQL数据库核心(面试高频)1、InnoDB和MyISAM引擎的区别?详细答案:MySQL两大核心存储引擎,InnoDB是默认引擎,两者核心差异:1、事务支持:InnoDB支持事务、事务隔离级别;MyISAM不支持事务。2、锁机制:InnoDB支持行锁、表锁,并发性能高;MyISAM只有表锁,增删改会锁住整张表,并发差。3、外键:InnoDB支持外键约束;MyISAM不支持。4、崩溃恢复:InnoDB支持事务日志,宕机后可恢复数据;MyISAM宕机容易数据损坏。5、全文索引:MyISAM原生支持全文索引,InnoDB高版本也已支持。开发规范:业务表一律使用InnoDB,MyISAM基本被淘汰,仅静态日志表偶尔使用。2、数据库索引的作用?什么情况下需要建索引?什么情况下不建?详细答案:索引相当于数据表的目录,核心作用是大幅提升查询效率,减少数据库扫描行数。适合建索引的场景:1、经常用于where查询条件、join关联、orderby、groupby的字段;2、数据量大、查询频繁、更新少的字段。不适合建索引的场景:1、数据量极小的表,全表扫描比索引查询更快;2、频繁增删改的字段,索引会增加数据库维护成本;3、重复率极高的字段,比如性别、状态,索引失效,没有意义。3、SQL索引失效的常见场景?详细答案:开发中高频踩坑的索引失效场景:1、索引列使用函数、运算、类型转换,比如wheredate(create_time)='2025-01-01';2、模糊查询以%开头,比如like'%张三',后置%不会失效;3、使用!=、<>、notin、isnotnull非等值查询;4、or连接条件,前后字段没有同时建索引;5、组合索引不遵循最左前缀原则,跳过前置字段查询;6、数据库字段类型和传入参数类型不匹配,发生隐式转换。4、数据库事务四大特性ACID?详细答案:ACID是事务的四大核心特性,缺一不可:1、原子性(Atomicity):事务是最小执行单元,要么全部执行成功,要么全部回滚,不会出现部分成功部分失败。2、一致性(Consistency):事务执行前后,数据库数据状态保持一致,不会出现数据错乱、约束失效。3、隔离性(Isolation):多个事务并发执行时,相互隔离、互不干扰,通过隔离级别控制并发问题。4、持久性(Durability):事务提交成功后,数据永久写入数据库,即使服务器宕机,数据也不会丢失。六、Web进阶与项目实战1、前后端跨域问题是什么?如何解决?详细答案:浏览器同源策略限制,域名、端口、协议任意一个不同,就属于跨域,前端无法正常请求后端接口,这是浏览器的安全限制。项目常用解决方案(企业主流):1、后端注解解决:SpringBoot项目直接在控制器类或方法上添加@CrossOrigin注解,简单高效,适合小型项目;2、全局跨域配置:自定义Web配置类,统一配置跨域规则,全局生效,企业项目首选;3、Nginx反向代理:统一域名端口,规避跨域问题,适合线上生产环境。2、接口幂等性是什么?如何保证接口幂等?详细答案:幂等性指同一个请求执行多次,和执行一次的结果完全一致,不会产生重复数据、重复扣款、重复下单问题。主要解决用户重复点击、网络重试、接口重发导致的业务异常。常用实现方案:1、数据库唯一索引:对唯一字段加唯一约束,重复数据直接拦截;2、Token令牌机制:前端请求前获取唯一Token,提交请求携带Token,后端校验并删除Token,重复请求失效;3、分布式锁:基于Redis实现分布式锁,同一业务同一时间只允许一次操作;4、状态机控制:通过业务状态判断,已完成的订单、操作不再重复执行。3、SpringBoot全局异常处理的作用和实现方式?详细答案:项目开发中如果每个接口单独try-catch,代码冗余、杂乱。全局异常处理可以统一捕获项目所有异常,统一返回标准格式的错误信息,前端无需适配多种异常返回格式。实现方式:新建全局异常处理类,添加@RestControllerAdvice注解,通过@Exception
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高二语文选择性必修上册第一单元《大卫·科波菲尔(节选)》深度教学设计
- 九年级物理中考复习《浮力》第三课时浮沉条件与浮力应用教学设计
- 高二物理交变电流产生教案
- 高中地理选择性必修1第一章地球的运动整体教学设计
- 小学三年级美术教学设计:第五单元瞭望星空第三课遨游天穹
- 九年级地理教学设计:南方地区区域差异与可持续发展专题复习
- 小学四年级语文《精卫填海》文言文教学设计
- 高一体育珍珠球教学设计传承民族传统体育文化
- 小学五年级心理健康神奇创造性思维主题教学设计
- 高中音乐必修《音乐鉴赏》教学设计:锦鸡出山-民间器乐色彩与情感叙事的深度解读
- 2025-2026学年湖南师大附中七年级(上)期中数学试卷
- (2025)义务教育英语课程标准【2025年版】测试题(含参考答案)
- 药事管理学考试真题及答案
- 浙江省精诚联盟2025-2026学年高一上学期10月月考化学试题(含答案)
- LNG消防安全培训内容课件
- 养殖蝎子知识培训课件
- 急性重症有机磷农药中毒护理疑难病例讨论
- 水下测绘培训课件下载
- 2024-2025学年度自考专业(学前教育)真题(考试直接用)附答案
- 人工智能通识 课件 第七章 智能之躯-具身智能
- T/CHES 54-2021取水权交易可行性报告编制导则
评论
0/150
提交评论