自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(106)
  • 收藏
  • 关注

原创 熔断、隔离、重试、降级、超时、限流,高可用架构流量治理核心策略全掌握

那么可以对服务进行熔断降级,后面的请求不再重试,这段时间做降级处理,减少没必要的请求,等服务端恢复了之后再进行请求,这方面的工程实现很多,比如 go-zero 、 sentinel 、hystrix-go。因此,在架构设计时,我们不仅要接受故障的可能性,而且要学会拥抱故障。重试策略就包含了重试间隔时间,重试次数等。服务的响应时间并不是恒定的,在某些长尾条件下可能需要更多的计算时间,为了有足够的时间等待这种长尾请求响应,我们需要把超时设置足够长,但超时设置太长又会增加风险,超时的准确设置经常困扰我们。

2024-06-19 13:24:05 701

原创 聊聊 Mybatis 动态 SQL

如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。Mybatis 借助功能强大 OGNL 表达式,可以根据参数条件,动态生成执行 SQL。使用动态 SQL 最常见情景是根据条件包含 where 子句的一部分。这条语句提供了可选的查询博客文章列表 ,如果不传入 “title”,那么所有处于 “ACTIVE” 状态的 博客都会返回。

2024-06-19 13:22:42 902

原创 ConcurrentHashMap如何保证线程安全?

ConcurrentHashMap 在 JDK 1.7 时使用的是数据加链表的形式实现的,其中数组分为两类:大数组 Segment 和小数组 HashEntry,而加锁是通过给 Segment 添加 ReentrantLock 锁来实现线程安全的。而 JDK 1.8 中 ConcurrentHashMap 使用的是数组+链表/红黑树的方式实现的,它是通过 CAS 或 synchronized 来实现线程安全的,并且它的锁粒度更小,查询性能也更高。

2024-06-15 13:02:35 1110

原创 消息队列的 6 种经典使用场景和 Kafka 架构设计原理详细解析

今天来聊一聊 Kafka 消息队列的使用场景和核心架构实现原理,帮助你全面了解 Kafka 其内部工作原理和设计理念。。Apache Kafka 是一个高吞吐量、分布式的流处理平台,广泛应用于实时数据管道和流处理应用中。Kafka 以其高性能、低延迟、扩展性和可靠性,成为了大数据生态系统中的重要组件。

2024-06-06 13:36:11 1321

原创 高德面试:为什么Map不能插入null?

所谓的二义性问题指的是代码或表达式存在多种理解或解释,导致程序的含义不明确或模糊。以 ConcurrentHashMap 不允许为 null 的二义性问题来说,null 其实有以下两层含义:这个值本身设置的是 null,null 在这里表示的是一种具体的“null”值状态。null 还表示“没有”的意思,因为没有设置,所以啥也没有。所以,如果 ConcurrentHashMap 允许插入 null 值,那么就会存在二义性问题。

2024-06-06 13:33:52 769

原创 如何防止线上事故?从一次流水号重复引发的故障说起

今天分享了我在工作中遇到的一次生产事故。生产事故除了影响业务正常运转,处理事故的过程也是非常花费时间和精力的。完全不出事故是不可能的,如果能对历史故障吸取教训,多花心思研究自己的系统,可以有效降低故障率。

2024-06-06 13:27:57 788

原创 RocketMQ一条消息短暂而又精彩的一生!

为了更好地理解本文,这里再来总结一下RokcetMQ消息一生的各个环节。

2024-06-05 13:33:19 675

原创 当Synchronized遇到这玩意儿,有个大坑!

前几天在某技术平台上看到别人提的关于 Synchronized 的一个用法问题,我觉得挺有意思的,这个问题其实也是我三年前面试某公司的时候遇到的一个真题,当时不知道面试官想要考什么,没有回答的特别好,后来研究了一下就记住了。所以看到这个问题的时候觉得特别亲切,准备分享给你一起看看:程序逻辑也很简单,是一个模拟抢票的过程,一共 10 张票,开启两个线程去抢票。票是共享资源,且有两个线程来消费,所以为了保证线程安全,TicketConsumer 的逻辑里面用了 synchronized 关键字。

