zoukankan      html  css  js  c++  java
  • 面试题

    1.有哪些不同类型的IOC(依赖注入)方式?解释说明下?

    基于Setter注入

           对于习惯了传统 javabean 开发的程序员,通过 setter 方法设定依赖关系更加直观。

          如果依赖关系较为复杂,那么构造子注入模式的构造函数也会相当庞大,而此时设值注入模式则更为简洁。

          如果用到了第三方类库,可能要求我们的组件提供一个默认的构造函数,此时构造子注入模式也不适用。

    基于构造器注入

          在构造期间完成一个完整的、合法的对象。所有依赖关系在构造函数中集中呈现。

          依赖关系在构造时由容器一次性设定,组件被创建之后一直处于相对“不变”的稳定状态。

          只有组件的创建者关心其内部依赖关系,对调用者而言,该依赖关系处于“黑盒”之中。

    p命名空间注入

         使用属性而不是子元素的形式配置Bean的属性,从而简化了配置代码。

         使用前要在spring配置文件中引入p命名空间

         xmlns:p="http://www.springframework.org/schema/p"

    2.最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

        Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中MappedStatement的id值,接口方法内的参数,就  是传递给sql的参数。Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MappedStatement,举例:  com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到namespace为com.mybatis3.mappers.StudentDao下面id = findStudentById的MappedStatement。在Mybatis 中,每一个<select>、<insert>、<update>、<delete>标签,都会被解析为一个MappedStatement对象。

    Dao接口里的方法,是不能重载的,因为是全限名+方法名的保存和寻找策略。

    Dao接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象,代理对象proxy会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回

    3.Mybatis是如何进行分页的?分页插件的原理是什么?

    Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

    分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。

    举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t limit 0,10

    4.java中9大隐式对象有哪些?

    application---所有用户和整个服务器都可访问
    session---当前用户登录有效
    request---一次请求有效,通常在2个JSP中有效
    pageContext---当前用户一个JSP页面有效
    response 响应请求
    out 输出内容
    page 相当于JAVA中的this
    config 初始化的配置文件(web.xml)访问对象
    exception JSP中的异常处理

    5.数据库里面的索引和约束是什么?

    索引:

    索引是最为常用的改善数据库性能的技术。SQL Server引入索引主要是为了提高查询的效率,它能够加速ORDER BY和GROUP BY子句的操作,保证数据的唯一性,并加快表连接的速度。

    约束:

    设计数据库完整性的目的是为了防止数据库存在不符合语义的数据,防止错误信息的输入和输出。SQL Server提供的用来实施数据完整性的途径主要是约束(Constraint)、标识列(Identity Column)、默认(Default)、规则(Rule)、触发器(Trigger)、数据类型(Data Type)、索引(Index)和存储过程(Stored Procedure)等

    使用约束实施数据的完整性

    约束的用途是限制用户输入到表中的数据的值的范围,一般分为列级约束和表级约束两种。

  • 相关阅读:
    CF526D Om Nom and Necklace
    POJ2406 Power Strings
    POJ3461 Oulipo
    luogu P1341 无序字母对
    UOJ 117 欧拉回路
    骑马修栅栏
    vimdiff env.txt export.txt set.txt
    Linux自动执行任务
    消灭 Bug!推荐5款测试员不可不知的bug管理工具!
    Bugzilla使用手册及解决方案
  • 原文地址:https://www.cnblogs.com/Chencheno/p/11753267.html
Copyright © 2011-2022 走看看