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

简介: 教程来源 http://fndvx.cn 本文系统讲解程序员必修的计算机基础,涵盖组成原理、操作系统、网络、数据库、编译原理五大核心。从冯·诺依曼结构、二进制与位运算(含权限系统实战),到内存层次与缓存优化,配原理图解与可运行代码,助你夯实内功、知其所以然。

前言:万丈高楼平地起
你有没有遇到过这样的情况:

写代码时遇到一个 Bug,改了三天都不知道问题出在哪

程序跑起来很慢,但不知道该从哪里优化

面试官问“浏览器输入 URL 后发生了什么”,你大脑一片空白

线上服务突然崩溃,你只会重启服务器碰运气

这些问题的根源,往往不是因为你的编程语言没学好,而是计算机基础不扎实。

计算机基础是程序员的“内功心法”。它不像框架那样立竿见影,但它决定了你能走多远、爬多高。

本文将系统地讲解初级程序员必须掌握的计算机基础知识,涵盖:计算机组成原理、操作系统、网络、数据库、编译原理五大核心领域。每一个知识点都有详细的原理说明和代码示例,让你不仅“知其然”,更“知其所以然”。

一、计算机组成原理:理解机器的“硬件语言”

1.1 冯·诺依曼体系结构
几乎所有的现代计算机都遵循冯·诺依曼体系结构,它包括五大核心部件:

                    ┌─────────────────────────────────────┐
                    │              中央处理器 CPU           │
                    │  ┌─────────┐  ┌─────────┐          │
                    │  │  控制器  │  │  运算器  │          │
                    │  │ (Control│  │   (ALU)  │          │
                    │  │  Unit)  │  │         │          │
                    │  └────┬────┘  └────┬────┘          │
                    │       │            │                 │
                    │       ▼            ▼                 │
                    │  ┌─────────────────────┐            │
                    │  │      寄存器组        │            │
                    │  │   (Registers)       │            │
                    │  └─────────────────────┘            │
                    └───────────┬─────────────────────────┘
                                │
            ┌───────────────────┼───────────────────┐
            │                   │                   │
            ▼                   ▼                   ▼
    ┌─────────────┐     ┌─────────────┐     ┌─────────────┐
    │   内存       │     │   输入设备   │     │   输出设备   │
    │  (Memory)   │     │  (Input)    │     │  (Output)   │
    └─────────────┘     └─────────────┘     └─────────────┘

核心原理:

存储程序:指令和数据都以二进制形式存储在内存中

程序控制:CPU 自动从内存读取指令并执行

1.2 二进制与位运算
计算机底层只认识 0 和 1。理解二进制是理解计算机一切行为的基础。

十进制与二进制的转换

// 十进制转二进制
function decimalToBinary(n) {
    if (n === 0) return "0";
    let result = "";
    while (n > 0) {
        result = (n % 2) + result;  // 取余数,倒序拼接
        n = Math.floor(n / 2);
    }
    return result;
}

console.log(decimalToBinary(42));  // "101010" (32+8+2)

// 二进制转十进制
function binaryToDecimal(binaryStr) {
    let result = 0;
    for (let i = 0; i < binaryStr.length; i++) {
        result = result * 2 + parseInt(binaryStr[i]);
    }
    return result;
}

console.log(binaryToDecimal("101010"));  // 42

原码、反码、补码
计算机用补码表示整数,因为补码可以将减法转化为加法运算。
image.png
为什么用补码?

// 用原码计算 5 + (-5) = 0
// 00000101 + 10000101 = 10001010 = -10 ❌ 错误!

// 用补码计算 5 + (-5) = 0
// 00000101 + 11111011 = 100000000 → 丢弃溢出位 → 00000000 = 0 ✅

位运算(性能优化的利器)
位运算直接操作二进制位,比普通算术运算快得多。

// 1. 按位与 (&):两个位都是1时结果为1
// 用途:清除特定位、判断奇偶
console.log(5 & 3);   // 101 & 011 = 001 = 1
function isEven(n) {
    return (n & 1) === 0;  // 比 n % 2 === 0 更快
}

// 2. 按位或 (|):有一个为1就为1
// 用途:设置特定位为1
console.log(5 | 3);   // 101 | 011 = 111 = 7

// 3. 按位异或 (^):不同为1,相同为0
// 用途:交换两个变量(不需要临时变量)
let a = 5, b = 3;
a = a ^ b;  // a = 5^3 = 6
b = a ^ b;  // b = 6^3 = 5
a = a ^ b;  // a = 6^5 = 3
console.log(a, b);  // 3, 5

// 4. 左移 (<<):相当于乘以2的n次方
console.log(5 << 1);   // 1010 = 10  (5*2)
console.log(5 << 2);   // 10100 = 20 (5*4)

// 5. 右移 (>>):相当于除以2的n次方(向下取整)
console.log(10 >> 1);  // 101 → 101 = 5  (10/2)
console.log(10 >> 2);  // 10 → 10 = 2   (10/4)

实际应用:权限系统

// 用位运算实现权限管理(每个权限占用一个位)
const PERMISSIONS = {
    READ:   0b001,  // 1 << 0 = 1
    WRITE:  0b010,  // 1 << 1 = 2
    DELETE: 0b100,  // 1 << 2 = 4
    ADMIN:  0b111   // 1+2+4 = 7
};

class User {
    constructor(name, permissions = 0) {
        this.name = name;
        this.permissions = permissions;
    }

    // 添加权限
    addPermission(perm) {
        this.permissions |= perm;
    }