2024-06-05 13:32:01 747

原创 Feign如何设置超时时间,不同情况下还真不一样

今天给大家扒了扒在不同使用条件下Feign的超时时间设置,总结起来大致如下:单独使用Feign时:通过和方法参数SpringCloud环境下单独使用Feign:方法参数、配置文件、声明OptionsBean跟Ribbon配合使用:通过Ribbon的超时参数设置跟Hystrix配合使用:修改默认的超时时间,尽量符合 Hystrix超时时间 >= (连接超时时间 + 读超时时间) * 重试次数。

2024-06-05 13:30:08 2426

原创 离谱!CPU狂飙900%,这怎么处理?

最近有位小伙伴面试了网易,遇到了一个 性能类的面试题:CPU飙升900%,该怎么处理?可惜的是,上面的问题,这个小伙没有回答理想。最终,导致他网易之路,终止在二面,非常可惜。

2024-06-04 13:30:09 960

原创 SpringCloud 微服务中网关如何记录请求响应日志?

在基于SpringCloud开发的微服务中,我们一般会选择在网关层记录请求和响应日志,并将其收集到ELK中用作查询和分析。今天我们就来看看如何实现此功能。

2024-06-04 13:29:23 824

原创 万字聊一聊RocketMQ一条消息短暂而又精彩的一生

为了更好地理解本文,这里再来总结一下RokcetMQ消息一生的各个环节。最后,如果有对RocketMQ源码感兴趣的小伙伴可以从如下地址中拉取RocketMQ源码,里面我已经对RocketMQ一些源码进行了注释。

2024-06-04 13:28:28 969

原创 拼多多面试:Netty如何解决粘包问题?

在 TCP 协议的基础上封装一层自定义数据协议,在自定义数据协议中,包含数据头(存储数据的大小)和 数据的具体内容,这样服务端得到数据之后,通过解析数据头就可以知道数据的具体长度了,也就没有粘包的问题了。

2024-06-03 13:14:35 847

原创 Spring Boot 性能太差?试试这几招!

默认 Tomcat 容器改为 Undertow(Jboss 下的服务器,Tomcat 吞吐量 5000,Undertow 吞吐量 8000)线程池中执行,而这个线程池中的所有线程都是 Daemon(守护)线程,所以,当主线程结束时,这些线程无论执行完毕都会退出系统。实例就可以作为这次调用的契约,在将来任何场合,用于获得最终的计算结果。方法中,它会在一个新线程中,执行传入的参数。方法,这个方法可能是比较慢的,但这并不影响。这两个方法如果在不指定线程池的情况下,都是在。在该示例中,启动一个线程,此时。

2024-06-03 13:12:33 301

原创 滴滴面试:谈谈对Netty线程模型的理解?

Netty 线程模型是指 Netty 框架为了提供高性能、高并发的网络通信,而设计的管理和利用线程的策略和机制。

2024-06-01 13:53:36 441

原创 Spring Boot + URule 实现可视化规则引擎,太优雅了!

规则引擎其实是一种组件,它可以嵌入到程序当中。将程序复杂的判断规则从业务代码中剥离出来,使得程序只需要关心自己的业务,而不需要去进行复杂的逻辑判断;简单的理解是规则接受一组输入的数据,通过预定好的规则配置,再输出一组结果。当然,市面上有很多成熟的规则引擎,如:Drools、Aviator、EasyRules等等。但是URule,它可以运行在Windows、Linux、Unix等各种类型的操作系统之上,采用纯浏览器的编辑模式,不需要安装工具,直接在浏览器上编辑规则和测试规则。

2024-06-01 13:52:08 902

原创 告别裸奔,聊聊主流消息队列的认证和鉴权!

