自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(115)
  • 收藏
  • 关注

原创 小太阳面包的做法

面团原料 - 第1部分。面团原料 - 第2部分。面团原料 - 第3部分。

2025-12-09 16:49:29 140

原创 热狗卷面包做法

热狗卷面包

2025-12-09 16:35:05 200

原创 意大利面包棒

意大利面包棒制作方法:使用面包粉和低筋面粉混合,加入酵母、糖、盐等原料揉至出膜。经过多次折叠发酵后分割成小面团,搓成长条进行最后发酵。表面刷橄榄油后烘烤,初期需制造蒸汽环境。还可做成芝麻口味,做法略有不同。成品外脆内软,是经典的意式小食。制作时需注意发酵状态和蒸汽控制。

2025-12-04 15:52:41 231

原创 面包制作的4种发酵方法

直接法,面团一次性制作完成后直接开始发酵,制作流程简单,发酵时间短,面团损耗小,可直接体现面包风味。但直接法面包相对老化得较快。

2025-12-02 18:20:48 838

原创 贝果面包的做法

减少酵母,可能是发酵过度的原因,换成低糖酵母试一下,因为这一版用的是高糖酵母贝果的圆圈稍微大一点,因为要给它膨胀留一些空间松参:高活性酵母(低糖型)10g发酵面2-4公斤,推算范围:2.5g可发酵500g - 1000g 左右这一版用了1.6g左右的酵母,酵母用的是松参低糖酵母,盐改成了4g,酵母后放,和成面团后,醒发10分钟左右。第二版结果:贝果开裂,好的一点是贝果的底部不再那样湿润,预热烤箱的时候,将烤盘一起预热,底部就会干干的,第二改进点是,过完热水,沥水里的干一点再烤。

2025-11-28 23:11:53 908

原创 零拷贝应用场景

大部分场景下,在Netty接收和发送ByteBuffer的过程中会使用直接内存进行Socket通道读写,使用JVM的堆内存进行业务处理,会涉及直接内存、堆内存之间的数据复制。内存的数据复制其实是效率非常低的,Netty提供了多种方法,以帮助应用程序减少内存的复制。Netty中的零拷贝和操作系统层面上的零拷贝是有区别的,不能混淆,我们所说的Netty零拷贝完全是基于Java层面或者说用户空间的,它更多的是偏向于应用中的数据操作优化,而不是系统层面的操作优化。

2025-07-26 19:44:30 1103

原创 Kafka MQ 消费者应用场景

在 Kafka 中默认的消费位移的提交方式是自动提交,这个由消费者客户端参数配置,默认值为 true。当然这个默认的自动提交不是每消费一条消息就提交一次,而是定期提交,这个定期的周期时间由客户端参数配置,默认值为5秒,此参数生效的前提是参数为true。在代码清单3-1中并没有展示出这两个参数,说明使用的正是默认值。在默认的方式下,消费者每隔5秒会将拉取到的每个分区中最大的消息位移进行提交。

2025-07-26 17:25:42 665

原创 Java8 默认的垃圾收集器

在Java中使用Metaspace(元空间)而移除了PermGenspace(永久区)。设置JVM的参数PermSize和MaxPermSize时会被忽略并给出警告。但是类的元数据信息(metadata)还在,只是不再存储在连续的堆空间中,而是移动到了被称为”Metaspace(元空间)”的本地内存(Native memory)中。结果分析:由结果可以看出Java8的GC情况是:-XX:+UseParallelGC,即Parallel Scavenge(新生代) + Parallel Old(老生代)。

2025-07-26 01:00:24 454

原创 Nacos 一致性协议 Distro协议

Distro 协议是 Nacos 社区自研的一种 AP 分布式协议,是面向临时实例设计的一种分布式协议,其保证了在某些 Nacos 节点宕机后,整个临时实例处理系统依旧可以正常工作。作为一种有状态的中间件应用的内嵌协议,Distro 保证了各个 Nacos 节点对于海量注册请求的统一协调和存储。

2025-07-25 17:45:02 1245

原创 JVM 垃圾收集器CMS和G1

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。目前很大一部分的Java应用集中在互联网网站或者基于浏览器的B/S系统的服务端上,这类应用通常都会较为关注服务的响应速度,希望系统停顿时间尽可能短,以给用户带来良好的交互体验。CMS收集器就非常符合这类应用的需求。其中初始标记、重新标记这两个步骤仍然需要“Stop The World”​。初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快;

2025-07-24 17:19:35 978

原创 Kafka MQ 配置消费者

Kafka MQ 配置消费者

2025-07-23 22:13:04 227

原创 Kafka MQ 消费者

