自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(304)
  • 资源 (1)
  • 收藏
  • 关注

原创 RocketMQ 学习笔记01

MQ(Message Queue,消息队列)是一种在分布式系统中用于实现进程间通信和数据传输的中间件。它通过在不同进程或应用程序之间传递消息,实现数据的异步处理、解耦和削峰填谷等功能。MQ广泛应用于互联网、高并发场景下的数据传输和处理。RocketMQ是由阿里巴巴开源的一款高性能、高可靠的分布式消息中间件。经过阿里内部多次大规模业务场景(如双十一)的验证,RocketMQ能够处理亿万级别的消息。2016年,RocketMQ开源并捐赠给Apache基金会,现已成为Apache的顶级项目。发展历程早期阶段。

2025-01-16 23:19:03 762

原创 Kafka的Partition故障恢复机制与HW一致性保障-Epoch更新机制详解

Kafka中的每个Topic被划分为多个Partition,每个Partition有多个副本(Replicas),其中一个副本被选举为Leader,其余为Follower。Leader负责处理所有客户端的读写请求,Follower负责同步Leader的数据。当某个Broker或Partition发生故障时,Kafka需要迅速恢复Partition的可用性,确保数据的一致性和系统的高可用性。

2025-01-07 14:30:50 1272

原创 Kafka的Zookeeper元数据梳理学习笔记-04

本章节系统梳理了Kafka在Zookeeper中存储的元数据及其相关机制,包括Broker信息、Controller选举、Leader Partition选举与自动平衡、Partition故障恢复以及HW一致性保障等。通过这些机制,Kafka能够在复杂多变的运行环境中,保持数据的一致性和系统的高可用性。核心要点:Zookeeper的作用:作为集群的协调者,存储关键的元数据,确保集群中各个Broker的一致性和协调性。Controller的职责:集中管理集群的状态,处理分区和副本的分配与管理。

2025-01-07 14:15:00 684

原创 Spring Boot 项目中集成 Kafka-03

和适用于大多数常规应用,简单易用,与 Spring 生态系统无缝集成。Spring Cloud Stream 与 Kafka Binder适用于微服务架构,需处理复杂消息路由与多中间件支持的场景。适用于需要响应式编程模型、高并发和非阻塞消息处理的应用。手动配置 Producer 和 Consumer Bean适用于需要高度自定义 Kafka 配置和行为的应用。适用于复杂集成场景,需要与其他消息渠道和系统协作的应用。嵌入式 Kafka 在测试中使用。

2025-01-06 22:35:56 1556

原创 Kafka核心参数与使用02

属性配置(序列化、分区器、拦截器、幂等性/事务等) → 将消息提交到→Sender线程批量发送到 Broker → 按acks等待 Broker 响应 → 提交或重试。属性配置(反序列化、消费组、分区分配策略等) →poll()拉取消息 → 业务处理 → 提交 offset(手动或自动),与 Broker 同步消费进度。重点:消息在 Producer 端的缓存发送机制与消息在 Consumer 端的主动拉取、分组消费、offset 提交是理解 Kafka 高并发、高吞吐、高可用的关键。其他如。

2025-01-06 22:33:14 984

原创 Kafka 快速实战及基本原理详解解析-01

消息队列(Message Queue,简称 MQ)是一种用于跨进程通信的技术,核心功能是通过异步消息的方式实现系统之间的解耦。Topic是逻辑概念,Producer 和 Consumer 通过 Topic 进行消息传递。Partition是实际存储单元,保证数据分散存储和负载均衡。Broker是 Kafka 的服务器实例,存储 Partition 数据并处理客户端请求。Zookeeper管理 Kafka 集群的元数据和选举过程。Controller。

2025-01-03 23:02:03 1245

原创 7、Spring Bean 的初始化与销毁机制

XML 配置方式:在spring.xml配置文件中,可以通过和属性为 Bean 指定初始化和销毁的方法。这些方法将在 Bean 实例化后和销毁前通过反射机制进行调用。接口实现方式:实现接口的方法和接口的destroy()方法,来处理 Bean 的初始化和销毁逻辑。这种方式相对更符合面向对象设计思想,同时也提供了更细粒度的控制。通过以上实现,我们能够看到 Spring 框架对 Bean 的生命周期管理提供了灵活且强大的支持。

