摘要:
“IO 多路复用”是编程中常见的技术词汇,使用这种技术的框架有很多,如,Redis、Kafka、Netty、Nginx 中都用到了此技术。那问题来了,什么是 IO 多路复用?它的具体实现技术有哪些?这些技术之间有什么区别?今天我们就来简单的探讨一下。 1.什么是IO多路复用? IO 多路复用技术是一 阅读全文
摘要:
谈起“布隆过滤器”相信大家都不陌生,它也算日常面试中的常见面试题了。例如,当面试官在问到 Redis 模块的相关问题时,可能会问到缓存穿透(Redis 四大经典问题之一),而缓存穿透的经典解决方案之一,则是“布隆过滤器”。 但是,对于布隆过滤器是什么?以及布隆过滤器的实现原理?相信大部分同学都能回答 阅读全文
摘要:
分布式锁(Distributed Lock)是一种用于分布式系统中的同步机制,主要是为了防止分布式系统中,多个服务实例同时操作一个共享资源所带来的并发安全问题。 分布式锁确保在同一时间只有一个实例操作共享资源,从而保证了数据的安全性。 1.分布式锁实现方案 分布式锁的实现方案有多种,例如以下这几种: 阅读全文
摘要:
在 MySQL 中,GROUP BY 和 DISTINCT 都是用来处理查询结果中的重复数据,并且在官方的描述文档中也可以看出:在大多数情况下 DISTINCT 是特殊的 GROUP BY,如下图所示: 官方文档地址:https://dev.mysql.com/doc/refman/8.0/en/d 阅读全文
摘要:
今天有位同学问了磊哥一个问题,大概的意思是“单核服务器可以不加锁吗?”,我觉得很有意思,所以在这里就和各位探讨一下: 1. 问题答案 先说我的理解,单核服务器仍然需要加锁。 因为在单核服务器上也会有线程切换,如果不加锁,那么线程切换后,另一个线程就可以访问其他线程未操作完的共享变量,这就会导致操作的 阅读全文
摘要:
首先,这个问题考察的是你对线程池 execute 方法和 submit 方法的理解,在 Java 线程池的使用中,我们可以通过 execute 方法或 submit 方法给线程池添加任务,但如果线程池中的程序在执行时,遇到了未处理的异常会怎么呢?接下来我们一起来看。 1.execute方法 exec 阅读全文
摘要:
对于我们使用的线程池 ThreadPoolExecutor 来说,停止线程池的方法有以下两个: shutdown():优雅的关闭线程池,即不再接受新任务,但会等待已提交任务(包括正在执行的任务和在队列中等待的任务)执行完毕。等待所有任务都执行完毕后,线程池才会进入终止状态。 shutdownNow( 阅读全文
摘要:
任务编排(Task Orchestration)是指管理和控制多个任务的执行流程,确保它们按照预定的顺序正确执行。 1.为什么需要任务编排? 在复杂的业务场景中,任务间通常存在依赖关系,也就是某个任务会依赖另一个任务的执行结果,在这种情况下,我们需要通过任务编排,来确保任务按照正确的顺序进行执行。 阅读全文
摘要:
在 MySQL 中,limit X,Y 的查询中,X 值越大,那么查询速度也就越慢,例如以下示例: limit 0,10:查询时间大概在 20 毫秒左右。 limit 1000000,10:查询时间可能是 15 秒左右(1秒等于 1000 毫秒),甚至更长时间。 所以,可以看出,limit 中 X 阅读全文
摘要:
Lambda 表达式是 Java 8 引入的一种简洁的表示匿名方法的方式,使用它可以用于替代某些匿名内部类对象,从而让程序更简洁,可读性更好。但 Lambda 表达式的底层是如何实现的呢?接下来我们一起来看。 1.未Lambda表达式 未使用 Lambda 表达式之前,我们创建一个线程,可以这样写: 阅读全文
摘要:
Java 是值传递还是引用传递?这是 Java 中比较基础的一道常见面试题,但对于这道问题的大部分答案都是错的,大部人会这样回答这个问题: 在 Java 中,如果传递的是基本数据类型,那么就是值传递;而如果传递的是对象或数组的话,那么就是引用传递。 然而,这个答案是错的! 定义描述 值传递和引用传递 阅读全文
摘要:
Kafka 以其高吞吐量、低延迟和可扩展性而备受青睐。无论是在实时数据分析、日志收集还是事件驱动架构中,Kafka 都扮演着关键角色。 但是,如果 Kafka 使用不当,也可能会面临性能瓶颈,影响系统的整体效率。所以,了解如何提升 Kafka 的运行效率?对于生产环境的使用和面试都是至关重要的。 那 阅读全文
摘要:
我们在使用 Kafka 时,最简单、最常用的方式是只设置 topic(主题)和 value(消息体),如下所示: 这样的话获取消息的代码也很简单,如下所示: @KafkaListener(topics = "mytopic", groupId = "my-group") public void li 阅读全文
摘要:
这是一道非常经典的 Kafka 问题,是关于 Leader 在“异常”情况下的选举问题。 背景 我们知道 Kafka 中的 Partition(分区)是存储消息的最终介质,但 Partition 又有两种分类: Leader Partition:主分区,负责数据写入和读取。 Follower Par 阅读全文
摘要:
了解了 Kafka 架构就掌握了 Kafka 最核心的知识,Kafka 作为业界最知名、最流行的消息系统和流式处理组件,在面试中和日常工作中经常会见到。那么今天,我们就来聊聊 Kafka 的架构演化与升级,并通过图解的方式让你一目了然。 1.Kafka 初印象 Kafka 最初由 LinkedIn 阅读全文
摘要:
MySQL 主从同步是 MySQL 集群方案中的一种,也是实现难度最低的一种。 然而,现在的面试都不问 MySQL 主从同步原理了,而是开始问主从同步怎么保证数据一致性问题了。 所以,今天就给大家安排上了。 1.什么是数据一致性? 数据一致性是指在一个系统中,数据在不同的部分、不同的时间点,以及不同 阅读全文
摘要:
设计模式是前辈们经过实践验证总结的解决方案,帮助我们构建出更具可维护性、可扩展性和可读性的代码。当然,在面试的过程中,也会或多或少的被问到。那么今天,我们就来看一道设计模式中的常见面试问题:JDK 中都用了哪些设计模式? 我按照大家比较熟悉且好理解的方式,把 JDK 中使用的设计模式总结了一下,如下 阅读全文
摘要:
volatile 是并发编程中的重要关键字,它的名气甚至是可以与 synchronized、ReentrantLock 等齐名,也是属于并发编程五杰之一。 需要注意的是 volatile 并不能保证原子性,因此使用 volatile 并没有办法保证线程安全。 并发编程五杰: PS:“并发编程五杰”是 阅读全文
摘要:
在实际项目开发中,并发编程一定会用(提升程序的执行效率),而用到并发编程那么锁机制就一定会用,因为锁是保证并发编程的主要手段。 在 Java 中常用的锁有以下几个: synchronized(内置锁):Java 语言内置的关键字,JVM 层级锁实现,使用起来较为简单直观。 ReentrantLock 阅读全文
摘要:
CMS(Concurrent Mark Sweep)垃圾收集器是以“最短的停顿”著称的垃圾回收器,因此也是 JDK 9 之前使用最广泛的垃圾回收器之一。那么,问题来了,为什么 CMS 能实现最短停顿时间?CMS 垃圾回收器的工作原理又是啥呢?接下来,我们一起来看。 CMS 工作原理 CMS 之所以能 阅读全文
摘要:
MySQL 作为关系型数据库的典型代表,其流行程度超越于任何数据库,因此在 Java 面试中,MySQL 是一定会被问到的重要知识点。而在 MySQL 中有一道极其常见的面试题,我们这里系统的来看一下,这就是我们今天要讨论的 MySQL 调优问题。 MySQL 调优的大体思路如下: 具体调优思路如下 阅读全文
摘要:
消息队列是面试中一定会被问到的技术模块,虽然它在面试题占比不及并发编程和数据库,但也属于面试中的关键性问题。所以今天我们就来看一道,MQ 中高频,但可能会打破你以往认知的一道面试题。 所谓的关键问题指的是这道面试题会影响你整体面试结果。 我们在面试消息队列(Message Queue,MQ)时,尤其 阅读全文
摘要:
项目亮点和项目难点是面试问到项目时,最常问的两个问题,因为之前的文章已经把项目难点的问题分析过了,所以咱们今天来看看怎么回答项目亮点问题。 PS:项目亮点问题是一个能深度考察求职者对项目理解、技术深度掌握情况的一道经典面试题。今天,就让我们深入探讨一下如何回答这个关键问题,才能展现自己的技术实力。 阅读全文
摘要:
项目难点是指在项目执行过程中遇到的具有挑战性、复杂性或不确定性的问题和障碍,这些问题可能会影响项目的进度、质量、成本和目标的实现。 我这里提供一些比较常见的难点问题: 具体来说。 1.技术难题 常见的技术难题和解决方案有以下这些: 高并发请求问题:在一个短时间内有大量的用户同时访问服务器或应用程序, 阅读全文
摘要:
在 MySQL 集群架构中有两种主流的集群实现,一种是读写分离,而另外一种则是数据分片。所谓的数据分片其实就是今天要聊的分库分表技术。 分库分表技术不但是日常工作中用于解决数据库中的数据量会急剧增长,解决单库单表性能瓶颈的一种方案,更是面试中的高频知识点。 在阿里巴巴的《Java 开发手册》中规定: 阅读全文