方圆想当图灵
码龄5年
求更新 关注
提问 私信
  • 博客:224,580
    社区:56
    动态:164
    224,800
    总访问量
  • 222
    原创
  • 2,220
    粉丝
  • 14
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
加入CSDN时间: 2020-01-25

个人简介:怕什么真理无穷,进一寸有进一寸的欢喜

博客简介:

方圆 Blog

博客描述:
怕什么真理无穷,进一寸有进一寸的欢喜
查看详细资料
个人成就
  • Java领域新星创作者
  • 获得1,053次点赞
  • 内容获得209次评论
  • 获得1,291次收藏
  • 代码片获得217次分享
  • 原力等级
    原力等级
    5
    原力分
    1,736
    本月获得
    19
创作历程
  • 15篇
    2025年
  • 14篇
    2024年
  • 32篇
    2023年
  • 28篇
    2022年
  • 30篇
    2021年
  • 107篇
    2020年
成就勋章
TA的专栏
  • 由 Mybatis 源码畅谈软件设计
    9篇
  • Hello 算法
    20篇
  • 碎碎念
    25篇

TA关注的专栏 0

TA关注的收藏夹 0

TA关注的社区 3

TA参与的活动 4

兴趣领域 设置
  • 大数据
    mysqlredis
  • 后端
    spring
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

从 Java 到 Go:面向对象的巨人与云原生的轻骑兵

Go 语言在 2009 年被 Google 推出,在创建之初便明确提出了“少即是多(Less is more)”的设计原则,强调“以工程效率为核心,用极简规则解决复杂问题”。它与 Java 语言生态不同,Go 通过编译为和在占据主导地位,它也是 Java 开发者探索云原生技术栈的关键补充。本文将对 Go 语言和 Java 语言在一些重要特性上进行对比,为 Java 开发者在阅读和学习 Go 语言相关技术时提供参考。
原创
发布博客 38 分钟前 ·
310 阅读 ·
11 点赞 ·
0 评论 ·
4 收藏

缓存之美:Guava Cache 相比于 Caffeine 差在哪里?

本文将结合的源码来分析它的实现原理,并阐述它相比于 Caffeine Cache 在性能上的劣势。为了让大家对 Guava Cache 理解起来更容易,我们还是在开篇介绍它的原理。
原创
发布博客 2025.03.10 ·
1036 阅读 ·
18 点赞 ·
0 评论 ·
28 收藏

由 Mybatis 源码畅谈软件设计(九):“能用就行” 其实远远不够

到本节 Mybatis 源码中核心逻辑基本已经介绍完了,在这里我想借助 Mybatis 其他部分源码来介绍一些我认为在编程中能 最快提高编码质量的小方法,它们可能比较细碎,希望能对大家有所启发。
原创
发布博客 2025.02.27 ·
1124 阅读 ·
30 点赞 ·
0 评论 ·
14 收藏

由 Mybatis 源码畅谈软件设计(六):Interceptor 拦截器的设计

本节我们来介绍 Mybatis 的拦截器 Interceptor,它依靠 @Intercepts 和 @Signature 注解驱动,配置拦截器的切入方法,这种声明方式非常直观,能够准确的知道每个拦截器的作用范围。而且它是非侵入性的,采用了 动态代理模式,在不修改原有逻辑的前提下便能实现功能的扩展,遵循 开闭原则。Spring 框架中的 AOP 也采用的是同样的思想,但是它引入了很多概念(切面、连接点、切入点和通知等等),代码量超过 5000 行,而 Mybatis Interceptor 的实现仅有 37
原创
发布博客 2025.02.26 ·
893 阅读 ·
16 点赞 ·
0 评论 ·
17 收藏

由 Mybatis 源码畅谈软件设计(五):ResultMap 的循环引用

本节我们来了解 Mybatis 是如何处理 ResultMap 的循环引用,它的解决方案非常值得在软件设计中参考。另外作为引申,大家可以了解一下 Spring 是如何解决 Bean 的循环注入的。
原创
发布博客 2025.02.26 ·
526 阅读 ·
9 点赞 ·
0 评论 ·
14 收藏

由 Mybatis 源码畅谈软件设计(四):动态 SQL 执行流程

本节我们探究动态 SQL 的执行流程,由于在前一节我们已经对各个组件进行了详细介绍,所以本节不再赘述相关内容,在本节中主要强调静态 SQL 和动态 SQL 执行的不同之处。在这个过程中,SqlNode 相关实现值得关注,它为动态 SQL 标签都定义了专用实现类,遵循单一职责的原则,并且应用了 装饰器模式。最后,我们还会讨论动态 SQL 避免注入的解决方案,它是在 Mybatis 中不可略过的一环。
原创
发布博客 2025.02.25 ·
711 阅读 ·
29 点赞 ·
0 评论 ·
25 收藏

