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)等

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

  • 相关阅读:
    JavaScript AMD 模块加载器原理与实现
    nodejs之日志管理
    实时监测每秒上行下行流量,一款 iOS Today Widget 监测器Demo,还可以可以监测内存大小、存储空间等信息
    Swift 2.0基本语法
    【京东助手】滑稽东试用助手 V1.6.0
    我也秀秀windows phone版博客园客户端
    asp.net做的网站账号登陆后注销不管用了
    分享个自己做的CSDN刷下载积分软件
    推荐一个很好用的HTTP操作类
    新软件马上就要完成了,先发篇文章YY下
  • 原文地址:https://www.cnblogs.com/dabrk/p/11753371.html
Copyright © 2011-2022 走看看