目录
今天给大家分享 JavaWeb篇的面试题,小编给大家稍微整理了一下,希望即将面试的朋友们看了后能有帮助。
一、JavaWeb基础
1.jsp
指令:page指令、include...
九大内置对象
- request:封装了由客户端生成的HTTP头信息、系统信息、请求方式和请求参数等。通过request对象提供的相应方法可以处理客户端浏览器提交的HTTP请求中的各项参数。
- response:用于响应客户请求,向客户端输出信息。它封装了JSP产生的响应,并发送到客户端以响应客户端的请求。请求的数据可以是各种数据类型,甚至是文件。response对象在JSP页面内有效。
- config:读取web.xml配置信息的config对象
- session:会话管理对象,也就是当一个客户向服务器发出请求,服务器接收请求,并返回响应后,该连接就结束了,而服务器并不保存相关的信息。为了弥补这一缺点,HTTP协议提供了session。通过session可以在应用程序的Web页面间进行跳转时,保存用户的状态,使整个用户会话一直存在下去,直到关闭浏览器。但是,如果在一个会话中,客户端长时间不向服务器发出请求,session对象就会自动消失。这个时间取决于服务器,例如,Tomcat服务器默认为30分钟。不过这个时间可以通过编写程序进行修改。
- page:page对象代表JSP本身,只有在JSP页面内才是合法的。
- application:用于保存所有应用中的共有数据。它在服务器启动时自动创建,在服务器停止时销毁。当application对象没有被销毁时,所有用户都可以共享该application对象。与session对象相比,application对象的生命周期更长,类似于系统的“全局变量”。
- out:用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。
- pageContext:页面上下文的对象,pageContext对象的创建和初始化都是由容器来完成的。
- exception:用来处理JSP文件执行时发生的所有错误和异常,在Java程序中,可以使用try...catch关键字来处理异常情况,如果在JSP页面中出现没有捕获到的异常,就会生成exception对象,并把exception对象传送到在page指令中定义的错误页面中,然后在错误页面中处理相应的exception对象。
2.servlet
四大作用域
application:当Web应用被加载进容器时创建代表整个web应用的application对象,当服务器关闭或Web应用被移除时,application对象跟着销毁。用于保存公共数据。
pagecontext:作用范围是整个页面,它是四大作用域中最小的一个;当请求时开始,当响应结束时销毁。
request:在service 方法调用前由服务器创建,请求结束,request结束。
session:在第一次调用 request.getSession() 方法时,服务器会检查是否已经有对应的session,如果没有就在内存 中创建一个session并返回。注意session的作用范围是一次会话。一般用来保存登录的用户信息、购物车信息等。
#问题一:session与cookie的区别
生命周期:init、service、destroy
- 作用范围不同,session服务端(服务器),cookie是客户端(浏览器)数据存储
- session安全;cookie不安全,因为在浏览器可以查看cookie的信息。
- 读取速度不同
- session速度慢,因为session存在服务端,所有用户信息存在seesion的话,当服务器去读取用户信息时,服务器压力大。
- cookie速度快,因为用户信息存在客户端的话,当客户端去读取用户信息时,用户信息分给每个访问页面浏览器(客户端),用户信息压力小。
二、JavaWeb框架
1.Spring
对Spring的理解
概念:轻量级的容器框架,有两个核心组件ioc、AOP
#问题一:对Spring ioc的理解
ioc:控制反转,依赖注入
控制反转:将对象实例化的权利由程序员控制转交给Spring容器进行控制
依赖注入:将一个对象注入另外一个对象,例如Controller中注入service实现类给service接口
问题二:javabean的配置是单例多例?
Spring对于javabean的管理默认就是单例的;但是可以配置多例,更加实际情况或者业务需求去定义。
单例的特点是节约内存,存在变量污染;多例的特点是消耗内存,不存在变量污染,
问题三:javabean的生命周期?
单例:容器生,对象生,容器死,对象死;
单例理解:这个bean要被很多对象调用,既然迟早要调用,所以spring在设计的时候就把bean放在项目启动时,先将容器创建完,对象也已经初始化好了;
多例:使用时创建,销毁跟着jvm走;
问题四:bean依赖注入的方式?set注入、构造注入
自动装配:
byName:根据名字在Spring上下文中查找,更具bean的名称,找到id进行注入
byType:根据类型在Spring上下文中查找,只要是接口的实现类就可以更具类型注入问题五:对Spring aop的理解
AOP:面向切面编程
作用:将共性的非核心业务功能进行解耦
举例:对于商城项目而言,核心业务是商品管理、购物车、订单管理;
为了后续代码调优,以及平台监管,需要添加日志功能,AOP完成日志功能开发
#问题六:在实际开发对于AOP的应用?
1.日志
2.事务管理 transactionManager
前置通知:开启事务
后置通知:提交事务
异常通知:回滚事务
过滤通知:区别对待增删改有事务,查询没有事务
@transactional 注解试事务问题七:jdk代理与cglib代理的区别?
jdk代理代理的是接口,cglib代理的是类。
因为在jdk代理中的代理类与目标类必须实现同一个接口,但是cglib代理不需要实现同一个接口
问题八:Spring的底层用到了哪些设计模式
工厂模式(application.xml配置bean中的FactoryBean)、单例模式(Singlon)、原型模式(prototype)、代理模式(aop代理中通知)
#SpringMVC的工作流程?
- 1 首先用户发送请求-->DispatherServlet
- 2 DispatcherServlet-->HandlerMapping
- 3 DispatcherServlet-->HandlerAdapter
- 4 HandlerAdapter-->处理器功能处理方法的调用
- 5 ModelAndView的逻辑视图名-->ViewRecolver
- 6 View-->渲染
详情
- 由 DispatcherServlet 请求一个或多个 HandlerMapping(处理器映射器),并返回一个执行链(HandlerExecutionChain)。
- DispatcherServlet 将执行链返回的 Handler 信息发送给 HandlerAdapter(处理器适配器);
- HandlerAdapter 根据 Handler 信息找到并执行相应的 Handler(常称为 Controller);
- Handler 执行完毕后会返回给 HandlerAdapter 一个 ModelAndView 对象(Spring MVC的底层对象,包括 Model 数据模型和 View 视图信息);
- HandlerAdapter 接收到 ModelAndView 对象后,将其返回给 DispatcherServlet ;
- DispatcherServlet 接收到 ModelAndView 对象后,会请求 ViewResolver(视图解析器)对视图进行解析;
- ViewResolver 根据 View 信息匹配到相应的视图结果,并返回给 DispatcherServlet;
- DispatcherServlet 接收到具体的 View 视图后,进行视图渲染,将 Model 中的模型数据填充到 View 视图中的 request 域,生成最终的 View(视图);
问题九:springmvc的常用注解?
- 类:@Controller、@restController、@ControllerAdvice
- 方法上:@get/delete/post/putmapping @responseBody @ExceptionHandler
- 方法内:@pathvarible @requestBody @requestParam @requestHeader
三、Mybatis
#问题一:#与$的区别
相同点:都是用来传参
不同点:#是自带引号,$不带引号
- #没有sql注入,$存在sql注入的风险
- $可以用来做动态列
<update id='save'> ${execteSQL}//接收新增的字段 </update> 在不修改原来的代码基础上,只修改新增的字段 bookMapper.save(update t_book set abc=23 where id = 1)
问题二:ResultType与ResultMap区别ResultType:单表查询、类型java.lang.string/integer、java.util.map
ResultMap:配置映射关系,用于多表查询
问题三:批量新增/二级缓存的问题
session.beginTransationfor(OrderItem oi:orderItems){
session.save(oi);
}
session.commit;
上述代码用到的是一个会话,新增完一次性全部提交。