返回分类

全栈基础

41 篇文章,按发布时间排列。

全栈基础

1.1 shell,终端(Terminal),CLI

在电脑上验证这些概念,可以试试以下操作(以 Mac 为例): 输入 ps -p $$ -o comm=。$$ 是当前 Shell 的进程号。

全栈基础

1.2 计算机之间的通信:网络

计算机网络的核心目标很朴素:让不同设备上的程序能够交换数据。 两台电脑用一根线直接相连,是网络;家里的手机、电脑和路由器组成的是局域网;大量局域网再通过运营商和骨干网络互联,就形成了互联网(Internet)。

全栈基础

1.3 操作系统

操作系统(Operating System,OS)位于应用程序与硬件之间。它有两个核心角色: 应用程序想读取 SSD 上的一段数据,并不需要知道 SSD 控制器如何发出电信号。它只需请求“打开这个路径下的文件并读取 4 KB”。操作系统

全栈基础

1.4 程序是怎样运行的

同一程序可以同时启动多个进程,每个进程拥有独立状态。修改磁盘上的程序文件,也不会自动改变已经加载到内存中的旧进程。 不同语言采用不同组合,没有“编译型语言”和“解释型语言”永远不变的二分法。

全栈基础

1.5 编程的基本模型

程序可以看成:接收输入,在一组规则约束下改变状态,产生输出或副作用。 一个订单程序的输入可以是商品与用户,状态包括库存和订单记录,输出可以是响应页面,副作用则包括写数据库和发送消息。

全栈基础

1.6 常用数据结构与复杂度

同一批数据可以用不同方式组织,而组织方式决定某类操作是否容易。 数据结构不是为了炫技,而是让系统经常执行的操作具有合适成本。

全栈基础

2.0 使用 Git 管理代码

没有版本控制时,项目目录很容易变成: 这种方式的问题不仅是文件名混乱,还包括:

全栈基础

2.1 前端是什么

前端是直接运行在用户设备上、负责呈现信息并接收交互的应用部分。 在 Web 开发中,它通常指运行在浏览器里的 HTML、CSS、JavaScript 及其资源。 前端不只是“美工”或“写页面”,它还要处理:

全栈基础

2.10 TypeScript:类型系统解决了什么

TypeScript 在 JavaScript 之上加入静态类型系统和相关语法。工具在运行前检查代码,再生成 JavaScript: TypeScript 的主要价值:

全栈基础

2.11 浏览器存储、缓存与安全边界

把缓存当唯一数据源,会在浏览器清理空间后丢失用户成果;把所有服务器数据永久复制到客户端,又会制造过期、隐私和一致性问题。 设计前先回答:哪一份是权威来源?数据丢失是否可接受?何时过期?是否含敏感信息?

全栈基础

2.2 前端模块化

小页面可以把所有代码放在一个 <script 里。项目变大后,这种方式会迅速遇到问题: 模块化是把系统拆成边界清晰、职责聚焦、通过明确接口协作的单元。 它的目标不是“让文件变多”,而是管理复杂度。

全栈基础

2.3 前端构建

开发时写的是源码(source code),最终部署的是构建产物(build artifacts)。把前者转换为后者的一组自动化处理,就叫构建。 简单的 HTML、CSS、JavaScript 可以不经过构建直接在浏览器运行。但现代项目

全栈基础

2.4 什么是框架?前端框架有哪些?为什么react不是框架?

开发软件时,我们不会从像素绘制、网络报文和数据结构全部手写。别人封装好的代码大致可以分成几种层次: 边界并非数学定理。同一个项目可以既自称框架,又允许像库一样渐进使用。比标签更重要的是知道:它替你决定了哪些事,你还必须自己选择哪些事。

全栈基础

2.5 把网页部署到公网上

localhost 或 127.0.0.1 指当前这台设备自身。开发服务器监听在这里时,请求不会离开你的电脑,互联网上的其他人自然无法访问。 让网站公开可用,至少要解决:

全栈基础

2.6 HTML:内容、结构与语义

HTML(HyperText Markup Language)用元素给内容增加结构和含义: 这里不是在告诉浏览器“第一行用 32 像素粗体”,而是在声明:这是一篇文章、一个一级标题和一个段落。视觉外观主要由 CSS 决定。

全栈基础

2.7 CSS:布局、响应式与渲染

CSS(Cascading Style Sheets)描述元素在不同设备、内容和状态下如何呈现。浏览器综合: 好的 CSS 通常描述关系,例如“卡片至少 16rem,能放几个就放几个”,而不是给每个元素写死屏幕坐标。

全栈基础

2.8 JavaScript:语言核心

JavaScript 是 ECMAScript 标准定义的编程语言。浏览器提供 DOM、Fetch、定时器、Storage 等 Web API;Node.js 则提供文件、进程和服务端网络 API。 Array.prototype.ma

全栈基础

2.9 异步、事件循环与 Promise

网络、磁盘和用户输入的速度远慢于 CPU。如果程序发出请求后原地占住主线程等待,页面会无法点击、滚动或绘制。 异步的核心是:发起一个暂时不能立即完成的操作,把继续执行所需的信息保存下来;操作完成后,再安排后续代码运行。

全栈基础

3.0 什么是 API?后端是为了什么?

API 是 Application Programming Interface(应用程序编程接口)。它规定一段软件如何请求另一段软件的能力,以及对方会如何回应。 API 的关键不是“联网”,而是接口契约:

全栈基础

3.1 HTTP

