SSM常见面试题

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

答:1.Setter方法注入

属性需要封装Setter方法

2.构造方法注入

public UserServiceImpl(UserDao dao) {
this.dao=dao;
}
<bean id="service" class="service.impl.UserServiceImpl">
<constructor-arg><ref bean="dao"/></constructor-arg>
</bean>
3.p命名空间注入

p命名空间注入也是基于Setter方法的一种注入方式,他需要在xml文件里引用命名空间

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

在bean节点的属性里使用p:属性名="值"  或者 p:属性名-ref="Bean的id"的方式进行注入的

4.注解注入

 @Resource或者@Autowire

@Autowired是spring自己定义的注解,@Resource是J2EE的,由JSR-250规范定义

  1. @Autowired默认byType自动注入,如果实例结果不唯一,那么将会抛出异常
  2. @Resource默认按byName自动注入
    但是@Resource有两个属性是比较重要的,分别是name和type;
    如果使用name属性,则使用byName的自动注入策略; .
    而使用type属性时则使用byType自动注入策略;

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

xml映射文件中的namespace值就是Dao接口的全限名,接口的方法名,就是映射文件中MappedStatement的id值,接口方法内的参数,就是传递给sql的参数。Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MappedStatement

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

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

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

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

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

四:java中9大隐式对象有哪些?


  对象        类型                       用法

  1. request             javax.servlet.http.HttpServletRequest                  该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据
  2. response           javax.servlet.ServletResponse response             代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端
  3. session             HttpSession session                   对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。
  4. out                JspWriter out                             对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区
  5. pageContext           继承JspContext                               pageContext 对象的作用是取得任何范围的参数
  6. config           ServletConfig config                        对象的主要作用是取得服务器的配置信息。
  7. page            Object page                           对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针
  8. exception           Throwable                对象的作用是显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用
  9. application       ServletContext                     对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。

五:数据库里 面的索引和约束是什么?

索引索引在MySQL中也叫是一种“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。
索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。
索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。

数据库约束是防止非法记录的规则,约束保存在数据字典(data
dictionary)中,约束可以被定义在列级或者表级。

数据库常用的五大约束

  1、主键约束(Primay Key Coustraint) 唯一性,非空性
  2、唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个
  3、检查约束 (Check Counstraint)对该列数据的范围、格式的限制(如:年龄、性别等)
  4、默认约束 (Default Counstraint)该数据的默认值
  5、外键约束 (Foreign Key Counstraint)需要建立两表间的关系并引用主表的列

原文地址:https://www.cnblogs.com/yjc1605961523/p/11752394.html