2024-09-13 22:27:14 858

原创 6、实现应用上下文

在实际的软件开发过程中,产品的需求常常变化多端,开发者往往需要在时间紧迫的情况下快速交付项目。为了应对业务上的灵活变更与调整,很多时候我们会选择在已有项目的基础上进行扩展,或者临时搭建出一个能满足需求的工程。然而,这种快速拼凑的开发模式可能会埋下许多隐患。上线后,随着业务的进一步变更,代码的质量和结构往往难以维持,最终陷入维护困境。举个实际的例子,当项目上线后,运营部门发现某个活动的配置不合理,可能立刻需要调整参数,比如更改用户优惠金额、奖金池配置等。

2024-09-09 19:52:34 687

原创 5、设计与实现资源加载器,从Spring.xml解析和注册Bean对象

在实际开发过程中,代码的质量和可维护性往往会因为业务需求的不断变更而逐渐恶化。开发者在最初实现功能时,可能会忽略未来可能发生的变化,导致代码的扩展性不足。为了应对这样的挑战,Spring 框架提供了一种非常优秀的代码组织方式,它通过松耦合的设计模式,让代码更易于扩展和维护。**代码的混乱并非始于大量需求的堆叠,而是始于最初设计阶段对变化的预估不足。**很多时候,开发者在最开始设计代码时,未能充分考虑未来的扩展性和变更需求,这就为后续的混乱埋下了伏笔。

2024-09-08 18:59:08 1165

原创 3、以客户为中心的产品开发:实事求是与工作反推的结合

在开发过程中,华为通过工作反推的方法,从用户需求出发,设计产品功能和体验。在开发过程中,团队不断参考用户反馈,通过A/B测试优化车辆性能,使得比亚迪的车型不仅在续航和充电效率上领先,还能更好地满足用户对智能化和环保的期待。FAQ文档帮助团队预见可能遇到的问题,并提前制定解决方案,而用户故事则通过场景化的描述,让开发团队深入了解客户的使用场景,从而设计出更符合实际需求的产品。结合实事求是的数据分析能力和工作反推的反向设计方法,企业的产品开发不再依赖主观判断,而是建立在真实数据和客户需求的基础上。

2024-09-04 23:41:16 1162

原创 2、小团队(Two-Pizza Teams)

这种小团队、高度自治的模式不仅解决了大团队运作中的沟通和决策问题,还极大地提升了企业的创新能力和市场响应速度。通过建立明确的目标、自治的决策权和良好的协作机制,亚马逊成功地将这种模式打造成了公司文化的一部分,推动企业不断取得新的突破。亚马逊的“小团队”(Two-Pizza Teams)策略是公司内部的组织结构和管理模式的核心之一,这种模式大幅度提高了亚马逊的灵活性、创新能力和快速响应市场变化的能力。即每个团队都必须以接口的方式与其他团队协作,数据和功能通过API共享,避免了直接的依赖和复杂的跨团队协调。

2024-09-04 23:26:33 766

原创 1、快速响应市场和技术变化的深度探讨

快速响应市场和技术变化是现代企业生存和发展的核心能力。通过优化信息流通、调整组织架构、改进决策机制、应用先进技术和培养适应性文化,企业可以大幅提升对变化的应对速度。在这个过程中,领导者的开放式领导、容错文化的建设以及技术手段的落地都至关重要。这些策略和实践的结合,最终将帮助企业在快速变化的市场环境中保持竞争力,实现持续创新和成长。

2024-09-04 23:19:06 1280

原创 4、Spring手写系列-为Bean对象注入属性和依赖Bean的功能实现

在软件开发中,系统的健壮性和抗压能力是衡量程序优劣的重要指标。无论是高并发场景下的超卖问题,还是复杂业务逻辑中的幂等性,开发人员都需要具备处理这些问题的能力。而这些问题往往不是通过简单的CRUD操作就能解决的,它需要深厚的技术积累和良好的架构设计。对于初级程序员来说,可能会遇到代码丢三落四、乱码等问题,这不仅影响系统的稳定性,还可能带来隐患。在这种情况下,要想让你的程序“抗揍”,就必须提升自己的技术水平,理解并应用更高级的设计理念和模式。

