一、Spring面试的问题

  1、spring的事务认识

    事务注解方式: @Transactional,当标于类前时,该类的所有public方法都进行事物处理。

    事务的传播行为:

      @Transactional(propagation=Propagation.REQUIRED)
      如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)
      @Transactional(propagation=Propagation.NOT_SUPPORTED)
      容器不为这个方法开启事务
      @Transactional(propagation=Propagation.REQUIRES_NEW)
      不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
      @Transactional(propagation=Propagation.MANDATORY)
      必须在一个已有的事务中执行,否则抛出异常
      @Transactional(propagation=Propagation.NEVER)
      必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
      @Transactional(propagation=Propagation.SUPPORTS)
      如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
      @Transactional(propagation=Propagation.NESTED)
      如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效.

    事务隔离级别:

    islation:该属性用于设置底层数据库的事务隔离级别,事务隔离级别用于处理多事务并发的情况,通常使用数据库的默认隔离级别即可,基本不需要进行设置mysql默认是:REPEATABLE_READ
    @Transactional(isolation = Isolation.READ_UNCOMMITTED)
    读取未提交数据(会出现脏读, 不可重复读) 基本不使用
    @Transactional(isolation = Isolation.READ_COMMITTED)
    读取已提交数据(会出现不可重复读和幻读)
    @Transactional(isolation = Isolation.REPEATABLE_READ)
    可重复读(会出现幻读)
    @Transactional(isolation = Isolation.SERIALIZABLE)
    串行化(可避免脏读、不可重复读、幻读的发生)

  2、spring mvc的执行流程

    1.发送请求到DispatcherServlet(前端控制器)

    2.DispatcherServlet请求HandleMapping(处理器映射器)查找Handle(Handle就是我们所说的Controller)并返回给DispatcherServlet

    3.前端控制器调用HandlerAdapter(处理适配器去)执行Handle

    4.Handle执行完毕向HandlerAdapter返回ModelAndView

    5.HandlerAdapter向DispatcherServlet返回ModelAndView

    6.DispatcherServlet解析ModelAndView渲染视图并向用户响应结果

  3、Spring Ioc(控制反转)基于java反射机制

    功能:最主要是完成了完成对象的创建和依赖的管理注入等等。把我们原先需要在代码里实现对象创建、依赖的代码,反转给容器来帮忙管理。解耦。

    如果对象A要用到对象B,A需要新NEW一个B,这样是A主动的去获得B,A依赖于B,他们具有依赖关系,如果用spring,在A需要用到对象B的时候,是根据配置,容器主动生成B,注入到对象A中,这样从主动获取B变成了被动,就实现了解耦。就如主板接口在那,他不会要求我必须插具体的某个显卡,而只是符合接口的显卡就可以了,这个决定权归组装的人决定。把修改硬编码变成修改配置文件。后者要好维护、好部署、清晰、集中得多。

    三种注入方式:接口注入、setter注入、构造方法注入,使用@Autowired(省略set方法、构造函数等)完成自动注入

  4、Spring Aop(面向切面编程)基于动态代理实现

    关于动态代理和静态代理可查看http://www.cnblogs.com/lkf-00889/p/7382122.html

    功能:找出对多个对象产生影响的公共行为,将其封装为一个可重用的模块,这个模块被命名为切面(@Aspect),切面将那些与业务无关,却被业务模块共同调用的逻辑提取并封装起来,减少了系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。

    5中通知函数:前置通知@Before、后置通知@AfterReturning 、异常通知 @AfterThrowing、最终通知 @After、环绕通知@Around

    

@Aspect//定义为切面类
@Component//spring标识的bean
@Order(1)//先执行,数字越小执行越早
public class WebLogAspect { @Pointcut("execution(* com.lkf.controller.*.*(..))")//切入点
public void webLog(){ } @Before("webLog()")
public void beFore(){
System.out.println("执行之前执行。");
}
}

    

二、Mybatis面试的问题

  1.mybatis和hibernate的区别

    (1)mybatis学习简单上手比hibernate简单些。

       (2)Hibernate对数据库结构提供了较为完整的封装。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate 提供的方法完成持久层操作。mybatis则需要自己编写sql语句。

       (3)Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。

       (4)Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

  2.mybatis中#和$的区别

     在传参数的时候用#{},在传表名或者order by 某个字段的时候用${},因为#{}会自动加上“”而${}是传什么拿什么。

     #{}可以在很大程度上防止sql注入比${}安全

