24 篇
传统响应式依赖视口宽度,但组件常嵌套在未知容器中。CSS 容器查询让组件“感知自身宽度”。
.card { container-type: inline-size; }
@container (min-width: 400px) {
.title { font-size: 1.5rem; }
}
支持:Chrome 105+、Firefox 110+。适用于卡片、仪表盘等独立组件。
使用多阶段构建,仅复制必要产物到最终镜像:
FROM node:18 AS builder
...
RUN npm run build
FROM node:18-alpine
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/index.js"]
镜像体积从 1.2GB → 120MB。
Cache-Control: max-age=31536000(不发请求)ETag + If-None-Match(返回 304)静态资源加指纹,HTML 用 no-cache。
React.memo 避免子组件重渲染useCallback 缓存函数引用useMemo 缓存计算结果React.lazy + Suspense 代码分割闭包 = 函数 + 其词法环境。即使外部函数执行完毕,内部函数仍可访问其变量。
function makeCounter() {
let count = 0;
return () => ++count;
}
GC 会回收无引用的闭包,不会必然导致内存泄漏。
JSONB 以二进制存储,支持索引和高效查询:
CREATE INDEX idx_data ON logs USING GIN (metadata jsonb_path_ops);
SELECT * FROM logs WHERE metadata @> '{"user_id": 123}';
适合半结构化日志、配置等场景。
结合哈希表(O(1) 查找) + 双向链表(O(1) 插入/删除)实现。
操作:
get → 移至头部;
put → 更新或插入,超容删尾。
Python 可用 OrderedDict,但面试建议手写。
常见问题:
建议:使用短期 Token + Refresh Token 机制。
条件类型根据类型关系动态推导:
type NonNullable = T extends null | undefined ? never : T;
type Result = NonNullable; // string
配合 infer 可提取泛型参数,如 ReturnType。
调度器分两阶段:
可通过 nodeSelector、affinity、taints/tolerations 控制调度。
使用 Emscripten 将 C++ 编译为 WASM:
// add.cpp
int add(int a, int b) { return a + b; }
编译:emcc add.cpp -o add.js -s EXPORTED_FUNCTIONS='["_add"]'
在浏览器中调用 Module._add(2, 3),性能接近原生。
现代 SPA 推荐使用 PKCE + 授权码模式。
聚合性能关键:
$match 过滤数据$sort 前建立索引$project 中使用复杂表达式用 explain() 分析执行计划。
Hystrix 已停更,推荐 Resilience4j(轻量、函数式、支持响应式)。
CircuitBreaker cb = CircuitBreaker.ofDefaults("api");
Supplier decorated = CircuitBreaker
.decorateSupplier(cb, () -> callExternalService());
配合降级逻辑提升系统韧性。
原则:**绝不 rebase 已推送的公共分支**。
Grid 子项也可成为 grid 容器,并继承父 grid 轨道:
.parent { display: grid; grid-template-columns: repeat(4, 1fr); }
.child { display: grid; grid-template-columns: subgrid; }
解决卡片内元素与外层不对齐的问题。支持:Firefox 71+、Safari 16+、Chrome 117+。
| 方案 | 优点 | 缺点 |
|---|---|---|
| UUID | 无中心 | 无序、占空间 |
| 数据库自增 | 简单 | 单点瓶颈 |
| 雪花算法 | 有序、高性能 | 依赖时钟回拨处理 |
| Redis INCR | 简单 | 需持久化保障 |
推荐:雪花算法(如 Twitter Snowflake 或美团 Leaf)。
执行顺序:
微任务总在宏任务之间执行完。
倒排索引 = 词项 → 文档列表。
文档1: "hello world"
文档2: "hello alice"
倒排索引:
hello → [1, 2]
world → [1]
alice → [2]
支持快速全文检索,配合 TF-IDF 或 BM25 评分。
三次握手:同步双方初始序列号,防止历史连接初始化。
四次挥手:因 TCP 全双工,需分别关闭两个方向。
TIME_WAIT 状态持续 2MSL,确保最后 ACK 到达,防止旧连接数据干扰新连接。
Vite 插件基于 Rollup,但扩展了 HMR 和 SSR 钩子。
export default function myPlugin() {
return {
name: 'my-plugin',
transform(code, id) {
if (id.endsWith('.md')) return compileMarkdown(code);
}
};
}
常用钩子:configResolved, transform, handleHotUpdate。
CAP 不可兼得,实际系统通常:
注意:CAP 仅适用于网络分区场景,平时可同时满足 CA。
| 特性 | ESM | CommonJS |
|---|---|---|
| 加载时机 | 编译时 | 运行时 |
| 导出 | 静态(export) |
动态(module.exports) |
| 异步 | 支持 import() |
需 require() |
| 循环引用 | 安全(绑定 live) | 可能 undefined |
现代项目优先使用 ESM。