分类
编程
全部文章如何组织一个 Go 项目?
Go 项目的目录该怎么分?结合开源项目,讨论入口、内部实现与公共库的边界,以及目录约定背后的取舍。
Python 的 import 陷阱
《Python 指北》第 2 篇:同一份 Python 代码,换个启动方式就导入失败了?用具体例子说明模块所在目录与包身份为什么不是一回事。
浅析 C 中函数返回值的一例 UB
本该返回整数的 C 函数漏写 return,会发生什么?从 GCC 生成的汇编追踪返回值,并观察优化选项的影响。
PDB入门
《Python 指北》第 1 篇:程序跑到一半,变量究竟变成了什么?用 PDB 暂停 Python 程序,在现场执行表达式、验证猜测。
MyBatis
《深入 Spring 源码》第 6 篇:把一条 SQL 变成一次 Java 方法调用,少写重复的数据库操作代码。实践 MyBatis 映射,并为应用接入登录与权限控制。
Spring Boot
《深入 Spring 源码》第 5 篇:一个启动类为何能带起整个应用?追踪 Spring Boot 源码,看框架怎样按条件补齐配置,把繁琐的启动工作接过去。
Spring MVC
《深入 Spring 源码》第 4 篇:一次 HTTP 请求如何变成 Java 方法调用?追踪框架调度源码,看请求怎样找到处理者,再把结果交还客户端。
JDBC 和事务
《深入 Spring 源码》第 3 篇:余额扣了,库存却没减成功,这笔操作该怎么算?追踪 Spring 事务源码,看一组数据库修改如何共同提交或回滚。
AOP
《深入 Spring 源码》第 2 篇:业务方法没有改,调用时却多出了日志和事务。追踪 Spring 代理的创建过程,看这些额外逻辑在何时被接入。
IoC
《深入 Spring 源码》第 1 篇:对象不再亲手创建,它依赖的对象由谁准备?跟着 Spring 源码看容器如何识别、组装并管理它们。
Java 集合
《深入 Java》第 3 篇:同样是存取一组数据,换个容器为什么就会变快或变慢?借源码理解 Java 集合的成本,按访问方式选择容器。
Java 并发编程
《深入 Java》第 2 篇:多个线程各自执行正确,合在一起为什么会出错?理解共享数据的可见性与操作原子性,再看 Java 如何协调线程。
Java 进阶
《深入 Java》第 1 篇:运行中的 Java 程序如何检查一个类、调用未知的方法?以反射和注解为重点,补齐阅读框架代码常用的语言知识。
Docker 底层原理浅析
同一份代码,怎样连同运行环境一起交付?跟着一次开发与测试的争执使用 Docker,再看容器为何能兼顾环境隔离与轻量运行。
伪随机数算法
同一个种子总能算出同一串数,它为什么还能叫随机数?拆开常用生成算法,看看确定性的运算如何产生近似随机的序列。
类型推导
C++11/14/17 学习第 2 篇:写下 auto 后,原本的引用还在吗?逐例检查推导结果,弄清编译器何时保留类型信息、何时将它丢掉。
右值的应用
C++11/14/17 学习第 1 篇:调用 move 就一定会移动对象吗?厘清左值、右值与引用,解释移动语义和完美转发。
共 17 篇文章