    // 移除权限
    removePermission(perm) {
        this.permissions &= ~perm;
    }

    // 检查是否有权限
    hasPermission(perm) {
        return (this.permissions & perm) === perm;
    }
}

const user = new User("张三", PERMISSIONS.READ);
user.addPermission(PERMISSIONS.WRITE);
console.log(user.hasPermission(PERMISSIONS.WRITE));  // true
console.log(user.hasPermission(PERMISSIONS.DELETE)); // false

1.3 内存层次结构
计算机的内存是分层的,越靠近 CPU 速度越快、容量越小、成本越高。
image.png
理解缓存的重要性:

// 演示缓存局部性的重要性
function matrixMultiply(size) {
    // 创建两个矩阵
    const A = Array(size).fill().map(() => Array(size).fill(1));
    const B = Array(size).fill().map(() => Array(size).fill(2));
    const C = Array(size).fill().map(() => Array(size).fill(0));

    // ❌ 低效的访问模式(按列访问,缓存不友好)
    console.time("inefficient");
    for (let i = 0; i < size; i++) {
        for (let j = 0; j < size; j++) {
            for (let k = 0; k < size; k++) {
                C[i][j] += A[i][k] * B[k][j];  // B[k][j] 跳着访问
            }
        }
    }
    console.timeEnd("inefficient");

    // ✅ 高效的访问模式(按行访问,缓存友好)
    console.time("efficient");
    for (let i = 0; i < size; i++) {
        for (let k = 0; k < size; k++) {
            const aik = A[i][k];
            for (let j = 0; j < size; j++) {
                C[i][j] += aik * B[k][j];  // B[k][j] 连续访问
            }
        }
    }
    console.timeEnd("efficient");
}

// 当 size=500 时,效率差异可能达到 10 倍以上
// matrixMultiply(500);

来源:
http://oplhc.cn

相关文章
|
5月前
|
自然语言处理 JavaScript 前端开发
初级程序员必备的十大技能之计算机基础必备(五)
教程来源 http://vbzcj.cn 本节详解代码运行本质:从C/Java的静态编译(词法→语法→语义→中间码→优化→目标码),到JS的JIT动态编译(AST→字节码→热点优化);并结合CPU 100%、内存泄漏等线上案例,贯通编译原理与实战排障。
|
5月前
|
IDE 编译器 开发工具
4轴运动控制源代码(STM32 + GRBL 1.1移植版)
4轴运动控制源代码(STM32 + GRBL 1.1移植版)
343 1
|
6月前
|
人工智能 机器人 定位技术
ICLR 2026|上海交通提出 π³,突破参考视图束缚,提升 3D 几何重建鲁棒性
π³通过全排列等变设计彻底消除固定参考视图的归纳偏置,构建了鲁棒、高效、可扩展的前馈式视觉几何重建模型,在多项核心任务上刷新 SOTA。该研究存在局限性:无法处理透明物体,重建几何细节精度不及扩散类方法,点云生成易产生网格状伪影。未来可围绕透明物体建模优化、几何细节精度提升、点云生成伪影消除等方向展开拓展研究。
746 3
|
6月前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
11070 21
|
4月前
|
存储 消息中间件 SQL
Java在分布式链路追踪系统(Jaeger)中的实现与集成
微服务架构中,一个用户请求可能跨越多达几十个服务。当出现延迟增加或错误时,难以定位具体哪个服务出问题。
233 5
|
5月前
|
人工智能 JavaScript 安全
OpenClaw部署完整指南:从环境准备到生产环境
本文详解OpenClaw部署全流程,剖析其Node.js依赖、WSL2要求、网络与权限等高门槛,并引出国产轻量替代方案BoClaw——支持一键安装、本地优先、三层安全防护与14000+技能生态,助力非专业用户快速落地AI智能体。
|
6月前
|
缓存 NoSQL 网络协议
如何为我的网站或应用集成IP归属地查询功能?
本文为网站/应用集成IP归属地查询的落地指南:强调“取对IP”是前提(仅信可信上游、严滤私网),采用“本地+Redis缓存+在线API+硬超时熔断”架构,失败自动降级至省/国家;区分展示型与风控型模型,确保可解释、可审计、可回滚,并严守隐私合规红线。(239字)
433 13
|
5月前
|
运维 监控 Linux
初级程序员必备的十大技能之基础 Linux 命令(五)
教程来源 http://xgmoi.cn/ 本节汇总Linux系统监控与管理核心命令:磁盘(df/du)、内存(free)、运行状态(uptime/ uname)、打包压缩(tar/zip)、用户权限、日志查看及速查表,覆盖运维日常高频操作,简洁实用。
|
5月前
|
程序员 API
初级程序员必备的十大技能之规范编码与团队协作(一)
教程来源 http://tmywi.cn/ 本文探讨程序员从“我能写”到“我们一起写”的成长跃迁,聚焦编码规范、代码审查、文档编写、协作沟通与工程化工具实践,助力个体迈向专业、可信赖的团队成员。
|
5月前
|
运维 Linux 程序员
初级程序员必备的十大技能之基础 Linux 命令(二)
教程来源 http://vrhyh.cn/ 本节系统介绍Linux文件内容查看与处理核心命令:`cat`快速显示/合并文件;`less`/`more`分页浏览;`head`/`tail`查看首尾及实时日志;`grep`精准搜索与过滤;`sed`流式文本替换删除;`awk`结构化字段处理;`vim`高效终端编辑。覆盖日常运维、日志分析与脚本开发必备技能。