初级程序员必备的十大技能之计算机基础必备(五)

简介: 教程来源 http://vbzcj.cn 本节详解代码运行本质:从C/Java的静态编译(词法→语法→语义→中间码→优化→目标码),到JS的JIT动态编译(AST→字节码→热点优化);并结合CPU 100%、内存泄漏等线上案例,贯通编译原理与实战排障。

五、编译原理:代码是如何运行的

虽然初级程序员不需要实现编译器,但理解编译过程对调试和性能优化很有帮助。

5.1 编译过程

源代码 → 词法分析 → 语法分析 → 语义分析 → 中间代码 → 优化 → 目标代码

例如: sum = a + b * 10

1. 词法分析:拆分成 Token
   [IDENT(sum)] [ASSIGN(=)] [IDENT(a)] [PLUS(+)] [IDENT(b)] [STAR(*)] [NUMBER(10)]

2. 语法分析:生成 AST(抽象语法树)
        =
       / \
     sum   +
          / \
         a   *
            / \
           b   10

3. 语义分析:类型检查、符号表管理
   - a 和 b 必须是数字
   - 10 是整数

4. 中间代码生成:三地址码
   t1 = b * 10
   t2 = a + t1
   sum = t2

5. 优化
   t1 = b * 10
   sum = a + t1

6. 目标代码生成(汇编)
   LOAD R1, b
   MUL R1, 10
   LOAD R2, a
   ADD R2, R1
   STORE sum, R2

5.2 JavaScript 的编译执行
JavaScript 是解释型语言,但现代引擎(V8)使用 JIT(即时编译)技术。

// V8 执行 JavaScript 的过程
// 
// 源代码 → 解析器 → AST → 解释器(Ignition) → 字节码 → 执行
//                                ↓
//                          热点代码检测
//                                ↓
//                          编译器(TurboFan) → 优化机器码

// 帮助 JIT 优化的代码写法
// ✅ 保持对象形状一致(有利于隐藏类优化)
class Point {
    constructor(x, y) {
        this.x = x;
        this.y = y;
    }
}

const points = [];
for (let i = 0; i < 10000; i++) {
    // 所有对象都有相同的属性顺序
    points.push(new Point(i, i * 2));
}

// ❌ 动态添加/删除属性(破坏隐藏类)
const p = { x: 1 };
p.y = 2;  // 改变了对象形状
delete p.x;  // 再次改变

// ✅ 使用单态函数(参数类型一致)
function add(a, b) {
    return a + b;
}

// 始终传入数字
for (let i = 0; i < 10000; i++) {
    add(i, i + 1);  // 被优化为数字加法
}

// ❌ 多态调用(参数类型变化)
add(1, 2);      // 数字
add("a", "b");  // 字符串 → 导致去优化

六、综合实战:排查线上问题

把计算机基础知识综合运用于实际问题排查:

案例:CPU 100% 问题排查

// 问题代码:死循环导致 CPU 飙升
function processQueue(queue) {
    // ❌ 死循环:当 queue 为空时,一直空转
    while (true) {
        if (queue.length > 0) {
            const item = queue.shift();
            process(item);
        }
        // 缺少等待机制
    }
}

// ✅ 正确的实现
function processQueueWithBackoff(queue) {
    function process() {
        if (queue.length > 0) {
            const item = queue.shift();
            process(item);
            setImmediate(process);  // 让出 CPU
        } else {
            setTimeout(process, 100);  // 队列为空时休眠
        }
    }
    process();
}

案例:内存泄漏排查

// 使用 Node.js 的 heap snapshot 功能
// 1. 启动时增加 --inspect 参数
// node --inspect app.js

// 2. 在 Chrome DevTools 中分析 heap snapshot

// 常见内存泄漏的修复
class EventManager {
    constructor() {
        this.listeners = new Map();
    }

    on(event, callback) {
        if (!this.listeners.has(event)) {
            this.listeners.set(event, new Set());
        }
        this.listeners.get(event).add(callback);

        // ✅ 返回取消订阅函数,方便清理
        return () => {
            this.listeners.get(event)?.delete(callback);
        };
    }
}

// 使用 WeakMap 自动清理
const userCache = new WeakMap();  // 当对象被回收时,缓存自动清理

附:知识体系总结

计算机基础
├── 计算机组成原理
│   ├── 二进制与位运算
│   ├── 内存层次结构
│   └── CPU 工作原理
├── 操作系统
│   ├── 进程与线程
│   ├── 并发与并行
│   ├── 死锁
│   └── 内存管理
├── 计算机网络
│   ├── TCP/IP 协议栈
│   ├── HTTP/HTTPS
│   ├── DNS 解析
│   └── 浏览器工作原理
├── 数据库
│   ├── SQL 语言
│   ├── 索引原理
│   ├── 事务与 ACID
│   └── 设计范式
└── 编译原理
    ├── 编译过程
    └── JIT 编译