由 Mybatis 源码畅谈软件设计(三):简单查询 SQL 执行流程

SQL 查询是 Mybatis 中的核心流程,本节我们来介绍简单 SQL 的执行流程,过程会比较长,期间会认识很多重要的组件,比如 SqlSession、四大处理器(Executor、StatementHandler、ParameterHandler 和 ResultSetHandler)等等,大家先有个脸熟,到具体环节时需要重点关注。
原创
发布博客 2025.02.25 ·
974 阅读 ·
32 点赞 ·
0 评论 ·
15 收藏

由 Mybatis 源码畅谈软件设计(二):MappedStatement 和 SqlSource

本节我们来介绍 org.apache.ibatis.mapping.MappedStatement(映射SQL语句声明的类),它是 MyBatis 框架中的一个核心类,也是向后不断学习 Mybatis 源码的基础。
原创
发布博客 2025.02.24 ·
341 阅读 ·
4 点赞 ·
0 评论 ·
3 收藏

由 Mybatis 源码畅谈软件设计(一):序

从接触软件开发以来,一直对写出优雅的代码抱有执念,工作半年时,偶然接触到《代码整洁之道》,爱不释手,一口气读完,并在很长的时间内践行其中的观点,但是在这践行期间缺少思考和复盘,更多的是一味地信奉和遵守其中的原则,写了不少当时自认为不错而现在回过头看可读性不好的“坏代码”。
原创
发布博客 2025.02.24 ·
1052 阅读 ·
28 点赞 ·
0 评论 ·
17 收藏

高性能缓存设计:如何解决缓存伪共享问题

在多核高并发场景下,缓存伪共享(False Sharing) 是导致性能骤降的“隐形杀手”。当不同线程频繁修改同一缓存行(Cache Line)中的独立变量时,CPU缓存一致性协议会强制同步整个缓存行,引发无效化风暴,使看似无关的变量操作拖慢整体效率。本文从缓存结构原理出发,通过实验代码复现伪共享问题(耗时从3709ms优化至473ms),解析其底层机制;同时深入剖析高性能缓存库 Caffeine 如何通过 内存填充技术(120字节占位变量)隔离关键字段,以及 JDK 1.8 的 @Contended 注解
原创
发布博客 2025.02.22 ·
1354 阅读 ·
30 点赞 ·
0 评论 ·
22 收藏

缓存之美:从根上理解 ConcurrentHashMap

本文将详细介绍 `ConcurrentHashMap` 构造方法、添加值方法和扩容操作等源码实现。`ConcurrentHashMap` 是线程安全的哈希表,此哈希表的设计主要目的是在最小化更新操作对哈希表的占用,以保持并发可读性,次要目的是保持空间消耗与 `HashMap` 相同或更好,并支持利用多线程在空表上高效地插入初始值。
原创
发布博客 2025.02.10 ·
1651 阅读 ·
29 点赞 ·
0 评论 ·
23 收藏

24 年终总结:是“新生”也是“挑战”

如往年一样,对去年进行回顾总结。我觉得今年的关键词是 **“新生”** 和 **“挑战”**,新生意味着来到新的环境重新发展、成长,挑战便新环境下需要克服的困难和坎坷的经历。全文主要分四部分,关于工作、技术成长、阅读和一些感受,希望能对大家有一些启发。
原创
发布博客 2025.02.06 ·
1355 阅读 ·
39 点赞 ·
0 评论 ·
18 收藏

本地缓存 Caffeine 中的时间轮(TimeWheel)是什么?

大家好,我是。在前文中,我们详细介绍了 Caffeine 缓存添加元素和读取元素的流程,并详细解析了配置固定元素数量驱逐策略的实现原理。在本文中我们将主要介绍,补全 Caffeine 对元素管理的机制。在创建有过期时间策略的 Caffeine 缓存时,它提供了三种不同的方法,分别为和,前两者的元素过期机制非常简单:通过遍历队列中的元素(遍历的是窗口区、试用区和保护区队列,有专用的写顺序队列),并用当前时间减去元素的最后访问时间(或写入时间)的结果值和配置的时间作对比,如果超过配置的时间,则认为元素过期。而。
原创
发布博客 2025.02.04 ·
1140 阅读 ·
25 点赞 ·
0 评论 ·
25 收藏

