java常见面试考点

往期文章推荐:
  java常见面试考点(四):方法的参数传递机制
  java常见面试考点(五):基本类型和包装类型的区别
  java常见面试考点(六):深入理解String类型
  java常见面试考点(七):递归与迭代
  java常见面试考点(八):成员变量与局部变量


【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权);

本博客的内容来自于:java常见面试考点(九):SSM面试题;

学习、合作与交流联系q384660495;

本博客的内容仅供学习与参考,并非营利;

文章目录

  • java常见面试考点
  • 一、Spring Bean的作用域
  • 二、Spring 的事务传播属性和隔离级别
    • 1、事务的传播行为
    • 2、事务的隔离级别
  • 三、SpringMVC的执行原理与乱码问题
    • 1、post与get请求的乱码问题
    • 2、SpringMVC的执行流程
  • 四、Mybatis属性与字段对应
  • 总结

一、Spring Bean的作用域

如图一共有五种作用域,其中request、session和global session三种作用域仅在基于web的应用中使用,只能用在基于web的Spring ApplicationContext环境。

  1. 当一个bean的作用域为Singleton,那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。Singleton是单例类型,就是在创建起容器时就同时自动创建了一个bean的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。注意,Singleton作用域是Spring中的缺省作用域
  2. 当一个bean的作用域为Prototype,表示一个bean定义对应多个对象实例。Prototype作用域的bean会导致在每次对该bean请求时都会创建一个新的bean实例。Prototype是原型类型,它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象。根据经验,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域
  3. request:每次HTTP请求都会创建一个新的Bean。该作用域仅适用于WebApplicationContext环境。
  4. session:同一个HTTP Session共享一个Bean,不同的HTTP Session使用不同的Bean。该作用域仅适用于WebApplicationContext环境。
  5. global session

面试的话重点掌握前俩个,本部分内容参考了Spring中bean的作用域与生命周期

对于Bean的生命周期,可以参考我的另外一篇文章:

二、Spring 的事务传播属性和隔离级别

1、事务的传播行为

propagation:用来设置事务的传播行为:一个方法运行在了一个开启了事务的方法中时,当前方法是使用原来的事务,还是开启一个新的事务,这就是事务的传播行为。

比如:Propagation.REQUIRED:默认值,代表继续使用原来的事。Propagation.REQUIRES_NEW:将原来的事务挂起,开启一个新的事务。最常用的事务传播属性就是REQUIRED和REQUIRES_NEW。

REQUIRED传播行为:当bookService的purchase()方法被另外一个事务方法checkout()调用时,它会默认在现有的事务内运行。因此在checkout()方法的开始和结束内只有一个事务,这个事务只会在checkout()方法调用结束时被提交,那就导致用户一本都买不了。

REQUIRES_NEW传播行为:表示该方法必须启动一个新的事务,并在自己的事务内运行,如果已经有在运行,就先把他挂起。

事务的其他传播行为可以参考Spring事务传播机制详解,Spring事务传播性与隔离级别

2、事务的隔离级别

在讲事务的隔离级别之前,我们先来看一下数据库事务并发问题:

假设现在有两个事务:Transaction01和Transaction02并发执行。

①脏读:当前事务读到了其他事务更新但是还没有提交的值(其他事务不回滚还好,其他事务回滚你读到的就是一个无效值)。

Transaction01将某条记录的AEG值从20修改为30
Transaction02读取了Transaction01更新后的值:30
Transaction01回滚事务,AEG的值又恢复到了20
Transaction02读取到的30就是一个无效的值

②不可重复读:

Transaction01读取了AEG的值为20
Transaction02将AEG的值修改为30
Transaction01再次读取AEG值为30,和第一次读取结果不一致

③幻读:

Transaction01读取了STUDENT表中的一部分数据
Transaction02向STUDENT表中插入了新的行

