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

简介: 教程来源 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

相关文章
|
16天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23517 12
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
3天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
1137 7
|
4天前
|
人工智能 BI 持续交付
Claude Code 深度适配 DeepSeek V4-Pro 实测:全场景通关与真实体验报告
在 AI 编程工具日趋主流的今天,Claude Code 凭借强大的任务执行、工具调用与工程化能力,成为开发者与自动化运维的核心效率工具。但随着原生模型账号稳定性问题频发,寻找一套兼容、稳定、能力在线的替代方案变得尤为重要。DeepSeek V4-Pro 作为新一代高性能大模型,提供了完整兼容 Claude 协议的 API 接口,只需简单配置即可无缝驱动 Claude Code,且在任务执行、工具调用、复杂流程处理上表现极为稳定。
1347 3
|
9天前
|
人工智能 缓存 Shell
Claude Code 全攻略:命令大全 + 实战工作流(完整版)
Claude Code 是一款运行在终端环境下的 AI 编码助手,能够直接在项目目录中理解代码结构、编辑文件、执行命令、执行开发计划,并支持持久化记忆、上下文压缩、后台任务、多模型切换等专业能力。对于日常开发、项目维护、快速重构、代码审查等场景,它可以大幅减少手动操作、提升编码效率。本文从常用命令、界面模式、核心指令、记忆机制、图片处理、进阶工作流等维度完整说明,帮助开发者快速上手并稳定使用。
2478 4
|
3天前
|
人工智能 JSON BI
DeepSeek V4-Pro 接入 Claude Code 完全实战:体验、测试与关键避坑指南
Claude Code 作为当前主流的 AI 编程辅助工具,凭借强大的代码理解、工程执行与自动化能力深受开发者喜爱,但原生模型的使用成本相对较高。为了在保持能力的同时进一步降低开销,不少开发者开始寻找兼容度高、价格更友好的替代模型。DeepSeek V4 系列的发布带来了新的选择,该系列包含 V4-Pro 与 V4-Flash 两款模型,并提供了与 Anthropic 完全兼容的 API 接口,理论上只需简单修改配置,即可让 Claude Code 无缝切换为 DeepSeek 引擎。
885 0
|
19天前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
6003 22
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
21天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
7233 18