RabbitMQ 和 Pulsar 都提供了自定义、可插拔的身份认证框架,然后基于框架的接口来实现各种认证插件,在配置文件中指定要使用的认证插件。Pulsar 内置的认证插件包括 JWT、OAuth2.0、Athenz、Kerberos 等。RabbitMQ 实现的认证插件包括 AMQPLAIN 和 PLAIN。总结:认证框架的选择很多,Kafka 选择的 SASL 机制更加完善,功能更加强大,实现起来也更加复杂。而自定义的机制则实现更加简单,同时也能满足消息队列的认证需求。消息队列认证方式。

2024-06-01 13:50:31 847

原创 得物面试:说说反射的实现原理?

反射在程序运行期间动态获取类和操纵类的一种技术。

2024-05-31 13:12:48 1319

原创 把 Spring Boot 项目从 18.18M 瘦身到 0.18M,部署超级快!

SpringBoot部署起来虽然简单,如果服务器部署在公司内网,速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼:编译出来的 Jar 包很大,如果工程引入了许多开源组件(SpringCloud等),那就更大了。这个时候如果想要对线上运行工程有一些微调,则非常痛苦。

2024-05-31 13:11:35 215

原创 面试官:说说Netty核心组件?

Netty 核心组件是指 Netty 在执行过程中所涉及到的重要概念,这些核心组件共同组成了 Netty 框架,使 Netty 框架能够正常的运行。

2024-05-31 13:10:47 546

原创 SpringBoot 动态加载 Jar 包,玩转动态配置!

动态加载Jar包是指在应用程序运行时,动态地加载和卸载Jar包中的类和资源。这种机制可以提高系统的灵活性和可扩展性,允许在不重启应用程序的情况下,添加、更新或删除组件。本文详细介绍了如何在Spring Boot应用程序中实现动态加载Jar包。我们首先了解了动态加载Jar包的基本概念和作用,然后学习了如何使用Spring Boot的类加载器和第三方库来实现Jar包的动态加载。我们还通过具体的示例展示了如何在Spring Boot应用程序中配置和使用Jar包的动态加载,以提高系统的灵活性和可扩展性。

2024-05-30 14:18:49 993

原创 面试官:消息队列的应用场景有哪些?

通常来说,使用消息队列主要能为我们的系统带来下面三点好处:异步处理削峰/限流降低系统耦合性除了这三点之外,消息队列还有其他的一些应用场景,例如实现分布式事务、顺序保证和数据流处理。如果在面试的时候你被面试官问到这个问题的话,一般情况是你在你的简历上涉及到消息队列这方面的内容,这个时候推荐你结合你自己的项目来回答。

2024-05-30 14:18:10 670

原创 Controller层代码就该这么写,简洁又优雅!

Controller层代码应该是后端开发接触非常多的代码了,好的接口设计能让你的Controller层代码简洁又优雅,今天给大家分享下接口设计的18条军规!

2024-05-30 14:15:59 610

原创 面试官:说说读写锁的底层实现?

本文大纲如下。

2024-05-29 13:21:29 889

原创 你管这破玩意儿叫负载均衡?

架构一定要结合业务的实际情况来设计,脱离业务谈架构其实是耍流氓,可以看到上文每一个架构的衍化都与我们的业务发展息息相关,对于中小型流量没有那么大的公司,其实用 Nginx 作为负载均衡足够,在流量迅猛增长后则考虑使用 lvs+nginx,当然像美团这样的巨量流量(数十 Gbps的流量、上千万的并发连接),lvs 也不管用了(实测虽然使用了 lvs 但依然出现了不少丢包的现象)所以它们开发出了自己的一套四层负载均衡器 MGW。

2024-05-29 13:19:43 823

原创 京东二面:为什么Netty要造FastThreadLocal?

FastThreadLocal 从字面意义上来看,它是“Fast”+“ThreadLocal”的结合体,寓意为快速的 ThreadLocal。那么,问题来了,Netty 为什么要再造一个 FastThreadLocal?FastThreadLocal 运行快的原因是啥?除了快之外,它还有其他优势吗?ThreadLocal 线程本地变量,每个线程都拥有一份该变量的独立副本,即使是在多线程环境下,每个线程也只能修改和访问自己的那份副本,从而避免了线程安全问题,实现了线程间的隔离。ThreadLocal 底层是使