不可重复读重点在于update和delete,而幻读的重点在于insert;
避免不可重复读需要锁行就行,避免幻影读则需要锁表
参考不可重复度和幻读的区别,不可重复读和幻读区别

事务的隔离级别:数据库系统必须具有隔离并发运行各个事务的能力,使它们不会相互影响,避免各种并发问题。一个事务与其他事务隔离的程度成为事务的隔离级别。SQL标准中规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但是并发性就越弱。

1、读未提交:READ UNCOMMITTED,允许Transaction01读取Transaction02未提交的修改。(脏读、不可重复读、幻读都有可能出现)

2、读已提交:READ COMMITTED,要求Transaction01只能读取Transaction02已经提交的修改。(脏读就可以避免了)

3、可重复读:REPEATABLE READ,确保Transaction01可以多次从一个字段读取到相同的值,即Transaction01执行期间禁止其他事务对这个字段进行更新。(脏读、不可重复读都不会出现了)

4、串行化:SERIALIZABLE,确保Transaction01可以多次从一个表中读取到相同的行,在Transaction01执行期间,禁止其他事务对这个表进行添加、更新、删除操作。可以避免所有并发问题,但是性能最低。(脏读、不可重复读、幻读都不可能出现)


隔离级别越高,数据一致性就越好,但是并发性就越弱

三、SpringMVC的执行原理与乱码问题

1、post与get请求的乱码问题

  1. 对于post请求,我们可以在web.xml配置文件中添加过滤器:
 <filter><description>字符编码过滤器</description><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param>//response是否设置编码<param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

2、对于get请求,在tomcat的server.xml配置文件中配置:

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />添加URIEncoding="utf-8"
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8"/>

2、SpringMVC的执行流程

  1. 用户发送请求到中央控制器DispatcherServlet;
  2. 中央控制器调用处理器映射器HandlerMapping;
  3. 处理器映射器返回HandlerExecutionChain(包含程序中用到的处理器拦截器HandlerIntercepter和处理器对象Handler)给中央控制器;
  4. 中央处理器DispatcherServlet再调用处理器适配器;
  5. 处理器适配器调用具体的处理器Handler(也叫Controller或后端控制器)去处理请求;
  6. 处理器处理完请求之后返回ModelAndView给处理器适配器;
  7. 处理器适配器再讲Handler的执行结果ModelAndView返回给中央控制器DispatcherServlet;
  8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器;
  9. ViewReslover解析后返回具体View;
  10. DispatcherServlet根据View进行渲染视图,即将模型数据填充至视图中;
  11. DispatcherServlet响应用户。

四、Mybatis属性与字段对应

  1. 在全局配置文件中配置
<configuration>  <settings>  <setting name="mapUnderscoreToCamelCase" value="true" />  </settings>
</configuration>
  1. sql语句起别名
  2. 不使用resultType,自己配置resultMap

总结

这里介绍了一些简单的SSM的面试问题,希望对大家有所帮助。