Kafka MQ 消费者

2025-07-23 00:13:27 246

原创 Kafka MQ 消费者与消费者群组

假设我们有一个应用程序,它从一个Kafka主题读取消息,在对这些消息做一些验证后再把它们保存起来。应用程序需要创建一个消费者对象,订阅主题并开始接收消息、验证消息和保存结果。但过了一阵子,生产者向主题写入消息的速度超过了应用程序验证数据的速度,这时候该怎么办呢?如果只使用单个消费者来处理消息,那么应用程序会远远跟不上消息生成的速度。显然,此时很有必要对消费者进行横向伸缩。就像多个生产者可以向相同的主题写入消息一样,也可以让多个消费者从同一个主题读取消息。Kafka消费者从属于消费者群组。

2025-07-22 09:17:04 80

原创 RocketMQ 可靠性优先的生产者和消费者

顺序消息是指消息的消费顺序和产生顺序相同,在有些业务逻辑下,必须保证顺序。比如订单的生成、付款、发货,这3个消息必须按顺序处理才行。顺序消息分为全局顺序消息和部分顺序消息,全局顺序消息指某个Topic下的所有消息都要保证顺序;部分顺序消息只要保证每一组消息被顺序消费即可,比如上面订单消息的例子,只要保证同一个订单ID的三个消息能按顺序消费即可。

2025-07-21 16:48:50 99

原创 RocketMQ 里程碑版本

RocketMQ 里程碑版本

2025-07-21 10:43:12 132

原创 Kafka MQ 控制器 broker

在 Kafka 集群中会有一个或多个 broker,其中有一个 broker 会被选举为控制器(Kafka Controller)​,它负责管理整个集群中所有分区和副本的状态。当某个分区的leader副本出现故障时,由控制器负责为该分区选举新的leader副本。当检测到某个分区的ISR集合发生变化时,由控制器负责通知所有broker更新其元数据信息。当使用脚本为某个topic增加分区数量时,同样还是由控制器负责分区的重新分配。

2025-07-20 14:31:43 144

原创 RocketMQ路由中心NameServer

主要介绍RocketMQ路由管理、服务注册及服务发现机制。NameServer是整个RocketMQ的“大脑”​,相信大家对“服务发现”这个词并不陌生,分布式服务SOA架构体系的服务注册中心主要提供服务调用的解析服务,指引服务调用方(消费者)找到“远方”的服务提供者,完成网络通信,那么RocketMQ的路由中心存储的是什么数据呢?作为一款高性能的消息中间件,如何避免NameServer的单点故障,提供高可用性呢?让我们带着这些疑问,一起进入RocketMQ NameServer的精彩世界。本章重点内容如下。

2025-07-19 23:23:13 216

原创 RocketMQ 在Broker端进行消息过滤

RocketMQ 在Broker端进行消息过滤

2025-07-19 16:28:48 240

原创 RocketMQ 生产者

RocketMQ 生产者

2025-07-19 16:08:53 298

原创 RocketMQ 消费者

RocketMQ 消费者

2025-07-19 15:52:54 284

原创 RocketMQ 配置和使用介绍

RocketMQ 配置和使用介绍

2025-07-19 11:27:33 408

转载 Nacos 的一致性模型 AP 和 CP

Nacos 是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台。它的全称是 Naming and Configuration Service,旨在帮助开发者更轻松地构建、交付和管理微服务应用。服务发现:支持服务的注册和发现,确保服务之间的通信高效且可靠。动态配置:支持动态配置管理,允许在不重启服务的情况下更新配置。服务管理:提供服务实例的健康检查、负载均衡和故障转移等功能。

2025-07-17 16:48:32 1025

原创 高并发四种IO模型的底层原理

为了避免用户进程直接操作内核,保证内核安全,操作系统将内存(虚拟内存)划分为两部分:一部分是内核空间(Kernel-Space),另一部分是用户空间(User-Space)。在Linux系统中,内核模块运行在内核空间,对应的进程处于内核态;用户程序运行在用户空间,对应的进程处于用户态。操作系统的核心是内核程序,它独立于普通的应用程序,既有权限访问受保护的内核空间,也有权限访问硬件设备,而普通的应用程序并没有这样的权限。内核空间总是驻留在内存中,是为操作系统的内核保留的。

2025-07-15 23:19:52 1121

原创 Java 并发AQS为什么是双向链表

AQS采用双向链表设计的主要原因在于其高效性:双向链表便于快速插入/删除节点(如线程中断时移除节点),能直接访问前驱节点判断线程状态,减少头部竞争,支持条件队列高效迁移,以及从尾部遍历快速定位线程。这些特性使双向链表成为AQS实现高并发同步机制的最佳选择,有效提升了线程管理和同步操作的效率。

