跳转至

2.7 语言理论与底层

2.6 DevOps 实践 | 首页 | 下一节: 2.8 领域专项知识


编译型 vs 解释型

  • 编译型语言(C、C++、Rust、Go):源代码先被编译器翻译为机器码(或中间码),生成可执行文件后独立运行。执行速度快,但开发-编译-运行周期较长。
  • 解释型语言(Python、Ruby、传统 JavaScript):由解释器逐行读取并执行源代码,无需编译步骤。开发反馈快,但执行速度慢于编译型。
  • 混合型(Java、C#):先编译为中间码(bytecode/IL),再由虚拟机(JVM/CLR)通过 JIT(Just-In-Time)编译为机器码。兼顾可移植性和性能。

类型系统

静态 vs 动态指类型检查的时机强 vs 弱指类型规则的严格程度。两个维度构成四象限:

静态检查(编译时) 动态检查(运行时)
强类型 Java, C#, Rust, TypeScript Python, Ruby, Elixir
弱类型 C, C++ JavaScript, PHP, Perl

具体含义: - 静态类型:类型在编译时检查。TypeScript 中 function foo(a: number) 在编译时阻止传入字符串。 - 动态类型:类型在运行时检查。PHP 中 function foo($a) 只有执行时才知道类型。 - 强类型从不隐式转换。Python 中 1 + "2" 抛出 TypeError。 - 弱类型:编译器/解释器尽力自动转换。JavaScript 中 1 + "2" 返回 "12"(自动将数字转字符串拼接)。

注意:许多语言在象限中的位置不是绝对的。C 是静态弱类型(编译时检查但允许隐式 void* 转换),Python 是动态强类型(运行时检查但绝不允许隐式类型自动转换)。

正则表达式(Regex)

正则表达式是一种描述字符串匹配模式的语法,几乎所有编程语言原生支持。核心元素: - 字面字符:abc 匹配精确字符串 "abc"。 - 字符类:[a-z] 匹配任一小写字母,\d 匹配任意数字。 - 量词:* 零次或多次、+ 一次或多次、? 零次或一次、{n,m} n 到 m 次。 - 锚点:^ 行首、$ 行尾、\b 单词边界。 - 分组与捕获:(pattern) 提取匹配的子串。 - 常用场景:表单验证、日志解析、数据提取、搜索替换。

懒加载(Lazy Loading)

推迟对象的创建、数据的加载或资源的初始化,直到真正需要使用时才执行。核心价值: - 减少启动时间:只加载首屏需要的内容。 - 节省内存:不使用时根本不加载。 - 改善用户体验:按需加载,避免长时间等待。 - 典型实现:前端路由级别的代码拆分、ORM 的延迟加载关联、图片的滚动加载、虚拟列表。

性能剖析(Profiling)

性能剖析是动态程序分析的一种形式,测量程序的运行时行为——时间花在哪、内存用在哪、函数调用频率如何。

三种类型: - Flat Profiler:列出每个函数的总耗时,不区分调用者。 - Call-Graph Profiler:展示调用链和每个函数在特定调用上下文中的耗时。 - Input-Sensitive Profiler:关联性能指标与输入特征(输入大小、输入值)。

两种数据采集方式: - 事件型(Event-based):在每个函数入口/出口插入钩子,精确但开销大、可能产生观察者效应。 - 统计型(Statistical/Sampling):定时采样调用栈,近似但有统计意义,开销极小、几乎不影响目标程序行为。

原则:先测量,再优化。不基于猜测做性能优化。

并发编程核心概念

  • 竞态条件(Race Condition):多个线程/进程同时访问共享资源,且最终结果依赖于执行顺序。最危险的并发 bug——难以复现、难以调试。对策:锁、原子操作、不可变数据结构。
  • 死锁(Deadlock):线程 A 持有锁 1 等待锁 2,线程 B 持有锁 2 等待锁 1——互相等待,永远阻塞。四个必要条件:互斥、持有并等待、不可抢占、循环等待。对策:统一加锁顺序、超时机制、死锁检测。
  • 互斥(Mutual Exclusion):确保同一时刻只有一个线程访问临界区。实现方式:互斥锁(Mutex)、信号量(Semaphore)、读写锁(Read-Write Lock)。粒度越细并发度越高,但复杂度也越高。

来源

  • Cameron Pavey — Understanding Types; Static vs Dynamic, Strong vs Weak: https://medium.com/@cpave3/understanding-types-static-vs-dynamic-strong-vs-weak-88a4e1f0ed5f
  • Wikipedia — Profiling (computer programming): https://en.wikipedia.org/wiki/Profiling_(computer_programming)

2.6 DevOps 实践 | 首页 | 下一节: 2.8 领域专项知识