三友的java日记_社区达人页

个人头像照片
三友的java日记
已加入开发者社区1631
勋章 更多
个人头像照片
星级博主
星级博主
个人头像照片
技术博主
技术博主
个人头像照片
江湖侠士
江湖侠士
成就
已发布53篇文章
0条评论
已回答0个问题
0条评论
已发布0个视频
github地址
技术能力
兴趣领域
  • Java
擅长领域
技术认证

暂时未有相关云产品技术能力~

暂无个人介绍
暂无精选文章
暂无更多信息

2023年12月

  • 11.23 12:41:08
    发表了文章 2023-11-23 12:41:08

    Feign如何设置超时时间,不同情况还真不一样,别设置错了

    大家好,我是三友~~ 今天来聊一聊前段时间看到的一个面试题,也是在实际项目中需要考虑的一个问题,Feign的超时时间如何设置? Feign的超时时间设置方式并不固定,它取决于Feign在项目中是如何使用的,不同的使用方式,超时时间设置方式也不大相同,甚至还可能有坑。
  • 11.23 12:37:11
    发表了文章 2023-11-23 12:37:11

    两万字盘点9种被玩烂了的设计模式以及在开源项目中的运用(下)

    大家好,我是三友~~ 之前有小伙伴私信我说看源码的时候感觉源码很难,不知道该怎么看,其实这有部分原因是因为没有弄懂一些源码实现的套路,也就是设计模式,所以本文我就总结了9种在源码中非常常见的设计模式,并列举了很多源码的实现例子,希望对你看源码和日常工作中有所帮助。
  • 11.23 12:35:06
    发表了文章 2023-11-23 12:35:06

    Sentinel为什么这么强,我忍不住扒了扒背后的实现原理

    大家好,我是三友~~ 最近我在整理代码仓库的时候突然发现了被尘封了接近两年之久的Sentinel源码库 两年前我出于好奇心扒了一下Sentinel的源码,但是由于Sentinel本身源码并不复杂,在简单扒了扒之后几乎就再没扒过了 那么既然现在又让我看到了,所以我准备再来好好地扒一扒,然后顺带写篇文章来总结一下。
  • 11.23 12:32:09
    发表了文章 2023-11-23 12:32:09

    如何高效地阅读源码,我总结了18条心法,助你修炼神功

    大家好,我是三友~~ 这篇文章我准备来聊一聊如何去阅读开源项目的源码。 在聊如何去阅读源码之前,先来简单说一下为什么要去阅读源码,大致可分为以下几点原因: - 最直接的原因,就是面试需要,面试喜欢问源码,读完源码才可以跟面试官battle - 提升自己的编程水平,学习编程思想和和代码技巧 - 熟悉技术实现细节,提高设计能力 - ...
  • 11.23 12:29:39
    发表了文章 2023-11-23 12:29:39

    两万字盘点9种被玩烂了的设计模式以及在开源项目中的运用(上)

    大家好,我是三友~~ 之前有小伙伴私信我说看源码的时候感觉源码很难,不知道该怎么看,其实这有部分原因是因为没有弄懂一些源码实现的套路,也就是设计模式,所以本文我就总结了9种在源码中非常常见的设计模式,并列举了很多源码的实现例子,希望对你看源码和日常工作中有所帮助。
  • 11.22 12:59:26
    发表了文章 2023-11-22 12:59:26

    订单超时取消的11种方法(下)

    大家好,我是三友~~ 延迟任务在我们日常生活中比较常见,比如订单支付超时取消订单功能,又比如自动确定收货的功能等等。 所以本篇文章就来从实现到原理来盘点延迟任务的11种实现方式,这些方式并没有绝对的好坏之分,只是适用场景的不大相同。
  • 11.22 12:56:04
    发表了文章 2023-11-22 12:56:04

    原来RocketMQ消息会重复消费是无奈的”Bug“

    大家好,我是三友~~ 在众多关于MQ的面试八股文中有这么一道题,“如何保证MQ消息消费的幂等性”。 为什么需要保证幂等性呢?是因为消息会重复消费。 为什么消息会重复消费? 明明已经消费了,为什么消息会被再次被消费呢? 不同的MQ产生的原因可能不一样 本文就以RocketMQ为例,来扒一扒RocketMQ中会导致消息重复消息的原因,最终你会发现,其实消息重复消费算是RocketMQ无奈的“bug”。
  • 11.22 12:51:23
    发表了文章 2023-11-22 12:51:23

    原来Nacos、OpenFeign、Ribbon、loadbalancer组件是这么协调工作的

    大家好,我是三友~~ 前几天有个大兄弟问了我一个问题,注册中心要集成SpringCloud,想实现SpringCloud的负载均衡,需要实现哪些接口和规范。
  • 11.22 12:48:58
    发表了文章 2023-11-22 12:48:58

    订单超时取消的11种方法(上)

    大家好,我是三友~~ 延迟任务在我们日常生活中比较常见,比如订单支付超时取消订单功能,又比如自动确定收货的功能等等。 所以本篇文章就来从实现到原理来盘点延迟任务的11种实现方式,这些方式并没有绝对的好坏之分,只是适用场景
  • 11.22 12:46:13
    发表了文章 2023-11-22 12:46:13

    一个你可能不曾注意的小东西,Spring依赖注入Bean类型的8种情况

    大家好,我是三友~~ 今天来讲的一个你可能不曾注意的小东西,那就是Spring依赖注入支持注入Bean的类型,这个小东西可能看似没有用但是实际又有点小用。