2025-07-11 22:48:55 463

原创 Java HashMap已存在的值是否覆盖

Java HashMap已存在的值是否覆盖

2025-07-10 22:15:05 600

原创 Java HashMap 扩容数组中单链表的位置变化分析

Java HashMap 扩容数组中单链表的位置变化分析

2025-07-10 17:32:51 221

原创 Java 并发 Monitor机制

设objectX是任意一个对象,monitorX是这个对象对应的内部锁,假设有线程A、B、C同时申请monitorX,那么由于任意一个时刻只有一个线程能够获得(占用/持有)这个锁,因此除了胜出(即获得了锁)的线程(这里假设是B)外,其他线程(这里就是A和C)都会被暂停(线程的生命周期状态会被调整为BLOCKED)。如果有个线程执行了objectX.wait(),那么该线程就会被暂停(线程的生命周期状态会被调整为WAITTING)并被存入objectX的Wait Set(以下记为waitSetX)之中。

2025-07-09 17:20:38 939

原创 MySQL 间隙锁

MySQL 间隙锁

2025-07-09 17:11:31 272

原创 MySQL 多版本并发控制MVVC

MySQL 多版本并发控制MVVC

2025-07-09 17:10:13 826

原创 LRU算法原理及实现,最近最少使用算法

LRU算法原理及实现,最近最少使用算法

2025-07-05 17:30:49 1295

原创 数据结构,跳跃表的实现原理和适用场景

数据结构,跳跃表的实现原理和适用场景

2025-07-05 15:29:50 1035

原创 Redis 持久化

RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。命令有那么只要满足以下三个条件中的任意一个,BGSAVE。

2025-06-26 23:02:00 365

原创 Redis 为什么选用跳跃表,而不是红黑树

一般来说,平衡树每个节点包含2个指针(分别指向左右子树),而skiplist每个节点包含的指针数目平均为1/(1-p),具体取决于参数p的大小。而哈希表在保持较低的哈希值冲突概率的前提下,查找时间复杂度接近O(1),性能更高一些。Redis只在两个地方用到了跳跃表,一个是实现有序集合键(zset),另一个是在集群节点中用作内部数据结构,除此之外,跳表在Redis里面没有其他用途。2)平衡树的插入和删除操作可能引发子树的调整,逻辑复杂,而skiplist的插入和删除只需要修改相邻节点的指针,操作简单又快速。

2025-06-26 23:01:00 343

原创 Redis 缓存穿透、雪崩、击穿

缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存。代码流程想象一下这个情况,如果传入的参数为-1,会是怎么样?这个-1,就是一定不存在的对象。就会每次都去查询数据库,而每次查询都是空,每次又都不会进行缓存。假如有恶意攻击,就可以利用这个漏洞,对数据库造成压力,甚至压垮数据库。即便是采用UUID,也是很容易找到一个不存在的KEY,进行攻击。

2025-06-26 22:59:17 333

原创 Redis 对象和数据结构

对象的typeTYPETYPE命令的实现方式也与此类似,当我们对一个数据库键执行TYPE。

2025-06-26 22:57:46 574

原创 Java 并发掌握AQS的原理及应用

本文深入解析了Java并发编程中的AQS(AbstractQueuedSynchronizer)框架及其应用。主要内容包括: AQS是Java同步类(Lock、Semaphore等)的基础框架,提供原子状态管理、线程阻塞/唤醒和队列模型功能 以ReentrantLock为例,对比分析其与synchronized的特性差异,展示AQS在实际锁实现中的应用 详细剖析AQS的五层架构设计,从API层到底层数据结构,重点讲解独占锁的实现机制 介绍AQS核心数据结构Node,解析CLH变体队列的节点实现和状态管理 通

2025-06-18 14:46:46 907

原创 JVM 四种垃圾收集算法

标记-清除算法是最基础的收集算法,如同它的名字一样,算法分为标记和清除两个阶段,首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,标记过程其实就是通过引用计数算法或者根搜索算法来判断对象是否存活。之所以说它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其不足进行改进而得到的。它的主要不足有两个:一个是效率问题,标记和清除两个过程的效率都不高;

2025-06-16 10:48:09 870

原创 MySQL 理解B树与B+树

MySQL 理解B树与B+树

2025-05-21 10:18:27 1310

原创 MySQL 索引的增删改查

MySQL 索引的增删改查

2025-05-21 10:10:53 672

原创 Java 线程池 ThreadPoolExecutor

Java 线程池 ThreadPoolExecutor

2025-05-20 17:58:23 973

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除