自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringBoot 自动装配原理详解

我们现在提到自动装配的时候,一般会和 Spring Boot 联系在一起。但是,实际上 Spring Framework 早就实现了这个功能。Spring Boot 只是在其基础上,通过 SPI 的方式,做了进一步优化。SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用 jar 包中的文件,将文件中配置的类型信息加载到 Spring 容器(此处涉及到 JVM 类加载机制与 Spring 的容器知识),并执行类中定义的各种操作。

2025-04-02 14:42:13 851

原创 Apipost的使用

‌,涵盖设计、调试、文档生成、Mock 服务与自动化测试五大核心模块‌7,支持主流协议(HTTP/WebSocket/GRPC/TCP/UDP)与数据库操作‌。Apipost 提供 ‌。

2025-03-31 20:50:29 425

原创 Spring&SpringBoot常用注解总结

可以毫不夸张地说,这篇文章介绍的 Spring/SpringBoot 常用注解基本已经涵盖你工作中遇到的大部分常用的场景。对于每一个注解我都说了具体用法,掌握搞懂,使用 SpringBoot 来开发项目基本没啥大问题了!为什么要写这篇文章?最近看到网上有一篇关于 SpringBoot 常用注解的文章被转载的比较多,我看了文章内容之后属实觉得质量有点低,并且有点会误导没有太多实际使用经验的人(这些人又占据了大多数)。所以,自己索性花了大概 两天时间简单总结一下了。

2025-03-28 19:37:21 696

原创 JWT 身份认证优缺点分析

JWT 其中一个很重要的优势是无状态,但实际上,我们想要在实际项目中合理使用 JWT 做认证登录的话,也还是需要保存 JWT 信息。JWT 也不是银弹,也有很多缺陷,具体是选择 JWT 还是 Session 方案还是要看项目的具体需求。万万不可尬吹 JWT,而看不起其他身份认证方案。另外,不用 JWT 直接使用普通的 Token(随机生成的 ID,不包含具体的信息) 结合 Redis 来做身份认证也是可以的。

2025-03-26 18:44:53 698

原创 认证授权基础概念详解

​Cookie和Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。维基百科是这样定义CookieCookies是某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密)。简单来说:Cookie存放在客户端,一般用来保存用户信息。下面是Cookie我们在Cookie中保存已经登录过的用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了。除此之外,Cookie还能保存用户首选项,主题和其他设置信息。使用Cookie保存SessionId或者。

2025-03-25 19:33:30 949

原创 性能测试入门

性能测试一般情况下都是由测试这个职位去做的,那还需要我们开发学这个干嘛呢?了解性能测试的指标、分类以及工具等知识有助于我们更好地去写出性能更好的程序,另外作为开发这个角色,如果你会性能测试的话,相信也会为你的履历加分不少。这篇文章是我会结合自己的实际经历以及在测试这里取的经所得,除此之外,我还借鉴了一些优秀书籍,希望对你有帮助。

2025-03-24 20:24:58 751

原创 超时&重试详解

