• java面试题


    1.有哪些不同类型的IOC方式?解释并说明

    (1)Set 注入

                   对于习惯了传统 javabean 开发的程序员,通过 setter 方法设定依赖关系更加直观。 
        如果依赖关系较为复杂,那么构造子注入模式的构造函数也会相当庞大,而此时设值注入模式则更为简洁。 
        Setter注入也需要在xml中进行配置,在调用了无参的构造方法或者无参的静态工厂方法实例化bean之后,容器通过回调bean的setter方法来完成setter注入。 

    (2)构照器注入

                   为POJO类创建带参的构造方法

          使用<constructor-arg>元素

                   一个<constructor-arg>元素表示构造方法的一个参数,且使用时不区分顺序。当构造方法的参数出现混淆,无法区分时,可以通过<constructor-arg>元素的index属性指定该参数的位置索引,位置从0开始。<constructor-arg>元素还提供了type属性用来指定参数的类型,避免字符串和基本数据类型的混淆。

        构造注入的时效性好,在对象实例化就得到所依赖的对象,便于在对象的初始化方法中使用依赖对象;但受限于方法重载的形式,使用灵活性不足。设值注入使用灵活,但时效性不足,并且大量的setter访问器增加了类的复杂性。Spring并不倾向于某种注入方式,用户应该根据实际情况进行合理的选择。

     

    (3)P命名空间

                    p命名空间的特点是使用属性而不是子元素的形式配置Bean的属性,从而简化了Bean的配置,使用传统的<property>子元素配置的代码

    需要注意的是,p名称空间没有标准的XML格式定义灵活,比如说,bean的属性名是以Ref结尾的,那么采用p名称空间定义就会导致冲突,而采用标准的XML格式定义则不会出现这种问题。这里我们提醒大家在项目中还是仔细权衡来决定到底采用那种方式,同时也可以在团队成员都理解不同的定义方式的基础上,在项目中根据需要同时选择三种定义方式。

        P命名空间注入的方式也是使用setter方式注入,所有POJO类中必须存在对应的set方法

    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中九大隐式对象有哪些?

    1. request对象

    request对象是javax.servlet.http.HttpServletRequest对象的一个实例。每当客户端请求页面时,JSP引擎将创建一个新对象来表示该请求。

    request对象提供了获取包括表单数据,Cookie,HTTP方法等HTTP头信息的方法。

    2. response对象

    response对象是javax.servlet.http.HttpServletResponse对象的一个实例。就像服务器创建request对象一样,它还创建一个对象来表示对客户端的响应。

    response对象还定义了处理创建新HTTP头的接口。通过此对象,JSP程序员可以添加新的Cookie或日期戳,HTTP状态代码等。

    3. out对象

    out隐式对象是javax.servlet.jsp.JspWriter对象的一个实例,用于在响应中发送内容。

    初始化JspWriter对象根据页面是否缓存而不同地实例化。缓冲可以通过使用page指令的buffered ='false'属性来关闭。

    JspWriter对象包含与java.io.PrintWriter类大部分相同的方法。但是,JspWriter还有一些额外的方法用来处理缓冲。与PrintWriter对象不同,JspWriter会抛出IOExceptions异常。

    4. session对象

    session对象是javax.servlet.http.HttpSession的一个实例,其行为与Java Servlet下的会话对象行为完全相同。
    session对象用于跟踪客户端请求之间的客户端会话。

    5. application对象

    application对象是生成的ServletServletContext对象的直接包装,实际上是javax.servlet.ServletContext对象的一个实例。

    application对象是JSP页面在其整个生命周期中的表示。 当JSP页面被初始化时,将创建此对象,并且在JSP页面被jspDestroy()方法删除时application对象也将被删除。

    通过向application对象添加属性值,可以确保组成Web应用程序的所有JSP文件都可以访问它。

    6. config对象

    config对象是javax.servlet.ServletConfig的实例化,是生成的servlet的ServletConfig对象周围的直接包装。

    7. pageContext对象

    pageContext对象是javax.servlet.jsp.PageContext对象的一个实例。pageContext对象用于表示整个JSP页面。

    8. page对象

    page对象是对该页面实例的实际引用。可以认为它是表示整个JSP页面的对象。

    page对象是this对象的直接同义词。

    9. exception对象

    exception对象是一个包含上一页抛出的异常的包装器。它通常用于生成对错误条件的适当响应。

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

    索引:

    数据库使用索引定位表中的行,与普通的的数据表不同,索引是一种以特定顺序保存的专用表。索引并不包含表中的所有数据,

    而是那些用于定位表中行的列,以及描述这些行的物理位置的信息。因此索引的作用就是便携化检索表中行和列的子集,而不需要检索表中的每行。

    约束:

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

        分类:

          主键约束:

            primary key constraint 唯一且不能为空;

          唯一约束:

            unique constrain  唯一,允许为空,即可以在其中出现null值,但只能出现一次;

          默认约束:

            default construction默认值;

          检查约束:

            check constrain 范围以及格式限制;

          外键约束:

            foreign key constrain 表关系

          删除约束:

            通过SQL语句删约束时,通过使用DROP命令删除响应的约束名;

      

  • 相关阅读:
    五:DockerFile制作Docker镜像
    六:Docker生产案例
    集群基础知识及haproxy负载均衡
    nfs服务部署记录
    haproxy 1.8.X版本编译安装教程
    Centos7.4安装kvm虚拟机
    什么是Docker
    Python—操作redis
    Python—redis
    机器学习之梯度下降法
  • 原文地址:https://www.cnblogs.com/qinzhenyu/p/11753168.html
Copyright © 2020-2023  润新知