2024-09-01 17:25:28 876

原创 3、spring手写系列-基于Cglib实现含构造函数的类实例化策略

编程能力的提升不仅仅是通过大量重复的CRUD操作,而是要深入理解系统架构、设计模式和技术实现细节。特别是在面对复杂的业务场景时,如何设计合理的数据结构、实现高效的核心算法、应用合适的设计模式,以及搭建健壮的系统架构,都是提升编程能力的关键。这不仅决定了系统在高并发和大流量场景下的稳定性,也反映了一个程序员对技术的深刻理解。在上一章节中,我们初步实现了Bean容器的功能,能够将对象实例化交给容器处理。但我们遇到了一个问题:对于带有构造函数的对象,容器实例化会报错。原因是实例化时没有考虑构造函数的入参。

2024-09-01 10:49:01 1160

原创 2、Spring手写系列-实现 Bean 的定义、注册、获取

本文通过手写 Spring Bean 容器的关键源码,详细解析了其核心设计思想和实现方式。通过这种逐步实现的方式,读者可以更好地理解 Spring 框架的设计理念,包括接口与实现的分离、模板方法模式、单例模式的应用等。这些设计不仅保证了系统的灵活性和可扩展性,同时也使得框架能够应对复杂的业务场景。在实际开发中,掌握这些设计思想将对构建稳定、可维护的系统具有重要的指导意义。

2024-08-29 23:14:51 966

原创 1、Spring手写系列-创建一个容器

容器在编程中广泛存在,可以理解为一种用于存放和管理数据的结构。我们在日常编程中使用的ArrayListLinkedListHashSet都是典型的容器。然而,在构建一个类似于 Spring 的 IoC 容器时,我们需要一种更特殊的容器,用来管理应用中的 Bean 对象。这个容器不仅仅是存储数据,还负责对象的创建、管理、依赖注入和生命周期管理。在 IoC 容器的实现中,HashMap被广泛使用,因为它支持快速的键值对存储与查找。

2024-08-26 23:15:22 702 1

原创 19、基于DDD的微服务代码详解

本章将深入探讨如何基于领域驱动设计(DDD)开发微服务代码,并提供具体的代码示例和详细解释。我们将基于第十八章中的请假案例进行讲解,确保每个细节都不放过。回顾第十八章中请假案例的需求和设计,我们已经拆分出两个微服务:请假服务和考勤服务。请假服务的核心业务流程如下:请假微服务使用了许多DDD的设计思想和方法,如聚合、实体、值对象、领域服务和仓储模式。请假微服务包含三个聚合:请假(leave)、人员(person)和审批规则(rule)。我们将详细解释每个聚合中的对象及其职责。聚合根是聚合的入口,负责维护聚合内

2024-07-29 23:13:25 1208

原创 18、基于DDD的微服务设计实例

在本章基于DDD的微服务设计实例中,我们将通过一个实际的微服务设计实例,详细介绍如何基于领域驱动设计(DDD)来构建微服务架构。这个实例不仅涵盖了微服务设计的基本原则,还展示了实际应用中的具体实现细节和最佳实践。

2024-07-29 23:09:58 1841

原创 17、服务和数据在微服务各层的协作

在微服务架构中,服务和数据的协作是确保系统高效运行和可维护性的关键。本章详细探讨了微服务架构中的服务视图和数据视图,帮助我们理解在运行过程中这些服务和实体在各层是如何协作的。

2024-07-29 23:05:46 781

原创 16、DDD系列-向微服务迈进

在本章中,我们将探讨如何从传统的单体架构向微服务架构演进。这个过程需要考虑许多因素,包括微服务的驱动力、所需条件、服务粒度的确定以及系统复杂性的治理。

2024-07-29 23:00:43 633

原创 15、如何保证领域模型与代码模型一致

