zoukankan      html  css  js  c++  java
  • 主流框架面试题

    1.Spring 中基于注解如何配置对象作用域?以及如何配置延迟加载机制?
    答:@Scope(“singleton”)
    @Scope(“prototype”)
    @Lazy(value=true)

    2.Mybatis 中#和$的区别?

    1.#{}是预编译处理,${}是字符串替换。
    2.Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
    3.Mybatis在处理${}时,就是把${}替换成变量的值,相当于字符串拼接
    4.使用#{}可以有效的防止SQL注入,提高系统安全性。

    3.描述Spring MVC处理流程及应用优势
    1.控制器接受用户的请求,调用模型处理业务,并返回数据给控制器。
    2.控制器调用视图显示处理结果。并通过视图呈现给用户。
    3.视图层发送请求到控制层进行数据校验,类型转换,异常处理等,然后在控制层调用模型处理业务,进行数据的持久化,最后跳转页面并展示数据。

    4.Shiro框架权限管理时的认证和授权流程描述.
    答:Shiro权限控制流程的原理:
    应用代码 —- 调用Subject (shiro的Subject 就代表当前登陆用户) 控制权限 —- Subject 在shiro框架内部 调用 Shiro SecurityManager 安全管理器 —– 安全管理器调用 Realm (程序和安全数据连接器 )。
    Subject要进行任何操作,都必须要调用安全管理器(对我们来说是自动的)。 
    而安全管理器会调用指定的Realms对象,来连接安全数据。
    Realms用来编写安全代码逻辑和访问安全数据,是连接程序和安全数据的桥梁。

    5.使用Spring框架的好处是什么?
    轻量:spring是轻量的。
    控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
    面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
    容器:Spring 包含并管理应用中对象的生命周期和配置。
    MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。
    事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。
    异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。

    6.Spring 中用到了那些设计模式?
    Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的:
    代理模式—在AOP和remoting中被用的比较多。
    单例模式—在spring配置文件中定义的bean默认为单例模式。
    模板方法—用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
    工厂模式—BeanFactory用来创建对象的实例。
    适配器–spring aop
    装饰器–spring data hashmapper
    观察者– spring 时间驱动模型
    回调–Spring ResourceLoaderAware回调接口

    7.SpringMvc怎么和AJAX相互调用的?
    通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 :
    (1)加入Jackson.jar
    (2)在配置文件中配置json的映射
    (3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上

    8.mybatis的缓存机制,一级,二级介绍一下
    一级缓存
    默认开启
    SqlSession级别的缓存,实现在同一个会话中数据的共享
    一级缓存的生命周期和SqlSession一致
    当有多个SqlSession或者分布式环境下,数据库写操作会引起脏数据。
    二级缓存
    默认不开启,需手动开启
    SqlSessionFactory级别的缓存,实现不同会话中数据的共享,是一个全局变量
    可自定义存储源,如Ehcache
    当开启缓存后,数据查询的执行的流程是:二级缓存>一级缓存>数据库
    不同于一级缓存,二级缓存可设置是否允许刷新和刷新频率实现
    实体类实现序列化,在mapper文件中开启
    在配置文件中设置cacheEnabled为true

    9.Mybatis都有哪些Executor执行器?它们之间的区别是什么?
    答:Mybatis有三种基本的Executor执行器,SimpleExecutor、ReuseExecutor、BatchExecutor。
    SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。
    ReuseExecutor:执行update或select,以sql作为key查找Statement对象,存在就使用,不存在就创建,用完后,不关闭Statement对象,而是放置于Map<String, Statement>内,供下一次使用。简言之,就是重复使用Statement对象。
    BatchExecutor:执行update(没有select,JDBC批处理不支持select),将所有sql都添加到批处理中(addBatch()),等待统一执行(executeBatch()),它缓存了多个Statement对象,每个Statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理。与JDBC批处理相同。
    作用范围:Executor的这些特点,都严格限制在SqlSession生命周期范围内。

    10.MyBatis的好处是什么
    Mybatis把sql语句从Java源程序中独立出来,放在单独的XML文件中编写,给程序的维护带来了很大便利。 
    Mybatis封装了底层JDBC API的调用细节,并能自动将结果集转换成JavaBean对象,大大简化了Java数据库编程的重复工作。 
    因为Mybatis需要程序员自己去编写sql语句,程序员可以结合数据库自身的特点灵活控制sql语句

    11.解释Spring支持的几种bean的作用域
    Spring框架支持以下五种bean的作用域:
    singleton : bean在每个Spring ioc 容器中只有一个实例。
    prototype:一个bean的定义可以有多个实例。
    request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
    session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
    global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
    缺省的Spring bean的作用域是Singleton。

    12.AOP作用是什么,底层如何实现在哪些地方会用到,分别简述切面,切入点和通知。
    AOP:面向切面编程:将一个系统中共同的业务逻辑提取出来,进行单独的封装成一个组件(切面),然后以配置的方式作用于系统中,实现程序的可插拔性,提高代码的复用性,提升系统的灵活性和性能
    底层实现:JDK动态代理,只支持接口注入CGLIB:可以支持普通类的注入
    那些地方会用到:事务开启,日志记录,安全验证,权限验证
    切面:系统中共通的业务提取出来,在某个时刻或者某个阶段共同调用
    切入点:找到目标方法,给它追加共通的业务逻辑,在spring中提供了切入点表达式帮助我们找到目标方法execution
    通知:什么时候调用这个共通的业务逻辑,用于指定切面方法作用到系统中的时机.前置通知,后置通知,环绕通知,异常通知,最终通知。

    13.Spring中AutoWired和,Resource之间区别是什么
    AutoWried:按照类型进行匹配—spring框架自带的,查看当前Spring容器中那个bean类型和引用类型一致,就进行注入,如果有多个匹配类型就会报错.
    Resource:默认按照名称进行注入,如果找不到对应的名称按照bean类型进行注入

    14.请解释Spring Bean的生命周期?
    Spring Bean的生命周期简单易懂。在一个bean实例被初始化时,需要执行一系列的初始化操作以达到可用的状态。同样的,当一个bean不在被调用时需要进行相关的析构操作,并从bean容器中移除。

    15.SpringBoot全新开发方式特点
    创建独立的Spring应用程序
    嵌入的Tomcat,无需部署WAR文件
    简化Maven配置
    自动配置Spring
    提供生产就绪型功能,如指标,健康检查和外部配置

    16、Spring中的@RestController和@Controller有什么区别

    • @Controller:标识一个该类是Spring MVC controller处理器,用来创建处理http请求的对象
    • @RestController:原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。

    17.为什么Mybatis需要将参数封装为Map
    答案:Mybatis规定一般的参数只能进行单值传参,不能多值传参.但是有时业务需要必须进行多值传递.那么这时需要将多值,封装为单值.为了解决多值传参的问题,Mybatis提供了@Param注解,其作用将参数封装为Map集合.

    18、MyBatis有几种分页方式?
    分页方式:逻辑分页和物理分页
    逻辑分页:使用 MyBatis 自带的RowBounds 进行分页,它是一次性查询很多数据,然后在数据中再进行检索。
    物理分页:自己手写limit,SQL分页或使用分页插件,去数据库查询指定条数的分页数据的形式。

  • 相关阅读:
    HDU4385Moving Bricks【状压DP】
    用位运算实现加减法
    hdu 1874(最短路 Dilkstra +优先队列优化+spfa)
    codeforces 782B The Meeting Place Cannot Be Changed+hdu 4355+hdu 2438 (三分)
    hdu 1542(线段树+扫描线 求矩形相交面积)
    hdu 2602(经典01背包)
    hdu 1698(线段树区间更新)
    hdu 1754(单点更新 ,区间最大值)
    NYOJ 寻找最大数
    hdu 2222(AC自动机模版题)
  • 原文地址:https://www.cnblogs.com/liangxr/p/13870287.html
Copyright © 2011-2022 走看看