1.谈谈对Spring的理解
首先Spring它是一个很大的体系,在Spring这个体系里面包含了很多产品,例如:framework、spring boot、spring data 等等
当然,我在开发当中用的最多的 还是spring framework 和spring boot,spring framework 当中最主要的两大核心为 spring IOC和spring AOP
spring IOC 。控制反转他只是一个概念性的东西 而实现这个概念有很多方法;比如DI(Dependency Injection)“依赖注入”。spring 就是使用的DI来实现的;ioc 和 DI 好比 一个是概念 一个是手段 比如 “浪漫”,浪漫是一个概念,而实现这个浪漫 我们可以用很多手段,比如 看电影啊,一起逛街等等;
而实现DI 则有三种方法
1、通过构造方法注入,
2、通过set方法注入
3、自动装配注入 他的注入方式有 byType、byName、default等等
其实spring IOC 它就好比如一个很大的容器,用来管理我们程序中的各个bean,在spring初始化的时候,它会把所有配置文件当中的bean以及配置的扫描包下的所有加了@component,@service.@repository、@Controller的类放到我们的这个容器中来,并管理着他们之间的依赖、生命周期、作用域等,当然 我们配置的扫描包是可以添加条件的,比如踢除哪些annotation不去扫描它。在我们的spring 和springmvc结合使用的时候经常用到这种办法,他需要踢除加了@Controller的类。不然可能导致我们配置的 的aop和事务管
理失效;
spring AOP面向切面编程的意思;那么与之相对应的也就是 OOP "面向对象编程”;那么在我们的面向对象编程的开发法则是至上而下式的。就比如我们的一个登陆模块,首先是客户端请求到Controller,Controller调用service,service再调用Dao,然后再是Dao返回service,service返回Controller,Controller再响应到客户端,那么这一整个流程是至上而下的;那么在我们这整个流程中可能会产生一些横切性的问题,
比如:
日志的记录,
权限的验证,
事务的管理,那么这些横切性的问题是和我们主体流程无关的;如果说处理这些横切问题的代码也写在我们的主业务逻辑里面的话,会造成大量冗余的代码,也不利于各个模块的重用和维护;那么面向切面编程就是为了来解决这些问题的,他可以将一些重复的非主逻辑的横切性代码抽象出来成为一个切面,然后我们可以为其指定切入点 比如 在执行之前切入 之后切入,环绕切入,出异常后切入等等;那么spring AOP的话 它是基于aspectJ来的;他底层默认是使用的jdk动态代理,当然我们也可以换成CGLIB。
2.List Set HashMap
List : 特点:可以添加重复的数据,有顺序的
实现类:ArrayList:查询速度快,增删改速度慢
LinkeList:在项目中查询数据的慢,但是增删改速度快
Set:特点:不保存重复的数据,没有顺序
实现类:HashSet:速度快
TreeSet:排序
LinkeList:顺序
Queue:消息队列
Map:特点:键值对关系,查询速度快
3.Arrays和ArrayList什么区别
一个是数组,一个是集合,一个存储有限的数据,一个是无限的数据,一个只能存储一种类型,一种类型可变
4.MyBatis和Hibernate的区别
一个是半封装的ORM框架,一个是全封装的ORM框架。一个是轻量的框架,一个是重量级的框架。Hibernate加快系统开发,因为SQL已经封装,但是SQL优化差,Mybatis属于半自动化,SQL优化好
5.SpringMVC和Struts2的区别
SpingMVC的入口是Servlet
开发效率,和性能方面,SpringMVC
Struts是通过Action找到类,在于类找到方法
SpringMVC直接找方法,性能比Struts快
6.问到SSM和SSH的区别
从2个方面答:1.SpringMVC和Struts的区别
2.Mybatis和Hibernate的区别
7.Mybatis缓存
一级缓存:默认开启一级缓存:SQLSession
二级缓存:SQLSessioinFoXX'
8.Hibernate的工作原理
通过Configuration config = new Configuration().configure();//读取并解析hibernate.cfg.xml配置文件
由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>读取并解析映射信息
通过SessionFactory sf = config.buildSessionFactory();//创建SessionFactory
Session session = sf.openSession();//打开Sesssion
Transaction tx = session.beginTransaction();//创建并启动事务Transation
persistent operate操作数据,持久化操作
tx.commit();//提交事务
关闭Session
关闭SesstionFactory
9.Hibernate的优缺点
1.全封装JDBC
2.非入侵
3.开发效率高
4.缓存
缺点:
1.SQL优化难
2.配置过于复杂
3不支持批量删除