2023年11月

  • 11.20 12:46:55
    发表了文章 2023-11-20 12:46:55

    写出漂亮代码的45个小技巧(下)

    大家好,我是三友~~ 不知道大家有没有经历过维护一个已经离职的人的代码的痛苦,一个方法写老长,还有很多的if else ,根本无法阅读,更不知道代码背后的含义,最重要的是没有人可以问,此时只能心里默默地问候这个留坑的兄弟。。
  • 11.20 12:43:29
    发表了文章 2023-11-20 12:43:29

    阿里一面:说一说Java、Spring、Dubbo三者SPI机制的原理和区别

    大家好,我是三友~~ 今天来跟大家聊一聊Java、Spring、Dubbo三者SPI机制的原理和区别。 其实我之前写过一篇类似的文章,但是这篇文章主要是剖析dubbo的SPI机制的源码,中间只是简单地介绍了一下Java、Spring的SPI机制,并没有进行深入,所以本篇就来深入聊一聊这三者的原理和区别。
  • 11.20 12:38:24
    发表了文章 2023-11-20 12:38:24

    写出漂亮代码的45个小技巧(上)

    大家好,我是三友~~ 不知道大家有没有经历过维护一个已经离职的人的代码的痛苦,一个方法写老长,还有很多的if else ,根本无法阅读,更不知道代码背后的含义,最重要的是没有人可以问,此时只能心里默默地问候这个留坑的兄弟。。
  • 11.20 12:32:25
    发表了文章 2023-11-20 12:32:25

    RocketMQ保姆级教程

    大家好,我是三友~~ 上周花了一点时间从头到尾、从无到有地搭建了一套RocketMQ的环境,觉得还挺easy的,所以就写篇文章分享给大家。
  • 11.20 12:24:25
    发表了文章 2023-11-20 12:24:25

    万字 + 20张图 Zookeeper分布式锁实现原理

    前面我们通过Redis分布式锁实现Redisson 15问文章剖析了Redisson的源码,理清了Redisson是如何实现的分布式锁和一些其它的特性。这篇文章就来接着剖析Zookeeper分布式锁的实现框架Curator的源码,看看Curator是如何实现Zookeeper分布式锁的,以及它提供的哪些其它的特性。
  • 11.02 13:02:02
    发表了文章 2023-11-02 13:02:02

    弄懂Redis的儿子Redisson,只需这个15问题

    在一个分布式系统中,由于涉及到多个实例同时对同一个资源加锁的问题,像传统的synchronized、ReentrantLock等单进程情况加锁的api就不再适用,需要使用分布式锁来保证多服务实例之间加锁的安全性。常见的分布式锁的实现方式有zookeeper和redis等。而由于redis分布式锁相对于比较简单,在实际的项目中,redis分布式锁被用于很多实际的业务场景中。 redis分布式锁的实现中又以Redisson比较出名,所以本文来着重看一下Redisson是如何实现分布式锁的,以及Redisson提供了哪些其它的功能。
  • 11.02 12:43:38
    发表了文章 2023-11-02 12:43:38

    循环依赖和三级缓存原来是这么回事

    我们都知道,Spring可以通过三级缓存解决循环依赖的问题,这也是面试中很常见的一个面试题,本文就来着重讨论一下有关循环依赖和三级缓存的问题。

