所有的框架源码,最怕的就是被debug

知乎上有个问题:学编程是理解就行呢还是全部背?

我的观点是:我是建议用debug的思维去做这个事情,并且写一些小的demo验证它。

我之前在知乎写过一篇回答,redis 为什么是单线程的?

我才不管的它是C语言,D语言,xxx语言写的。我想搞清楚它,那我就debug它,直接把整个redis在我的window11上运行起来。

所有的问题,最怕的就是被debug。

我就是想知道redis单线程是怎么回事,就算它是C语言实现的,照样debug。

所有的问题,最怕的就是被debug。

不管是Tomcat的请求处理流程,还是Spring Boot的自动装配机制,还是MyBatis的SQL执行链路,你只要肯在关键位置打个断点跑一遍,debug它,它就没有秘密可言。

况且现在AI这么强大,你甚至可以问,在哪个类的哪个方法设置断点,是最合适的。然后设置个断点。

写小demo验证

Thinking in Java这本书,它伟大的地方在于它总是能用极短的代码把一个语言特性暴露出来。你看完那几行demo,那个特性就理解了。

这个方法我们自己也可以用。

想搞清楚Spring的循环依赖是怎么解决的?写3个类,A注入B,B注入C,C注入A,跑起来,debug进DefaultSingletonBeanRegistry的getSingleton方法。

想搞清楚线程池的拒绝策略到底什么时候触发?写个demo:

Java 复制代码
// 核心线程2个,最大线程3个,队列容量1个
ThreadPoolExecutor pool = new ThreadPoolExecutor(
    2, 3, 60, TimeUnit.SECONDS,
    new ArrayBlockingQueue<>(1));

往里面提交5个任务,第5个就会触发拒绝策略。不需要背什么「核心线程满了放队列,队列满了开新线程,最大线程也满了才拒绝」,跑一次demo,这个流程自己就理解了。

想搞清楚HashMap在并发场景下的问题?两个线程同时put,debug进resize方法看扩容过程中的链表操作,数据覆盖是怎么发生的就大概知道了。。

写demo的关键是:把问题缩小到最小可验证单元。 不要搭一个完整的项目来验证一个小问题。3个类、5行配置就能说明白的事情,不需要搭一个完整的Spring Boot工程。


最近在知乎出了「应付6000万会员的秒杀系统专栏」和「几亿用户,百万并发的C端商品系统实战」专栏,感兴趣的可以订阅一下。至于知识星球的,可以搜:

  • 老码头的技术浮生录

它是一个能实际帮你解决难题的星球。有问题的,找知心的Sam哥,支持无限次语音一对一解决你遇到的难题。「另外后续我新写的所有对外的付费专栏,在星球内都是免费的,且可以拿到所有源代码。」

知识星球内后续将推出20+个付费专栏,覆盖电商全链路:

选购线 用户会员营销线 中后台
购物车服务 营销系统 订单系统
商品服务 用户系统 支付系统
菜单服务 结算服务

从前台选购到中后台结算,星球成员全部免费,后续新增也不额外收费。

我的知乎账号:

  • SamDeepThinking
相关推荐
Wx-bishekaifayuan15 分钟前
springboot生活易购超市管理系统54086-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
lzhdim16 分钟前
C#不为人知的10个魔法特性:资深开发者也会震惊的底层奥秘
java·前端·javascript·算法·c#
lizhongxuan16 分钟前
VirtIO:虚拟机的磁盘、网络与内存是怎样工作的
后端
ProcessOn官方账号29 分钟前
java IO操作 你快速认识IO的相关基本知识
java·开发语言
计算机毕设定制辅导-无忧学长38 分钟前
《基于Spring Boot的减脂轻食购物网站》
java·vue.js·spring boot·后端·减脂轻食购物网站
青山木40 分钟前
Hot 100 --- 下一个排列
java·数据结构·算法·leetcode
Thinker QAQ41 分钟前
并发编程(六):Atomic 的实现——从 Runtime 到 CPU
java·go·cas·并发编程·atomic·cpython
沐欣工作室_lvyiyi1 小时前
基于SpringBoot的博物馆预约系统设计与实现(论文+源码)
java·spring boot·后端·计算机毕业设计
拾光记1 小时前
Maven依赖与类加载机制
后端