来源:
http://uklgy.cn

相关文章
|
Ubuntu Linux iOS开发
主流的操作系统
一、Windows操作系统 1、详细介绍: Microsoft Windows_百度百科 2、大概介绍 Microsoft Windows是美国微软公司研发的一套操作系统,从最初的Windows 1.0、到大家熟知的Windows 7、Windows 8、Windows 10,Windows 11不断持续更新。
1450 1
|
5月前
|
前端开发 程序员 API
初级程序员必备的十大技能之 API 接口与前后端联调(五)
教程来源 https://xgmoi.cn/ 本文系统梳理API联调核心知识:涵盖CORS跨域、404/401/403错误排查、数据格式转换、重复请求防控等高频问题及代码级解决方案;详解接口文档规范与Swagger自动化实践,并总结HTTP协议、RESTful设计、前端封装、调试工具等完整知识体系。
|
7月前
|
人工智能 Linux API
阿里云|本地全平台部署 OpenClaw × OpenSpace全攻略:自我进化+降本增效+Skill沉淀+常见问题
在AI智能体普及的今天,很多用户发现:即便部署了OpenClaw(Clawdbot),智能体依然存在三大痛点:任务无法沉淀复用、重复执行消耗大量Token、不会从成功/失败中自我成长。OpenSpace的出现,彻底改变这一现状——它不是新增一个AI助手,而是为OpenClaw装上**技能沉淀引擎、成本优化引擎、自我进化引擎**,让智能体从“一次性执行”升级为“可积累、可省钱、可成长”的数字员工。
1667 2
|
4月前
|
设计模式 人工智能 数据可视化
Agentic 设计模式拆解:6 种结构的优缺点与应用场景
本文系统梳理Agentic AI六大核心设计模式:单一、顺序、并行智能体,循环评审,协调者与子智能体,以及作为工具的子智能体。聚焦智能体、用户、模型与工具间的结构化交互,提炼可复用的工程骨架,助力规模化落地。
405 5
Agentic 设计模式拆解:6 种结构的优缺点与应用场景
|
4月前
|
人工智能 安全 测试技术
别再让 Claude 乱改代码了!Claude Code 这 7 个权限配置让你的项目再也不翻车
还在为 Claude Code 的混乱操作头疼?本文总结 7 个核心权限配置,从上下文管理、提示技巧到环境配置全覆盖,让你的 AI 编程助手真正听话不翻车。
802 5
|
4月前
|
人工智能 自然语言处理 安全
阿里云云部署OpenClaw集成钉钉
本文详解OpenClaw开源AI助手与钉钉的深度集成:支持群聊/单聊中自然语言交互,涵盖环境部署、钉钉应用创建、通道配置、机器人测试及多Agent绑定等全流程,并强调使用前须评估安全与合规性。
|
4月前
|
运维 监控 UED
KKCE 网站测速实用科普:看懂站点访问速度与性能判定
网站测速是优化用户体验与运维效率的关键手段,可精准定位地域延迟、运营商差异、性能瓶颈等问题。通过多维度检测、趋势分析与错误统计,实时监控并长期追踪站点速度,助力站长快速诊断、科学优化,保障访问流畅稳定。(239字)
258 4
|
5月前
|
SQL 程序员 数据库
初级程序员必备的十大技能之数据库基础(三)
教程来源 http://ltglu.cn/ 本文详解数据库索引优化与事务机制:索引类比书目录,B+树大幅降低IO;详解最左前缀、函数/类型转换等索引失效场景及EXPLAIN分析法;事务部分涵盖ACID、四大隔离级别(解决脏读/不可重复读/幻读)、行锁/乐观锁及秒杀防超卖实战。
|
5月前
|
存储 缓存 程序员
初级程序员必备的十大技能之计算机基础必备(一)
教程来源 http://fndvx.cn 本文系统讲解程序员必修的计算机基础,涵盖组成原理、操作系统、网络、数据库、编译原理五大核心。从冯·诺依曼结构、二进制与位运算(含权限系统实战),到内存层次与缓存优化,配原理图解与可运行代码,助你夯实内功、知其所以然。
|
6月前
|
弹性计算 数据可视化
阿里云服务器管理控制台(后台)在哪登录?统一阿里云后台链接入口整理,一键直达
阿里云服务器管理控制台是ECS与轻量应用服务器的统一可视化后台,支持重启、远程连接、重装系统等操作。主入口为控制台首页(home.console.aliyun.com),亦可直连ECS官网:https://t.aliyun.com/U/AZBUsA 或轻量官网:https://t.aliyun.com/U/dwftch
2486 8