2023年10月

  • 10.31 13:02:24
    发表了文章 2023-10-31 13:02:24

    万字+40张图带你探秘小而美的规则引擎框架LiteFlow

    在每个公司的系统中,总有一些拥有复杂业务逻辑的系统,这些系统承载着核心业务逻辑,几乎每个需求都和这些核心业务有关,这些核心业务业务逻辑冗长,涉及内部逻辑运算,缓存操作,持久化操作,外部资源调取,内部其他系统RPC调用等等。时间一长,项目几经易手,维护的成本就会越来越高。各种硬代码判断,分支条件越来越多。代码的抽象,复用率也越来越低,各个模块之间的耦合度很高。一小段逻辑的变动,会影响到其他模块,需要进行完整回归测试来验证。如要灵活改变业务流程的顺序,则要进行代码大改动进行抽象,重新写方法。实时热变更业务流程,几乎很难实现。
  • 10.31 12:43:27
    发表了文章 2023-10-31 12:43:27

    OpenFeign原来是这么基于Ribbon来实现负载均衡的

    大家好,我是三友~~ 前面我已经剖析了OpenFeign的动态代理生成原理和Ribbon的运行原理,这篇文章来继续剖析SpringCloud组件原理,来看一看OpenFeign是如何基于Ribbon来实现负载均衡的,两组件是如何协同工作的。
  • 10.30 13:06:09
    发表了文章 2023-10-30 13:06:09

    原来这就是大名鼎鼎的SpringCloud Ribbon

    大家好,我是三友~~ 本文我将继续来剖析SpringCloud中负载均衡组件Ribbon的源码。本来我是打算接着OpenFeign动态代理生成文章直接讲Feign是如何整合Ribbon的,但是文章写了一半发现,如果不把Ribbon好好讲清楚,那么有些Ribbon的细节理解起来就很困难,所以我还是打算单独写一篇文章来剖析Ribbon的源码,这样在讲Feign整合Ribbon的时候,我就不再赘述这些细节了。
  • 10.30 12:51:41
    发表了文章 2023-10-30 12:51:41

    整活整活,给公众号赋点能!

    大家好,我是三友~~ 整活了整活了,花了一个周末的时间整了个活 我把AI大模型对话功能给接入到公众号了 以后在公众号就可以直接使用AI对话功能
  • 10.30 12:47:51
    发表了文章 2023-10-30 12:47:51

    原来这就是大名鼎鼎的OpenFeign

    年前的时候我发布两篇关于nacos源码的文章,一篇是聊一聊nacos是如何进行服务注册的,另一篇是一文带你看懂nacos是如何整合springcloud -- 注册中心篇。今天就继续接着剖析SpringCloud中OpenFeign组件的源码,来聊一聊OpenFeign是如何工作的。
  • 10.26 12:37:37
    发表了文章 2023-10-26 12:37:37

    线程池面试连环炮,你能抗住几题?

    最近有朋友在面试时,刚好被问到了线程池相关的问题,于是我想就抽时间整理了一些关于线程池的面试题来分享给大家。
  • 10.26 12:30:38
    发表了文章 2023-10-26 12:30:38

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

    大家好,我是三友~~ 这篇文章我准备来聊一聊RocketMQ消息的一生。 不知你是否跟我一样,在使用RocketMQ的时候也有很多的疑惑: - 消息是如何发送的,队列是如何选择的? - 消息是如何存储的,是如何保证读写的高性能? - RocketMQ是如何实现消息的快速查找的? - RocketMQ是如何实现高可用的? - 消息是在什么时候会被清除? - ... 本文就通过探讨上述问题来探秘消息在RocketMQ中短暂而又精彩的一生。
  • 10.25 20:37:31
    发表了文章 2023-10-25 20:37:31

    用WebSocket实现一个简易的群聊功能,so easy

    本文主要来讲解如何使用WebSocket来实现一个简易的群聊功能。
  • 10.25 19:57:36
    发表了文章 2023-10-25 19:57:36

    为什么有了并发安全的集合还需要读写锁?

    这篇文章想来跟大家来探讨一下,在Java中已经提供了并发安全的集合,为什么有的场景还需要使用读写锁,直接用并发安全的集合难道不行么?
  • 10.25 19:52:55
    发表了文章 2023-10-25 19:52:55

    为什么Java有了synchronized之后还造了Lock锁这个轮子?

    众所周知,synchronized和Lock锁是java并发变成中两大利器。但是为什么Java有了synchronized之后还是提供了Lock接口这个api,难道仅仅只是重复造了轮子这么简单么?本文就来探讨一下这个问题。
  • 10.24 12:56:08
    发表了文章 2023-10-24 12:56:08

    Redis实现延迟队列,我研究了两种方案,发现并不简单

    前段时间有个小项目需要使用延迟任务,谈到延迟任务,我脑子第一时间一闪而过的就是使用消息队列来做,比如RabbitMQ的死信队列又或者RocketMQ的延迟队列,但是奈何这是一个小项目,并没有引入MQ,我也不太想因为一个延迟任务就引入MQ,增加系统复杂度,所以这个方案直接就被pass了。
  • 10.24 12:49:15
    发表了文章 2023-10-24 12:49:15

    synchronized真的不重

    synchronized 是java中常见的保证多线程访问共享资源时的安全的一个关键字。很多人在讲到synchronized 时都说synchronized 是一把重量级的锁,那么synchronized 真的很重么?
  • 10.24 12:44:17
    发表了文章 2023-10-24 12:44:17

    我是如何写一篇技术文的?

    大家好,我是三友~~ 今天咱就不卷技术了,来跟大家伙讲一讲我是如何写一篇技术文的 其实这个问题也是之前一个兄弟问我的,我当时只是简单的回答了一下 后面想了想,觉得还是值得去好好总结分享一下 所以这里我就把这差不多两年写作时间里踩过一些坑和一些经验,总结成了一些小小的心得分享给大家 也算为一些想要写技术文的兄弟提供一点小小的帮助 整篇文章我会分成写作前、写作中、写作后三个大方面共16个小点来跟大家分享
  • 10.24 12:42:27
    发表了文章 2023-10-24 12:42:27

    终于弄懂AQS了

    大家好,我是三友~~ 相信大家对Java中的Lock锁应该不会陌生,比如ReentrantLock,锁主要是用来解决解决多线程运行访问共享资源时的线程安全问题。那你是不是很好奇,这些Lock锁api是如何实现的呢?本文就是来探讨一下这些Lock锁底层的AQS(AbstractQueuedSynchronizer)到底是如何实现的。
  • 10.23 12:55:18
    发表了文章 2023-10-23 12:55:18

    RocketMQ的push消费方式实现的太聪明了

    大家好,我是三友,我又来了~~ 最近仍然畅游在RocketMQ的源码中,这几天刚好翻到了消费者的源码,发现RocketMQ的对于push消费方式的实现简直太聪明了,所以趁着我脑子里还有点印象的时候,赶紧来写一篇文章,来掰扯一下,防止过两天就忘得一干二净了。
  • 10.23 12:51:51
    发表了文章 2023-10-23 12:51:51

    哦吼,就这破玩意叫@Enable模块驱动

    这篇文章我想和你聊一聊 spring的@Enable模块驱动的实现原理。 在我们平时使用spring的过程中,如果想要加个定时任务的功能,那么就需要加注解@EnableScheduling,如果想使用异步的功能,那就要加@EnableScheduling注解,其实这类注解就是属于@Enable模块。
  • 10.23 12:45:05
    发表了文章 2023-10-23 12:45:05

    三万字盘点Spring/Boot的那些常用扩展点(下)

    Spring对于每个Java后端程序员来说肯定不陌生,日常开发和面试必备的。本文就来盘点Spring/SpringBoot常见的扩展点,同时也来看看常见的开源框架是如何基于这些扩展点跟Spring/SpringBoot整合的。 话不多说,直接进入正题。
  • 10.20 12:59:16
    发表了文章 2023-10-20 12:59:16

    项目中引进这玩意,排查日志又快又准

    随着微服务盛行,很多公司都把系统按照业务边界拆成了很多微服务,在排错查日志的时候,因为业务链路贯穿着很多微服务节点,导致定位某个请求的日志以及上下游业务的日志会变得有些困难。
  • 10.20 12:53:30
    发表了文章 2023-10-20 12:53:30

    面试官:JDK1.8 HashMap扩容rehash算法是如何优化的?

    本文跟大家聊一聊一个常见的面试题,那就是JDK1.8 HashMap扩容rehash算法是如何优化的?
  • 10.20 12:43:46
    发表了文章 2023-10-20 12:43:46

    三万字盘点Spring/Boot的那些常用扩展点(上)

    Spring对于每个Java后端程序员来说肯定不陌生,日常开发和面试必备的。本文就来盘点Spring/SpringBoot常见的扩展点,同时也来看看常见的开源框架是如何基于这些扩展点跟Spring/SpringBoot整合的。 话不多说,直接进入正题。
  • 10.19 12:51:58
    发表了文章 2023-10-19 12:51:58

    终于整明白了Nacos是如何整合SpringCloud -- 注册中心篇

    前面我们聊到了nacos是如何进行服务注册的 ,这篇文章我们再来聊一聊nacos是如何整合springcloud的,我们来看一看是如何实现服务的自动注册。
  • 10.19 12:39:24
    发表了文章 2023-10-19 12:39:24

    8000字+42张图探秘SpringCloud配置中心的原理

    不知你是否跟我一样,在刚开始使用SpringCloud配置中心的时候也有很多的疑惑: - SpringCloud是什么时候去拉取配置中心的? - 配置中心客户端的配置信息为什么要写在bootstrap文件中? - 对象中注入的属性是如何动态刷新的? - 一些开源的配置中心是如何整合SpringCloud的? - ... 本文就通过探讨上述问题来探秘SpringCloud配置中心核心的底层原理。
  • 10.18 13:01:06
    发表了文章 2023-10-18 13:01:06

    Eureka这波加锁操作让我惊呆了

    在对于读写锁的认识当中,我们都认为读时加读锁,写时加写锁来保证读写和写写互斥,从而达到读写安全的目的。但是就在我翻Eureka源码的时候,发现Eureka在使用读写锁时竟然是在读时加写锁,写时加读锁,这波操作属实震惊到了我,于是我就花了点时间研究了一下Eureka的这波操作。
  • 10.18 12:55:19
    发表了文章 2023-10-18 12:55:19

    撸了一个简易的配置中心,顺带整合到了SpringCloud

    大家好,我是三友~~ 最近突然心血来潮(就是闲的)就想着撸一个简单的配置中心,顺便也照葫芦画瓢给整合到SpringCloud。
  • 10.18 12:41:00
    发表了文章 2023-10-18 12:41:00

    这下彻底懂了Nacos是如何进行服务注册的

    本文从源码的层面讲解Nacos是如何进行服务注册的
  • 10.17 13:05:12
    发表了文章 2023-10-17 13:05:12

    万字+20张图剖析Spring启动时核心的12个步骤

    大家好,我是三友~~ 今天来扒一扒Spring在启动过程中核心的12个步骤 之所以来写这篇文章,主要是来填坑的 之前在[三万字盘点Spring 9大核心基础功能](https://mp.weixin.qq.com/s/QSchk0uHNbdvlAHxJbCMuA)这篇文章的末尾中给自己挖了一个坑,提了一嘴有机会要写这么一篇文章 但是由于Spring启动过程并不复杂,所以后面就没写了 不过,好巧不巧,刚刚好有兄弟来催更了,那么此时这个机会就来了,这篇文章也就有了
  • 10.17 12:52:53
    发表了文章 2023-10-17 12:52:53

    RocketMQ的push消费方式实现的太聪明了

    大家好,我是三友,我又来了~~ 最近仍然畅游在RocketMQ的源码中,这几天刚好翻到了消费者的源码,发现RocketMQ的对于push消费方式的实现简直太聪明了,所以趁着我脑子里还有点印象的时候,赶紧来写一篇文章,来掰扯一下,防止过两天就忘得一干二净了。
  • 10.17 12:43:03
    发表了文章 2023-10-17 12:43:03

    面试常问的dubbo的spi机制到底是什么?(下)

    本文是接着 面试常问的dubbo的spi机制到底是什么?(上)来继续剖析dubbo spi机制源码,来看看dubbo的spi机制的其它特性功能。 #### 目录: - 前文回顾 - 实现类对象构造 - 自适应机制 - 自动激活 - 总结
  • 10.17 12:33:13
    发表了文章 2023-10-17 12:33:13

    扒一扒Bean注入Spring的那些姿势,你会几种?

    这篇文章我准备来扒一扒Bean注入到Spring的那些姿势。 其实关于Bean注入Spring容器的方式网上也有很多相关文章,但是很多文章可能会存在以下常见的问题 - 注入方式总结的不全 - 没有分析可以使用这些注入方式背后的原因 - 没有这些注入方式在源码中的应用示例 - ... 所以本文就带着解决上述的问题的目的来重新梳理一下Bean注入到Spring的那些姿势。
  • 10.17 12:27:42
    发表了文章 2023-10-17 12:27:42

2023年09月

  • 发表了文章 2023-12-01

    如何高效地阅读源码,我总结了18条心法,助你修炼神功

  • 发表了文章 2023-12-01

    两万字盘点9种被玩烂了的设计模式以及在开源项目中的运用(下)

  • 发表了文章 2023-12-01

    Feign如何设置超时时间,不同情况还真不一样,别设置错了

  • 发表了文章 2023-12-01

    Sentinel为什么这么强,我忍不住扒了扒背后的实现原理

  • 发表了文章 2023-12-01

    两万字盘点9种被玩烂了的设计模式以及在开源项目中的运用(上)

  • 发表了文章 2023-12-01

    订单超时取消的11种方法(上)

  • 发表了文章 2023-12-01

    原来RocketMQ消息会重复消费是无奈的”Bug“

  • 发表了文章 2023-12-01

    订单超时取消的11种方法(下)

  • 发表了文章 2023-12-01

    原来Nacos、OpenFeign、Ribbon、loadbalancer组件是这么协调工作的

  • 发表了文章 2023-12-01

    一个你可能不曾注意的小东西,Spring依赖注入Bean类型的8种情况

  • 发表了文章 2023-11-21

    写出漂亮代码的45个小技巧(上)

  • 发表了文章 2023-11-21

    阿里一面:说一说Java、Spring、Dubbo三者SPI机制的原理和区别

  • 发表了文章 2023-11-21

    写出漂亮代码的45个小技巧(下)

  • 发表了文章 2023-11-21

    万字 + 20张图 Zookeeper分布式锁实现原理

  • 发表了文章 2023-11-21

    RocketMQ保姆级教程

  • 发表了文章 2023-11-02

    弄懂Redis的儿子Redisson,只需这个15问题

  • 发表了文章 2023-11-02

    循环依赖和三级缓存原来是这么回事

  • 发表了文章 2023-10-31

    万字+40张图带你探秘小而美的规则引擎框架LiteFlow

  • 发表了文章 2023-10-31

    OpenFeign原来是这么基于Ribbon来实现负载均衡的

  • 发表了文章 2023-10-30

    原来这就是大名鼎鼎的SpringCloud Ribbon

正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息
正在加载, 请稍后...
暂无更多信息