# 前言lint 工具用来检查编程错误,最初是从 C 语言中发展起来的。在 C 语言最初时期,编译器无法捕获一些常见的编程错误,因此开发出了一个叫做 `lint` 的辅助程序,通过扫描源文件来查找问题。当我们在 linting 的时候我们到底在干什么?实际上,最终目标是希望代码更加健壮,并且不论团队有多少成员,代码就像同一个人写出来的一样,可读性更强。可以将众多 linters 的检查目标大致分为三类:- programmer errors :主要是对语...
Split lock 是 CPU 为了支持跨 cache line 进行原子内存访问而支持的内存总线锁。有些处理器比如 ARM、RISC-V 不允许未对齐的内存访问,不会产生跨 cache line 的原子访问,所以不会产生 split lock,而 X86 是支持... Split lock 背景### 1.1 从 i++说起我们假设一个最简单的计算模型,一个 CPU(单核、没有开启 Hyper-threading、没有 Cache),一块内存。上面运行一个 C 程序在执行`i++`,对应的汇编代码是`add 1, i`。分析一下...
=&rk3s=8031ce6d&x-expires=1716049244&x-signature=5gIQc4ykqPMDST3ChvBbwnAbEnI%3D) **怎么对特定方法做AOP拦截?**通过字节码增强的方式对目标方法做拦截并植入内联代码。 **答**... 代码织入的时机也有多种方式,比如Lombok是通过在编译器对代码进行织入,主要依赖的是在 Javac 编译阶段利用“Annotation Processor”,对自定义的注解进行预处理后生成代码然后织入;其他的像CGLIB、ByteBuddy等框架是...
软件系统的架构和实现代码不是一成不变的,而是随着使用人数增加和需求的不断变化而变化。这就要求我们对代码进行重构,来保证代码容易被修改,并且更加健壮。![picture.image](https://p6-volc-community-sign.byt... 既减少了代码量,又能提升效率。这是不对的。现代的编译器可以很容易的优化多个循环,同时在时间复杂度不变的情况下,多次循环对于代码本身执行效率也不会有太大的影响。真要在这个过程中出了效率的问题,也很好定位。...
(struct endpoint_info), .pinning = PIN_GLOBAL_NS, .max_elem = ENDPOINTS_MAP_SIZE, .flags = CONDITIONAL_PREALLOC,};复制代码```2、查询 map:```stat... 在我们的 eBPF 代码中,仅需要定义 map 全局变量,即可在代码中直接使用了,没有相关调用 bpf syscall 创建 map 的逻辑。那么其内部机制是怎样的?是 map 创建的过程然后由 loader 加载器完成的,编译器和加载器根据同一...