2024-05-29 13:17:05 853

原创 阿里面试:NIO为什么会导致CPU100%?

在 Java 中总共有三种 IO 类型:BIO(Blocking I/O,阻塞I/O)、NIO(Non-blocking I/O,非阻塞I/O)和 AIO(Asynchronous I/O,异步I/O),它们的区别如下:在 JDK 1.4 之前,只有 BIO 一种模式,其开发过程相对简单,新来一个连接就会创建一个新的线程处理,但随着请求并发度的提升,BIO 很快遇到了性能瓶颈。

2024-05-28 15:24:28 716

原创 1.4万字+20张图探秘Redis高效的网络模型

这部分在一定程度上是我的强迫症作祟,我关于文章对知识点讲解的完备性上对自己近乎苛刻。我觉得把Socket讲明白对接下来的讲解是一件很重要的事情,看过我之前的文章的读者或许能意识到,我尽量避免把前置知识直接以链接的形式展示出来,我认为会割裂整篇文章的阅读体验。不割裂的结果就是文章可能显得很啰嗦,好像一件事情非得从盘古开天辟地开始讲起。因此,如果各位觉得对这个知识点有足够的把握,就直接略过好了~我们所做的任何需要和远程设备进行交互的操作,并非是操作软件本身进行的数据通信。

2024-05-28 15:16:15 979

原创 使用 查询分离 后 从20s优化到500ms

查询分离从字面上来说非常容易理解,其实就是在写数据时保存一个备份数据到另外的存储系统,在查询时直接从另外的存储系统中获取数据,如下图:查询分离以上只是简单的架构图,其中有些细节还是需要深究,如下:什么时候触发查询分离?如何实现查询分离?查询数据的存储系统选型?查询数据如何使用?本篇文章介绍了表数据量大查询缓慢的一种解决方案:查询分离,但这也不是银弹,仍然是存在一些不足,比如表数据量大,写入缓慢怎么办?这个后面文章再介绍吧。

2024-05-28 15:13:47 635

原创 把Redis当作队列来用,真的合适吗?

好了,总结一下。这篇文章我们从「Redis 能否用作队列」这个角度出发,介绍了 List、Pub/Sub、Stream 在做队列的使用方式,以及它们各自的优劣。之后又把 Redis 和专业的消息队列中间件做对比,发现 Redis 的不足之处。最后,我们得出 Redis 做队列的合适场景。这里我也列了一个表格,总结了它们各自的优缺点。

2024-05-27 13:22:22 619

转载 SpringBoot接口防抖(防重复提交)的一些实现方案

设置额外选项:过期时间和SET_IF_ABSENT选项”,有些同学可能不太清楚SET_IF_ABSENT是个啥,这里我解释一下:SET_IF_ABSENT是 RedisStringCommands.SetOption 枚举类中的一个选项,用于在执行 SET 命令时设置键值对的时候,如果键不存在则进行设置,如果键已经存在,则不进行设置。从测试的结果上看,防抖是做到了,但是随着缓存消失、锁失效,还是可以发起同样的请求,所以要真正做到接口幂等性,还需要业务代码的判断、设置数据库表的UK索引等操作。

2024-05-27 13:21:17 713

原创 官方推出了 Spring AI 框架,Java集成 AI 不再是难事!

在软件开发的世界中,Java一直是企业级应用的主力军。而Spring框架,尤其是Spring Boot,以其生态系统的丰富性,为开发者提供了无与伦比的便利。现在,Spring Boot正迈向一个新的纪元——人工智-能的时代。Spring AI项目的推出,不仅标志着Spring生态的进一步扩展,也为广大Java开发者开启了一个全新的编程领域。图片Spring AI项目是为了解-决现代开发者在集成AI功能时遇到的挑战而诞生的。

2024-05-25 13:36:26 363

原创 Spring Boot 3.3 正式发布,王炸级更新,应用启动速度直接起飞!