在代码中,为每个领域对象定义对应的类。// 构造方法、getter和setter方法// 构造方法、getter和setter方法// 构造方法、getter和setter方法。

2024-07-28 10:36:28 404

原创 14、如何⽤DDD设计微服务代码模型

在完成领域模型设计后,接下来我们就可以开始微服务的设计和 落地了。在微服务落地前,⾸先要确定微服务的代码结构,也就是我 下⾯要讲的微服务代码模型。只有建⽴了标准的微服务代码模型和代码规范后,我们才可以将 领域对象映射到代码对象,并将它们放⼊合适的代码⽬录结构中。标 准的代码模型可以让项⽬团队成员更好地理解代码,根据统⼀的代码 规范实现团队协作,也可以让微服务各层的业务逻辑互不⼲扰、分⼯ 协作、各据其位、各司其职,避免不必要的代码混淆,还可以让你在 微服务架构演进时,轻松完成代码重构。

2024-07-22 23:15:05 968

原创 3、计算机网络通信及其编程:深入Linux内核理解epoll

当某一进程调用 epoll_create 方法时,Linux 内核会创建一个 eventpoll 结构体,在内核 cache 里建了个红黑树用于存储以后 epoll_ctl 传来的 socket 外,还会再建立一个 rdllist 双向链表,用于存储准备就绪的事件,当 epoll_wait 调用时,仅仅观察这个 rdllist 双向链表里有没有数据即可。有数据就返回,没有数据就 sleep,等到 timeout 时间到后即使链表没数据也返回。

2024-07-16 22:45:31 1039

原创 2、Netty系列-计算机网络通信及其编程:BIO、NIO、直接内存与零拷贝深入解析

NIO 库是在 JDK 1.4 中引入的。NIO 弥补了原来的 BIO 的不足,它在标准 Java 代码中提供了高速的、面向块的 I/O。NIO 被称为 no-blocking io 或者 new io 都说得通。Zero Copy 意为“零拷贝”,在计算机操作系统中是指 CPU 不需要调用数据直接从一个地址复制到另一个地址,避免了内核态与用户态之间频繁的数据拷贝。直接内存(Direct Memory)是在堆外分配的内存,不受 Java 垃圾回收机制(GC)管理。

2024-07-16 09:46:46 1219

原创 13、如何用DDD重构中台业务模型

领域驱动设计(Domain-Driven Design,DDD)是一种设计方法论,旨在通过紧密结合业务领域和软件设计来解决复杂业务问题。DDD提倡从业务需求出发,建立清晰的领域模型,并根据该模型设计系统架构。DDD的核心思想包括领域模型、限界上下文(Bounded Context)和聚合(Aggregate)等概念。

2024-07-16 09:21:44 795

原创 1、netty系列-计算机网络通信及TCP/IP协议详细知识点

计算机网络是通过通信线路将地理上分散的计算机系统和通信设备连接起来,以实现资源共享和信息传递的系统。局域网(LAN):作用范围一般为几米到几十公里,通常用于企业、学校或家庭内部的网络。城域网(MAN):作用范围介于局域网和广域网之间,通常覆盖一个城市或大都市区。广域网(WAN):作用范围一般为几十到几千公里,覆盖范围可以跨越城市、国家甚至大陆。按拓扑结构:如总线型、环型、星型、网状。按信息的交换方式:如电路交换、报文交换、报文分组交换。

2024-07-15 09:39:47 926

原创 12、如何用事件风暴构建领域模型

事件风暴是一种高效的领域建模技术,通过将领域专家和开发团队聚集在一起,共同探索和识别业务领域中的关键事件和行为,从而构建出清晰的领域模型。通过对事件风暴的深入理解和实践应用,我们可以更好地设计和构建复杂的分布式系统,更加灵活地应对快速变化的业务需求,提升系统的可维护性和扩展性。事件风暴(Event Storming)是一种高效的领域建模技术,通过将领域专家和开发团队聚集在一起,共同探索和识别业务领域中的关键事件和行为,从而构建出清晰的领域模型。例如,谁触发了这个事件,谁是事件的参与者,谁是事件的受益者等。

