- 博客(572)
- 资源 (1)
- 问答 (4)
- 收藏
- 关注
原创 Nginx性能优化的几个方法
小伙伴们平时使用 Nginx 是否有进行过性能优化呢?还是软件装好了就直接使用呢?今天和大伙分享几个常见的 Nginx 优化配置。接下来我们就来看看具体该如何做。
2024-11-02 23:23:26 624
原创 正则表达式匹配日期格式
利用正则表达式结合文本编辑器,就能全局替换了 '(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})'这里有sql文本,是从数据库中拷贝出来的,希望重新执行的时候createTime和updateTime都统一设置成当前日期。
2024-10-30 22:13:41 186
转载 利用redis生产分布式ID
不过呢,光有唯一的 ID 还不够,我们还得让它更符合业务的实际需求。比如订单编号吧,我们可能希望它的格式是,其中ORD是业务标识,20240528是日期,0001是当天的序号。那具体怎么用呢?让我们在业务代码中一探究竟!想象一下,在一个电商系统中,当一个新的订单如流星般划过天际,我们迫不及待地想要一个独一无二的 ID 来标记它时——很简单,只需调用我们的方法,传入订单相关的参数即可。@Service@Autowired// 其他业务逻辑...
2024-10-29 23:18:21 4
转载 Redis List 是否适合做消息队列?
消息队列是一种异步的服务间通信方式,适用于分布式和微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高峰期工作负载。Producer:消息生产者,负责产生和发送消息到 Broker;Broker:消息处理中心。负责消息存储、确认、重试等,一般其中会包含多个 queue;Consumer:消息消费者,负责从 Broker 中获取消息,并进行相应处理;MySQL:“消息队列的使用场景有哪些呢?
2024-10-28 22:24:50 4
转载 Java中的回调机制
回调机制指的是将一个方法或函数作为参数传递给另一个方法,待特定事件或操作完成时调用这个方法,处理结果或执行后续操作。可以理解为一种“通知”机制,当一个任务完成时,调用回调函数来传递结果或执行后续逻辑回调可以分为同步回调和异步回调:异步回调:常见于异步操作,如网络请求、文件 I/O 操作等,在任务执行完成后,异步回调函数会被调用,处理返回的结果或错误。同步回调:指回调函数在主函数执行期间立即被调用。即回调是顺序执行的,不涉及多线程或异步操作整体回调机制流程如下图所示:可以看出回调是一种双向调用关系,
2024-10-27 19:49:44 7
转载 ForkJoin,实战讲解!
从 JDK 1.7 开始,引入了一种新的 Fork/Join 线程池框架,它可以把一个大任务拆成多个小任务并行执行,最后汇总执行结果。比如当前要计算一个数组的和,最简单的办法就是用一个循环在一个线程中完成,但是当数组特别大的时候,这种执行效率比较差,例如下面的示例代码。i++) {System.out.println("汇总结果:" + sum);还有一种办法,就是将数组进行拆分,比如拆分成 4 个部分,用 4 个线程并行执行,分别计算,最后进行汇总,这样执行效率会显著提升。
2024-10-27 11:20:59 6
转载 5 种微服务网关比对
从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、协议转换、限流熔断、静态响应处理。,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。
2024-10-20 20:06:14 21
原创 Notepad++中提取txt本指定格式内容
原文是一些对话历史记录,内容冗长繁杂,如果我只想看ask相关的提问内容,如何快速的提取出来呢?其实很简单,用Notepad++打开文本之后,选择标记,在查找目标中输入正则表达式。在日常工作,有些文本处理工作,比如下图。接着复制标记文本即可。
2024-10-13 17:25:22 229
转载 Mysql高性能规范
曾经,我接触过很多项目的数据库的很多字段基本设置为null,就图个方便,有的是为了方便前端传参,但是我觉得这是不规范的如果该字段默认值为Null并且又被设置为索引列那么这一列会需要额外的空间来保存,会占用更多的空间进行比较和计算时还需要对NULL值做特殊的处理。
2024-10-13 10:31:44 28
转载 现网JVM问题排查三板斧
虽然目前市场上有很多成熟的 JVM 可视化监控分析工具,但是所有的工具其实都依赖于 JDK 的接口和底层相关的命令,了解这些命令的使用对于我们在紧急情况下排查 JVM 相关的线上故障,会有更加直观的帮助。
2024-10-07 13:34:56 162
转载 一文彻底搞懂RocketMQ
类比一下我们生活的邮政系统。邮政系统要正常运行,离不开下面这四个角色, 一是发信者,二 是收信者, 三是负责暂存传输的邮局, 四是负责协调各个地方邮局的管理机构。对应到 RocketMQ 中,这四个角色就是 Producer、 Consumer、 Broker 、NameServer。在操作系统中,使用传统的方式,数据需要经历几次拷贝,还要经历用户态/内核态切换。从磁盘复制数据到内核态内存;从内核态内存复制到用户态内存;然后从用户态内存复制到网络驱动的内核态内存;
2024-09-29 08:28:53 217
转载 一文彻底搞懂RabbitMQ
用的居多:一旦 channel 进入 confirm 模式,所有在该信道上发布的消息都将会被指派一个从1开始的唯一的ID,一旦消息被投递到所有匹配的队列之后,RabbitMQ 就会发送一个包含消息的唯一ID 的 ACK给生产者,这就使得生产者知道消息已经正确到达目的队列了,如果 RabbitMQ 没能处理该消息,则会发送一个 Nack (not acknowledged) 消息给你,你可以进行重试操作。如果同时配置了队列的 TTL 和消息的 TTL,那么较小的那个值将会被使用。当然这样会造成吞吐量下降。
2024-09-23 20:54:25 192
转载 java实现锁的几种方式
在 Java 中,除了对象锁,还有显示的加锁的方式,比如 Lock 接口,用得比较多的就是 ReentrantLock。它的特性如下:下面我们再来对比看下 ReentrantLock 和 synchronized 的区别从这些对比就能看出 ReentrantLock 使用更加的灵活,特性更加丰富。ReentrantLock 是一个悲观锁,即是同一个时刻,只允许一个线程访问代码块,这一点 synchronized 其实也一样。
2024-09-21 19:14:38 185
转载 一文看懂 Kubernetes 弹性伸缩
综上所述,我们认识了什么是HPA,HPA如何工作,但是在实际的业务场景中,Pods缩容期间是否会对业务带来影响呢?该如何解决?
2024-09-08 10:15:52 176
转载 RocketMQ为何会出现消息重复消费
总得来说,RocketMQ中还是存在很多种导致消息重读消费的情况,并且官方也说了,只是在大多数情况下消息不会重复。所以如果你的业务场景中需要保证消息不能重复消费,那么就需要根据业务场景合理的设计幂等技术方案。
2024-09-01 16:54:57 225
转载 @Transactional 注解用法指南
针对不同业务定制异常类型是比较常见的做法,@Transactional 注解的 rollbackFor 参数支持自定义的异常,但我们往往习惯于将这些自定义异常继承自 RuntimeException。那么这就出现和上边同样的问题,事务的范围不足,许多异常类型仍然无法触发事务回滚。try {想要解决这个问题,可以在 catch 中主动抛出我们自定义的异常。try {上面的关于 @Transactional 注解的使用注意事项是我在代码审查和搜集网络观点后整理出的。
2024-09-01 08:14:35 148
转载 精通微服务,没听过SkyWalking?
上一篇文章介绍了分布式链路追踪的一种方式:Spring Cloud Sleuth+ZipKin,这种方案目前也是有很多企业在用,但是作为程序员要的追逐一些新奇的技术,Skywalking作为后起之秀也是值得大家去学习的。skywalking是一个优秀的国产开源框架,2015年由个人吴晟(华为开发者)开源 , 2017年加入Apache孵化器。
2024-08-29 22:36:04 139
转载 ReadWriteLock提升性能的终极指南
1.1 什么是ReadWriteLock在并发编程中,ReadWriteLock是一个锁,它允许多个线程同时读共享数据,而写操作则是互斥的。这意味着如果没有线程正在对数据进行写入,那么多个线程可以同时进行读取操作,从而提高程序的性能和吞吐量。1.2 ReadWriteLock与其他锁的比较相比于传统的互斥锁,ReadWriteLock在处理读多写少的场景时更加高效,因为它允许多个读操作并发执行,而不是让所有读写操作都串行化,因为缓存的读取操作往往比写入操作要多得多。1.3 使用场景与优势。
2024-08-28 22:32:39 71 1
转载 redis分布式锁八大坑点
在分布式系统中,由于redis分布式锁相对于更简单和高效,成为了分布式锁的首先,被我们用到了很多实际业务场景当中。但不是说用了redis分布式锁,就可以高枕无忧了,如果没有用好或者用对,也会引来一些意想不到的问题。今天我们就一起聊聊redis分布式锁的一些坑,给有需要的朋友一个参考。
2024-08-27 22:32:21 81
转载 MySQL数据实时同步到Elasticsearch
数据传输服务DTS(Data Transmission Service)是阿里云提供的实时数据流服务,支持关系型数据库(RDBMS)、非关系型的数据库(NoSQL)、数据多维分析(OLAP)等数据源间的数据交互,集数据同步、迁移、订阅、集成、加工于一体,助您构建安全、可扩展、高可用的数据架构。在MySQL与ES的同步场景中,其主要目的是将MySQL中的业务数据实时同步到ES中,以便利用ES的高效查询能力来应对复杂的查询需求,同时减轻MySQL的查询压力。Binlog实时同步的原理基于数据库的复制机制。
2024-08-18 16:15:55 106
转载 为什么说RedisCluster中的MGET要慎用
所以Lettuce客户端,执行mget获取跨槽位的数据,是通过槽位分发执行mget,并合并结果实现的。而Lettuce基于Netty的NIO框架实现,发送命令不会阻塞IO,但是处理请求是单连接串行发送命令,这也就意味着,如果我们计算出来的slot个数越多,耗时也就越高。在实际业务场景中,难免会有遇到使用了redis集群架构后要使用mget的场景,那么我们是否可以针对已有的一些redis客户端组件进行代码升级和优化呢?命令一次性获取多个 key 的值,如果这些 key 所在的哈希槽分布在不同的节点上,那么。
2024-08-18 12:47:02 250
转载 高并发系统的艺术:如何在流量洪峰中游刃有余
既然采用了分布式的微服务架构,那么分布式系统的一些常见痛点也是高并发要考虑的,比如熔断,降级,限流,超时等设计,这些本身是为了增强分布式系统的鲁棒性,从而简介的增强系统的高并发承载能力。随着互联网业务的不断发展,选择在网上购物的人群不断增加,这种情况下,会衍生出一些促销活动,类似抢购场景或者热销热卖场景,在高峰时段的下单数量会非常大,也意味着对数据库中畅销商品的库存操作十分频繁,需要频繁查库存和更新库存。当然那这样不够,因为MySQL数据库的读写的并发上线能力是有限的,我们还是需要再进一步优化我们的方案。
2024-08-17 17:48:47 52
转载 SkyWalking 和 ELK 实现链路追踪的实践
SkyWalking和 ELK 各自在 APM 与日志管理领域发挥着重要作用,尽管原生 ELK 不直接支持链路追踪,但通过与 SkyWalking 的集成,可以互补优势,共同提升微服务架构下的可观测性。
2024-08-11 16:38:29 118
转载 微服务中的日志链路追踪
本篇通过拦截器、MDC 功能,全链路加入了 traceId,然后将 traceId 输出到日志中,就可以通过日志来追踪调用链路。不论是进程内的方法级调用,还是跨进程间的服务调用,都可以进行追踪。另外日志还需要通过 ELK Stack 技术将日志导入到 Elasticsearch 中,然后就可以通过检索 traceId,将整个调用链路检索出来了。
2024-08-11 16:20:25 196
原创 @TransactionalEventListener与@EventListener那点事
最近测试提了个bug,有个交易订单服务,会产生一些交易数据,当时为了便于后续追溯交易订单的来源和状态,在交易中心服务中做了事件溯源功能,利用spring的事件监听功能做了异步事件溯源,将业务代码和事件存储逻辑解耦。同事在编码注册监听器的时候使用了@TransactionalEventListener注解。测试在测试功能的时候发现某一类型事件没有保存到事件溯源的mongoDB中,由于事件溯源功能已经上线快两年了。从现网mongoDB中查询数据,发现此类型事件数据从2023年7月份就没有数据了。
2024-08-08 21:39:18 893
原创 $‘\r‘: 未找到命令
'\r': 未找到命令,这个异常在执行shell脚本的时候经常遇到,一般新手遇到这个问题就不知道咋回事了。我们一般开发环境都是windows环境,在windows上编写的shell脚本里面如果存在换行符\r。如果我们直接在linux服务器上执行windows上编辑的shell脚本就会报前面的异常,那么我们可以将Windows格式的sh文件转换为Unix格式。
2024-07-27 16:53:14 557
转载 五年经验,还在面试前背双亲委派机制?
双亲委派机制的基本思想是:当一个类加载器试图加载某个类时,它会先委托给其父类加载器,如果父类加载器无法加载,再由当前类加载器自己进行加载。这种层层委派的方式有助于保障类的唯一性,避免类的重复加载,并提高系统的安全性和稳定性。启动类加载器(Bootstrap Class Loader):负责加载 %JAVA_HOME%/jre/lib 目录下的核心Java类库,比如:rt.jar、charsets.jar等。它是最顶层的类加载器,通常由C++编写。扩展类加载器。
2024-06-30 12:11:43 85
原创 Hibernate多事务同时调用update(T t) ,字段被覆盖问题
今天现网有个订单卡单了,经过排查发现没有任何异常日志,根据日志定位发现本应该更新的一个状态,也sql肯定执行了(使用了Hibernate的ORM框架),但是数据库里面的状态没有更新。大概逻辑如下根据日志能确认,此段代码肯定是被执行了,但是数据库表的Status依旧是processing。
2024-04-10 22:36:52 753 3
原创 五年经验,还不懂小表驱动大表
而如果sql语句中包含了exists关键字,它优先执行exists左边的语句(即主查询语句)。如果匹配上,则可以查询出数据。这个需求中,order表有10000条数据,而user表有100条数据。小表驱动大表,也就是说用小表的数据集驱动大表的数据集。假如有order和user两张表,其中order表有10000条数据,而user表有100条数据。前面提到的这种业务场景,使用in关键字去实现业务需求,更加合适。,然后再执行in外面的语句。不管是用in,还是exists关键字,其核心思想都是用小表驱动大表。
2024-04-08 22:29:37 460
原创 五年经验,连个文件下载方法都写不好
在java web开发中,我们经常遇到浏览器文件下载的功能,看似很简单的功能,有些几年经验的老鸟,都写不好,大家遇到这种功能,都是直接Ctrl+C一下代码,具体代码估计都没看。下面有两种写法对比,很多初学者都没注意,甚至有几年开发的经验的老鸟也时候也会犯错。
2024-03-31 13:41:33 310
转载 五年经验,应用分层还没搞懂?
总的来说业务分层对于代码规范是比较重要,决定着以后的代码是否可复用,是否职责清晰,边界清晰。当然这种分层其实见仁见智,团队中的所有人的分层习惯也不同,所以很难权衡出一个标准的准则,总的来说只要满足职责逻辑清晰,后续维护容易,就是好的分层。
2024-03-29 21:23:24 59 1
原创 利用Cas中service重定向钓鱼网站问题
今天运维反馈现网有个系统service=存在重定向钓鱼网站的安全漏洞。熟悉Cas实现单点登录的都知道,通过service参数,在Cas认证中心登录认证之后重定向到service对应的业务系统。但是Cas本身没有对service进行校验,所以就有别有用心之人,通过在service后面配置一些钓鱼网站。这样就会实现,从你的网站跳转到钓鱼网站。
2024-03-27 22:46:36 358
转载 彻底理解IO模型
IO,英文全称是Input/Output,翻译过来就是输入/输出。平时我们听得挺多,就是什么磁盘IO,网络IO。那IO到底是什么呢?是不是有种懵懵懂懂的感觉呀,好像大概知道它是什么,又好像说不清楚。IO,即输入/输出,到底谁是输入?谁是输出呢?IO如果脱离了主体,就会让人疑惑。
2024-03-26 22:40:31 50 1
转载 Redis最佳实践
在当今互联网项目中,几乎80%的的项目都有使用redis。但在其应用过程中,总是或多或少遇到过一些问题。redis内存为什么会增长这么快?redis为什么读取操作越来越慢?怎么样降低redis故障的频率?redis的运维需要注意些什么?redis部署时,如何做好资源使用的规划?对redis的监控应该要注意哪些指标?特别是当你的应用对redis非常依赖的前提下,那么这些问题就显得尤为突出。那么这个时候,这时候需要对redis的使用有一份最佳实践文档来助你轻松管理redis。
2024-03-25 21:46:10 52
转载 微服务鉴权的几种实现方案
但需要注意的是应该将Web项目的容器换成Undertow,因为Tomcat是阻塞式的容器,不换也不是不行,但吞吐量可能会少一下,Undertow是非阻塞式的容器,可以与Gateway到达相同的效果。根据需求积分服务提供了一个给用户添加积分的API,如果你的API是通过获取的当前登录用户ID增加的积分,那么面对场景二时你需要重新编写一个给用户添加积分的API,因为当前登录的是后台管理员而不是用户(代码复用率较低)。各位服务都有自己的鉴权方式,当然也可以通过jar包的方式统一各服务的鉴权方式。
2024-03-23 21:06:06 294 1
转载 五年经验,还只会用in和not in?
在MySQL中,IN和EXISTS都是用来实现子查询的关键字,但它们在使用方式、查询效率以及索引利用上有所区别。使用方式IN用于判断某个字段的值是否在子查询返回的结果集中。它通常与一个值列表或子查询一起使用,可以看作是多个OR条件的组合。而EXISTS用于检查子查询是否至少返回一行数据,它不关心子查询返回的具体值是什么。查询效率:在某些情况下,EXISTS可能比IN更高效,尤其是当子查询返回大量数据时。因为EXISTS只需要知道是否至少有一行数据满足条件,而IN。
2024-03-12 22:27:08 45
转载 nginx-keepalived的高可用方案
处于同一个VRRP组中的路由器具有两种互斥的角色:主控路由器和备份路由器一个VRRP组中有且只有一台处于主控角色的路由器,可以有一个或者多个处于备份角色的路由器VRRP协议从路由器组中选出一台作为主控路由器,负责ARP解析和转发IP数据包,组中的其他路由器作为备份的角色并处于待命状态。主机将虚拟路由器当作默认网关。主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,通信就会失效,因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议。
2024-03-10 23:09:26 45
原创 深入了解Kafka的文件存储原理
Kafka最初由Linkedin公司开发的分布式、分区的、多副本的、多订阅者的消息系统。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。kafka对消息保存是根据Topic进行归类,发送消息者称为Producer;消息接受者称为Consumer;此外kafka集群有多个kafka实例组成,每个实例(server)称为broker。
2024-03-02 22:23:55 1400
转载 Nginx核心架构设计和原理
Nginx 是一个免费的、开源的、高性能 Http 服务器和反向代理。Nginx 的架构设计是为了提供高性能、稳定性和可扩展性。
2024-02-25 15:42:35 122
Java+内存分析工具+MAT
2023-08-19
websocket实现聊天小demo
2023-05-12
aspose导出pdf乱码,配置字体库
2023-02-25
windows 2008 R2解决socket连接不释放补丁包
2019-01-17
aspose操作word文档,目录问题
2022-09-05
苹果退款接收latest_receipt_info数组里面的对象问题
2021-11-18
苹果商品内购,服务端提供接口订阅通知消息
2021-09-13
java.io.IOException: Premature EOF异常怎么解决
2020-09-17
jdk中的jre/lib/security目录下为啥要导入证书
2019-12-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人