Java面试基础知识点-框架

1.Springmvc和Struts2的区别?
1.SpringMvc是基于方法开发的,Struts2是基于类开发的。
2.单例和多例的区别:springmvc在映射的时候通过形参来传递参数的,是将url和controller方法映射 的,映射成功后,springmvc生成一个handers对象,对象中只包含以method,方法执行结束时,形参的数据就销毁了。
所以springmvc可以进行单利开发,并且建议使用
但是Struct2接收参数是通过类的成员变量来接收的,这些变量在多线程访问中是共享的,而不是像SpringMVC那样,方法结束之后,形参自动销毁,且无法使用单例,只能用多例。
这样的话,在struts2中,随着方法的添加,很多的成员变量,维护到最后的时候根本就不知道这成员变量被那个方法所使用,所以springmvc开发类似于servcie开发。
3.经过实际测试,struts速度慢,在与使用struts标签,如果使用struts建议使用jstl.
2.mybatis和Hibernate的区别?
1.hibernate入门门槛高,是一个标准的ORM框架(对象关系映射),不需要写sql,sql语句自动生成的,对sql语句优化、修改比较困难。
mybites专注于sql本身,需要程序员自己编写sql语句,sql语句修改和优化比较方便是一个不完全的ORM框架,虽然程序员自己写sql语句,mybites也可以实现映射
2.Hibernate适用于需求变化不多的项目中小型项目,比如后台管理系统、orm、oa
mybites适用于需求变化较多的的项目,比如互联网项目
3.IOC的三种依赖注入方式。
第一种是通过接口注射,这种方式要求我们的类必须实现容器给定的一个接口,然后容器利用这个接口给我们类注射它所依赖的类。
第二种是通过setter方法注射,这种方式也是Spring推荐的方式。
第三种是通过构造方法注射类,这种方式Spring同样给于了实现,它和通过setter方法一样,都在类里无任何侵入性,但是,不是没有侵入性,只是把侵入性转移了。
3.struts2工作原理
1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6 ActionProxy创建一个ActionInvocation的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
4.Hibernate工作原理

  1. 读取并解析配置文件
  2. 读取并解析映射信息,创建SessionFactory
  3. 打开Sesssion
  4. 创建事务Transation
  5. 持久化操作
  6. 提交事务
  7. 关闭Session
  8. 关闭SesstionFactory
    5.Spring工作原理
    内部最核心的就是IOC了, 动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置 文件来动态的创建对象,和调用对象里的方法的 。 Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。
    Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明 管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
    要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。
    Spring里用的最经典的一个设计模式就是:模板方法模式。(这里我都不介绍了,是一个很常用的设计模式)
    Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了 也就基本上掌握了Spring.
    Spring AOP与IOC
    一、 IoC(Inversion of control): 控制反转
    1、IoC:
    概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系
    核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean
    二、AOP(Aspect-Oriented Programming): 面向方面编程
    1、 代理的两种方式:
    静态代理:
    针对每个具体类分别编写代理类
    针对一个接口编写一个代理类
    动态代理:
    针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类
    6.Springmvc工作原理
    1.springmvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作。
     2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.
     3.DispatcherServlet请请求提交到目标Controller
     4.Controller进行业务逻辑处理后,会返回一个ModelAndView
     5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
     6.视图对象负责渲染返回给客户端。
    7.mybites工作原理
    MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置文件关联到各个实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession。
    8.什么是springboot
    用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件)
    创建独立的spring引用程序 main方法运行
    嵌入的Tomcat 无需部署war文件
    简化maven配置
    自动配置spring添加对应功能starter自动化配置
    无代码生成和XML配置
    9.Spring Boot 的配置文件有哪几种格式?它们有什么区别?
    .properties 和 .yml,它们的区别主要是书写格式不同。
    10.Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
    启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解
    11.SpringBoot的自动配置
    SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @ConfigurationProperties 等几个注解来进行自动配置完成的。
    @EnableAutoConfiguration 开启自动配置,主要作用就是调用 Spring-Core 包里的 loadFactoryNames(),将 autoconfig 包里的已经写好的自动配置加载进来。
    @Conditional 条件注解,通过判断类路径下有没有相应配置的 jar 包来确定是否加载和自动配置这个类。
    @EnableConfigurationProperties 的作用就是,给自动配置提供具体的配置参数,只需要写在 application.properties 中,就可以通过映射写入配置类的 POJO 属性中。
    12.Spring Data JPA 进行持久层开发大致需要的三个步骤
    1.声明持久层的接口,该接口继承 Repository,Repository 是一个标记型接口,它不包含任何方法,当然如果有需要,Spring Data 也提供了若干 Repository 子接口,其中定义了一些常用的增删改查,以及分页相关的方法。
    2.在接口中声明需要的业务方法。Spring Data 将根据给定的策略来为其生成实现代码。
    3.在 Spring 配置文件中增加一行声明,让 Spring 为声明的接口创建代理对象。配置了 jpa:repositories 后,Spring 初始化容器时将会扫描 base-package 指定的包目录及其子目录,为继承 Repository 或其子接口的接口创建代理对象,并将代理对象注册为 Spring Bean,业务层便可以通过 Spring 自动封装的特性来直接使用该对象。

Spring Data JPA单表操作简单,多表操作使用mybites

猜你喜欢

转载自blog.csdn.net/pdsuxueyuan/article/details/87965783