2024-07-14 22:37:30 1174

原创 11、中台-DDD-几种微服务架构模型对比分析

其核心思想是通过明确各层的职责和边界,来实现系统的高内聚、低耦合。虽然DDD分层架构、洋葱架构和六边形架构在表现形式上存在很大差异,但它们的核心设计思想是一致的,都是为了实现核心业务逻辑和技术实现细节的分离和解耦。在微服务设计中,需要通过仓储模式和依赖倒置设计方法,将业务逻辑与基础资源逻辑解耦,减少基础设施变更对业务逻辑的影响,提升系统的可维护性和扩展性。通过对三种架构模型的深入理解和实践应用,我们可以更好地设计和构建复杂的分布式系统,更加灵活地应对快速变化的业务需求,提升系统的可维护性和扩展性。

2024-07-11 22:47:01 975

原创 10、DDD分层架构

DDD分层架构其实也在不断发展和演进。早期的DDD分层架构是一种各层都依赖于基础层的传统四层架构,后来这种四层架构进一步优化,实现了各层对基础层的解耦和依赖倒置。在最早的传统四层架构中,基础层被其他层依赖,位于最核心的位置,是其他各层依赖的核心。但实际上领域层才是软件的核心,所以这种依赖关系是有问题的。后来就采用了依赖倒置设计,各层服务通过仓储接口访问基础层,从而优化了传统的DDD四层架构,实现了DDD各层对基础层的解耦。我们本章要重点讲解的就是优化后的DDD分层架构。

2024-07-08 23:18:14 1557

原创 10、Redis-位图(Bitmap)与计数位图(Counting Bitmap)以及布隆过滤器

位图是一种高效的二进制数据结构,通过使用位数组来表示数据集合中的元素是否存在。计数位图是位图的一种扩展,能够记录元素的出现次数。布隆过滤器则通过多个哈希函数和位图实现高效的集合成员查询。位图、计数位图和布隆过滤器在存储和查询方面具有极高的空间效率和查询速度,适用于快速查找、去重、计数和集合操作等场景。通过本文的详细介绍和图示解释,读者可以深入理解这些数据结构和它们在 Redis 中的实际应用。希望本文能帮助读者在实际项目中更好地应用这些高效的数据结构。

2024-07-08 07:34:25 1136

原创 9、领域事件:解耦微服务的关键

领域事件是指在领域模型中发生的事件,它们通常代表着领域中重要的业务变化。例如,在游戏中,领域事件可以表示玩家升级、任务完成、物品掉落等关键行为。这些事件可以触发后续的业务逻辑,例如奖励发放、统计更新、排行榜刷新等。

2024-07-08 07:06:52 880

原创 13、广告-算法优化

算法优化是程序化广告中的重要技术,通过优化广告投放策略、用户行为分析、竞价算法和实时数据处理,可以提高广告的精准度和效果。理解和掌握算法优化的相关技术和操作流程,是广告从业者提升广告效果和优化投放策略的重要保障。算法优化在程序化广告中起着至关重要的作用,通过优化算法可以提高广告投放的精准度和效果。用户行为分析是指通过对用户的浏览、点击、购买等行为数据进行分析,了解用户的兴趣和需求,从而优化广告投放策略。竞价算法是程序化广告的核心,通过优化竞价算法,可以在保证广告效果的同时,最大限度地节约广告成本。

2024-07-07 18:24:50 1112

原创 12、广告-广告验证

广告验证(Ad Verification)是指通过一系列技术和服务,确保广告在正确的时间、地点和环境中展示,以防止广告欺诈、确保品牌安全和提高广告的可见性。广告验证是确保广告投放效果和保护广告主利益的重要手段,通过防作弊、品牌安全和广告可视性验证,可以有效提高广告投放的质量和效果。广告验证平台在广告投放过程中扮演着重要角色,通过先进的技术手段和严格的监测机制,帮助广告主实现精准投放和效果最大化。理解和掌握广告验证的相关技术和操作流程,是广告从业者提升广告效果和保护广告主利益的重要保障。

2024-07-07 18:23:46 423

原创 11、广告-数据统计原理