java常见面试考点(九):SSM面试题相关推荐

  1. java常见面试考点(十一):git与svn区别

    java常见面试考点 往期文章推荐:   java常见面试考点(六):深入理解String类型   java常见面试考点(七):递归与迭代   java常见面试考点(八):成员变量与局部变量   ja ...

  2. java常见面试考点(二十五):CAS是什么

    java常见面试考点 往期文章推荐:   java常见面试考点(二十):Elasticsearch 和 solr 的区别   java常见面试考点(二十一):单点登录   java常见面试考点(二十二 ...

  3. 视频教程:Java常见面试题目深度解析!

    视频教程:Java常见面试题目深度解析! Java作为目前比较火的计算机语言之一,连续几年蝉联最受程序员欢迎的计算机语言榜首,因此每年新入职Java程序员也数不胜数.很多java程序员在学成之后,会面 ...

  4. Java常见面试知识点:继承、接口、多态、代码块

    问题:Java常见面试知识点:继承.接口.多态.代码块 答案: 1.继承 继承中构造方法的访问特点 子类中所有的构造方法默认都会访问父类中无参的构造方法 为什么? • 子类在初始化的时候,有可能会使用 ...

  5. 2023字节、腾讯、阿里等6家大厂Java开发面试真题+高频面试题总结

    又是一年求职面试旺季,不管你是新进职场小白还是职场老鸟,这些关于java程序员面试应准备的东西你都应该知道. 面试前需要准备 1. Java 八股文:了解常考的题型和回答思路: 2. 算法:刷100- ...

  6. Java面试题集锦,Java常见面试问题汇总,有需要的小伙伴看过来

    Spring Framework 现在几乎已成为 Java Web 开发的标配框架.那么,作为 Java 程序员,你对 Spring 的主要技术点又掌握了多少呢?不妨用本文的问题来检测一下. 1. 一 ...

  7. JAVA常见面试问题以及答案

    在网上看到的,前一段时间也是在忙面试的事情,感觉总结的挺好的,这两天有时间了花点时间把答案整理出来. 一.Java基础 1. String类为什么是final的. 2. HashMap的源码,实现原理 ...

  8. 2019年java常见面试总结!

    1.面向对象的特征 封装:目标是实现软件的"高内聚,低耦合",防止程序之间相互依赖而带来的变动影响.在面向对象中,对象是封装最基本的单位,面向对象的封装比传统语言的封装更为清晰.有 ...

  9. Java常见面试50题(java jsp)

    JAVA常见面试题 1>:Java中的异常处理机制的简单原理和应用 简单原理:每当产生异常之后,如果没有程序进行相应的处理,则程序出现中断的现象,那么,此时实际上一旦产生一个异常之后,JVM会抛 ...

  10. Java多态(面试考点,不要因为基础而忽视)

    面向对象的三大特性:继承封装,多态 从一定角度来看,封装和继承几乎都是为多态准备的 定义 指的是不同对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式. 多态要有动态绑定 ...

最新文章

  1. 重新定位svn地址的方法(windows和linux),svn switch(sw)的帮助信息
  2. AOP面向切面编程在Android中的使用
  3. Machine Learning - Coursera week6 Evaluating a learning algorithm
  4. Java语音怎么输出翼型_] 靠增大翼型弯度来获得升力增加的操纵面是什么?
  5. Nacos高可用集群解决方案-Docker版本
  6. 变分自编码器(VAE)
  7. chown: `mysql#039;: invalid user_centos无法正常启动,报chown: invalid user:'root:root'
  8. 快递鸟接口国内常用快递公司编码表
  9. hrm系统源码php,悟空HRM下载_悟空HRM0.1开源版 - 系统之家
  10. 偶极子天线的优缺点_一种双面印刷偶极子天线解析
  11. 流量卡之家:预约量超百万!华为5G手机线上线下产品紧俏 A股概念股大涨
  12. Flutter系列之改变CupertinoSwitch的大小
  13. 华为手机摄影入门到精通pdf_华为手机摄影从入门到精通
  14. Python查询天数
  15. 开汉庭酒店赚钱吗?三年的问题逐渐有答案了
  16. SAP 采购合同案例教程后台配置
  17. 数据库原理题型 - 综合应用题
  18. k-medoid(k中心点)聚类算法Python实现
  19. 大数据技术---Hadoop
  20. 在Linux下查看FC HBA卡的速率和状态

热门文章

  1. 数独问题流程图_数独求解算法
  2. JAVA实现网页版斗地主_Java实现斗地主案例
  3. Chrome浏览器护眼插件
  4. “易图购”数码商城App设计与实现
  5. DEVCON.EXE管理USB
  6. 用过那些号称媲美迅雷的下载神器,发现没一个能打的。
  7. leslie模型matlab代码6,Leslie_model
  8. 谷歌翻译插件安装使用
  9. 9、java常用 设计模式
  10. 办公计算机配件,办公电脑加装傲腾如丝般顺滑的办公体验