工作建议
文章平均质量分 87
工作建议
软件求生
这个作者很懒,什么都没留下…
展开
-
项目实战:一步步实现高效缓存与数据库的数据一致性方案
在日常开发中,我们常常会面对数据一致性的问题。CacheAside 模式:在不命中缓存时从数据库加载数据,并在写操作时先更新数据库,再删除缓存。消息队列重试机制:利用消息队列和 Canal 中间件订阅 MySQL binlog,确保即使缓存删除失败,也能够最终通过重试机制完成删除操作。请求串行化:通过将读写操作串行化,避免并发请求导致的数据不一致问题,同时通过限流、熔断和水平拆分队列的方式解决请求积压问题。原创 2024-09-22 09:45:50 · 519 阅读 · 0 评论 -
秒杀系统优化:用解耦提升系统性能的秘诀!
在技术开发中,解耦(Decoupling)指的是将各个模块或系统之间的依赖关系减到最低,使得每个模块都能独立工作,减少相互影响。解耦的好处是,当某个模块出现问题时,不会导致整个系统瘫痪。对于大型、复杂的系统,解耦可以极大提升系统的扩展性和容错能力。那么,如何在秒杀系统中实现解耦,尤其是如何将秒杀数据同步给数据团队?这是我们今天的重点。原创 2024-09-20 10:08:33 · 625 阅读 · 0 评论 -
高并发流量杀手锏:揭秘秒杀系统背后的削峰技术!
我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“”,获取更多技术干货!Hello,大家好,我是你们的老朋友小米!今天我们来聊聊秒杀场景下的“削峰填谷”策略,尤其是如何应对那一瞬间的流量暴增。相信大家对“秒杀”这个词已经不陌生了,特别是当你看中的商品突然降价,手指快点,商品就能秒到手!可是,背后这流量可不是闹着玩的。流量爆发时,系统如果没有处理好,很容易崩掉!所以今天,我要分享的内容就是如何削去秒杀场景下的峰值写流量,让系统平稳度过流量高峰。原创 2024-09-18 14:26:12 · 713 阅读 · 0 评论 -
削峰+限流:秒杀场景下的高并发写请求解决方案
我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“”,获取更多技术干货!哈喽,大家好!我是小米,一个29岁、活泼积极、热衷分享技术的码农。今天和大家聊一聊应对高并发的写请求这个主题,尤其是在大促、秒杀这种场景下,系统该如何应对突如其来的流量洪峰!每逢秒杀,瞬间涌入的请求量可能直接把你的系统给“砸”了。要如何应对这类场景呢?别着急,今天我就给大家从四个方面详细讲解,教你如何扛住这波流量,稳定服务!原创 2024-09-17 20:05:31 · 984 阅读 · 0 评论 -
高并发下的生存之道:如何巧妙化解热Key危机?
即使我们设计了缓存集群、本地缓存和限流等措施,但在面对突发的千万级流量时,依然可能存在压力过大的情况。这时,我们必须设计一个兜底逻辑来应对极端情况。常见的兜底策略:降级处理:当流量激增,服务压力过大时,可以将某些非核心功能进行降级处理。比如,只返回部分缓存中的数据,而不回源数据库。限流熔断:通过限流和熔断机制,拒绝一部分流量,保证核心服务的稳定。预热机制:在大流量到来之前,提前预热缓存,减少突发流量对缓存的冲击。这些兜底措施可以帮助我们在应对突发流量时,保证服务的稳定性。原创 2024-09-14 10:30:44 · 903 阅读 · 0 评论 -
开发故事:一个 @Async 如何搞瘫整个微服务系统
嘿,大家好!我是小米,一个充满活力、喜欢分享技术的29岁开发者。今天的文章,我们要来聊一聊一个发生在我们开发环境的惊险故事。这个问题折腾了我们整个团队好一阵子,最终我们发现元凶竟然是一个看似无害的注解。废话不多说,直接开讲!原创 2024-09-13 09:55:18 · 585 阅读 · 0 评论 -
别让恶意刷票毁了你的项目,学会这6招防刷技巧!
IP限流:防止单个IP发起大量请求;验证码:在关键节点进行人机识别,阻止自动化刷票;单用户限流:对每个用户的行为进行限流;单设备限制:限制设备的请求频率,防止设备滥用;IMEI码限制:尤其适用于移动端,基于设备唯一性;源IP规则:过滤恶意IP来源。原创 2024-09-12 14:17:32 · 967 阅读 · 0 评论 -
如何在大促期间避免用户重复下单?一文教你搞定!
分布式锁是用来解决多服务、多线程同时访问共享资源的问题。它的目标是确保在分布式环境下,每个时刻只能有一个进程或线程在操作某一份数据,进而避免并发问题。在我们的场景中,分布式锁的作用就是确保多个重复的订单请求同时到达时,只有第一个请求可以成功生成订单,其他请求必须等待或者直接返回失败。原创 2024-09-11 14:55:44 · 921 阅读 · 0 评论 -
彻底解决客户端断连难题!Netty与ConnectionWatchdog实战指南
Netty 是一个高性能的网络框架,它为我们提供了很多优秀的功能,比如心跳检测、连接管理等。我们可以通过使用 Netty 的来实现重连检测,此外还可以在客户端与服务端之间实现心跳机制来监控连接状态。原创 2024-09-10 14:21:12 · 668 阅读 · 0 评论 -
定时任务数量爆炸?Netty教你如何应对百万级挑战
在我最近负责的一个在线出题系统的项目中,每个用户登录后需要按照指定顺序回答十道题,每道题有特定的时间限制。也就是说,对于每个用户,服务器需要生成十个定时任务,以确保题目能够按时推送并监控答题时间。当系统用户规模较小时,一切似乎还在掌控之中。但随着用户数量的增加,系统需要处理的定时任务数量也急剧上升,达到百万级别的任务调度,这给系统的性能带来了巨大的挑战。简单来说,传统的JDK定时器(Timer)在处理这种高并发任务时,性能表现非常不理想,导致我们不得不寻找更高效的解决方案。原创 2024-09-09 10:33:42 · 931 阅读 · 0 评论 -
昵称重复怎么办?一招教你轻松搞定!
布隆过滤器(Bloom Filter)是一种空间效率非常高的概率型数据结构,它用于判断一个元素是否存在于集合中。布隆过滤器有一个非常突出的特点——它可以快速地判断某个元素是否可能在集合中。注意,是“可能”!这意味着它可能会出现误报,即布隆过滤器认为某个元素在集合中,但实际上并不在。不过,它不会出现漏报的情况,也就是说,如果布隆过滤器认为某个元素不在集合中,那么它肯定不在。布隆过滤器的核心优势在于它能在非常低的内存消耗下,快速地进行集合判断,尤其适合处理海量数据的场景。原创 2024-09-05 09:59:44 · 442 阅读 · 0 评论 -
秒解答题系统的头号难题:防止重复提交的终极指南!
通过使用Redis的分布式锁机制,我们可以有效防止重复答题的问题。SETNX命令简单易用,适合大部分场景;而对于需要更高可靠性的场景,推荐使用Redis的SET命令搭配NX和PX选项,或者直接使用Lua脚本来实现。在实际开发中,选择适合自己项目的技术方案尤为重要。希望这篇文章能够帮助到正在处理类似问题的你,也欢迎大家在评论区分享自己的经验与心得!原创 2024-09-02 10:48:12 · 818 阅读 · 0 评论 -
揭秘排行榜系统:如何在高并发场景下实现高效更新!
方案1:每日一个滚动榜,当日汇聚优点:实现简单缺点:时间复杂度高,滚动榜N值增大时效率降低方案2:全局N个滚动榜同时写优点:实时更新,无需等待离线作业缺点:空间消耗大,N值增大时内存占用过高方案3:实时更新,常数次写操作优点:常数次写操作,时间复杂度低,能实时更新缺点:需要每日零点的离线作业,但整体效率较高经过对比分析,我们可以看出,方案3是最优选择。它在保持实时更新的同时,控制了空间消耗,并且通过差分计算大幅降低了写操作的复杂度,非常适合高并发和大规模用户的排行榜设计。原创 2024-08-31 09:59:49 · 1214 阅读 · 0 评论 -
升级指南:从Nacos 1.3.0 到 2.3.0,并兼容 Seata 的鉴权配置
我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“”,获取更多技术干货!哈喽,大家好!我是小米,一个活力四射、技术分享狂的小伙伴,今天咱们来聊聊如何在微服务环境下进行 Nacos 和 Seata 的版本升级。最近我在项目中遇到了一些有趣的挑战,比如 Nacos 需要进行鉴权,Seata 也要跟上节奏。那么,如何优雅地从 Nacos 1.3.0 升级到 2.3.0,并确保 Seata 各版本的兼容性呢?原创 2024-08-30 10:38:54 · 1009 阅读 · 0 评论 -
排行榜系统设计:高并发场景下的最佳实践
Hello,大家好!我是你们的技术分享小伙伴小米,29岁,喜欢技术,也喜欢分享各种有趣的项目经验。今天,我们来聊聊如何设计一个。无论是游戏中的战力排行榜,还是电商平台的热销产品榜单,排行榜都在我们生活中扮演了重要的角色。而作为一个技术人,设计一个高效、稳定、易扩展的排行榜系统是非常有成就感的。下面,我将带你一步步探讨如何设计一个排行榜。原创 2024-08-29 11:00:14 · 916 阅读 · 0 评论 -
从基础到实战:如何用 Java 手写一个阻塞队列?
阻塞队列顾名思义是一种支持阻塞操作的队列。生产者阻塞:当队列满时,生产者会等待,直到队列不满。消费者阻塞:当队列为空时,消费者会等待,直到队列不为空。这个机制保证了生产者和消费者的平衡,同时避免了空轮询造成的 CPU 资源浪费。原创 2024-08-27 14:03:14 · 605 阅读 · 0 评论 -
手把手教你:用Java轻松实现生产者消费者模式!
Hello,大家好呀!我是小米,一个爱技术、爱分享的29岁程序猿。今天我要和大家聊聊Java中的线程池实现,并带大家一步步实现一个简单的线程池。线程池在多线程编程中非常常见,它能帮我们管理和调度线程,避免频繁创建和销毁线程带来的开销,从而提升系统的性能。在正式开工之前,先让我们简单聊一下线程池的作用和基本原理。大家可能会问,为什么要用线程池?直接用new Thread()来创建线程不是也可以吗?是的,直接创建线程也可以解决并发问题,但如果任务数量很大,每次创建新线程会消耗系统资源,而且线程的创建和销毁是相对原创 2024-08-26 21:16:36 · 342 阅读 · 0 评论 -
从理论到实践:手写线程池,玩转Java并发编程!
Hello,大家好呀!我是小米,一个爱技术、爱分享的29岁程序猿。今天我要和大家聊聊Java中的线程池实现,并带大家一步步实现一个简单的线程池。线程池在多线程编程中非常常见,它能帮我们管理和调度线程,避免频繁创建和销毁线程带来的开销,从而提升系统的性能。在正式开工之前,先让我们简单聊一下线程池的作用和基本原理。大家可能会问,为什么要用线程池?直接用new Thread()来创建线程不是也可以吗?是的,直接创建线程也可以解决并发问题,但如果任务数量很大,每次创建新线程会消耗系统资源,而且线程的创建和销毁是相对原创 2024-08-25 19:27:53 · 476 阅读 · 0 评论 -
缓存优化利器:5分钟实现 LRU Cache,从原理到代码!
最近使用的数据将被保留,最久未使用的数据将被淘汰。这种策略适用于内存有限、但又需要高频访问的数据场景,比如缓存系统、页面置换算法等。如果数据已经在缓存中,将其提升为“最近使用”;如果数据不在缓存中,则将其插入缓存中;如果缓存已满,会淘汰最久未使用的数据。这种机制可以有效避免缓存中存放的数据很久没有被使用,从而浪费内存空间。今天我们一起动手实现了一个简易版的 LRU Cache,通过双向链表和哈希表的组合,保证了缓存操作的高效性。原创 2024-08-24 09:45:01 · 511 阅读 · 0 评论 -
手把手教你手写单例,六种实现方式一网打尽!
单例模式(Singleton Pattern)的核心思想就是“一个类只有一个实例,并且自行向整个系统提供这个实例。”这个实例一般是通过该类自己创建的。单例模式的特点:确保某个类只有一个实例。提供一个全局访问点来访问这个实例。使用场景:需要频繁实例化和销毁的对象。比如:多线程的线程池、数据库连接池。耗费资源过多的对象。比如:文件管理器、日志处理器。工具类对象。比如:配置文件读取类、全局配置管理类。全局状态类。比如:系统中状态信息的管理类。原创 2024-08-23 17:06:17 · 639 阅读 · 0 评论 -
堆排序实战:轻松实现高效排序,附详细Java代码
堆排序是一种基于二叉堆(Binary Heap)这种数据结构的排序算法,属于选择排序的一种。堆排序的时间复杂度为O(n log n),在最坏的情况下依然表现稳定。和快速排序相比,它没有快排那样的递归深度问题,因此适合用在对稳定性要求高且空间不允许递归的场景下。构建大顶堆(或小顶堆):根据数组构建出一个大顶堆(父节点的值大于子节点),这样堆顶元素就是最大值。交换堆顶元素与末尾元素并调整堆:将堆顶元素(最大值)与末尾元素交换,缩小堆的范围,重新调整堆。循环此过程,直到整个数组有序。原创 2024-08-22 14:42:40 · 853 阅读 · 0 评论 -
算法实战:手写归并排序,让复杂排序变简单!
归并排序是一种基于分治思想的算法。它的核心思路是将一个大的问题分解为多个小问题来解决,然后将小问题的结果合并起来。简单来说,就是“分而治之”。归并排序通过将数据集分成更小的子集,分别对这些子集进行排序,最后再将这些已排序的子集合并,形成一个有序的数组。归并排序的时间复杂度为O(n log n),并且它是一个稳定的排序算法,这意味着当有两个相等的元素时,它们在排序后的相对顺序和排序前相同。原创 2024-08-21 10:10:08 · 254 阅读 · 0 评论 -
手写快排:教你用Java写出高效排序算法!
大家好!我是小米,一个29岁,积极活泼、喜欢分享技术的程序员。今天我们来聊聊,一个经典的排序算法,也是许多面试中的常客!原创 2024-08-20 13:59:19 · 428 阅读 · 0 评论 -
挑战1G内存!如何在千万记录中找到最热TOP10查询串?
我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“”,获取更多技术干货!哈喽大家好!我是你们的技术小伙伴小米,今天又来和大家分享一个非常实用的算法题!假设我们现在有1000w个查询记录,这些记录中有很多重复的内容,但去重后大概只剩下300w个。那么问题来了,我们如何在1G内存的限制下,统计出最热门的10个查询串呢?和,来实现这个需求。原创 2024-08-18 11:32:53 · 410 阅读 · 0 评论 -
Redis助力高并发网站:在线用户统计不再是难题!
我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“”,获取更多技术干货!Hello,大家好!我是小米,一个积极分享技术的小伙伴。今天咱们要聊的是在高并发场景中如何显示网站的在线/并发用户数,重点是使用Redis进行统计。我们将使用Java和Lettuce库来实现这一功能。让我们开始吧!原创 2024-08-16 13:56:33 · 508 阅读 · 0 评论 -
评论系统如何不崩溃?揭开海量评论背后的技术秘密
我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“”,获取更多技术干货!大家好,我是小米!今天我们来聊聊一个非常实际的场景:海量新闻评论的入库问题。假设你在某个新闻平台工作,某条热门新闻突然火爆,用户的评论量如潮水般涌入,如何确保评论系统在读写性能上都不崩溃?今天我们就来深入探讨下,如何通过等技术手段,来设计一个高效稳定的评论系统。原创 2024-08-15 16:05:31 · 993 阅读 · 0 评论 -
仅用10MB内存,你能从100亿个数中找到中位数吗?
在大数据处理的世界中,内存限制往往是我们无法回避的难题。今天,我将带你深入探讨如何在仅有10MB内存的情况下,从100亿个整数中高效地找到中位数。通过分治法和二进制位划分,我们不仅能巧妙解决这个问题,还能拓展思路,轻松应对更多复杂的算法挑战。原创 2024-08-13 10:15:16 · 524 阅读 · 0 评论 -
从海量数据中挖出TOP100热词,这个算法太绝了!
我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“”,获取更多技术干货!大家好,我是小米,一个热爱技术的活泼29岁程序员!。这个问题在实际应用中非常常见,无论是搜索引擎优化、社交媒体趋势分析,还是电商平台的商品推荐,都离不开这个技术。接下来,我们就深入探讨一下这个问题的解决方案。原创 2024-08-12 11:25:47 · 287 阅读 · 0 评论 -
算法实战:快速找到100亿个URL中的重复项!
大家好,我是你们的技术小伙伴小米!今天我们要聊的主题是一个超级有趣且实用的算法问题——如何在100亿个URL中找到重复的URL。这个问题不仅考验了我们对大数据处理的理解,还涉及到一些非常实用的技巧。我们一起深入探讨一下吧!原创 2024-08-10 12:27:03 · 318 阅读 · 0 评论 -
极限挑战:40亿个非负整数中找到没有出现的数(bit数组)
我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“”,获取更多技术干货!大家好!我是小米,一个积极活泼、热爱分享技术的29岁程序员。今天,我们一起来探讨一个有趣且实用的算法问题:如何在40亿个非负整数中找到没有出现的数。这个问题不仅考验我们的算法设计能力,还需要我们巧妙地利用有限的内存资源。原创 2024-08-09 10:14:04 · 366 阅读 · 0 评论 -
小米教你:2GB内存搞定20亿数据的高效算法
我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“”,获取更多技术干货!Hello,大家好!我是小米,今天要和大家聊聊一个非常有意思的算法实战问题——在2GB内存中,如何在20亿个整数中找到出现次数最多的数。这个问题涉及到大数据处理和算法优化,特别适合喜欢钻研技术的你!让我们一起来探讨一下吧!原创 2024-08-08 17:03:42 · 334 阅读 · 0 评论 -
布隆过滤器揭秘:让URL黑名单存储从640GB缩小到35.88GB!
大家好,我是小米。今天我们将探讨如何利用布隆过滤器来高效管理100亿URL黑名单。在传统方法无法满足存储需求的情况下,布隆过滤器凭借其低内存占用和高查询效率,成为处理大规模数据的不二之选。快来一起学习吧!原创 2024-08-07 10:14:29 · 519 阅读 · 0 评论 -
深入剖析操作系统死锁:不可不知的四大条件!
Hello,大家好!我是小米,一个喜欢分享技术的积极活泼的29岁程序员。今天我们要聊一聊“网络基础:重定向和转发区别”。相信大家在开发中经常会遇到这两种操作,但它们的具体区别和应用场景你们都清楚吗?接下来,小米将带你们一探究竟!原创 2024-08-06 10:06:59 · 425 阅读 · 0 评论 -
理解操作系统内存管理:页面置换算法全解析
页面置换算法是操作系统内存管理的重要部分。今天,我们深入探讨FIFO、LRU和OPT三种经典算法,比较它们的优缺点,帮助你更好地选择和应用这些算法。快来一起学习吧!原创 2024-08-05 10:41:39 · 523 阅读 · 0 评论 -
一文看懂操作系统内存管理的三种主要方式
在现代计算机系统中,内存管理是至关重要的一环。今天我们将深入探讨三种主要的内存管理方式:页式管理、段式管理和段页式管理,了解它们的基本概念、地址转换过程以及优缺点。准备好一起探索这些技术背后的原理和实际应用了吗?快来跟小米一起学习吧!原创 2024-08-04 19:19:04 · 556 阅读 · 0 评论 -
四大内存区域揭秘:你真的了解你的程序吗?
进程的内存空间分为栈区、堆区、静态区和代码区。每个区域在内存管理中扮演着不同的角色,影响着程序的性能和稳定性。本文将详细介绍这四个区域的特点和作用,帮助你更好地理解操作系统的内存管理,并优化你的编程实践。原创 2024-08-03 13:17:10 · 566 阅读 · 0 评论 -
探索操作系统的核心:用户态与核心态的深度解析
在现代操作系统中,用户态和核心态是实现系统安全和效率的核心机制。用户态负责运行应用程序,受限于访问权限;而核心态则拥有最高权限,管理系统资源和硬件设备。本文将深入探讨这两个状态的定义、作用及其切换机制,帮助您更好地理解操作系统的基本原理。快来一起揭开操作系统内部的神秘面纱吧!原创 2024-08-02 10:16:24 · 281 阅读 · 0 评论 -
从零开始掌握进程间通信:管道、信号、消息队列、共享内存大揭秘
我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!原创 2024-08-01 11:46:59 · 300 阅读 · 0 评论 -
如何区分进程、线程和协程?看这篇就够了!
嗨,大家好!我是小米,今天我们来聊聊操作系统中的三大执行单元:进程、线程和协程。你知道它们有什么区别吗?为什么说进程独立性强,线程高效,协程更适合I/O密集型任务?本文将带你深入探讨这些概念,帮助你在实际开发中灵活运用,提升性能!准备好了吗?一起开始吧!原创 2024-07-31 09:56:55 · 542 阅读 · 0 评论 -
一步步揭秘:浏览器输入URL后的那些事儿
大家好,我是小米!你有没有好奇过,当你在浏览器输入一个网址并按下回车键后,到底发生了什么神奇的过程?从DNS解析到TCP连接,从发送HTTP请求到浏览器渲染,本文将带你深入了解这个复杂而又迷人的过程,让我们一起探索吧!原创 2024-07-30 10:42:57 · 349 阅读 · 0 评论