超时机制说的是当一个请求超过指定的时间(比如 1s)还没有被处理的话,这个请求就会直接被取消并抛出指定的异常或者错误(比如连接超时(ConnectTimeout):客户端与服务端建立连接的最长等待时间。读取超时(ReadTimeout):客户端和服务端已经建立连接,客户端等待服务端处理完请求的最长时间。实际项目中,我们关注比较多的还是读取超时。一些连接池客户端框架中可能还会有获取连接超时和空闲连接清理超时。如果没有设置超时的话,就可能会导致服务端连接数爆炸和大量请求堆积的问题。

2025-03-20 15:56:49 982

原创 服务限流详解

这篇文章主要介绍了常见的限流算法、限流对象的选择以及单机限流和分布式限流分别应该怎么做。

2025-03-19 15:03:45 730

原创 冗余设计详解

举个例子:哨兵模式的 Redis 集群中,如果 Sentinel(哨兵) 检测到 master 节点出现故障的话, 它就会帮助我们实现故障转移,自动将某一台 slave 升级为 master,确保整个 Redis 系统的可用性。和传统的灾备设计相比,同城多活和异地多活最明显的改变在于“多活”,即所有站点都是同时在对外提供服务的。对于服务来说,冗余的思想就是相同的服务部署多份,如果正在使用的服务突然挂掉的话,系统可以很快切换到备份服务上,大大减少系统的不可用时间,提高系统的可用性。

2025-03-18 18:46:05 451

原创 高可用系统设计指南

高可用描述的是一个系统在大部分时间都是可用的,可以为我们提供服务的。高可用代表系统即使在发生硬件故障或者系统升级的时候,服务仍然是可用的。一般情况下,我们使用多少个 9 来评判一个系统的可用性,比如 99.9999% 就是代表该系统在所有的运行时间中只有 0.0001% 的时间是不可用的,这样的系统就是非常非常高可用的了!当然,也会有系统如果可用性不太好的话,可能连 9 都上不了。

2025-03-17 19:45:27 974

原创 高可用系统设计指南

高可用描述的是一个系统在大部分时间都是可用的,可以为我们提供服务的。高可用代表系统即使在发生硬件故障或者系统升级的时候,服务仍然是可用的。一般情况下,我们使用多少个 9 来评判一个系统的可用性,比如 99.9999% 就是代表该系统在所有的运行时间中只有 0.0001% 的时间是不可用的,这样的系统就是非常非常高可用的了!当然,也会有系统如果可用性不太好的话,可能连 9 都上不了。

2025-03-15 10:27:09 1047

原创 RabbitMQ常见问题总结

DLX,全称为,死信交换器,死信邮箱。当消息在一个队列中变成死信 () 之后,它能被重新发送到另一个交换器中,这个交换器就是 DLX,绑定 DLX 的队列就称之为死信队列。导致的死信的几种原因消息被拒() 且。消息 TTL 过期。队列满了,无法再添加。延迟队列指的是存储对应的延迟消息,消息被发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后,消费者才能拿到这个消息进行消费。

2025-03-15 09:32:39 953

原创 RocketMQ常见问题总结(二)

如果此时我们主节点 A 负责的是订单 A 的一系列语义消息,然后它挂了,这样其他节点是无法代替主节点 A 的,如果我们任意节点都可以存入任何消息,那就没有顺序性可言了。然而,很多事情是没有完美的方案的,就比如我们进行消息写入的节点越多就更能保证消息的可靠性,但是随之的性能也会下降,所以需要程序员根据特定业务场景去选择适应的主从复制方案。(仅仅是消费),所以在主节点挂掉的时间只会产生主从结点短暂的消息不一致的情况,降低了可用性,而当主节点重启之后,从节点那部分未来得及复制的消息还会继续复制。

2025-03-14 19:46:08 907

原创 RocketMQ常见问题总结

回溯消费是指Consumer已经消费成功的消息,由于业务上需求需要重新消费,在RocketMQ中,Broker在向Consumer投递成功消息后,消息仍然需要保留。并且重新消费一般是按照时间维度,例如由于Consumer系统故障,恢复后需要重新消费 1 小时前的数据,那么Broker要提供一种机制,可以按照时间维度来回退消费进度。RocketMQ支持按照时间回溯消费,时间维度精确到毫秒。这是官方文档的解释,我直接照搬过来就当科普了 😁😁😁。

2025-03-13 15:14:37 1251

原创 Kafka常见问题总结

Kafka 将生产者发布的消息发送到Topic(主题)中,需要这些消息的消费者可以订阅这些Topic(主题),如下图所示:Producer(生产者): 产生消息的一方。Consumer(消费者): 消费消息的一方。Broker(代理): 可以看作是一个独立的 Kafka 实例。多个 Kafka Broker 组成一个 Kafka Cluster。Topic(主题): Producer 将消息发送到特定的主题,Consumer 通过订阅特定的 Topic(主题) 来消费消息。

2025-03-12 15:21:00 691

原创 Disruptor常见问题总结

这样做的好处是,当生产者不断往 RingBuffer 中插入新的事件对象时,这些事件对象的内存地址就能够保持连续,从而利用 CPU 缓存的局部性原理,将相邻的事件对象一起加载到缓存中,提高程序的性能。为了加速数据的读取过程,CPU 会先将数据从内存中加载到高速缓存中,如果下一次需要访问相同的数据,就可以直接从高速缓存中读取,而不需要再次访问内存。,CPU 还会根据之前访问的内存地址预取相邻的内存数据,因为在程序中,连续的内存地址通常会被频繁访问到,这样做可以提高数据的缓存命中率,进而提高程序的性能。

2025-03-11 08:52:24 722

原创 消息队列基础知识总结

我们可以把消息队列看作是一个存放消息的容器,当我们需要使用消息的时候,直接从容器中取出消息供自己使用即可。由于队列 Queue 是一种先进先出的数据结构,所以消费消息时也是按照顺序来消费的。参与消息传递的双方称为生产者和消费者,生产者负责发送消息,消费者负责处理消息。操作系统中的进程通信的一种很重要的方式就是消息队列。我们这里提到的消息队列稍微有点区别,更多指的是各个服务以及系统内部各个组件/模块之前的通信,属于一种中间件。

2025-03-10 19:20:15 814

原创 深度分页介绍及优化建议

MySQL 在无法利用索引的情况下跳过1000000条记录后,再获取10条记录范围查询: 基于 ID 连续性进行分页,通过记录上一页最后一条记录的 ID 来获取下一页数据。适合 ID 连续且按 ID 查询的场景,但在 ID 不连续或需要按其他字段排序时存在局限。子查询: 先通过子查询获取分页的起始主键值,再根据主键进行筛选分页。利用主键索引提高效率,但子查询会生成临时表,复杂场景下性能不佳。延迟关联 (INNER JOIN): 使用INNER JOIN将分页操作转移到主键索引上,减少回表次数。

2025-03-07 19:42:27 639

原创 数据冷热分离详解

数据冷热分离是指根据数据的访问频率和业务重要性,将数据分为冷数据和热数据,冷数据一般存储在存储在低成本、低性能的介质中,热数据高性能存储介质中。

2025-03-06 19:41:37 531

原创 读写分离和分库分表详解

读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。这样的话,就能够小幅提升写性能,大幅提升读性能。一般情况下,我们都会选择一主多从,也就是一台主数据库负责写,其他的从数据库负责读。主库和从库之间会进行数据同步,以保证从库中数据的准确性。这样的架构实现起来比较简单,并且也符合系统的写少读多的特点。关于如何避免主从延迟,我们这里介绍了两种方案。实际上,延迟读取这种方案没办法完全避免主从延迟,只能说可以减少出现延迟的概率而已,实际项目中一般不会使用。

2025-03-05 15:58:00 978

原创 负载均衡原理及算法详解

负载均衡指的是将用户请求分摊到不同的服务器上处理,以提高系统整体的并发处理能力以及可靠性。负载均衡服务可以有由专门的软件或者硬件来完成,一般情况下,硬件的性能更好,软件的价格更便宜(后文会详细介绍到)。下图是《Java 面试指北》「高并发篇」中的一篇文章的配图,从图中可以看出,系统的商品服务部署了多份在不同的服务器上,为了实现访问商品服务请求的分流,我们用到了负载均衡。负载均衡是一种比较常用且实施起来较为简单的提高系统并发能力和可靠性的手段,不论是单体架构的系统还是微服务架构的系统几乎都会用到。

2025-03-04 09:53:28 586

原创 CDN工作原理详解

CDN 就是将静态资源分发到多个不同的地方以实现就近访问,进而加快静态资源的访问速度,减轻服务器以及带宽的负担。基于成本、稳定性和易用性考虑,建议直接选择专业的云厂商(比如阿里云、腾讯云、华为云、青云)或者 CDN 厂商(比如网宿、蓝汛)提供的开箱即用的 CDN 服务。GSLB (Global Server Load Balance,全局负载均衡)是 CDN 的大脑,负责多个 CDN 节点之间相互协作,最常用的是基于 DNS 的 GSLB。CDN 会通过 GSLB 找到最合适的 CDN 节点。

2025-03-03 18:54:51 1146

原创 ZooKeeper相关概念总结(进阶)

ZooKeeper由Yahoo开发,后来捐赠给了Apache,现已成为Apache顶级项目。ZooKeeper是一个开源的分布式应用程序协调服务器,其为分布式系统提供一致性服务。其一致性是通过基于Paxos算法的ZAB协议完成的。其主要功能包括:配置维护、分布式同步、集群管理等。简单来说,ZooKeeper是一个分布式协调服务框架。分布式?协调服务?这啥玩意?🤔🤔其实解释到分布式这个概念的时候,我发现有些同学并不是能把分布式和集群这两个概念很好的理解透。

2025-02-28 15:10:20 797

原创 ZooKeeper相关概念总结(入门)

正式介绍 ZooKeeper 之前,我们先来看看 ZooKeeper 的由来,还挺有意思的。下面这段内容摘自《从 Paxos 到 ZooKeeper》第四章第一节,推荐大家阅读一下:ZooKeeper 最早起源于雅虎研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布式单点问题。所以,雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架,以便让开发人员将精力集中在处理业务逻辑上。

2025-02-27 11:02:32 1415

原创 Dubbo常见问题总结

ˈdʌbəʊ| 是一款高性能、轻量级的开源 WEB 和 RPC 框架。根据Dubbo 官方文档的介绍,Dubbo 提供了六大核心能力面向接口代理的高性能 RPC 调用。智能容错和负载均衡。服务自动注册和发现。高度可扩展能力。运行期流量调度。可视化的服务治理与运维。Dubbo 不光可以帮助我们调用远程服务,还提供了一些其他开箱即用的功能比如智能负载均衡。Dubbo 目前已经有接近 34.4 k 的 Star。在2020 年度 OSC 中国开源项目。

2025-02-26 15:17:36 942

原创 RPC基础知识总结

gRPC 和 Thrift 虽然支持跨语言的 RPC 调用,但是它们只提供了最基本的 RPC 框架功能,缺乏一系列配套的服务化组件和服务治理功能的支撑。Dubbo 不论是从功能完善程度、生态系统还是社区活跃度来说都是最优秀的。而且,Dubbo 在国内有很多成功的案例比如当当网、滴滴等等,是一款经得起生产考验的成熟稳定的 RPC 框架。最重要的是你还能找到非常多的 Dubbo 参考资料,学习成本相对也较低。下图展示了 Dubbo 的生态系统。

2025-02-25 16:42:58 1002

原创 分布式锁常见实现方案总结

Redis和ZooKeeper。至于具体选择 Redis 还是 ZooKeeper 来实现分布式锁,还是要根据业务的具体需求来决定。如果对性能要求比较高的话,建议使用 Redis 实现分布式锁。推荐优先选择Redisson提供的现成分布式锁,而不是自己实现。实际项目中不建议使用 Redlock 算法,成本和收益不成正比,可以考虑基于 Redis 主从复制+哨兵模式实现分布式锁。如果对可靠性要求比较高,建议使用 ZooKeeper 实现分布式锁,推荐基于Curator框架来实现。

2025-02-24 15:21:57 634

原创 分布式锁介绍

分布式锁的用途:分布式系统下,不同的服务/客户端通常运行在独立的 JVM 进程上。如果多个 JVM 进程共享同一份资源的话,使用本地锁就没办法实现资源的互斥访问了。分布式锁的应该具备的条件:互斥、高可用、可重入、高性能、非阻塞。分布式锁的常见实现方式:关系型数据库比如 MySQL、分布式协调服务 ZooKeeper、分布式键值存储系统比如 Redis 、Etcd。

2025-02-22 08:57:45 897

原创 分布式ID设计指南

网上绝大多数的分布式 ID 生成服务,一般着重于技术原理剖析,很少见到根据具体的业务场景去选型 ID 生成服务的文章。本文结合一些使用场景,进一步探讨业务场景中对 ID 有哪些具体的要求。

2025-02-21 17:14:17 920

原创 分布式ID介绍&实现方案总结

有很多基于 Snowflake 算法的开源实现比如美团 的 Leaf、百度的 UidGenerator(后面会提到),并且这些开源实现对原有的 Snowflake 算法进行了优化,性能更优秀,还解决了 Snowflake 算法的时间回拨问题和依赖机器 ID 的问题。日常开发中,我们需要对系统中的各种数据使用 ID 唯一表示,比如用户 ID 对应且仅对应一个人,商品 ID 对应且仅对应一件商品,订单 ID 对应且仅对应一个订单。另外,Variant(变体)也有 4 种不同的值,这种值分别对应不同的含义。

2025-02-20 11:58:53 997

原创 Spring Cloud Gateway常见问题总结

Spring Cloud Gateway 属于 Spring Cloud 生态系统中的网关,其诞生的目标是为了替代老牌网关Zuul。准确点来说,应该是 Zuul 1.x。Spring Cloud Gateway 起步要比 Zuul 2.x 更早。为了提升网关的性能,Spring Cloud Gateway 基于 Spring WebFlux。Spring WebFlux 使用 Reactor 库来实现响应式编程模型,底层基于 Netty 实现同步非阻塞的 I/O。

2025-02-19 18:36:12 693

原创 API网关基础知识总结

微服务背景下,一个系统被拆分为多个服务,但是像安全认证,流量控制,日志,监控等功能是每个服务都需要的,没有网关的话,我们就需要在每个服务中单独实现,这使得我们做了很多重复的事情并且没有一个全局的视图来统一管理这些功能。一般情况下,网关可以为我们提供请求转发、安全认证(身份/权限认证)、流量控制、负载均衡、降级熔断、日志、监控、参数校验、协议转换等功能。请求转发请求过滤。由于引入网关之后,会多一步网络转发,因此性能会有一点影响(几乎可以忽略不计,尤其是内网访问的情况下)。

2025-02-13 09:01:23 793

原创 CDN工作原理详解

CDN全称是 Content Delivery Network/Content Distribution Network,翻译过的意思是内容分发网络。内容:指的是静态资源比如图片、视频、文档、JS、CSS、HTML。分发网络:指的是将这些静态资源分发到位于多个不同的地理位置机房中的服务器上,这样,就可以实现静态资源的就近访问比如北京的用户直接访问北京机房的数据。所以,简单来说,CDN 就是将静态资源分发到多个不同的地方以实现就近访问,进而加快静态资源的访问速度,减轻服务器以及带宽的负担。

2025-02-12 14:42:39 1050

原创 AOP面向编程

AOP(Aspect-Oriented Programming,面向切面编程)中的“切面”(Aspect)是一个核心概念。切面是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来的一个模块化单元‌。它利用“横切”的技术,剖解开封装的对象内部,将那些影响了多个类的公共行为封装到一个可重用的模块中‌。

2025-02-10 14:16:35 733

原创 MySQL隐式转换造成索引失效

当操作符左右两边的数据类型不一致时,会发生隐式转换。当 where 查询操作符左边为数值类型时发生了隐式转换,那么对效率影响不大,但还是不推荐这么做。当 where 查询操作符左边为字符类型时发生了隐式转换,那么会导致索引失效,造成全表扫描效率极低。字符串转换为数值类型时,非数字开头的字符串会转化为0,以数字开头的字符串会截取从第一个字符到第一个非数字内容为止的值为转化结果。所以,我们在写 SQL 时一定要养成良好的习惯,查询的字段是什么类型,等号右边的条件就写成对应的类型。

2025-02-08 11:56:42 1287

原创 MySQL日期类型选择建议

MySQL 中时间到底怎么存储才好?Datetime?Timestamp?还是数值时间戳?并没有一个银弹,很多程序员会觉得数值型时间戳是真的好,效率又高还各种兼容,但是很多人又觉得它表现的不够直观。《高性能 MySQL 》这本神书的作者就是推荐 Timestamp,原因是数值表示时间不够直观。下面是原文:每种方式都有各自的优势,根据实际场景选择最合适的才是王道。类型存储空间日期格式日期范围是否带时区信息DATETIME5~8 字节否TIMESTAMP4~7 字节是数值型时间戳。

2025-02-07 10:36:51 773

原创 MySQL自增主键一定是连续的吗

众所周知,自增主键可以让聚集索引尽量地保持递增顺序插入,避免了随机查询,从而提高了查询效率。但实际上,MySQL 的自增主键并不能保证一定是连续递增的。

2025-02-07 10:27:49 1102

原创 MySQL执行计划分析

执行计划是指一条 SQL 语句在经过MySQL 查询优化器的优化后,具体的执行方式。执行计划通常用于 SQL 性能分析、优化等场景。通过EXPLAIN的结果,可以了解到如数据表的查询顺序、数据查询操作的操作类型、哪些索引可以被命中、哪些索引实际会命中、每个数据表有多少行记录被查询等信息。

2025-02-07 09:58:32 789

原创 MySQL查询缓存详解

MySQL 体系架构如下图所示:为了提高完全相同的查询语句的响应速度,MySQL Server 会对查询语句进行 Hash 计算得到一个 Hash 值。MySQL Server 不会对 SQL 做任何处理,SQL 必须完全一致 Hash 值才会一样。得到 Hash 值之后,通过该 Hash 值到查询缓存中匹配该查询的结果。如果匹配(命中),则将查询的结果集直接返回给客户端,不必再解析、执行查询。如果没有匹配(未命中),则将 Hash 值和结果集保存在查询缓存中,以便以后使用。也就是说,

2025-02-07 09:51:41 859

原创 程序员的职业规划以及 35 岁的破局之道

说了这么多,其实就想说明几个点1. 对自己的预期比进入什么样的公司更重要,有了预期(目标),就知道该做出什么对自己有利的选 择2. 年轻的时候不需要在乎多几千块钱的收入,因为这几千块钱既改变不了你的生活,也没办法让你变 得富裕。当你有足够能力的时候,高额的年薪可以弥补你曾经失去的那几万块钱的损失。3. 职业发展就像升级打怪,每个阶段应该找到最合适的怪让自己升级4. 永远心怀希望,永远乐观,永远保持激情。悲观只能带来无谓的内耗。

2025-02-07 09:32:06 798

空空如也

空空如也

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

TA关注的人

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