大家好,我是三友 之前有小伙伴私信我说看源码的时候感觉源码很难,不知道该怎么看,其实这有部分原因是因为没有弄懂一些源码实现的套路,也就是设计模式,所以本文我就总结了9种在源码中非常常见的设计模式,并列举了很多源码的实现例子,希望对你看源码和日常工作中有所帮助。 单例模式 单例模式是指一个类在一个进程中只有一个实例对象(但也不一定,比如Spring中的Bean的单例是指在一个容器中是单例的) 单例模式创建分为饿汉式和懒汉式,总共大概有8种写法。但是在开源项目中使用最多的主要有两种写法: 1、静态常量 静态常量方式属于饿汉式,以静态变量的方式声明对象。这种单例模式在Spring中使用的比较多,举...

  wpLLGyQFYLT4   2023年11月01日   65   0   0 Java

大家好,我是三友 背景 随着微服务盛行,很多公司都把系统按照业务边界拆成了很多微服务,在排错查日志的时候,因为业务链路贯穿着很多微服务节点,导致定位某个请求的日志以及上下游业务的日志会变得有些困难。 这时候可能有的小伙伴就会想到使用SkyWalking,Pinpoint等分布式追踪系统来解决,并且这些系统通常都是无侵入性的,同时也会提供相对友好的管理界面来进行链路Span的查询,但是搭建分布式追踪系统还是需要一定的成本的,所以本文要说的并不是这些分布式追踪系统,而是一款简单、易用、几乎零侵入、适合中小型公司使用的日志追踪框架TLog。 TLog简介 TLog提供了一种最简单的方式来解决日志追...

  wpLLGyQFYLT4   2023年11月01日   42   0   0 Java

大家好,我是三友 这篇文章我准备来聊一聊RocketMQ消息的一生。 不知你是否跟我一样,在使用RocketMQ的时候也有很多的疑惑: 消息是如何发送的,队列是如何选择的? 消息是如何存储的,是如何保证读写的高性能? RocketMQ是如何实现消息的快速查找的? RocketMQ是如何实现高可用的? 消息是在什么时候会被清除? ... 本文就通过探讨上述问题来探秘消息在RocketMQ中短暂而又精彩的一生。 如果你还没用过RocketMQ,可以看一下这篇文章RocketMQ保姆级教程 核心概念 NameServer:可以理解为是一个注册中心,主要...

  wpLLGyQFYLT4   2023年11月01日   50   0   0 Java

大家好,我是三友 这篇文章我准备来扒一扒Bean注入到Spring的那些姿势。 其实关于Bean注入Spring容器的方式网上也有很多相关文章,但是很多文章可能会存在以下常见的问题 注入方式总结的不全 没有分析可以使用这些注入方式背后的原因 没有这些注入方式在源码中的应用示例 ... 所以本文就带着解决上述的问题的目的来重新梳理一下Bean注入到Spring的那些姿势。 配置文件 配置文件的方式就是以外部化的配置方式来声明SpringBean,在Spring容器启动时指定配置文件。配置文件方式现在用的不多了,但是为了文章的完整性和连续性,这里我还是列出来了,知道的...

  wpLLGyQFYLT4   2023年11月01日   32   0   0 Java

大家好,我是三友 今天来跟大家聊一聊Java、Spring、Dubbo三者SPI机制的原理和区别。 其实我之前写过一篇类似的文章,但是这篇文章主要是剖析dubbo的SPI机制的源码,中间只是简单地介绍了一下Java、Spring的SPI机制,并没有进行深入,所以本篇就来深入聊一聊这三者的原理和区别。 什么是SPI SPI全称为ServiceProviderInterface,是一种动态替换发现的机制,一种解耦非常优秀的思想,SPI可以很灵活的让接口和实现分离,让api提供者只提供接口,第三方来实现,然后可以使用配置文件的方式来实现替换或者扩展,在框架中比较常见,提高框架的可扩展性。 简单来说...

  wpLLGyQFYLT4   2023年11月01日   37   0   0 Java

大家好,我是三友 在众多关于MQ的面试八股文中有这么一道题,“如何保证MQ消息消费的幂等性”。 为什么需要保证幂等性呢?是因为消息会重复消费。 为什么消息会重复消费? 明明已经消费了,为什么消息会被再次被消费呢? 不同的MQ产生的原因可能不一样 本文就以RocketMQ为例,来扒一扒RocketMQ中会导致消息重复消息的原因,最终你会发现,其实消息重复消费算是RocketMQ无奈的“bug”。 微信公众号:三友的java日记 如果有对RocketMQ不熟悉的小伙伴,可以看看我之前写的RocketMQ保姆级教程和RocketMQ消息短暂而又精彩的一生这两篇文章。 消息发送异常时重复发...

  wpLLGyQFYLT4   2023年11月01日   56   0   0 Java

大家好,我是三友 前几天有个大兄弟问了我一个问题,注册中心要集成SpringCloud,想实现SpringCloud的负载均衡,需要实现哪些接口和规范。 既然这个兄弟问到我了,而我又刚好知道,这不得好好写一篇文章来回答这个问题,虽然在后面的聊天中我已经回答过了。 接下来本文就以探究一下Nacos、OpenFeign、Ribbon、loadbalancer等组件协调工作的原理的方式,来讲一讲应该需要是实现哪些接口了。 再多说一句,本文并没有详细地深入剖析各个组件的源码,如果有感兴趣的兄弟可以从微信公众号三友的java日记后台菜单栏中的文章分类中查看我之前写的关于Nacos、Open...

  wpLLGyQFYLT4   2023年11月01日   62   0   0 Java

大家好,我是三友 今天来跟大家聊一聊Spring的9大核心基础功能。 其实最近有小伙伴私信问我怎么不写文章了,催更来了 其实我不是不写,而是一直在写这篇文章,只不过令我没想到的是,从前期的选题、准备、翻源码、动手到写完,前后跨度接近一个月的时间,花了好几个周末,写了三万字,最终才算完成。 所以如果本篇文章对你有所帮助,还请多多点赞、转发、在看,非常感谢!! 话不多说,先上目录 友情提示,本文过长,建议收藏,嘿嘿嘿! 资源管理 资源管理是Spring的一个核心的基础功能,不过在说Spring的资源管理之前,先来简单说一下Java中的资源管理。 Java资源管理 Java中的资源管理...

  wpLLGyQFYLT4   2023年11月01日   86   0   0 Java
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~