HTTP(Hypertext Transfer Protocol)是 Web 的应用层协议。它规定客户端和服务器如何组织、发送和解释一条条消息。 客户端不一定是浏览器,也可以是手机应用、命令行工具或另一台服务器。服务器也不一定是一台物理

全栈基础

3.2 后端框架做了哪些事?

假设我们只拿到操作系统提供的网络 socket。为了做一个可用的 Web API,至少需要自己处理: 这些工作并非每个项目的独特价值。后端框架把反复出现的基础设施问题整理成统一生命周期、扩展点和默认约定,让开发者聚焦业务规则。

全栈基础

3.4 身份认证与权限控制

登录成功只是建立身份上下文,授权仍要在每次受保护操作中判断。 授权策略不应只有 isAdmin 一个布尔值。真实规则可能与组织、租户、资源所有者、成员关系、数据敏感级别、时间和审批状态有关。

全栈基础

3.5 Cookie、Session、JWT 与 OAuth

Cookie 可以携带 Session ID,也可以携带其他偏好;Session ID 是 token,但不必是 JWT;JWT 可以放 Cookie,也可以放 Authorization 头;OAuth access token 也不

全栈基础

3.6 Web 安全基础

工程安全的目标是:在明确成本和场景下,降低攻击成功概率、限制影响范围、尽快发现问题并能够恢复。 安全措施也可能冲突:详细日志有助调查,却可能泄露隐私;更严格验证提高安全,却可能让账户恢复困难。需要明确取舍,而不是堆叠口号。

全栈基础

3.7 WebSocket、SSE 与实时通信

“实时”不是毫秒越小越好,而是业务能接受的最大延迟: 长连接会增加服务器连接数、状态、部署和恢复复杂度。如果每分钟更新一次,5~15 秒轮询可能比维护 WebSocket 更可靠、更便宜。

全栈基础

4.0 数据库是什么

日常交流中,“数据库”常常混指三件事: 应用通常不直接修改磁盘上的数据库文件,而是向 DBMS 发出命令。DBMS 负责查找、修改、并发控制、权限、持久化和故障恢复。

全栈基础

4.1 SQL 与关系模型

关系模型把数据表示为一组关系(relation)。在工程中,关系通常表现为表: enrollments 表表达“用户参加课程”这段关系。它让用户和课程可以各自独立存在,又能建立多对多联系。

全栈基础

4.2 表、主键、外键与数据建模

一张表不是某个页面的字段集合。页面会改版,数据模型应该表达相对稳定的业务事实。 好的模型不仅能保存当前页面需要展示的内容,还应尽量阻止不可能或无效的状态。

全栈基础

4.3 索引为什么能加速查询

假设 orders 表有一亿行: 如果没有可用索引,数据库可能只能从头到尾检查数据页,这叫顺序扫描(sequential scan)或全表扫描。复杂度直觉接近 O(n):数据翻倍,需要检查的内容也大致翻倍。

全栈基础

4.4 事务、并发与隔离级别

如果第一步成功后服务崩溃,钱就凭空少了。事务让这两步组成一个整体: 若中途发现错误,可以 ROLLBACK。不过还要检查第一条更新实际影响了一行,否则余额不足时也可能继续给对方加钱。

全栈基础

4.5 Redis、缓存与数据一致性

Redis 把常用数据放在内存中,并通过网络提供一组针对数据结构的原子操作。它的价值不只是 key - value,还在于服务端理解值的结构: 例如排行榜不必每次把所有分数取回应用排序:

全栈基础

4.6 NoSQL 什么时候有价值

NoSQL 更接近“Not Only SQL”:它泛指不以传统关系模型作为唯一核心的数据系统。这个标签下面的产品差异极大: 因此,真正有意义的问题不是“SQL 还是 NoSQL”,而是:

全栈基础

5.0 测试的层次

软件几乎不可能通过有限测试证明“绝对没有错误”。测试真正提供的是证据: 测试也是一种可执行的行为说明。例如“库存为 0 时不能下单”比“下单函数应该正确”更具体,也更能指导实现。

全栈基础

5.1 调试与系统化排错

每一步都应该让可能原因变少。若一次改了五处,即使问题消失,也很难知道真正原因,甚至可能埋下新问题。 “网站打不开”信息太少。更好的描述是:

全栈基础

5.2 日志、指标与链路追踪

服务器进程仍在运行,不代表用户可以完成支付;CPU 正常,也不代表查询结果正确。 监控(monitoring)通常针对已知问题收集数据并设置告警,例如“5xx 比例超过 2%”。

全栈基础

6.0 Docker 与容器化

容器不是一台缩小版实体电脑。它本质上仍是宿主机上的进程,只是操作系统给它提供了隔离视图和资源边界: Linux 容器共享宿主机内核,所以启动快、额外开销较小。共享内核也意味着它的隔离边界通常不同于完整虚拟机。

全栈基础

6.1 CI/CD 与可靠发布

软件事故常不是因为系统从未工作,而是因为一次变更破坏了原有行为。CI/CD 把构建、检查、发布和验证变成可重复流程,缩短从修改到反馈的距离。 开发者频繁把小变更合入共享主线,每次自动构建和测试,尽早发现冲突。

全栈基础

6.2 扩容、负载均衡与高可用

“性能不够”可能指完全不同的问题: 扩容前先用 指标与追踪 找到饱和点。否则可能扩了 Web 服务器,真正瓶颈却仍是只有 50 个连接的数据库。