缓存之美:万文详解 Caffeine 实现原理(下)

是一个 MPSC 的缓冲区,采用了分段的设计,将缓冲区划分为多份,根据线程的探针值哈希到不同的缓冲区,减少竞争的发生,并使用CAS操作来保证多线程下写入操作高效执行。队列按照从头节点到尾节点的顺序消费,使用频率相对较低的元素先被驱逐,在相同频率的情况下,优先保留主空间中的元素而不是窗口区元素。在文中提到过每个分区的双端队列使用了 LRU 算法,被访问过的元素会被放在尾节点,但对元素进行驱逐时并不以 LRU 的顺序为准,而是会参考频率草图中记录的元素频率,保证使用频率高的被保留,低的被驱逐。
原创
发布博客 2025.01.22 ·
1334 阅读 ·
29 点赞 ·
0 评论 ·
21 收藏

缓存之美:万文详解 Caffeine 实现原理(上)

文章将采用“总-分-总”的结构对配置固定大小元素驱逐策略的 Caffeine 缓存进行介绍,首先会讲解它的实现原理,在大家对它有一个概念之后再深入具体源码的细节之中,理解它的设计理念
原创
发布博客 2025.01.21 ·
1115 阅读 ·
24 点赞 ·
0 评论 ·
8 收藏

问题解决:发现Excel中的部分内容有问题。是否让我们尽量尝试恢复? 如果您信任此工作簿的源,请单击“是”。

执行如上方法导出时,打开的 Excel 文件会提示:发现Excel中的部分内容有问题。如果您信任此工作簿的源,请单击“是”。发现果然包含了响应对象的 JSON 格式,解决该问题也非常简单,第一种方案是直接将返回值改成 void,让前端只处理流即可。第二种方案是在响应头中指定输出流的长度,到了指定长度后前端便不再处理,只解决 Excel 文件相关的内容即可。因为前端在处理文件流时,不知道文件流的长度,会全量处理文件流,由于指定了。在开发同步导出功能是遇到了如标题所示的问题,解决后遂记录下来供大家参考。
原创
发布博客 2024.12.18 ·
2292 阅读 ·
3 点赞 ·
0 评论 ·
0 收藏

代码整洁:开发者的务实之道

大家好,我是。近半年看了不少关于代码整洁的内容,尤其是在读了《软件设计哲学》之后,想写好代码的想法达到了顶峰,便断断续续搜罗了许多相关书籍,并花时间看了以极简主义风格著称的 Mybatis 源码,收获良多。所以,想趁着这个机会将其中谈到的最直接的方法论分享给大家,希望能有一些帮助,如果大家想深入了解,可以参考文末的书籍。
原创
发布博客 2024.12.13 ·
803 阅读 ·
26 点赞 ·
0 评论 ·
15 收藏

一文理解布隆过滤器和布谷鸟过滤器

最近在大促中使用到了布隆过滤器,之前学习但没有专门整理过,所以本次借着机会整理下相关内容,并了解了布谷鸟过滤器,希望对后续学习的同学有启发~
原创
发布博客 2024.10.23 ·
1365 阅读 ·
36 点赞 ·
1 评论 ·
20 收藏

「软件设计哲学」在生产业务中的实践

本文主要给大家分享软件设计中的两个理念,为什么我称软件设计是“理念”而不是“方法”或“原则”呢?这个想法主要受《A philosophy of software design》的影响,它将软件设计称为“哲学”,而哲学本身没有严格的定论,同样地,我觉得软件设计是每个开发者的理念,相同功能的迭代,往往会有不同的看法或思想,也所谓每个人的代码风格,所以本次分享不求同,只求能给大家带来一点启发
原创
发布博客 2024.10.09 ·
1119 阅读 ·
12 点赞 ·
0 评论 ·
22 收藏

为什么《程序员修炼之道》评分高达 9.1?

开始接触到《程序员修炼之道:通向务实的最高境界》这本书是在豆瓣图书的高分榜单上,它的评分高达 9.1,其中有条蛮有意思的书评非常吸引我:“这本书我读过 5 遍信不信,每个字都磨出了感情… 爱看技术书的程序员,看看可以往上走走;不爱看技术书的程序员,看看可以轻松刷出阅读成就感”。所以,本着刷阅读成就感并希望磨炼技术的态度便开始了本书的阅读,抽业余时间读完,其中有部分收获能和大家分享,当然更希望大家去看原书。
原创
发布博客 2024.08.06 ·
1039 阅读 ·
29 点赞 ·
1 评论 ·
20 收藏
加载更多