Java教程

JavaEE面试题目(一)(servlet、Spring)

本文主要是介绍JavaEE面试题目(一)(servlet、Spring),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

TCP和UDP的区别?

相同点:
UDP协议和TCP协议都是传输层协议。

不同点:
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接.
2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;
UDP尽最大努力交付,即不保证可靠交付
3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
5. TCP首部开销20字节;UDP的首部开销小,只有8个字节
6. TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

Servlet的生命周期

Servlet是运行在服务器端,以多线程的方式处理客户端请求的小程序。是sun公司提供的一套规范(规范的实现是接口)。

(1) servlet对象默认是在用户第一次访问的时候创建的,并且只创建一次,创建的时候调用init()方法。(也可以在servlet配置里面第三行加上1这样会在服务器启动的时候servlet对象就创建)
(2) 请求交给service()方法,由service()方法调用doGet或doPost方法或其他的方法。
(3) 服务器关闭的时候servlet对象被销毁,把工程从tomcat服务器中移除,对象也会销毁,销毁时会调用destroy方法。但是销毁是调用的finalized()方法进行销毁的。

servlet创建的方法
(1)最早是implements实现servlet接口,实现接口的重写方法太多,有的不一样需要
(2)后来extends GenericServlet(抽象类)类,实现service方法,不能区分请求的方式,是get请求还是post请求
(3)现在extends HttpServlet(抽象类)(javax 下的包,是上一个的子类)。
说一下servlet的体系结构?
所有的servlet都必须实现核心的接口是就javax.servlet.Servlet。每一个Servlet都必须直接或间接的实现这个接口,或者是继承javax.servlet,GenericServlet或者javax.servlet.http.HttpServlet。最后,Servlet使用多线程可以并行的为多个请求服务。

Session和Cookie的区别和联系;说明在自己项目中的使用

Session和cookie都是会话(Seesion)跟踪技术。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。但是Session的实现依赖于Cookie,sessionId(session的唯一标识需要存放在客户端)

cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
   将登陆信息等重要信息存放为SESSION
   其他信息如果需要保留,可以放在COOKIE中,比如购物车
购物车最好使用cookie,但是cookie是可以在客户端禁用的,这时候我们要使用cookie+数据库的方式实现,当从cookie中不能取出数据时,就从数据库获取。

转发和重定向的联系和区别

  1. 转发:服务器端的跳转,路径不会发生改变(针对的是servlet),是服务器内部的处理,一次请求,请求对象不会变
  2. 重定向:客户端的跳转,路径会发生改变,将要请求的路径和302重定向的状态码发给客户端浏览器,客户端浏览器将再次向服务器发出请求,不是同个请求,两次请求。

JSP的工作原理

混合了Java代码和HTML代码运行在服务器端的脚本

JSP的运行模型(工作流程)
用户第一次访问JSP页面的时候,服务器会将JSP文件转换成.java文件,之后编译成字节码文件,加载到JVM,如果JSP文件不做修改,那么上述的步骤不会再来一遍,如果JSP文件发生改变,会重新生成java文件,和新编译成字节码文件,加载到JVM。

MVC模式及其优缺点

使用MVC模式完成分页功能的基本思路是什么

1)页面提交页码(第几页)到Servlet中
2)Servlet接收到页码后,将页码传递给分页工具类(PageBean)
3)Servlet中调用Service层传入PageBean对象
4)Service层调用DAO层传入PageBean对象
5)Servlet中得到查询出来的数据,并setAttribute保存
6)在页面中得到(getAttribute)数据,遍历输出

拦截器和过滤器的区别

都是AOP编程思想,都能实现权限检查,日志记录等

  • 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
  • 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
  • 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
  • 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
  • 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
    拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

Spring的IOC(简单介绍概念,重要的说明,你怎么理解的)

IOC(inverse of control):控制反转 ,将对象创建的控制权交给IOC容器,应用对象时,再从容器中获得。还有一个更确切的名字叫做DI(dependency injection)依赖注入,创建对象时根据对象之间的依赖关系根据配置自动注入依赖对象。

(1) 作用
创建对象并且维护对象间依赖的关系
(2) 实现原理
反射
(3) 依赖注入的三种方式:

  • 构造方法注入:即被注入对象可以通过在其构造方法中声明依赖对象的参数列表,让外部(通常是IOC容器)知道它需要哪些依赖对象,然后IOC容器会检查被注入对象的构造方法。
  • setter方法注入:即当前对象只需要为其依赖对象所对应的属性添加setter方法,IOC容器通过此setter方法将相应的依赖对象设置到被注入对象的方式即setter方法注入。
  • 接口注入:接口注入有点复杂,被注入对象如果想要IOC容器为其注入依赖对象,就必须实现某个接口,这个接口提供一个方法,用来为被注入对象注入依赖对象,IOC容器通过接口方法将依赖对象注入到被注入对象中去。相对于前两种注入方式,接口注入比繁琐和死板,被注入对象就必须专声明和实现另外的接口。
    (4) 注解的方式。
    @ Repository 用于创建持久层对象(dao层)
    @Service 用于创建service层对象
    @Controller 用于创建控制层对象
    @Component 用于创建普通对象
    @Scope("prototype") 设置是否是单例对象 单例singleton 非单例prototype
    @Lazy(value=true) 设置是否启用懒加载
    注入成员属性的注解
    @Autowired(byName+byType)
    @Resource
    默认情况下,IOC容器中创建的对象都是单列对象
    bean标签上添加scope=”prototype”设置非单例对象。

Spring的AOP原理,及其关键名词概念(简单介绍概念,重要的说明,你怎么理解的)

Aspect Oriented Programing面向切面编程。
AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码
(性能监视,事务管理,安全检查、缓存,日志)
使用了纯java实现,不需要专门的编译过程和类加载器,在运行期间通过代理方式向目标类织入增强代码。

(1) 原理
通过代理的方式
JDK动态代理:针对接口生成子类
CGLIB代理:针对目标类生成子类

MySQL的读写分离,利用mycat中间件 + AOP技术实现读写分离,采用AO拦截业务层逻辑的方法,判断方法的前缀是写操作还是读操作,在读数据源和写数据源之间进行切换。
在Spring 2.0.1中引入了AbstractRoutingDataSource, 该类充当了DataSource的路由中介, 能有在运行时, 根据某种key值来动态切换到真正的DataSource上。

SpringMVC运行原理(项目中用它优势是什么,从项目组实际工作来说明)

(1)用户向服务器发送请求,请求被Spring前端控制Servlet(DispatcherServlet)捕获。(捕获)
(2)DispatcherServlet对请求URL进行解析,得到请求资源标志符(uri),然后根据该URI,调用handlerMapping,获得该handler配置的所有相关对象(包括handler对象以及handler对象对应的拦截器),最后以handlerExcutionChain对象的形式返回。(查找Handler)
(3)DispatcherServlet 根据获得的Handler,选择合适的HandlerAdapter,提取request中的数据模型,填充入Handler入参,开始执行Handler,Handler执行完成后,向DispatcherServlet返回一个ModelAndView对象。(执行handler)
(4)DipatcherServlet根据返回的ModelAndView,选择一个合适的ViewResolver(必须已经注入到Spring容器中的ViewResolver)(选择ViewResolver)
(5)通过ViewResolver结合Model和View,来渲染视图,DispatcherServlet将渲染的结果返回客户端。(渲染返回)

这篇关于JavaEE面试题目(一)(servlet、Spring)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!