029、红黑树和平衡二叉树有什么区别?
红黑树和平衡二叉树有什么区别? 数据结构属于理解一些源码和技术所必备的知识,比如要读懂 Java 语言中 TreeMap 和 TreeSet 的源码就要懂红黑树的数据结构,不然是无法理解源码中关于红黑树数据的操作代码的,比如左旋、右旋、添加和删除操作等。因此本课时我们就来学习一下数据结构的基础知识,方便看懂源码或者是防止面试中被问到。 我们本课时的面试题是,红黑树和二叉树有什么区别? 典型回答 要…
|
|
98
2111 字
|
11 分钟
028、你知道哪些设计模式?分别对应的应用场景有哪些?
你知道哪些设计模式?分别对应的应用场景有哪些? 上一课时我们讲了单例模式的 8 种实现方式以及它的优缺点,可见设计模式的内容是非常丰富且非常有趣。我们在一些优秀的框架中都能找到设计模式的具体使用,比如前面 MyBatis 中(第 13 课时)讲的那些设计模式以及具体的使用场景,但由于设计模式的内容比较多,有些常用的设计模式在 MyBatis 课时中并没有讲到。因此本课时我们就以全局的视角,来重点学…
|
|
26
3204 字
|
17 分钟
027、单例的实现方式有几种?它们有什么优缺点?
单例的实现方式有几种?它们有什么优缺点? 单例模式是 Java 中最简单的设计模式之一,它是指一个类在运行期间始终只有一个实例,我们就把它称之为单例模式。它不但被应用在实际的工作中,而且还是面试中最常考的题目之一。通过单例模式我们可以知道此人的编程风格,以及对于基础知识的掌握是否牢固。 我们本课时的面试题是,单例的实现方式有几种?它们有什么优缺点? 典型回答 单例的实现分为饿汉模式和懒汉模式。 饿…
|
|
24
2433 字
|
25 分钟
026、生产环境如何排除和优化 JVM?
生产环境如何排除和优化 JVM? 通过前面几个课时的学习,相信你对 JVM 的理论及实践等相关知识有了一个大体的印象。而本课时将重点讲解 JVM 的排查与优化,这样就会对 JVM 的知识点有一个完整的认识,从而可以更好地应用于实际工作或者面试了。 我们本课时的面试题是,生产环境如何排查问题? 典型回答 如果是在生产环境中直接排查 JVM 的话,最简单的做法就是使用 JDK 自带的 6 个非常实用的…
|
|
19
2357 字
|
29 分钟
025、你用过哪些垃圾回收器?它们有什么区别?
你用过哪些垃圾回收器?它们有什么区别? 上一课时我们讲了垃圾回收的理论知识,而本课时将介绍这些理论知识的具体实践。垃圾回收器也叫垃圾收集器,不同的厂商对垃圾收集器的实现也是不同的,这里主要介绍目前使用最广泛的 OracleJDK 中自带的 HotSpot 虚拟机中的几个垃圾收集器。 我们本课时的面试题是,你用过哪些垃圾回收器?它们有什么区别? 典型回答 《Java 虚拟机规范》并没有对垃圾收集器的…
|
|
20
2705 字
|
10 分钟
024、垃圾回收算法有哪些?
垃圾回收算法有哪些? 说到 Java 虚拟机不得不提的一个词就是“垃圾回收”(GC,Garbage Collection),而垃圾回收的执行速度则影响着整个程序的执行效率,所以我们需要知道更多关于垃圾回收的具体执行细节,以便为我们选择合适的垃圾回收器提供理论持。 我们本课时的面试题是,如何判断一个对象是否“死亡”?垃圾回收的算法有哪些? 典型回答 垃圾回收器首先要做的就是,判断一个对象是存活状态还…
|
|
22
2135 字
|
13 分钟
023、说一下 JVM 的内存布局和运行原理?
说一下 JVM 的内存布局和运行原理? JVM(Java Virtual Machine,Java 虚拟机)顾名思义就是用来执行 Java 程序的“虚拟主机”,实际的工作是将编译的 class 代码(字节码)翻译成底层操作系统可以运行的机器码并且进行调用执行,这也是 Java 程序能够“一次编写,到处运行”的原因(因为它会根据特定的操作系统生成对应的操作指令)。JVM 的功能很强大,像 Java …
|
|
23
3110 字
|
12 分钟
022、Redis是如何实现高可用的?
Redis是如何实现高可用的? 高可用是通过设计,减少系统不能提供服务的时间,是分布式系统的基础也是保障系统可靠性的重要手段。而 Redis 作为一款普及率最高的内存型中间件,它的高可用技术也非常的成熟。 我们本课时的面试题是,Redis 是如何保证系统高可用的?它的实现方式有哪些? 典型回答 Redis 高可用的手段主要有以下四种: 数据持久化 主从数据同步(主从复制) Redis 哨兵模式(S…
|
|
20
2712 字
|
9 分钟
021、Redis 中如何实现的消息队列?实现的方式有几种?
Redis 中如何实现的消息队列?实现的方式有几种? 细心的你可能发现了,本系列课程中竟然出现了三篇都是在说消息队列,第10篇时讲了程序级别的消息队列以及延迟消息队列的实现,而第15篇讲了常见的消息队列中间件 RabbitMQ、Kafka 等,由此可见消息队列在整个 Java 技术体系中的重要程度。本课时我们将重点来看一下 Redis 是如何实现消息队列的。 我们本课时的面试题是,在 Redis …
|
|
22
2626 字
|
27 分钟
020、Redis 怎样实现的分布式锁?
Redis 怎样实现的分布式锁? “锁”是我们实际工作和面试中无法避开的话题之一,正确使用锁可以保证高并发环境下程序的正确执行,也就是说只有使用锁才能保证多人同时访问时程序不会出现问题。 我们本课时的面试题是,什么是分布式锁?如何实现分布式锁? 典型回答 第06篇时讲了单机锁的一些知识,包括悲观锁、乐观锁、可重入锁、共享锁和独占锁等内容,但它们都属于单机锁也就是程序级别的锁,如果在分布式环境下使用…
|
|
18
2775 字
|
12 分钟