12.底层源码分析 Spring 的核心功能和执行流程(下)
底层源码分析 Spring 的核心功能和执行流程(下)上一课时我们讲了 Bean 相关的内容,它其实也是属于 IOC 的具体实现之一,本课时我们就来讲讲 Spring 中其他几个高频的面试点,希望能起到抛砖引玉的作用,能为你理解 Spring 打开一扇门。因为 Spring 涉及的内容和知识点太多了,用它来写一本书也绰绰有余,因此这里我们只讲核心的内容,希望下来你能查漏补缺,完善自己的 Spring 技术栈。 我们本课时的面试题是,谈一谈你对 IOC 和 DI 的理解。 典型回答IOC(Inversion of Control,翻译为“控制反转”)不是一个具体的技术,而是一种设计思想。与传统控制流相比,IOC 会颠倒控制流,在传统的编程中需要开发者自行创建并销毁对象,而在 IOC 中会把这些操作交给框架来处理,这样开发者就不用关注具体的实现细节了,拿来直接用就可以了,这就是控制反转。 IOC 很好的体现出了面向对象的设计法则之一——好莱坞法则:“别找我们,我们找你”。即由 IOC 容器帮对象找到相应的依赖对象并注入,而不是由对象主动去找。 举个例子,比如说传统找对象,先要设定好你...
13.MyBatis使用了哪些设计模式?在源码中是如何体现的?
MyBatis 使用了哪些设计模式?在源码中是如何体现的?MyBatis 的前身是 IBatis,IBatis 是由 Internet 和 Abatis 组合而成,其目的是想当做互联网的篱笆墙,围绕着数据库提供持久化服务的一个框架,2010 年正式改名为 MyBatis。它是一款优秀的持久层框架,支持自定义 SQL、存储过程及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作,还可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Ordinary Java Object,普通 Java 对象)为数据库中的记录。 关于 MyBatis 的介绍与使用,官方已经提供了比较详尽的中文参考文档,可点击这里查看,而本课时则以面试的角度出发,聊一聊不一样的知识点,它也是 MyBatis 比较热门的面试题之一,MyBatis 使用了哪些设计模式?在源码中是如何体现的? 注意:本课时使用的 MyBatis 源码为 3.5.5。 典型回答1.工厂模式工厂模式想必都比较熟悉,它是 Java 中最常用的设计模式之一。工厂模式就...
11.底层源码分析Spring的核心功能和执行流程(上)
底层源码分析 Spring 的核心功能和执行流程(上)Spring Framework 已是公认的 Java 标配开发框架了,甚至还有人说 Java 编程就是面向 Spring 编程的,可见 Spring 在整个 Java 体系中的重要位置。 Spring 中包含了众多的功能和相关模块,比如 spring-core、spring-beans、spring-aop、spring-context、spring-expression、spring-test 等,本课时先从面试中必问的问题出发,来帮你更好的 Spring 框架。 我们本课时的面试题是,Spring Bean 的作用域有哪些?它的注册方式有几种? 典型回答在 Spring 容器中管理一个或多个 Bean,这些 Bean 的定义表示为 BeanDefinition 对象,这些对象包含以下重要信息: Bean 的实际实现类 Bean 的作用范围 Bean 的引用或者依赖项 Bean 的三种注册方式 XML 配置文件的注册方式 Java 注解的注册方式 Java API 的注册方式 1. XML 配置文件注册方式1234&...
14.SpringBoot有哪些优点?它和Spring有什么区别?
SpringBoot 有哪些优点?它和 Spring 有什么区别?Spring 和 Spring Boot 的区别很多新手容易搞混,从这道简单的面试题也可以很轻易试探出你的 Java 基础功底,如果连这个问题都答不上来的话,通常就没有什么下文了,因为这已经是用人单位对面试者的最低要求了,所以本课时我们就来看一下二者的区别,以及 Spring Boot 的特性。 我们本课时的面试题是,Spring 和 Spring Boot 有什么区别?Spring Boot 的优点有哪些? 典型回答作为 Java 开发人员对 Spring 框架都很熟悉,Spring 为 Java 程序提供了全面的基础架构支持,包含了很多非常实用的功能,如 Spring JDBC、Spring AOP、Spring ORM、Spring Test 等,这些模块的出现,大大的缩短了应用程序的开发时间,同时提高了应用开发的效率。 Spring Boot 本质上是 Spring 框架的延伸和扩展,它的诞生是为了简化 Spring 框架初始搭建以及开发的过程,使用它可以不再依赖 Spring 应用程序中的 XML 配置,...
15.MQ有什么作用?你都用过哪些MQ中间件
MQ 有什么作用?你都用过哪些 MQ 中间件?在第10篇中讲过“手写消息队列”,当时粗略的讲了 Java API 中使用 Queue 实现自定义消息队列,以及使用 Delayed 实现延迟队列的示例;同时还讲了 RabbitMQ 中的一些基础概念。本课时我们将会更加深入的讲解 MQ(Message Queue,消息队列)中间件,以及这些热门中间件的具体使用。 我们本课时的面试题是,MQ 常见的使用场景有哪些?你都用过哪些 MQ 中间件? 典型回答在介绍 MQ 的使用场景之前,先来回忆一下 MQ 的作用。MQ 可以用来实现削峰填谷,也就是使用它可以解决短时间内爆发式的请求任务,在不使用 MQ 的情况下会导致服务处理不过来,出现应用程序假死的情况,而使用了 MQ 之后可以把这些请求先暂存到消息队列中,然后进行排队执行,那么就不会出现应用程序假死的情况了,所以它的第一个应用就是商品秒杀以及产品抢购等使用场景,如下图所示: 使用 MQ 实现消息通讯使用 MQ 可以作为消息通讯的实现手段,利用它可以实现点对点的通讯或者多对多的聊天室功能。 点对点的消息通讯如下图所示: 多对多的消息通讯...
16.MySQL 的运行机制是什么?它有哪些引擎?
MySQL 的运行机制是什么?它有哪些引擎?数据库是 Java 程序员面试必问的知识点之一,它和 Java 的核心面试点共同组成了一个完整的技术面试。而数据库一般泛指的就是 MySQL,因为 MySQL 几乎占据了数据库的半壁江山,即使有些公司没有使用 MySQL 数据库,如果你对 MySQL 足够精通的话,也是会被他们录取的。因为数据库的核心与原理基本是相通的,所以有了 MySQL 的基础之后,再去熟悉其他数据库也是非常快的,那么接下来的几个课时就让我们好好的学习一下 MySQL。 我们本课时的面试题是,MySQL 是如何运行的?说一下它有哪些引擎? 典型回答MySQL 的执行流程是这样的,首先客户端先要发送用户信息去服务器端进行授权认证。如果使用的是命令行工具,通常需要输入如下信息: mysql -h 主机名(IP) -u 用户名 -P 端口 -p 其中: -h 表示要连接的数据库服务器的主机名或者 IP 信息; -u 表示数据库的用户名称; -P 表示数据库服务器的端口号, 小写的 -p 表示需要输入数据库的密码。 具体使用示例,如下图所示: 当输入正确密码之后可...
17.MySQL 的优化方案有哪些?
MySQL 的优化方案有哪些?性能优化(Optimize)指的是在保证系统正确性的前提下,能够更快速响应请求的一种手段。而且有些性能问题,比如慢查询等,如果积累到一定的程度或者是遇到急速上升的并发请求之后,会导致严重的后果,轻则造成服务繁忙,重则导致应用不可用。它对我们来说就像一颗即将被引爆的定时炸弹一样,时刻威胁着我们。因此在上线项目之前需要严格的把关,以确保 MySQL 能够以最优的状态进行运行。同时,在实际工作中还有面试中关于 MySQL 优化的知识点,都是面试官考察的重点内容。 我们本课时的面试题是,MySQL 的优化方案有哪些? 典型回答MySQL 数据库常见的优化手段分为三个层面:SQL和索引优化、数据库结构优化、系统硬件优化等,然而每个大的方向中又包含多个小的优化点,下面我们具体来看看。 1.SQL 和索引优化此优化方案指的是通过优化 SQL 语句以及索引来提高 MySQL 数据库的运行效率,具体内容如下。 1.使用正确的索引索引是数据库中最重要的概念之一,也是提高数据库性能最有效的手段之一,它的诞生本身就是为了提高数据查询效率的,就像字典的目录一样,通过目录可以很...
18.关系型数据和文档型数据库有什么区别?
关系型数据和文档型数据库有什么区别?关系数据库(Relational Database)是建立在关系模型基础上的数据库,借助于几何代数等数学概念和方法来处理数据库中的数据。所谓关系模型是一对一、一对多或者多对多等关系,常见的关系型数据库有 Oracle、SQL Server、DB2、MySQL 等。 而文档型数据库是一种非关系型数据库,非关系型数据库(Not Only SQL,NoSQL)正好与关系型数据库相反,它不是建立在“关系模型”上的数据库。文档型数据库的典型代表是 MongoDB。 我们本课时的面试题是,关系型数据库和文档型数据库有什么区别? 典型回答关系型数据库属于早期的传统型数据库,它有着标准化的数据模型,以及事务和持久化的支持、例如,关系型数据库都会支持的 ACID 特性,也就是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),具体含义如下。 原子性(Atomicity):是指一个事务中的所有操作,要么全部完成、要么全部不完成,不会存在中间的状态。也就是说事务在正常的情况下会执行完成;异常...
19.Redis的过期策略和内存淘汰机制有什么区别?
Redis 的过期策略和内存淘汰机制有什么区别?Redis 和 MySQL 是面试绕不过的两座大山,他们一个是关系型数据库的代表(MySQL),一个是键值数据库以及缓存中间件的一哥。尤其 Redis 几乎是所有互联网公司都在用的技术,比如国内的 BATJ、新浪、360、小米等公司;国外的微软、Twitter、Stack Overflow、GitHub、暴雪等公司。有的公司用 MySQL、有的用 SQL Server、甚至还有的用 Oracle 和 DB2,但缓存无一例外使用的都是 Redis,从某种程度上来讲 Redis 是普及率最高的技术,没有之一。 我们本课时的面试题是,Redis 是如何处理过期数据的?当内存不够用时 Redis 又是如何处理的? 典型回答我们在新增 Redis 缓存时可以设置缓存的过期时间,该时间保证了数据在规定的时间内失效,可以借助这个特性来实现很多功能。比如,存储一定天数的用户(登录)会话信息,这样在一定范围内用户不用重复登录了,但为了安全性,需要在一定时间之后重新验证用户的信息。因此,我们可以使用 Redis 设置过期时间来存储用户的会话信息。 对于...
22.Redis是如何实现高可用的?
Redis是如何实现高可用的?高可用是通过设计,减少系统不能提供服务的时间,是分布式系统的基础也是保障系统可靠性的重要手段。而 Redis 作为一款普及率最高的内存型中间件,它的高可用技术也非常的成熟。 我们本课时的面试题是,Redis 是如何保证系统高可用的?它的实现方式有哪些? 典型回答Redis 高可用的手段主要有以下四种: 数据持久化 主从数据同步(主从复制) Redis 哨兵模式(Sentinel) Redis 集群(Cluster) 其中数据持久化保证了系统在发生宕机或者重启之后数据不会丢失,增加了系统的可靠性和减少了系统不可用的时间(省去了手动恢复数据的过程);而主从数据同步可以将数据存储至多台服务器,这样当遇到一台服务器宕机之后,可以很快地切换至另一台服务器以继续提供服务;哨兵模式用于发生故障之后自动切换服务器;而 Redis 集群提供了多主多从的 Redis 分布式集群环境,用于提供性能更好的 Redis 服务,并且它自身拥有故障自动切换的能力。 考点分析高可用的问题属于 Redis 中比较大的面试题了,因为很多知识点都和这个面试题有关,同时也属于比较难的面...














