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

下载本文档

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

文档简介

J2EE高频面试题及详细答案(真实职场版)一、J2EE基础核心面试题1、什么是J2EE?它的核心组件和作用是什么?J2EE是一套企业级Java开发规范和技术平台,专门用于开发大型、分布式、高可用、可扩展的企业级Web和后端项目,区别于普通JavaSE桌面开发。核心组件及作用:Servlet:服务端核心程序,负责接收、处理客户端请求,响应数据,是Web程序的基础运行单元。JSP:嵌入Java代码的页面技术,用于前端页面动态数据渲染,本质是编译后的Servlet。JDBC:Java数据库连接规范,用于实现Java程序与各类数据库的交互、增删改查操作。JNDI:Java命名目录服务,用于统一查找数据源、Bean、配置资源,实现资源解耦。EJB:企业JavaBean,用于处理分布式业务逻辑、事务、远程调用,大型分布式项目常用。JTA:Java事务规范,支持分布式事务,保证多数据源操作的原子性。2、J2EE、J2SE、J2ME的区别?J2SE(Java标准版):基础核心,包含Java基础语法、集合、IO、多线程等,是所有Java版本的基础,主要用于桌面程序、基础工具开发。J2EE(Java企业版):基于J2SE扩展,新增Web、事务、分布式、数据库交互等企业级规范,专注后端企业项目开发。J2ME(Java微型版):精简版,针对移动端、嵌入式设备开发,目前基本已淘汰。3、J2EE的三层架构是什么?各自作用?日常开发标准三层架构:表现层、业务层、持久层表现层(Web层):接收前端请求,参数校验、请求转发、结果封装返回。核心技术:Servlet、JSP、SpringMVC、Controller。业务层(Service层):处理核心业务逻辑、事务控制、数据校验、业务组装,不直接操作数据库。核心技术:SpringService、事务管理。持久层(DAO层):专门负责数据库交互,实现数据增删改查,不处理业务逻辑。核心技术:JDBC、MyBatis、Hibernate。三层架构的核心目的:各司其职、解耦、便于维护和迭代扩展。二、Servlet核心面试题1、Servlet的生命周期?Servlet生命周期由容器(Tomcat)管理,分为4个阶段,全程只初始化一次、销毁一次:加载阶段:Tomcat启动或首次请求时,加载Servlet字节码文件。初始化init():仅执行一次,用于初始化配置、连接池、全局参数。服务处理service():每次请求都会执行,根据请求方式分发doGet/doPost方法。销毁destroy():服务器关闭、项目卸载时执行,释放资源、关闭连接。重点:Servlet是单例多线程,全局变量存在线程安全问题,禁止在Servlet中定义可修改的成员变量。2、doGet和doPost的区别?参数传递:GET参数拼接在URL后面,POST参数放在请求体中。数据大小:GET有URL长度限制,无法传输大数据;POST无明确长度限制,可传文件、大文本。安全性:GET参数暴露在地址栏,不安全;POST相对隐蔽,适合传输敏感数据。缓存特性:GET请求会被浏览器缓存,POST不会缓存。书签收藏:GET可收藏书签,POST不支持。开发规范:查询用GET,新增/修改/提交数据用POST。3、Servlet中forward和redirect的区别?转发(forward):服务器内部跳转,客户端只发起一次请求,地址栏URL不变,共享request域数据,只能跳转当前项目资源。重定向(redirect):客户端二次请求,地址栏URL改变,不共享request数据,可以跳转外部网站、跨项目资源。使用场景:页面跳转、数据携带用转发;跳转外部地址、防止表单重复提交用重定向。4、Servlet三大作用域及生命周期?request:一次请求有效,请求结束数据销毁,适合单次请求数据传递。session:一次会话有效,浏览器不关闭、不超时则数据存在,默认超时30分钟,存储用户登录信息、会话数据。application(ServletContext):整个项目全局有效,服务器启动创建,关闭销毁,存储全局配置、项目公共数据。三、JSP核心面试题1、JSP和Servlet的区别与联系?联系:JSP本质就是Servlet,JSP页面会被容器编译成Servlet类执行,底层运行机制完全一致。区别:Servlet以Java代码为主,适合处理业务、请求逻辑;JSP以HTML为主,嵌入Java代码,适合页面展示。Servlet开发后台控制逻辑,JSP负责前端动态页面渲染。现在主流开发基本摒弃JSP,前后端分离后统一用Servlet衍生的SpringMVC做接口开发。2、JSP四大作用域、九大内置对象?四大作用域:page、request、session、application(作用范围从小到大)九大内置对象:request、response、session、application、page、pageContext、out、config、exception3、EL表达式和JSTL标签的作用?EL表达式用于简化JSP取值,替代<%%>脚本代码,可直接获取域对象数据,简洁无冗余。JSTL是JSP标准标签库,提供循环、判断、遍历、格式化等标签,避免JSP中大量Java脚本,让页面代码更整洁。四、Spring核心面试题(J2EE重点)1、Spring的核心思想是什么?两大核心:IOC控制反转、AOP面向切面编程IOC控制反转:将对象的创建、管理、依赖注入权限交给Spring容器,不再由开发者手动new对象,实现组件解耦,方便统一管理。AOP面向切面:在不修改原有业务代码的前提下,对方法进行增强,实现日志记录、事务控制、权限校验、性能监控等通用功能,符合开闭原则。2、IOC的实现原理?Bean的生命周期?IOC原理:通过读取XML配置或注解,扫描项目Bean,利用反射机制创建对象,完成依赖注入,统一交由Spring容器管理。Bean完整生命周期:容器启动扫描注解/配置,加载Bean定义信息通过反射实例化Bean对象属性填充、依赖注入(DI)执行前置初始化方法、Bean后置处理器执行自定义init初始化方法Bean完成初始化,放入容器可供调用容器关闭时,执行destroy销毁方法3、SpringBean的作用域?singleton(默认):单例,整个容器中只有一个Bean实例,容器启动创建。prototype:多例,每次获取Bean都会新建一个实例。request:每次请求创建一个Bean,请求结束销毁。session:每个会话对应一个Bean,会话失效销毁。application:项目全局唯一,和ServletContext生命周期一致。4、SpringAOP的核心概念和应用场景?核心概念:切点、通知、切面、连接点、目标对象、代理对象五种通知类型:前置通知、后置通知、返回通知、异常通知、环绕通知常用场景:统一日志打印、接口耗时统计、事务管理、权限拦截、参数校验、异常统一处理。5、Spring事务传播机制和隔离级别?常用传播机制(重点):REQUIRED:默认,有事务加入,无事务新建事务SUPPORTS:有事务就用,无事务非事务运行REQUIRES_NEW:新建独立事务,挂起原有事务NESTED:嵌套事务,依赖父事务,可单独回滚子事务隔离级别:读未提交、读已提交、可重复读、串行化,解决脏读、不可重复读、幻读问题。五、SpringMVC核心面试题1、SpringMVC工作流程?客户端发送请求,被前端控制器DispatcherServlet拦截DispatcherServlet调用HandlerMapping,根据URL匹配对应Controller处理器适配器HandlerAdapter执行对应Controller方法Controller处理业务,返回ModelAndView或JSON数据视图解析器解析视图,渲染页面;前后端分离场景直接返回JSON响应数据返回客户端2、SpringMVC常用注解?@Controller、@RequestMapping、@GetMapping、@PostMapping@RequestParam(接收普通参数)、@PathVariable(路径参数)@RequestBody(接收JSON参数)、@ResponseBody(返回JSON)@RequestHeader、@CookieValue、@Valid(参数校验)3、@RequestParam和@PathVariable区别?@RequestParam:获取URL问号后面的参数,如?id=1@PathVariable:获取URL路径中的变量,如/user/1六、MyBatis持久层面试题1、MyBatis的优缺点?优点:SQL语句与代码分离,便于维护和优化支持动态SQL,灵活适配复杂查询场景底层封装JDBC,简化数据库操作,减少冗余代码性能优秀,轻量级框架,无过多冗余封装缺点:需要手动编写SQL,对比JPA更繁琐多表关联查询需要手动维护,复杂场景开发效率略低2、MyBatis一级缓存和二级缓存?一级缓存(默认开启):SqlSession级别缓存,同一会话内相同查询直接读缓存,会话关闭缓存清空。二级缓存(手动开启):Mapper映射文件级别缓存,跨会话共享,多个SqlSession可共用,适合查询多、修改少的场景。3、#{}和${}的区别?#{}:预编译占位符,可防止SQL注入,自动拼接引号,日常参数查询优先使用。${}:直接字符串拼接,无法防SQL注入,无引号,适合动态表名、排序字段等场景。七、JDBC与数据库面试题1、JDBC完整操作步骤?加载数据库驱动获取数据库连接Connection创建Statement/PreparedStatement执行对象执行SQL语句,处理结果集ResultSet关闭结果集、执行对象、数据库连接,释放资源2、PreparedStatement优势?预编译SQL,执行效率更高,支持语句复用有效防止SQL注入漏洞,安全性更高支持参数占位,代码可读性、维护性更好3、数据库连接池的作用?传统JDBC每次操作都要创建、关闭连接,开销大、性能低。连接池提前初始化一批数据库连接,统一管理、复用连接,减少创建销毁开销,提升系统并发性能,常用:Druid、HikariCP。八、Web高频面试题(会话、Cookie、Session)1、Cookie和Session的区别?存储位置:Cookie存储在客户端浏览器,Session存储在服务器端。安全性:Cookie可被篡改、窃取,安全性低;Session数据服务端存储,安全性更高。容量限制:Cookie有大小和数量限制,Session无严格限制。生命周期:Cookie可设置永久有效,浏览器关闭可保留;Session默认浏览器关闭失效。依赖关系:Session默认依赖Cookie存储SessionId。2、Session失效场景?浏览器关闭,Cookie中的SessionId丢失超过服务器默认超时时间(30分钟)主动调用session.invalidate()销毁会话服务器重启、项目重新部署九、并发与线程安全面试题1、Servlet线程安全问题怎么解决?Servlet是单例多线程,成员变量会被所有线程共享,存在线程安全问题。解决方案:不在Servlet中定义可修改的成员变量将变量定义在方法内部(局部变量线程独立)必要时加同步锁,或使用ThreadLocal隔离线程数据2、ThreadLocal的作用?线程本地变量,为每个线程单独分配独立变量副本,线程之间数据互不干扰,解决多线程数据共享冲突问题。常用场景:存储用户登录信息、数据库连接、请求上下文数据。十、项目实战与高频手写面试题1、说说你项目中事务的使用场景和问题解决?项目中新增、修改、批量操作都需要加事务,保证数据一致性。日常开发使用@Transactional注解声明式事务。常见问题:事务失效:方法非public、内部调用、异常被try-catch捕获导致无法回滚传播

温馨提示

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

评论

0/150

提交评论