三、spring boot

  1.好处

    (1)独立运行的的spring项目。spring boot可以以jar包的形式独立运行,也可以在应用项目的主程序中运行main函数即可。

       (2)内嵌Servlet容器

       (3)提供start简化Maven配置,帮我们整合了大量的第三方框架

       (4)简化了xml配置,项目搭建快速

    

    

java常见面试题(一)的更多相关文章

  1. java常见面试题及答案 1-10(基础篇)

    java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...

  2. java常见面试题及答案

    java常见面试题及答案 来源 https://blog.csdn.net/hsk256/article/details/49052293 来源 https://blog.csdn.net/hsk25 ...

  3. Java 常见面试题(一)

    1)什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件.Java被设 ...

  4. 【转载】JAVA常见面试题及解答(精华)

     JAVA常见面试题及解答(精华)       1)transient和volatile是java关键字吗?(瞬联) 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.例如: ...

  5. JAVA常见面试题问题简述(持续更新中)

    JAVA常见面试题问题简述 1. springcloud和dubbo的区别 ①相比之下springcloud 的社区会更加活跃,解决问题的速度也会越来越快,dubbo相对来说如果碰到没有解决的问题,就 ...

  6. java常见面试题总结2

    JAVA必背面试题和项目面试通关要点 简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等. 一 数据库 1.常问数据库查询.修改(SQL查询包含筛选查询.聚合查询和链 ...

  7. Java常见面试题(含答案)

    第一,谈谈final, finally, finalize的区别. final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 ...

  8. java常见面试题

    JAVA相关基础知识 1.面向对象的特征有哪些方面  1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分 ...

  9. JAVA常见面试题及解答

    JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时 ...

  10. Java常见面试题总结

    一.Java基础 1.String类为什么是final的. 2.HashMap的源码,实现原理,底层结构. 3.说说你知道的几个Java集合类:list.set.queue.map实现类咯... 4. ...

随机推荐

  1. React Native编译器的配置以及基础知识

    入职新公司,这边打算采用RN来写界面,所以学习一波这一块的知识. 采用的是WebStorm来编译,据同事说,比他采用atom编译要多很多语法提示. 下载地址:https://www.jetbrains ...

  2. 走过夏天,我的H5旅程,一路慢行

    <!DOCTYPE html> <!-- 文档类型声明:让浏览器,按照html5的标准对代码进行解释和执行. 文档类型声明必不可少,而且,必须放在文档最上方. 如果不写文档类型声明, ...

  3. 42. leetcode 70. Climbing Stairs

    70. Climbing Stairs You are climbing a stair case. It takes n steps to reach to the top. Each time y ...

  4. C++ STL 优先队列详解

    一.解释: 优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序,每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储. 例如,将元 ...

  5. NYOJ--113--字符串替换

    /* Name: NYOJ--113--字符串替换 Author: shen_渊 Date: 18/04/17 15:41 Description: 字符串水题,秒过 */ #include<b ...

  6. Kaggle竞赛 —— 泰坦尼克号(Titanic)

    完整代码见kaggle kernel 或 NbViewer 比赛页面:https://www.kaggle.com/c/titanic Titanic大概是kaggle上最受欢迎的项目了,有7000多 ...

  7. CSS3 基础(1)——选择器详解

    CSS3选择器详解 一. 属性选择器 在CSS3中,追加了三个属性选择器分别为:[att*=val].[att^=val]和[att$=val],使得属性选择器有了通配符的概念. 选择器 示例 描述 ...

  8. oracle-使用数据泵对不同用户和不同表空间的数据迁移

    oracle-使用数据泵对不同用户和不同表空间的数据迁移 ---------------------------------------------------2013/11/13 expdp和imp ...

  9. 立即表达式的多种写法与注意点以及in操作符的作用

    立即表达式,在javascript中非常常见, 采用立即表达式可以形成一个局部作用域, 常配合闭包实现模块化编程等其他用途,接下来我们看看,在大多数的框架中,立即表达式都有哪些写法,以及需要注意的点, ...

  10. [js高手之路] dom常用节点属性兼容性详解与应用

    一.每个DOM节点都有一个nodeType属性,表示节点类型, NodeType一共有12种类型,我们可以通过遍历内置的Node构造函数获取 window.onload = function(){ v ...