数据统计是程序化广告中非常重要的一环,通过对广告数据和用户行为数据的统计分析,广告主可以评估广告效果、优化投放策略,提升用户转化率和广告收益。针对iOS设备,由于上架审查严格,广告主一般不会集成统计SDK,而是通过服务器对服务器(S2S)方式对接,获取转化数据。通过上述数据统计逻辑,广告主可以有效地监测广告效果,优化投放策略,从而提高广告的ROI(投资回报率)。

2024-07-07 18:22:22 452

原创 10、广告-用户数据中心

用户数据中心在程序化广告中的作用至关重要,通过对用户数据的采集、处理和应用,实现广告的精准投放和效果优化。DMP作为用户数据中心的核心,通过标签生成、Look Alike模型、双向对接和数据统计与分析等技术手段,为广告主提供强大的数据支持,帮助其在竞争激烈的广告市场中取得优势。理解和掌握用户数据中心的相关技术和操作流程,是广告从业者提高广告效果和优化投放策略的重要保障。Look Alike模型通过分析现有用户的标签特征,找到与之相似的新用户,从而扩大广告投放的覆盖范围,提高广告效果。

2024-07-07 18:20:23 1026

原创 9、程序化创意

程序化创意和用户数据中心是程序化广告中的重要技术,通过动态创意优化和用户画像,可以实现广告的精准投放和效果最大化。同时,数据统计原理为广告效果评估和优化提供了科学依据。在实际操作中,广告主需要灵活运用这些技术和原理,不断优化广告投放策略,以实现最佳的广告效果。

2024-07-07 18:19:36 744

原创 9、Redis 高级数据结构 HyperLogLog 和事务

HyperLogLog 和事务是 Redis 中两个重要的高级功能。HyperLogLog 提供了高效的基数估计算法,适用于大数据场景的去重统计。Redis 事务提供了简单的原子性操作,适用于需要保证数据一致性的场景。通过 Redis 7.0 的优化和新功能,Redis 的性能和扩展性进一步提升,适用于更多复杂的应用场景。

2024-07-07 17:53:17 979

原创 8、Redis 的线程模型、I/O 模型和多线程

Redis 基于 Reactor 模式开发了网络事件处理器 - 文件事件处理器(file event handler,简称 FEH)。该处理器是单线程的,所以 Redis 设计为单线程模型。通过 I/O 多路复用同时监听多个 socket,根据 socket 当前执行的事件选择对应的事件处理器。当被监听的 socket 准备好执行 accept、read、write、close 等操作时,FEH 调用 socket 关联的事件处理器处理事件。

2024-07-07 17:47:43 1209

原创 7、Redis 队列与 Stream

Stream 是 Redis 5.0 引入的一种新的数据结构,类似于 Kafka 的设计。它是一个强大的支持多播的可持久化消息队列,适用于实时数据处理和消息传递。基本结构Stream 由消息链表组成,每个消息都有一个唯一的 ID 和对应的内容。消息 ID 是由时间戳和序号组成的,例如,表示在时间戳时生成的第 5 条消息。每个 Stream 在 Redis 中被存储为一个键值对,其中键是 Stream 的名称,值是消息链表。持久化。

2024-07-07 17:36:06 1089 1

原创 6、Redis系统-数据结构-07-QuickList

在 Redis 中,快速列表通过结合双向链表和压缩列表的优点,实现了高效的存储和操作,适用于需要频繁插入、删除和查找的场景。填充因子越小,每个节点包含的元素越少,插入和删除操作的性能越高,但内存利用率可能会下降。压缩深度越大,压缩列表节点之间的数据压缩程度越高,内存利用率越高,但解压缩操作的开销可能会增加;压缩深度越小,压缩列表节点之间的数据压缩程度越低,解压缩操作的开销较小,但内存利用率可能会下降。查找元素时,通过遍历快速列表节点,查找包含目标元素的压缩列表,然后在压缩列表中查找目标元素。

2024-07-07 15:59:01 954

单片机计算器

简述单片机的计算器的代码和仿真文件。便于学生下载学习。

2015-12-30

空空如也

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

TA关注的人

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