- 博客(78)
- 资源 (1)
- 收藏
- 关注
原创 【金丹·84】网络编程:socket入门
修真界把socket叫「法力门环」。本篇拆开TCP socket七步法力(socket/bind/listen/accept/connect/send/recv),写一个能跑的echo服务器和客户端,再讲清字节序(htons/inet_pton)的坑。适合金丹修士入门网络编程。
2026-10-12 15:03:37
104
原创 【金丹·83】多线程编程实战:生产者消费者
生产者消费者问题是多线程编程的经典模型。本文用C语言+POSIX线程从零实现:互斥锁保护共享缓冲区,条件变量实现生产者通知消费者、消费者通知生产者。覆盖虚假唤醒、环形缓冲区、死锁预防等实战要点,附完整可运行代码。
2026-10-12 09:08:36
275
原创 【金丹·82】内存泄漏怎么查:valgrind和ASan
金丹期第82篇,深入讲解内存泄漏排查工具:valgrind memcheck检测原理、AddressSanitizer编译时插桩、常见内存错误类型(泄漏、越界、野指针、双重释放),以及实战排查流程与工具选型建议。
2026-10-11 15:03:41
300
原创 【金丹·81】性能分析:你的程序慢在哪
金丹期必修性能分析术:用perf stat看硬件计数器(IPC、cache-misses、branch-misses),用perf record+perf report采样定位热点函数,用FlameGraph火焰图可视化调用栈,最后拆解cache-misses命中率定位访存瓶颈。五件兵器配齐,程序慢在哪一目了然。
2026-10-11 09:03:50
118
原创 【金丹·80】为什么金丹期看代码像开天眼
金丹期工程师看代码如同开天眼:不是逐行读,而是从架构、模式、数据流三个维度建立代码地图。本文讲透代码阅读的系统方法论,从静态分析到动态调试,从IDE工具链到心智模型构建。
2026-10-10 15:02:56
148
原创 【金丹·79】无锁编程:CAS和原子操作
深入解析CAS原子操作的硬件实现:x86的CMPXCHG+LOCK前缀 vs ARM的LDREX/STREX配对,ABA问题的内存复用陷阱及三种破解方案,cache line bouncing导致多核退化,以及Michael-Scott无锁队列的工程实战。
2026-10-10 09:04:55
301
原创 【金丹·78】死锁:四个条件和怎么破解
死锁是并发编程最经典的陷阱。Coffman四条件、锁排序预防、银行家算法避免、资源分配图检测、进程终止恢复,一篇讲清死锁的来龙去脉和实战规避。
2026-10-09 15:04:03
647
原创 【金丹·77】锁的家族:自旋锁、互斥锁、读写锁、顺序锁、RCU
Linux内核锁家族全解析:自旋锁适合纳秒级短临界区,互斥锁适合毫秒级长临界区,读写锁解决读多写少,顺序锁解决读极多写极少且数据不带指针,RCU解决读极多写极少且数据带指针。五件兵器各有所长,选错轻则浪费CPU,重则死锁。
2026-10-09 09:03:35
554
原创 【金丹·76】CPU缓存三层塔
CPU缓存L1/L2/L3三层塔,是计算机体系结构中最重要的性能设计。本文用修仙体系类比,从寄存器到主存的速度差讲起,深入剖析缓存行、映射方式、缓存一致性协议,揭示99%性能问题的根源。
2026-10-08 15:06:47
647
原创 【金丹·74】软中断、Tasklet和Workqueue:中断下半部的三种机制
软中断是内核最早的下半部机制,也是最基础的。Linux 在里用一个 enum 静态列出所有支持的软中断类型,最多 32 种,目前内核实际使用了 10 种。// include/linux/interrupt.h (v6.1 内核源码)HI_SOFTIRQ=0, // 高优先级 taskletTIMER_SOFTIRQ, // 定时器下半部NET_TX_SOFTIRQ, // 网卡发送NET_RX_SOFTIRQ, // 网卡接收BLOCK_SOFTIRQ, // 块设备。
2026-09-30 15:02:47
447
原创 【金丹·73】线程安全:锁、原子操作与内存屏障
线程安全是并发编程的核心问题。本文用修仙比喻讲解互斥锁mutex(futex机制)、自旋锁spinlock(test-and-set/ticket lock)、CAS原子操作(ABA问题/活锁)、内存屏障(SFENCE/LFENCE/MFENCE与编译器屏障)、volatile关键字的真相,以及C11 release/acquire语义。从硬件层面理解为什么balance++不是原子的,掌握选兵器的方法论。
2026-09-30 09:04:01
209
原创 【金丹·72】文件系统:数据怎么存到硬盘上的
文件系统是操作系统管理数据的核心机制。本文从inode、目录树、VFS虚拟文件系统到ext4文件系统实现,用修仙体系类比讲解硬盘数据存储的完整链路:从文件创建write()到磁盘块分配,从目录项到inode映射,深入理解数据是怎么一步步存到硬盘上的。
2026-09-29 15:07:31
514
原创 【金丹·71】进程间通信:管道、共享内存、信号
进程间通信(IPC)是操作系统的核心机制。本文用修仙比喻讲解五种IPC:管道(父子进程竹筒)、FIFO(命名管道)、共享内存(最快IPC)、信号(惊堂木)、消息队列和套接字。附代码示例和选择口诀。
2026-09-25 09:20:55
508
原创 【金丹·70】虚拟内存:每个进程都以为自己独占4GB
摘要(148字): 虚拟内存让每个进程以为独占4GB地址空间。通过页表将虚拟地址映射到物理内存,多级页表节省内存,TLB加速翻译,缺页中断处理未分配、权限错误、写时复制与换入场景。进程切换时更新CR3寄存器,内核按需分配物理页或从磁盘恢复数据。mmap实现文件与内存映射。这套机制保障隔离、安全与高效共享,是现代操作系统的核心支柱。
2026-09-24 15:05:40
259
原创 【金丹·69】谁在决定CPU归谁:进程调度CFS
Linux CFS调度器用vruntime+红黑树+nice权重实现进程间CPU公平分配。本文讲解vruntime计算、红黑树选进程、nice权重表、调度周期、实时调度SCHED_FIFO/RR及Linux 6.6后的EEVDF。
2026-09-24 09:08:21
350
原创 【金丹·66】为什么你的代码编译过了但链接报错
编译通过了但链接报错undefined reference?本文从编译与链接的本质区别讲起,拆解链接器的工作原理:符号表查找、重定位、静态库与动态库的差异,用实战案例分析常见链接错误的根因和解决方案。
2026-09-22 15:08:40
413
原创 【金丹·65】ELF文件解剖:一个可执行文件里有什么
ELF(Executable and Linkable Format)是Linux上.o、.so和可执行文件的统一格式。本文用readelf工具解剖一个真实ELF文件,从ELF头、Program Header段表、Section Header节表到符号表,讲清链接器和加载器各自的视角,最后梳理从execve到main的完整加载路径。ELF(Executable and Linkable Format)是Linux上.o、.so和可执行文件的统一格式。本文用readelf工具解剖一个真实ELF文件,从ELF头
2026-09-21 15:13:05
400
原创 【金丹·64】undefined reference:链接器原理
链接器是编译流水线的最后一关。本文从undefined reference报错切入,详解符号解析、静态链接、动态链接、ELF文件格式、重定位机制,并总结链接错误的四大常见原因和排查步骤。
2026-09-21 09:23:28
284
原创 【金丹·63】编译:C代码怎么变成汇编
编译器把C代码翻译成汇编,中间经过词法解析、语法解析、语义解析、代码生成。但编译器不只翻译,还会偷偷改你的代码:删掉没用的变量,把循环展开,把常量表达式直接算成结果。不同优化级别-O0到-O3对最终代码体积和性能有巨大差异,嵌入式开发中-Os是最佳选择。
2026-09-20 15:08:06
218
原创 【金丹·62】预处理:#include和#define的真相
C语言编译第一步是预处理。#include不是"引入库"而是复制文件内容,#define是纯文本替换不是定义常量。本文用gcc -E实操拆解预处理的四类指令:文件包含、宏定义、条件编译、字符串化,揭示宏不加括号的陷阱和#ifndef防重复包含的原理。
2026-09-20 09:06:49
306
原创 【筑基·059】Linux命令行入门:工程师的操作系统
Linux命令行是工程师的基本功。本文从文件操作ls/cp/mv/rm、文本搜索grep/find、进程管理ps/kill/top、管道与重定向、权限管理chmod/chown五个方面系统讲解,覆盖日常工程最常用的命令。
2026-09-18 15:04:27
366
原创 【筑基·058】Git协作工作流:冲突解决和PR流程
Git协作开发中常见的冲突场景与解决方案,涵盖分支管理策略、PR流程规范、Code Review要点,帮助团队高效协作不踩坑。
2026-09-18 09:08:28
266
原创 【筑基·055】TCP vs UDP:可靠和快速的取舍
TCP(Transmission Control Protocol)在发送数据之前,双方要先建立连接。建立连接的过程叫三次握手(Three-Way Handshake)。客户端 服务器| || --- SYN, seq=x ------------> | 第1次:客户端说"我想连"| || <--- SYN+ACK, seq=y, ack=x+1 | 第2次:服务器说"我收到了,也想连"| || --- ACK, ack=y+1 -----------> | 第3次:客户端说"我确认你的确认"
2026-09-16 15:03:51
539
原创 【筑基·054】HTTP和DNS:浏览器到服务器的对话
上一篇讲了网络传送阵的四层结构。TCP负责可靠传输,IP负责寻址路由。但浏览器输入域名后TCP怎么知道连哪个IP?DNS是互联网的户籍处,专门干报名字查地址的事。HTTP是浏览器和服务器的对话语言,规定了请求响应格式、状态码含义、Cookie和Session怎么维持登录状态。
2026-09-16 09:07:06
569
原创 【筑基·052】进程vs线程:一个汉堡和十个人吃
进程和线程的本质区别:资源分配vs执行流。一个汉堡十个人吃的类比讲透PCB、上下文切换、线程安全。
2026-09-15 22:55:33
303
原创 【筑基·51】操作系统是天道规则
操作系统是计算机的天道规则。你分配内存、打开文件、跑100个进程,全都要经过OS的允许。本文从内核态/用户态、系统调用、进程调度、内存管理等角度,拆解操作系统如何管理硬件资源,让你理解程序运行时底层到底发生了什么。
2026-09-14 15:07:34
310
原创 【筑基·050】从逻辑门到CPU:概念总览
本文从逻辑门出发,系统梳理了从0和1的开关电路到现代CPU的构建路径:通过与、或、非等基本逻辑门实现任意逻辑功能,揭示NAND门的万能性;利用全加器实现算术运算,结合D触发器构建存储单元;最终将控制单元、寄存器堆与ALU协同集成,形成可执行指令的最简CPU架构。层层递进,展现数字世界“积木式”搭建的本质。
2026-09-14 09:07:57
247
原创 【筑基·048】位运算:嵌入式工程师的基本功
位运算是嵌入式工程师的基本功。从与或非异或到位移操作,从寄存器位操作到位域结构体,本文用修仙体系拆解位运算的底层逻辑,带你理解CPU如何逐位操控数据。
2026-09-13 09:05:47
347
原创 【筑基·047】内存Hierarchy:寄存器到硬盘的速度差
从寄存器到机械硬盘,计算机存储层次有七个层级,速度差超过1亿倍。本文用缓存行、局部性原理、伪共享等概念,解释为什么缓存友好代码能快十几倍,以及SRAM和DRAM的成本权衡。
2026-09-12 15:04:28
395
原创 【筑基·045】int a=1+2在CPU里跑了几步
一行代码int a=1+2,从源码到CPU执行经历了什么?本文用修仙体系拆解CPU指令执行全流程:预处理→编译→汇编→链接→加载→取指→译码→执行→写回,每一阶段对应修仙中的一个环节。从汇编指令ADD看ALU运算原理,从寄存器看CPU内部的灵力流转,从流水线看并行修炼的奥秘。
2026-09-11 15:03:29
263
原创 【筑基·044】排序算法:十个排序你该会几个
排序算法是编程面试的必考题,也是算法基础的核心。本文用修仙体系讲解冒泡、选择、插入、快排、归并、堆排序等十大排序算法,分析时间空间复杂度,帮助你在实际开发中选对排序方法。
2026-09-11 09:02:36
316
原创 【筑基·042】图:社交网络和导航最短路径背后的数据结构
图是表达复杂关系的核心数据结构,广泛应用于社交网络与导航路径计算。本文详解图的两种存储方式:邻接矩阵(适合稠密图,查边快但占空间)与邻接表(适合稀疏图,节省内存)。通过BFS实现广度优先搜索,可求无权图最短路径,验证“六度分隔”;DFS则以深度优先探索路径,适用于连通性判断与拓扑排序。最后介绍Dijkstra算法在加权图中寻找最短路径,为导航系统提供理论支持。
2026-09-10 09:03:44
291
原创 【筑基·041】二叉树和红黑树:为什么Linux内核偏爱它
二叉树是计算机科学最核心的数据结构之一。本文从树的基本概念出发,讲解二叉搜索树BST的查找与插入、AVL树的严格平衡与旋转操作、红黑树的五条性质与弱平衡策略,并深入分析Linux CFS调度器、Java TreeMap、C++ STL三个真实工程场景中红黑树的应用。数据结构二叉树红黑树
2026-09-09 15:02:36
366
ROS结合科大讯飞的语音识别包
2016-08-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