Spring Boot 3.3 这个版本的变化还挺大的,很多功能都得到了增强,做技术的真要时刻保持对新技术的渴望啊,不然都跟不上时代的步伐了。

2024-05-25 13:35:48 932

原创 京东面试:SpringBoot同时可以处理多少请求?

Spring Boot 作为 Java 开发中必备的框架,它为开发者提供了高效且易用的开发工具,所以和它相关的面试题自然也很重要,咱们今天就来看这道经典的面试题:Spring Boot 同时可以处理多少个请求?准确的来说,Spring Boot 同时可以处理多少个请求,并不取决于 Spring Boot 框架本身,而是取决于其内置的 Web 容器(因为 Web 容器的行为,决定了 Spring Boot 的行为,所以咱们姑且认为两个问题的回答是一样的)。

2024-05-25 13:34:01 383

原创 全面解析服务容错中间件 Sentinel 持久化两种模式

到这儿,服务容错中间件Sentinel的两种持久化模式就已经介绍完了。下一篇将为大家带来Feign整合容错组件 Sentinel 的文章,敬请期待吧!

2024-05-24 13:35:12 412

原创 跨域问题的4种解决方案

跨域问题指的是在Web开发中,由于浏览器的同源策略限制,当一个网页尝试访问与它不同源(协议、域名或端口不同)的资源时,可能会遇到安全限制导致无法正常访问的问题。这种策略旨在防止恶意网站读取或修改其他网站的数据,保护用户信息安全。这样说可能有点抽象,下面具体展开说明。跨域问题指的是在Web开发中,由于浏览器的同源策略限制,导致无法正常访问的问题。主要原理就是请求参数。

2024-05-24 13:33:56 458

原创 项目终于用上了 Spring 状态机,太优雅了!

先来解释什么是“状态”( State )。现实事物是有不同状态的,例如一个自动门,就有 open 和 closed 两种状态。我们通常所说的状态机是有限状态机,也就是被描述的事物的状态的数量是有限个,例如自动门的状态就是两个 open 和 closed。状态机,也就是 State Machine ,不是指一台实际机器,而是指一个数学模型。说白了,一般就是指一张状态转换图。例如,根据自动门的运行规则,我们可以抽象出下面这么一个图。

2024-05-24 13:32:24 934

原创 用 explain 如何优化sql性能?

对于互联网公司来说,随着用户量和数据量的不断增加,慢查询是无法避免的问题。一般情况下如果出现慢查询,意味着接口响应慢、接口超时等问题。如果是高并发的场景,可能会出现数据库连接被占满的情况,直接导致服务不可用。慢查询的确会导致很多问题,我们要如何优化慢查询呢?主要解决办法有:监控sql执行情况,发邮件、短信报警,便于快速识别慢查询sql打开数据库慢查询日志功能简化业务逻辑代码重构、优化异步处理sql优化索引优化其他的办法先不说,后面有机会再单独介绍。

2024-05-23 13:57:03 1176

原创 SpringBoot 实现 RAS+AES 自动接口解密

接口安全老生常谈了过年之前做了过一款飞机大战的H5小游戏,里面无限模式-需要保存用户的积分,因为使用的Body传参,参数是可见的。为了接口安全我,我和前端约定了传递参数是:用户无限模式的积分+“我们约定的一个数字”+用户id的和,在用Base64加密,请求到服务器我再解密,出用户无限模式的积分;如下:可是过年的时候,运营突然找我说无限模式积分排行榜分数不对:这就很诡异了,第二名才一万多分,第一名就40多万分!!!!一开始我以为是我解密有问题,反复看了好几变,可就两三行代码不可能有问题的!!!没办法我去

2024-05-23 13:53:34 705 1

原创 我使用缓存,踩过的7个坑

缓存在我们日常工作中,经常会使用,但如果用不好坑也挺多的。这篇文章总结了我工作中使用缓存遇到过的7个坑,还是非常有参考价值的,希望对你会有所帮助。

2024-05-23 13:50:45 1288 1

空空如也

空空如也

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

TA关注的人

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