爱分享的淘金达人
http://www.jhzjz.cn/
展开
-
java进阶篇--Nginx 的负载均衡模式有哪些?它的实现原理是什么?
Nginx 是后端工程师和运维工程师,以及前端工程师必须要掌握的必备技能,尤其在分布式系统应用越来越广泛的今天,Nginx 已经占据了 Web 服务器的大壁江山,并且还在不断地增长,比如国内的 BATJ、网易、新浪等公司都可以看到它的身影。我们本课时的面试题是,Nginx 的负载均衡模式有哪些?它的实现原理是什么?回答:在正式开始之前,我们先来了解一下什么是 Nginx?Nginx 是一款开源的高性能轻量级 Web 服务器(也叫 HTTP 服务器),它主要提供的功能是:反向代理、负载均衡和H原创 2020-07-05 10:29:59 · 372 阅读 · 0 评论 -
java进阶篇--TCP 为什么需要三次握手?
TCP 协议是我们每天都在使用的一个网络通讯协议,因为绝大部分的网络连接都是建立在 TCP 协议上的,比如你此刻正在看的这篇文章是建立在 HTTP(Hypertext Transfer Protocol,超文本传送协议) 应用层协议的基础上的,而 HTTP 协议的“底层”则是建立在 TCP 的传输层协议上的。因此可以理解为,你之所以能看到本篇文章就是得益于 TCP 协议的功劳。我们本课时的面试题是,说一下 TCP 三次握手的执行流程,以及为什么需要三次握手?回答:在回答这个问题之前,首先我们需要原创 2020-07-05 10:13:10 · 2501 阅读 · 1 评论 -
java进阶篇--如何保证接口的幂等性?常见的实现方案有哪些?
幂等性问题是面试中常见的面试问题,也是分布式系统最常遇到的问题之一。在说幂等性之前,我们先来看一种情况,假如老王在某电商平台进行购物,付款的时候不小心手抖了一下,连续点击了两次支付,但此时服务器没做任何验证,于是老王账户里面的钱被扣了两次,这显然对当事人造成了一定的经济损失,并且还会让用户丧失对平台的信任。而幂等性问题说的就是如何防止接口的重复无效请求。我们本课时的面试题是,什么是幂等性?如何保证接口的幂等性?回答:幂等性最早是数学里面的一个概念,后来被用于计算机领域,用于表示任意多次请求均与一原创 2020-07-05 10:04:54 · 2491 阅读 · 1 评论 -
java进阶篇--Docker 有什么优点?使用时需要注意什么问题?
Docker 从 2013 年发展到现在,它的普及率已经可以和最常用的 MySQL 和 Redis 并驾齐驱了,从最初偶尔出现在面试中,到现在几乎成为面试中必问的问题之一。如果再不了解 Docker 相关的知识点,可能就会与自己心仪的职位擦肩而过。所以本课时将会带领你对 Docker 相关的知识做一个全面的认识。我们本课的问题是,Docker 有什么优点?使用时需要注意什么问题?回答:Docker 是一个开源(开放源代码)的应用容器引擎,可以方便地对容器进行管理。可通过 Docker 打包各种环原创 2020-07-05 09:42:08 · 682 阅读 · 1 评论 -
java进阶篇--Redis中实现消息队列的方式有几种,如何实现?
细心的你可能发现了,本系列课程中竟然出现了三个课时都是在说消息队列,讲了程序级别的消息队列以及延迟消息队列的实现,又讲了常见的消息队列中间件 RabbitMQ、Kafka 等,由此可见消息队列在整个 Java 技术体系中的重要程度。本课时我们将重点来看一下 Redis 是如何实现消息队列的。我们本课时的面试题是,在 Redis 中实现消息队列的方式有几种?回答:早在 Redis 2.0 版本之前使用 Redis 实现消息队列的方式有两种: 使用 List 类型实现 使用 ZSe...原创 2020-06-23 12:33:34 · 535 阅读 · 1 评论 -
java进阶篇--Redis 的过期策略和内存淘汰机制有什么区别?
Redis 和 MySQL 是面试绕不过的两座大山,他们一个是关系型数据库的代表(MySQL),一个是键值数据库以及缓存中间件的一哥。尤其 Redis 几乎是所有互联网公司都在用的技术,比如国内的 BATJ、新浪、360、小米等公司;国外的微软、Twitter、Stack Overflow、GitHub、暴雪等公司。我从业了十几年,就职过 4、5 家公司,有的公司用 MySQL、有的用 SQL Server、甚至还有的用 Oracle 和 DB2,但缓存无一例外使用的都是 Redis,从某种程度上来讲 Re原创 2020-06-23 12:25:16 · 285 阅读 · 1 评论 -
java进阶篇--MySQL 的优化方案有哪些?
性能优化(Optimize)指的是在保证系统正确性的前提下,能够更快速响应请求的一种手段。而且有些性能问题,比如慢查询等,如果积累到一定的程度或者是遇到急速上升的并发请求之后,会导致严重的后果,轻则造成服务繁忙,重则导致应用不可用。它对我们来说就像一颗即将被引爆的定时炸弹一样,时刻威胁着我们。因此在上线项目之前需要严格的把关,以确保 MySQL 能够以最优的状态进行运行。同时,在实际工作中还有面试中关于 MySQL 优化的知识点,都是面试官考察的重点内容。我们本课时的面试题是,MySQL 的优化方案有哪原创 2020-06-23 12:19:16 · 255 阅读 · 1 评论 -
java进阶篇--Redis 是如何实现高可用的?
高可用是通过设计,减少系统不能提供服务的时间,是分布式系统的基础也是保障系统可靠性的重要手段。而 Redis 作为一款普及率最高的内存型中间件,它的高可用技术也非常的成熟。我们本课时的面试题是,Redis 是如何保证系统高可用的?它的实现方式有哪些?回答:Redis 高可用的手段主要有以下四种: 数据持久化 主从数据同步(主从复制) Redis 哨兵模式(Sentinel) Redis 集群(Cluster)其中数据持久化保证了系统在发生宕机或者重启之后数据...原创 2020-06-23 12:10:09 · 300 阅读 · 1 评论 -
java进阶篇--什么是分布式锁?如何实现分布式锁?
“锁”是我们实际工作和面试中无法避开的话题之一,正确使用锁可以保证高并发环境下程序的正确执行,也就是说只有使用锁才能保证多人同时访问时程序不会出现问题。我们本课时的面试题是,什么是分布式锁?如何实现分布式锁?回答:之前的文章中我们讲了单机锁的一些知识,包括悲观锁、乐观锁、可重入锁、共享锁和独占锁等内容,但它们都属于单机锁也就是程序级别的锁,如果在分布式环境下使用就会出现锁不生效的问题,因此我们需要使用分布式锁来解决这个问题。分布式锁是控制分布式系统之间同步访问共享资源的一种方式。是为了解决分原创 2020-06-23 12:00:31 · 335 阅读 · 1 评论 -
java进阶篇--聊聊设计模式,分别有哪些应用场景?
凡事对做过程序开发的同学来说,都知道设计模式的内容是非常丰富且非常有趣。我们在一些优秀的框架中都能找到设计模式的具体使用,比如前面 MyBatis 中(第 13 课时)讲的那些设计模式以及具体的使用场景,但由于设计模式的内容比较多,有些常用的设计模式在 MyBatis 课时中并没有讲到。因此本课时我们就以全局的视角,来重点学习一下这些常用设计模式。我们本课时的面试题是,你知道哪些设计模式?它的使用场景有哪些?它们有哪些优缺点?回答:设计模式从大的维度来说,可以分为三大类:创建型模式、结构型模式及原创 2020-06-22 16:59:48 · 644 阅读 · 1 评论 -
java进阶篇--红黑树和平衡二叉树有什么区别?
数据结构属于理解一些源码和技术所必备的知识,比如要读懂 Java 语言中 TreeMap 和 TreeSet 的源码就要懂红黑树的数据结构,不然是无法理解源码中关于红黑树数据的操作代码的,比如左旋、右旋、添加和删除操作等。因此本课时我们就来学习一下数据结构的基础知识,方便看懂源码或者是防止面试中被问到。我们本课时的面试题是,红黑树和二叉树有什么区别?回答:要回答这个问题之前,我们先要弄清什么是二叉树?什么是红黑树?二叉树(Binary Tree)是指每个节点最多只有两个分支的树结构,即不存在原创 2020-06-22 16:53:33 · 3631 阅读 · 1 评论 -
java进阶篇--聊聊工作中常用的算法以及它的内部实现过程?
前面的文章中我们介绍了数据结构的知识,数据结构属于计算机存储的基础,有了它才能更好地将数据进行存储。而算法可以这样理解:它是为数据结构服务的,使用合适的算法可以更快地操作和查询这些数据。算法的内容有很多,随随便便一本算法书有个 700 页到 1500 页也是很平常的事,因此我们在这里不能把所有的算法问题全部讲到,即使专门再开设一个算法专栏,也只能挑重点的讲。那么我们好钢就要用在刀刃上,本课时会把面试中经常出现的和平常工作中使用频率最高的算法,拿出来给大家分享。我们本课时的面试题是,你知道哪些算法?讲原创 2020-06-22 15:51:40 · 235 阅读 · 1 评论 -
java进阶篇--生产环境如何排查bug和优化 JVM?
通过前面几个课时的学习,相信你对 JVM 的理论及实践等相关知识有了一个大体的印象。而本课时将重点讲解 JVM 的排查与优化,这样就会对 JVM 的知识点有一个完整的认识,从而可以更好地应用于实际工作或者面试了。我们本课时的面试题是,生产环境如何排查问题?回答:如果是在生产环境中直接排查 JVM 的话,最简单的做法就是使用 JDK 自带的 6 个非常实用的命令行工具来排查。它们分别是:jps、jstat、jinfo、jmap、jhat 和 jstack,它们都位于 JDK 的 bin 目录下,可原创 2020-06-22 14:52:06 · 951 阅读 · 1 评论 -
java进阶篇--垃圾回收算法有哪些?
说到 Java 虚拟机不得不提的一个词就是“垃圾回收”(GC,Garbage Collection),而垃圾回收的执行速度则影响着整个程序的执行效率,所以我们需要知道更多关于垃圾回收的具体执行细节,以便为我们选择合适的垃圾回收器提供理论支持。我们本课时的面试题是,如何判断一个对象是否“死亡”?垃圾回收的算法有哪些?典型回答垃圾回收器首先要做的就是,判断一个对象是存活状态还是死亡状态,死亡的对象将会被标识为垃圾数据并等待收集器进行清除。判断一个对象是否为死亡状态的常用算法有两个:引用计数器算法原创 2020-06-22 14:38:24 · 359 阅读 · 1 评论 -
java进阶篇--聊聊JVM 的内存布局和运行原理?
JVM(Java Virtual Machine,Java 虚拟机)顾名思义就是用来执行 Java 程序的“虚拟主机”,实际的工作是将编译的 class 代码(字节码)翻译成底层操作系统可以运行的机器码并且进行调用执行,这也是 Java 程序能够“一次编写,到处运行”的原因(因为它会根据特定的操作系统生成对应的操作指令)。JVM 的功能很强大,像 Java 对象的创建、使用和销毁,还有垃圾回收以及某些高级的性能优化,例如,热点代码检测等功能都是在 JVM 中进行的。因为 JVM 是 Java 程序能够运行的原创 2020-06-22 13:18:53 · 334 阅读 · 1 评论 -
Java框架篇--MQ的原理及使用场景?你都用过哪些 MQ 中间件?
之前的文章中我们讲过“手写消息队列”,当时粗略的讲了 Java API 中使用 Queue 实现自定义消息队列,以及使用 Delayed 实现延迟队列的示例;同时还讲了 RabbitMQ 中的一些基础概念。本课时我们将会更加深入的讲解 MQ(Message Queue,消息队列)中间件,以及这些热门中间件的具体使用。我们本课时的面试题是,MQ的原理及使用场景?你都用过哪些 MQ 中间件?回答:在介绍 MQ 的使用场景之前,先来回忆一下 MQ 的作用。MQ 可以用来实现削峰填谷,也就是使用它可以解原创 2020-06-22 13:12:39 · 1610 阅读 · 0 评论 -
java框架篇--SpringBoot 和 Spring 有什么区别?
Spring 和 Spring Boot 的区别很多新手容易搞混,从这道简单的面试题也可以很轻易试探出你的 Java 基础功底,如果连这个问题都答不上来的话,通常就没有什么下文了,因为这已经是用人单位对面试者的最低要求了,所以本课时我们就来看一下二者的区别,以及 Spring Boot 的特性。我们本课时的面试题是,Spring 和 Spring Boot 有什么区别?Spring Boot 的优点有哪些?答案:作为 Java 开发人员对 Spring 框架都很熟悉,Spring 为 Java原创 2020-06-22 12:31:43 · 1483 阅读 · 1 评论 -
java框架篇--MyBatis 使用了哪些设计模式?在源码中是如何体现的?
MyBatis 的前身是 IBatis,IBatis 是由 Internet 和 Abatis 组合而成,其目的是想当做互联网的篱笆墙,围绕着数据库提供持久化服务的一个框架,2010 年正式改名为 MyBatis。它是一款优秀的持久层框架,支持自定义 SQL、存储过程及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作,还可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Ordinary Java Object,普通 Java原创 2020-06-22 07:48:46 · 275 阅读 · 0 评论 -
java框架篇--底层源码分析 Spring 的核心功能和执行流程?(下)
上一课时我们讲了 Bean 相关的内容,它其实也是属于 IoC 的具体实现之一,本课时我们就来讲讲 Spring 中其他几个高频的面试点,希望能起到抛砖引玉的作用,能为你理解 Spring 打开一扇门。因为 Spring 涉及的内容和知识点太多了,用它来写一本书也绰绰有余,因此这里我们只讲核心的内容,希望下来你能查漏补缺,完善自己的 Spring 技术栈。我们本课时的面试题是,谈一谈你对 IoC 和 DI 的理解。典型回答IoC(Inversion of Control,翻译为“控制反转”)不是原创 2020-06-22 07:48:31 · 175 阅读 · 0 评论 -
Java框架篇--底层源码分析 Spring 的核心功能和执行流程?(上)
Spring Framework 已是公认的 Java 标配开发框架了,甚至还有人说 Java 编程就是面向 Spring 编程的,可见 Spring 在整个 Java 体系中的重要位置。Spring 中包含了众多的功能和相关模块,比如 spring-core、spring-beans、spring-aop、spring-context、spring-expression、spring-test 等,本课时先从面试中必问的问题出发,来帮你更好的 Spring 框架。我们本课时的面试题是,Spring原创 2020-06-21 20:14:20 · 186 阅读 · 0 评论 -
java基础篇--深克隆和浅克隆有什么区别?它的实现方式有哪些?
使用克隆可以为我们快速地构建出一个已有对象的副本,它属于 Java 基础的一部分,也是面试中常被问到的知识点之一。我们本课时的面试题是,什么是浅克隆和深克隆?如何实现克隆?典型回答浅克隆(Shadow Clone)是把原型对象中成员变量为值类型的属性都复制给克隆对象,把原型对象中成员变量为引用类型的引用地址也复制给克隆对象,也就是原型对象中如果有成员变量为引用对象,则此引用对象的地址是共享给原型对象和克隆对象的。简单来说就是浅克隆只会复制原型对象,但不会复制它所引用的对象,如下图所示:深原创 2020-06-21 17:47:01 · 792 阅读 · 1 评论 -
java基础篇--如何手写一个消息队列和延迟消息队列?
第一次听到“消息队列”这个词时,不知你是不是和我反应一样,感觉很高阶很厉害的样子,其实当我们了解了消息队列之后,发现它与普通的技术类似,当我们熟悉之后,也能很快地上手并使用。我们本课时的面试题是,消息队列的使用场景有哪些?如何手动实现一个消息队列和延迟消息队列?典型回答消息队列的使用场景有很多,最常见的使用场景有以下几个。1.商品秒杀比如,我们在做秒杀活动时,会发生短时间内出现爆发式的用户请求,如果不采取相关的措施,会导致服务器忙不过来,响应超时的问题,轻则会导致服务假死,重则会让服务器原创 2020-06-21 17:40:09 · 729 阅读 · 0 评论 -
java基础篇--动态代理是如何实现的?JDK Proxy 和 CGLib 有什么区别?
90% 的程序员直接或者间接的使用过动态代理,无论是日志框架或 Spring 框架,它们都包含了动态代理的实现代码。动态代理是程序在运行期间动态构建代理对象和动态调用代理方法的一种机制。我们本课时的面试题是,如何实现动态代理?JDK Proxy 和 CGLib 有什么区别?典型回答动态代理的常用实现方式是反射。反射机制是指程序在运行期间可以访问、检测和修改其本身状态或行为的一种能力,使用反射我们可以调用任意一个类对象,以及类对象中包含的属性及方法。但动态代理不止有反射一种实现方式,例如,动态原创 2020-06-21 17:33:27 · 216 阅读 · 0 评论 -
java基础篇--如何实现本地缓存和分布式缓存?
缓存(Cache) 是指将程序或系统中常用的数据对象存储在像内存这样特定的介质中,以避免在每次程序调用时,重新创建或组织数据所带来的性能损耗,从而提高了系统的整体运行速度。以目前的系统架构来说,用户的请求一般会先经过缓存系统,如果缓存中没有相关的数据,就会在其他系统中查询到相应的数据并保存在缓存中,最后返回给调用方。缓存既然如此重要,那本课时我们就来重点看一下,应该如何实现本地缓存和分布式缓存?典型回答本地缓存是指程序级别的缓存组件,它的特点是本地缓存和应用程序会运行在同一个进程中,所以本地原创 2020-06-21 17:25:35 · 838 阅读 · 0 评论 -
Java基础篇--synchronized 和 ReentrantLock 的实现原理是什么?它们有什么区别?
在 JDK 1.5 之前共享对象的协调机制只有 synchronized 和 volatile,在 JDK 1.5 中增加了新的机制 ReentrantLock,该机制的诞生并不是为了替代 synchronized,而是在 synchronized 不适用的情况下,提供一种可以选择的高级功能。我们本课时的面试题是,synchronized 和 ReentrantLock 是如何实现的?它们有什么区别?典型回答synchronized 属于独占式悲观锁,是通过 JVM 隐式实现的,synchron原创 2020-06-21 17:12:37 · 258 阅读 · 0 评论 -
java基础篇--详解 ThreadPoolExecutor 的参数含义及源码执行流程?
线程池是为了避免线程频繁的创建和销毁带来的性能消耗,而建立的一种池化技术,它是把已创建的线程放入“池”中,当有任务来临时就可以重用已有的线程,无需等待创建的过程,这样就可以有效提高程序的响应速度。但如果要说线程池的话一定离不开 ThreadPoolExecutor ,在阿里巴巴的《Java 开发手册》中是这样规定线程池的: 线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的读者更加明确线程池的运行规则,规避资源耗尽的风险。...原创 2020-06-21 14:33:16 · 248 阅读 · 0 评论 -
java基础篇--线程的状态有哪些?它是如何工作的?
线程(Thread)是并发编程的基础,也是程序执行的最小单元,它依托进程而存在。一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源、更加轻量化,也因此被称为轻量级的进程。当然,线程也是面试中常被问到的一个知识点,是程序员必备的基础技能,使用它可以有效地提高程序的整体运行速度。本课时的面试问题是,线程的状态有哪些?它是如何工作的?典型回答线程的状态在 JDK 1.5 之后以枚举的方式被定义在 Thread 的源码中,它总共包含以下 6 个状态:原创 2020-06-21 14:24:14 · 160 阅读 · 1 评论 -
java基础篇--HashMap 底层实现原理是什么?JDK8 做了哪些优化?
HashMap 是使用频率最高的类型之一,同时也是面试经常被问到的问题之一,这是因为 HashMap 的知识点有很多,同时它又属于 Java 基础知识的一部分,因此在面试中经常被问到。本课时的面试题是,HashMap 底层是如何实现的?在 JDK 1.8 中它都做了哪些优化?在 JDK 1.7 中 HashMap 是以数组加链表的形式组成的,JDK 1.8 之后新增了红黑树的组成结构,当链表大于 8 并且容量大于 64 时,链表结构会转换成红黑树结构,它的组成结构如下图所示:数组中的元素我们.原创 2020-06-21 10:55:43 · 371 阅读 · 0 评论 -
java基础篇--String 的特点是什么?它有哪些重要的方法?
你好,我是你的 Java 面试课老师,欢迎进入第 01 课时的内容“String 的特点是什么?它有哪些重要的方法?”。几乎所有的 Java 面试都是以 String 开始的,如果第一个问题没有回答好,则会给面试官留下非常不好的第一印象,而糟糕的第一印象则会直接影响到自己的面试结果,就好像刚破壳的小鹅一样,会把第一眼看到的动物当成自己的母亲,即使它第一眼看到的是一只小狗或小猫,也会默认跟随其后,心理学把这种现象叫做印刻效应。印刻效应不仅存在于低等动物之中,同样也适用于人类,所以对于 String 的知识原创 2020-06-21 10:10:28 · 310 阅读 · 1 评论 -
开篇词:大厂技术面试“潜规则”
你好,我是你的 Java 面试课老师,拥有 10 多年大型系统设计、开发和调优经验,热衷于技术分享,是阿里云社区的认证专家,腾讯社区年度最佳作者。喜欢分享,跟我的个人经历有关:因为曾经吃过亏,所以想通过我的分享让你少走更多的弯路。为什么说源码掌握程度决定 Offer 薪资?和大多数人一样,毕业的时候很单纯,对所有的事情都不在乎。只要有老板“赏识”,给一份编程的工作,我就能没日没夜地干活。即便没有加班费,也没有任何抱怨,只想踏踏实实把自己的话干完,努力提高自己技术水平,幻想着有一天能够出人头地。原创 2020-06-20 23:16:11 · 289 阅读 · 1 评论