- 博客(492)
- 收藏
- 关注
转载 你还在使用WebSocket实现实时消息推送吗?
在日常的开发中,我们经常能碰见服务端需要主动推送给客户端数据的业务场景,比如数据大屏的实时数据,比如消息中心的未读消息,比如聊天功能等等。本文主要介绍SSE的使用场景和如何使用SSE。在很久很久以前,前端一般使用轮询来进行服务端向客户端进行消息的伪推送,为什么说轮询是伪推送?因为轮询本质上还是通过客户端向服务端发起一个单项传输的请求,服务端对这个请求做出响应而已。通过不断的请求来实现服务端向客户端推送数据的错觉。并不是服务端主动向客户端推送数据。显然,轮询一定是上述三个方法里最下策的决定。
2025-03-28 11:32:02
27
转载 一行CompletableFuture代码引发的P0级事故
这次事故,源于一段暗藏风险的代码。高并发下,默认线程池不堪重负,引发连锁反应,致使系统瘫痪。线程池配置失当:直接沿用默认参数,未结合业务负载、服务器性能调校,高并发场景易过载。异常处理缺位:捕获异常后不记录、不上报,还遗漏异步任务异常捕获,问题排查困难。并发安全失控:共享变量操作未加锁,使用非线程安全集合类,高并发下数据错乱。任务依赖混乱:不规划任务启动顺序,也不考虑依赖失败策略,一处出错就全盘皆输。线上无小事,生产环境中要注意:默认配置是魔鬼,高并发下没有侥幸!
2025-03-06 13:33:35
57
转载 大厂面试高频:Kafka、RabbitMQ、RocketMQ如何选型?
生产者生产鸡蛋,消费者消费鸡蛋。再比如,生产者1秒生产100个鸡蛋(大交易量的情况),而消费者1秒只能消费50个鸡蛋,那么过不了多长时间,消费者就“吃不消”了(消息堵塞,最终导致系统超时),导致鸡蛋又丢失了。此时,我们放1个篮子在生产者与消费者中间,生产者生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了,这个篮子就相当于Kafka。RocketMQ的发布/订阅模式是一种消息通信模式,使得消息的生产者(发布者)不直接发送消息给特定的消费者(订阅者),而是通过一个中间件——Broker。
2025-02-25 17:16:15
42
转载 凌晨四点,线上CPU告警,绩效没了!
凌晨4点,我被一阵刺耳的手机铃声惊醒。迷迷糊糊地摸索着手机,屏幕上赫然显示着"线上CPU告警"的字样。瞬间,我的困意全无,取而代之的是一阵冷汗和心跳加速。作为公司核心系统的负责人,我深知这意味着什么——用户体验受损、可能的数据丢失,更糟糕的是,我的年终绩效可能就此化为泡影。我迅速起身,开始了一场与时间赛跑的故障排查之旅。经过近4小时的奋战,系统终于恢复了正常。CPU使用率降到了30%以下,服务响应时间也恢复到了毫秒级。这次经历让我深刻意识到,在追求业务快速发展的同时,我们不能忽视技术债务的累积。
2025-02-05 10:38:32
38
转载 从3s到25ms!看看人家的接口优化技巧,确实很优雅!!
批量思想:批量操作数据库,这个很好理解,我们在循环插入场景的接口中,可以在批处理执行完成后一次性插入或更新数据库,避免多次 IO。
2025-01-23 13:40:12
21
转载 大厂防止超卖的 7 种实现
三、四、五方式主要是数据库的锁来解决并发问题,方式三是利用for upate对表加行锁,方式四是利用update来对表加锁,方式五是通过增加version字段来控制数据库的更新操作,方式五的效果最差。六、七方式是通过队列来解决并发问题,这里需要特别注意的是,在代码中不能通过throw抛异常,否则消费线程会终止,而且由于进队和出队存在时间间隙,会导致商品少卖。利用阻塞队类,也可以解决高并发问题。经过测试,发现使用Disruptor队列队列,与自定义队列有着同样的问题,也会出现超卖的情况,但效率有所提高。
2025-01-23 11:01:28
42
转载 3分钟彻底吃透 Spring AOP 切面编程技术!
然后,定义一个用户登陆的接口方法,内容如下!System.out.println("-------->收到登陆请求<--------");if(!thrownew RuntimeException("用户密码不正确!");result.put("msg", "登陆成功!");定义切面类,顾名思义,当采用面向切面编程的时候,需要在类上引入@Aspect注解,以便告知 Spring Boot,它是一个切面容器,以便更好的进行管理。通常与@Order。
2025-01-21 18:38:42
63
转载 招行面试:RocketMQ、Kafka、RabbitMQ,如何选型?
分布式、微服务、高并发架构中,消息队列(Message Queue,简称MQ)扮演着至关重要的角色。消息队列用于实现系统间的异步通信、解耦、削峰填谷等功能。目前常见的MQ实现包括RabbitMQ、RocketMQ和Kafka。
2025-01-09 18:01:08
57
转载 能用到 “退休” 的 600条 Linux 命令,直接起飞!
为了避免画 面显示时瞬间就闪过去,用户可以使用more命令,让画面在显示满一页时暂停,此时可按空格健继续显示下一个画面,或按Q键停止显示。vim启动后,默认进入命令模式,任何模式都可以通过esc键回到命令模式(可以多按几次),命令模式下可以键入不同的命令完成选择、复制、粘贴、撤销等操作。在命令模式下按 “ i “键,即可进入插入模式,在插入模式可以输入编辑文本内容,使用esc键可以返回命令模式。:以长格形式显示etc目录下的文件列表,显示满一个画面便暂停,可 按空格键继续显示下一画面,或按Q键跳离。
2025-01-03 13:47:14
33
转载 面试官:为什么删除缓存后,Redis内存占用依然很高?
上周刚来了个应届小师弟,组长说让我带着,周二问了我这样一个问题:师兄啊,我用top命令看了下服务器的内存占用情况,发现Redis内存占用严重,于是我就删除了大部分不用的keys,为什么内存占用还是很严重,并没有释放呢?嗯?为什么呢?今天就带着这个问题来介绍一下如何正确释放Redis的内存。内存碎片这个概念应该不是第一听说了,熟悉JVM或者操作系统的应该都熟悉,以火车卖票为例,一个车厢128个车位,由于高峰期,只剩余两个位置了,但是此时三个。
2024-12-24 17:30:41
52
转载 如何保证API接口安全?
在实际的业务开发过程中,我们常常会碰到需要与第三方互联网公司进行技术对接,例如支付宝支付对接、微信支付对接、高德地图查询对接等等服务,如果你是一个创业型互联网,大部分可能都是对接别的公司api接口。当你的公司体量上来了时候,这个时候可能有一些公司开始找你进行技术对接了,转变成由你来提供api接口,那这个时候,我们应该如何设计并保证API接口安全呢?最常用的方案,主要有两种:token方案接口签名。
2024-12-23 18:15:09
113
转载 巧妙利用 SpringBoot 责任连模式,让编程事半功倍!
责任链模式(Chain of Responsibility Pattern),顾名思义,为请求者和接受者之间创建一条对象处理链路,避免请求发送者与接收者耦合在一起!责任链模式,是一种实用性非常强的设计模式,比较典型的应用场景有:Apache Tomcat 对 Encoding 编码处理的处理SpringBoot ⾥⾯的拦截器、过滤器链netty 中的处理链支付风控的机制⽇志处理级别尤其是当程序的处理流程很长的时候,采用责任链设计模式,不仅实现优雅,而且易复用可扩展!
2024-12-23 18:14:19
178
转载 Linux 磁盘打爆了,16个详细的排查方法!有你想不到的!
在Linux系统运维过程中,磁盘空间不足是一个常见且棘手的问题。当磁盘空间被占满时,系统的正常运行会受到影响,甚至可能导致服务中断。因此,迅速有效地排查和解决磁盘空间问题显得尤为重要。本文将详细介绍16个排查Linux磁盘空间问题的详细方法,帮助运维人员快速定位问题并解决。
2024-12-20 18:26:47
47
转载 为什么需要消息队列?
消息队列通过将发送消息的生产者与接收消息的消费者解耦,降低了系统之间的依赖关系。在实际使用中,需要关注消息队列的各种特性,如消息的持久化、消息的顺序性、幂等性设计、性能调优等。电商平台在高并发情况下需要处理大量订单,而通过消息队列可以高效地解耦订单系统与库存系统、支付系统等,确保订单处理的高效性和可靠性。例如,订单支付的流程中,支付成功的消息必须在支付失败的消息之后被处理,避免出现逻辑错误。在某些场景下,确保消息的顺序性非常重要。例如,电商订单系统中,支付成功的消息必须在支付失败的消息后面处理。
2024-12-20 18:13:50
47
转载 订单超时自动取消的7种方案,我用这种!
每种方案都有自己的适用场景,大家在选择的时候,记得结合业务需求、订单量、并发量来综合考虑。如果你的项目规模较小,可以直接用延时队列或 Redis;而在大型高并发系统中,消息队列和事件流处理往往是首选。当然,代码实现只是第一步,更重要的是在实际部署和运行中进行性能调优,保证系统的稳定性。希望这篇文章能给大家一些启发,也欢迎讨论其他可能的实现思路!
2024-12-20 11:34:44
76
转载 Spring Boot 实现防盗链功能
防盗链是保护资源服务器的常用方法,旨在防止未经授权的外部链接直接访问服务器上的资源,如图片、音频和视频文件。在本文中,我们将探讨防盗链的概念和原理,并结合 Spring Boot 提供一个完整的可运行示例。
2024-12-16 17:39:37
32
转载 ElasticSearch是什么?应用场景是什么?
ElasticSearch 作为一个强大的搜索引擎,不仅仅是个搜索工具,它在日志分析、推荐系统、大数据处理等领域的应用同样出色。作为程序员,我们在开发系统时,ElasticSearch 可以成为我们实现高效搜索和实时分析的重要利器。而且,它的分布式架构、灵活的查询方式、丰富的聚合功能,都让它成为数据处理的神器。对于面试官提到的“ElasticSearch是什么?应用场景是什么?”这个问题,其实我们可以从不同的角度切入,结合实际的项目经验,展示ElasticSearch的强大。
2024-12-16 17:15:14
58
转载 谈一谈三方接口调用方案设计,非常优雅!
Token是什么?token即 访问令牌access token,用于接口中标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请一个接口调用的账号,服务器会给出一个appId和一个appSecret(appSecret用于参数签名使用)注意appSecret保存到客户端,需要做一些安全处理,防止泄露。
2024-12-16 17:04:13
98
转载 掌握这30条超实用技巧,99%的服务器挖矿问题都能解决!
排查服务器挖矿行为需要技术人员从多个角度入手,包括系统资源监控、进程与服务检查、日志审查、文件与目录检查、网络连接分析、恶意软件检测、系统配置与漏洞检查、用户与权限管理、网络隔离与访问控制以及持续监测与响应。通过这些技巧的综合应用,可以有效发现并清除服务器上的挖矿恶意软件,确保服务器的安全稳定运行。等命令行工具,定期检查服务器的CPU和内存使用情况,异常高的使用率可能是挖矿行为的迹象。等命令查看当前运行的进程,寻找未知的、高CPU利用率的进程,可能是挖矿进程。
2024-12-16 11:29:41
144
转载 实战!openFeign如何实现全链路JWT令牌信息不丢失?
令牌中继通俗的讲则是让令牌在微服务链路调用中传递下去,保证各个微服务能够获取令牌中的用户信息。以下订单的例子来说,如下图:下单流程客户端携带令牌请求网关,网关鉴权成功后会将令牌中的用户信息解析出来放在请求头中下发给订单服务,同样的,订单服务需要将用户信息传递给账户服务获取该用户的账户信息。那么问题来了?如何保证网关服务->订单服务->账户服务这条链路中的用户信息传递下去是个痛点。
2024-12-16 11:24:47
29
转载 Spring Cloud 全链路灰度发布 方案
灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
2024-12-16 11:11:11
144
转载 Linux运维终极攻略:600条高频命令,助你解决99%的问题
升级模式会安装用户所指定的更新版本,并删除已安装在系统中的相同软件包,升级软件包命令如下:rpm -Uvh wu-ftpd-2.6.2-8.i386.rpm -Uvh:升级参数。使用RPM命令的安装模式可以将软件包内所有的组件放到系统中的正确路径,安装软件包的命令是:rpm –ivh wu-ftpd-2.6.2-8.i386.rpm。删除模式会将指定软件包的内容全部删除,但并不包括已更改过的配置文件,删除RPM软件包的命令如下:rpm -e wu-ftpd。使用-q参数可查询一个已 安装的软件包的内容。
2024-12-16 11:02:01
29
转载 学会这9个任务调度框架后,有点飘!
说到定时任务,相信大家都不陌生,在我们实际的工作中,用到定时任务的场景可以说非常的多,例如:双 11 的 0 点,定时开启秒杀每月1号,财务系统自动拉取每个人的绩效工资,用于薪资计算使用 TCP 长连接时,客户端按照固定频率定时向服务端发送心跳请求等等,定时器像水和空气一般,普遍存在于各个场景中,在实际的业务开发中,基本上少不了定时任务的应用。总结起来,一般定时任务的表现有以下几个特征:1.在某个时刻触发,例如11.11号0点开启秒杀2.按照固定频率周期性触发,例如每分钟发送心跳请求3.
2024-12-16 10:11:32
178
转载 弃用 RestTemplate,来了解一下官方推荐的 WebClient 吧!
在 Spring Framework 5.0 及更高版本中,RestTemplate 已被弃用,取而代之的是较新的 WebClient。这意味着虽然 RestTemplate 仍然可用,但鼓励 Spring 开发人员迁移到新项目的 WebClient。WebClient 构建在 Reactor 之上,它提供了一种非阻塞、反应式的方法来处理 I/O。这可以在高流量应用程序中实现更好的可扩展性和更高的性能。WebClient 使用函数式编程风格,可以使代码更易于阅读和理解。
2024-12-13 16:40:26
25
转载 对象属性拷贝,到底谁更强?
日常编程中,我们经常会碰到对象属性复制的场景,当类的属性数量只有简单的几个时,我们通过手写set/get即可完成,但是属性有十几个,甚至几十个的时候,通过set/get的方式,可能会占用大量的编程时间,关键是像这样的代码,基本上是机械式的操作。面对这种重复又枯燥的编程工作,很多的行业大佬,开发出了通用的对象属性复制工具,以免去机械式的编程。MapStruct下面我们一起来看看,他们的使用方式以及性能对比,最后根据不同的使用需求,总结出如何选择。
2024-12-11 17:37:57
51
转载 Spring Boot性能提升的核武器,速度提升500%!
轻量级:虚拟线程由 JVM 管理,而非操作系统,因此它们的内存占用和创建成本远低于传统线程。理论上,你可以轻松创建数十万甚至更多的虚拟线程。高并发性:虚拟线程能处理更高并发的场景,特别是 I/O 密集型的应用,适合开发高并发、响应式的应用程序。自动管理:无需手动管理线程池,JVM 会根据负载自动调整虚拟线程的调度,简化了并发编程的复杂性。
2024-12-09 18:58:10
26
转载 轻松地解析和生成CSV文件
Apache Commons CSV是Apache Commons项目中的一个子项目,专门用于处理CSV(Comma-Separated Values,逗号分隔值)文件的Java库。CSV是一种常见的数据交换格式,广泛用于电子表格、 数据库和其他数据存储系统之间的数据传输。Commons CSV提供了一套简单而强大的API,帮助开发者轻松地解析和生成CSV文件。
2024-12-09 13:36:19
61
转载 如何利用EasyExcel导出带有选择校验框的excel?
EasyExcel是一个轻量级的Excel处理工具,支持Excel 2003(xls)和Excel 2007及以上版本(xlsx)的文件格式。它的主要特点包括:高性能:通过SAX模式 解析Excel文件,避免将整个文件加载到内存中,适合处理大文件。简单易用:提供了简洁的API,易于集成和使用。功能丰富:支持自定义格式、样式、公式等多种功能。Easy Excel 允许用户自定义拦截器,以实现更复杂的功能。
2024-12-09 13:33:51
64
转载 万字详解 Stream 流式编程,写代码也可以很优雅
Stream(流)是 Java 8 引入的一个新的抽象概念,它代表着一种处理数据的序列。简单来说,Stream 是一系列元素的集合,这些元素可以是集合、数组、I/O 资源或者其他数据源。Stream API 提供了丰富的操作方法,可以对 Stream 中的元素进行各种转换、过滤、映射、聚合等操作,从而实现对数据的处理和操作。Stream API 的设计目标是提供一种高效、可扩展和易于使用的方式来处理大量的数据。Stream 可以基于不同类型的数据源创建,如集合、数组、I/O 资源等。
2024-12-06 18:08:44
51
转载 别提桶跑路,MySQL 误删数据救命指南来了!
我们可以通过binlog找回误删的数据,前提是开启了binlog。建议binlog模式为row模式,否则没办法根据正向操作生成逆向操作。有一些开源工具可以自动解析binlog,并且生成逆向操作。
2024-12-03 18:58:18
125
转载 谈一谈三方接口调用方案设计
Token是什么?token即 访问令牌access token,用于接口中标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请一个接口调用的账号,服务器会给出一个appId和一个appSecret(appSecret用于参数签名使用)注意appSecret保存到客户端,需要做一些安全处理,防止泄露。
2024-12-03 18:41:02
69
转载 PO、VO、DAO、BO、DTO、POJO 能分清吗?
数据库 = 真实的存储前端 = 漂亮的外衣操作 PO 的搬运工业务逻辑的操盘手传输数据的邮差所有这些的原型多理解,多实践,分清这些概念其实并不难。如果还觉得绕,不妨给自己写点代码试试,毕竟写代码才是检验理解的最佳方式。😊。
2024-11-26 16:39:29
68
转载 IT运维不得不知的网络性能20大关键指标
网络性能评估是确保网络服务质量和用户体验的关键环节。在网络、运维领域中,存在着一系列关键的性能指标,共同构成了衡量网络性能的基础。以下是网络性能的20大关键指标,每个指标都承载着特定的意义和重要性。
2024-11-21 11:23:22
90
转载 10个最危险的Linux命令,rm -rf /* 排第一?
/dev/null是一个特殊的文件,所有写入它的数据都会被丢弃。:下载的脚本可能包含恶意代码,执行后会对系统进行恶意操作,如删除文件、修改系统配置等。:在修改文件或目录的所有者或权限时,要确保了解文件的权限和所有者,并谨慎操作。:chown用于修改文件或目录的所有者,chmod用于修改文件或目录的权限。:执行此命令后,整个系统的文件和目录结构将被彻底删除,导致系统无法启动。:在执行此类命令前,务必确认目标设备,避免对错误的设备进行操作。:在使用fdisk前,请务必备份重要的数据,并仔细阅读使用手册。
2024-11-18 09:59:04
104
转载 线上出个 bug! MySQL 建个索引也有坑呢?
我只是创建个索引而已,没想到还这些遇到个诡异的问题!😱😱话说你平时创建mysql时遇到过以下创建索引报错的情况吗?报错提示如下//需要添加索引的字段的长度太长,超过了767字节🚩什么?索引长度限制?我从没遇到过啊,MySQL还会对索引键的长度有限制?是的,一般都不会遇到,不过这个问题我一个同事就遇到了!他用同样表结构和加索引的语法,都是相同的,但是一个测试环境和一个线上MySQL版本,一个执行成功一个执行失败!
2024-11-16 19:29:43
49
转载 一口气搞懂分库分表 12 种分片算法,大厂都在用
这次将详细介绍如何在中实战 5 种分片策略和 12 种分片算法,自定义分片算法,比较它们的应用场景以及优劣。本文中我们讲解了所支持的12种分片算法,每种算法都具有独特的特点。
2024-11-16 17:27:29
90
转载 Spring Boot定时任务调度动态配置,规避定时器硬编码
定时任务在业务生产中有着十分重要的作用,Spring Boot中,基于@Scheduled注解可以快速地实现定时任务。上述示例是平时大家创建定时任务使用比较多的方式,这种方式,也是最常用的,但是我们想要更灵活的配置,比较增加一个状态位,根据状态位打开或关闭任务,或是改变执行频率就不能实现了,原因在于Cron表达式是硬编码。定时器中常用Cron表达式来配置定时任务执行时间,Cron是一种描述定时任务调度的字符串,非常灵活,我们本文的核心就是消除Cron表达式硬编码。下面我们创建一个动态定时任务。
2024-11-14 11:33:39
88
转载 100个k8s高效命令全掌握,让你成为k8s运维大神!
98 .:应用自定义资源定义(CRD)文件,创建新的资源类型。99 .:列出所有已定义的自定义资源。100 .:查看特定自定义资源的实例列表,其中是CRD定义中的plural字段值。
2024-11-14 11:31:21
49
转载 告别菜鸟!7个秘诀让你成为Java功能设计大师
一个优秀的开发者不仅仅是代码的执行者,更是需求的分析师。将大任务分解成小模块,这不仅让开发更有条理,也为后续的并行开发铺平道路。今天,我们将为你揭秘7个关键点,助你从菜鸟蜕变为Java功能设计大师!开始行动吧,相信不久的将来,你也能成为团队中的Java功能设计大师!对于查询不到的数据,也要缓存null值,防止频繁穿透到数据库。掌握这7个秘诀,你就能在Java功能设计的道路上越走越远。了解你的接口能承受多大的QPS,这是底气的来源。善用缓存、异步处理和无锁设计,让你的接口飞起来。
2024-11-14 10:52:37
41
转载 Linux命令(十二):Linux进程管理命令
Linux进程管理命令用于监控和控制系统中的进程,以确保系统资源的有效利用和稳定运行。通过如 ps、top 和 kill 等命令,用户可以查看进程状态、调整进程优先级以及终止不必要的进程。:kill -9 PID 发送SIGKILL信号强制终止进程,PID 为进程ID。:增强版的 top,提供更友好的界面和交互功能,支持使用箭头键选择进程。:用于显示当前运行的进程及其状态信息,可以筛选和格式化输出。:htop 启动交互式进程查看器,用户可以方便地管理进程。:改变已运行进程的优先级,影响其CPU资源分配。
2024-11-07 16:16:28
48
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人