- 博客(183)
- 收藏
- 关注
原创 MySQL 中的 MVCC 版本控制机制原理
MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种数据库事务并发控制机制,主要用于提高数据库的读写性能。它通过。
2025-04-03 01:42:57
461
原创 Mysql 在什么样的情况下会产生死锁?
在 MySQL 中,死锁是指两个或多个事务相互等待对方释放锁,导致所有相关事务无法继续执行的情况。死锁会影响数据库的并发性能,因此需要及时检测并处理。假设有两个事务 T1 和 T2:事务 T1 首先锁定 表 A 的行 1。然后尝试锁定 表 B 的行 1。事务 T2 首先锁定 表 B 的行 1。然后尝试锁定 表 A 的行 1。T1 锁定了表 A 的行 1,并等待获取表 B 的行 1。T2 锁定了表 B 的行 1,并等待获取表 A 的行 1。此时,T1 和 T2 互相等待,导致死锁。
2025-04-02 19:25:12
357
原创 Prometheus 和 Grafana 之间的数据传输方式
大部分监控场景,Grafana 从 Prometheus 直接查询数据并可视化。,Grafana 直接查询 Prometheus,无需额外组件。:大规模数据存储,历史数据分析,Prometheus 存储扩展。,避免 Prometheus 15 天数据过期问题。,数据只能保存一段时间(默认 15 天),避免 Prometheus 单点故障。:短时任务(如定时任务、批处理):日志监控、外部系统数据推送。
2025-04-01 11:59:30
560
原创 多级限流防止 Redis 被打爆
直接用 Lua 脚本保证限流逻辑的原子性,减少 Redis 服务器的多次。拦截大部分请求,减少 Redis 压力,只有必要时才访问 Redis。方案,结合本地限流、缓存和异步队列,提高系统稳定性。记录最近请求状态,减少 Redis 访问次数。,大部分请求本地拦截,不会打爆 Redis。为了避免 Redis 被打爆,建议采用。,只有本地缓存没拦截时才访问 Redis。调用,避免 Redis 负载过高。,本地缓存读写比 Redis 快。,不需要每次都访问 Redis。,防止 Redis 被打爆。
2025-04-01 11:48:05
505
原创 Redis 限流
用 Redis 来实现限流,结合 Spring Boot 的拦截器或者网关过滤器来执行。固定窗口的缺点是,窗口切换时可能导致流量突增。滑动窗口限流可以缓解这个问题。适用于简单的请求限流,比如每秒最多允许 100 次请求。,允许一定程度的突发流量。
2025-04-01 11:40:07
249
原创 A/B 测试评估广告素材的表现
在广告投放场景中,(也称)是一种数据驱动的方法,用于比较两个或多个不同的广告素材(如图片、文案、标题、按钮颜色等)的效果,找出最优的广告版本,以提升广告转化率和 ROI(投资回报率)。如果 B 组的 CTR 显著高于 A 组,则自动选择 B 版本用于正式投放,从而提高广告效果。在实际广告平台(如 Google Ads、Facebook Ads)中,A/B 测试通常结合自动进行,系统会根据实时数据自动调整广告投放,选择最优版本,从而最大化广告收益。
2025-03-31 16:43:16
469
原创 虚拟货币和 Token
你可以把 Token 当作是虚拟货币的一种,但不是所有虚拟货币都是 Token。Token 主要依赖智能合约,并不能独立运行,而原生币(如 BTC、ETH)本身就带有完整的区块链生态。视为虚拟货币的一种形式,但虚拟货币的范围比 Token 更广。有一定的关系,但不能完全等同。虚拟货币(Cryptocurrency)
2025-03-28 16:24:54
409
原创 Redis 中的 LFU 算法源码解析
Redis 的 LFU(Least Frequently Used,最不经常使用)淘汰算法主要用于。由于有些数据可能短期内访问频繁,但长期不再被访问,因此 Redis 采用了。LFU 计数在每次访问键时都会递增,但递增方式不是简单。,避免了某些短期流行的键占用大量缓存,同时也能让真正的。时,以最少使用频率的键进行淘汰。Redis 的 LFU 机制相比 LRU。来存储访问频率计数,存储在。
2025-03-28 00:58:42
609
原创 Redis 中的过期策略和内存淘汰策略
Redis 的(Expiration Policy)决定了,确保内存资源的合理使用。Redis 提供了:只有当客户端访问某个 key 时,Redis 才会检查它是否过期,过期则删除,否则继续保留。GETSETEXISTSnilGET✅ 访问少的过期 key 不会占用 CPU 资源进行扫描,减少 Redis 负担。✅ 适用于对响应时间敏感的业务,因为删除操作分散到用户访问时进行。❌ 过期 key 可能长时间,如果某些 key 过期但长期未访问,它们不会被删除,导致。:Redis 每隔一段时间主动扫描。
2025-03-27 15:17:17
735
原创 CPU 利用率异常高,该如何排查和解决?
在 Java 微服务项目中,CPU 利用率异常升高(接近 100%)可能是由高并发、死循环、线程问题、GC 频繁触发、锁竞争等因素引起的。通过合理调整线程池、优化 GC、减少锁竞争,可以有效降低 CPU 占用,提高微服务的性能。(Full GC)频繁触发,说明 GC 可能是 CPU 占用的主要原因。如果 CPU 主要消耗在 GC 上,可以通过。如果是 Java 17+,可以使用。如果是 Windows,可以使用。查看进程的 CPU 使用情况。运行 60 秒后,使用。找到问题线程后,使用。
2025-03-27 14:33:10
483
原创 Kubernetes 中导致 pod 重启的原因
在 Kubernetes(K8s)中,导致 Pod 重启的原因主要有以下几种:可以使用以下命令查看 Pod 的状态和重启原因:如果 Pod 处于 状态,可以进一步检查:如果怀疑是 OOMKilled:总结导致 Pod 重启的主要原因包括:综合 、 和 进行排查,可以更精准地定位 Pod 重启的具体原因。如果 Pod 的堆内存(Heap Memory)超过了 Pod 限定的内存(Container Memory Limit),可能会导致 Pod 被 OOMKilled(Out of Memory
2025-03-27 11:49:43
1049
原创 广告营销业务中的难点问题
广告营销系统中的挑战通常涉及数据准确性、用户定向、预算管理、欺诈防范、创意优化及系统性能等多个方面。通过引入机器学习、流处理、大数据分析等技术,可以有效地解决这些问题。同时,建立实时监控与优化机制,确保系统的持续改进。
2025-03-27 01:38:23
473
原创 Redis 单线程
所有指令在一个线程上按顺序执行,不会并行处理多个命令。进一步优化,减少了线程间的锁竞争,使得性能进一步提升。虽然 Redis 本身是单线程处理命令,但。:Redis 处理命令时(读写数据)仍然是。如果你的业务需要更高的吞吐量,可以采用。可以并行读写数据,具体并行度由。Redis 7.0 对。Redis 主要采用。
2025-03-26 23:25:37
807
原创 Redis 集群配置
在币圈交易所,Redis 集群的节点数量和内存大小通常根据交易所的规模、访问量、并发需求等因素来决定。这种中大型加密货币交易所,Redis 集群的规模通常比较大,主要是为了支撑高并发的撮合交易、行情推送、用户资产查询等核心业务。以 Gate.io 这种交易量较大的交易所为例,Redis 集群一般有。如果是超大型交易所(如 Binance、OKX),可能会有。,Gate.io 这种交易所的。保障交易高并发和稳定性。
2025-03-26 19:38:31
650
原创 多活架构设计
方案,指的是在多个数据中心(或多个区域)同时部署同一业务的多个实例,使它们在。,从而提高系统的可靠性、可用性和业务连续性。,多活架构在发生单点故障时,能够。:故障时自动切换,不影响用户体验。:避免单点故障,提升系统稳定性。:可就近接入,减少用户访问延迟。:支持动态扩容,适应业务增长。:不同区域的负载均衡可能带来。:跨数据中心的数据同步存在。,能够在故障情况下保障服务。:多数据中心部署需要。
2025-03-26 16:09:12
438
原创 线程池中的阻塞队列能不能换成普通的队列
无法保证线程安全,且容易导致 CPU 100% 占用或 OOM。主要用于存放等待执行的任务,而线程池本身是多线程并发执行的。线程池的**工作线程(Worker 线程)**会不断从。(它是非阻塞的,并且是线程安全的),但你需要自己实现。,但需要额外实现阻塞机制,影响性能。不能直接替换为普通的队列(如。Java 线程池可以搭配不同的。
2025-03-26 15:36:26
455
原创 ShardingSphere 分页查询
ShardingSphere 支持标准的。具有全局递增的特性(如使用。,减少跨库分页的开销。生成 ID),可以利用。方案,提高查询性能!如果你的查询字段(如。)是分片键,可以利用。
2025-03-26 11:15:39
224
原创 DDD 领域驱动模型
DDD(Domain-Driven Design,领域驱动设计)是一种,由在 2003 年提出,目的是帮助开发人员,通过来确保代码与业务逻辑保持一致。DDD 关注,强调让开发人员、架构师和业务专家,然后以作为核心来设计系统。订单(Order)订单(Order)newDDD 适合如果系统,DDD 可能太复杂,直接使用更合适。DDD 可以和结合,,能帮助开发团队更好地。。,普通三层架构(Controller-Service-DAO)更合适。✅(比如金融、电商、CRM),DDD 能提供更好的结构和演进能力。
2025-03-25 11:57:36
871
原创 优化广告投放算法
优化广告投放算法”指的是改进广告系统中用于决定的算法,以提升广告的,同时提高投放效率和广告收益。总结来说,优化广告投放算法就是不断改进,以实现更高效、更精准的广告投放,提高收益和用户体验。在广告营销出价算法中,是目前的,因为它在计算效率、模型效果和可解释性之间取得了较好的平衡。如果你是或,GBDT 是最佳选择;如果是,可以结合进行优化;如果是,可以尝试🚀。
2025-03-20 16:47:01
647
原创 实时数仓和离线数仓
实时数仓(Real-time Data Warehouse)和离线数仓(Offline Data Warehouse)是大数据架构中的两种主要数据仓库模式,它们的核心区别主要体现在数据的处理方式、延迟、应用场景和技术选型等方面。
2025-03-20 16:00:34
593
原创 Elasticsearch 中的数据分片问题
确实不是完全相同的概念,尽管它们都涉及到将数据分割存储以提高性能和可扩展性,但在实现和管理上有很大的区别。:副本分片可以在主分片宕机时提供数据冗余,保证数据安全。Elasticsearch 索引中的数据被划分成多个。:新节点加入集群后,可以重新分配分片,实现负载均衡。:数据分散存储到多个分片,多个节点可并行写入数据。:搜索请求可以同时在多个分片上执行,提高吞吐量。Elasticsearch 在存储数据时采用。,这些分片会分布在不同的节点上,实现。,以提高性能和可扩展性。进行分布式存储和查询,
2025-03-20 15:02:28
1051
原创 项目启动时读取配置文件
来加载远程配置,并在读取失败时回退到本地配置。如果从 Nacos 读取失败,Spring Boot 仍会回退到本地。在 Spring Boot 项目中,你可以使用。这样你的 Spring Boot 项目就可以。Spring Boot 项目通常在。Nacos 远程配置的。,用于读取远程配置。
2025-03-18 01:11:34
406
原创 JDK 动态代理和 CGLIB 动态代理
JDK 动态代理和 CGLIB 动态代理是 Spring AOP 以及许多 Java 框架中常见的两种动态代理方式,它们在。两者各有优势,选择合适的方式能提升代理的效率和可维护性。如果希望 Spring。
2025-03-17 23:33:38
963
原创 Spring 原生启动过程
以下是基于 AnnotationConfigApplicationContext。Spring 内部使用 DefaultListableBeanFactory。Spring 通过 BeanDefinitionReader。,它主要涉及 ApplicationContext。在 Bean 还未实例化之前,Spring 允许。通常,Spring 通过。Spring 应用的启动通常由。Spring 本身不依赖。
2025-03-17 23:05:46
298
原创 JConsole 监控线程池状态
的状态,包括线程数量、任务执行情况、CPU 及内存使用情况等。如果你的应用运行在服务器上,JConsole 也可以进行远程监控。这样,你的 JMX 连接是通过 SSH 隧道加密的,更加安全。这样,你可以轻松分析线程池的运行状态,调整最优的参数配置!JConsole 提供多个选项卡,可以帮助监控线程池状态。可以用来监控 Java 线程池(JMX 远程连接使用的是。这样就可以安全高效地。
2025-03-15 17:57:40
870
原创 SSL 和 TLS 认证
SSL认证是保护网站数据安全的关键技术,网站通过部署SSL证书实现加密通信、身份验证和数据完整性。现代互联网基本都采用。
2025-03-14 23:15:58
1092
原创 JVisualVM 监控线程池状态
的状态,包括线程数、CPU 使用率、任务执行情况等。这样,你就可以精准分析 Java 线程池的运行情况,找到最优参数调优方向!如果需要长期监控线程池状态,可以结合。JVisualVM 支持。
2025-03-14 16:12:04
722
原创 DSP 核心实现技术方案
候选池的实现通常不是单一中间件能够完成的,而是需要多种中间件结合,根据业务需求进行选择和组合。高并发低延迟和实时更新常见的最佳实践是缓存+消息队列+流计算的组合架构,确保查询速度快,同时候选池数据始终是最新的。结合 Redis(缓存)+ Kafka(消息队列)+ Flink(流计算)+ Elasticsearch(精准查询),具体方案如下:✅ 超高并发低延迟:Redis 作为候选池缓存,保证毫秒级响应。✅ 实时数据更新:Kafka + Flink 实时流处理,商家数据变化时候选池自动调整。✅ 精准筛选:
2025-03-14 01:23:27
1062
2
原创 SpringBoot 启动过程
Spring Boot 是构建在 Spring 框架之上的项目,它通过简化配置和内置的开发工具,帮助开发者快速创建基于 Spring 的应用。@EnableAutoConfiguration 将所有符合自动配置条件的bean定义加载到IoC容器,自动配置好tomcat、springmvc、web常见功能,初始化容器、应用监听器。@ComponentScan 的功能其实就是自动扫描并加载符合条件的组件,最终将这些bean定义加载到IoC容器中。
2025-03-14 01:19:14
178
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人