服务端2月18日 23:42
Kafka 为什么能够实现高吞吐量?## Kafka 为什么能够实现高吞吐量?
Kafka 是目前业界吞吐量最高的消息队列之一,单机每秒可处理数十万条消息。这并非依赖某种银弹技术,而是多个设计决策协同作用的结果。理解这些原理,不仅能帮你在面试中给出有层次的回答,更能指导实际场景中的性能调优。
## 顺序写:磁盘也能很快
很多人对磁盘的性能认知停留在"慢",但这只对随机读写成立。顺序写磁盘的速度可以达到 600MB/s 以上,甚至超过随机写内存的效率。
Kafka 的做法很直接:所有消息以追加(append)的方式写入日志文件,永远不修改已有数据。Consumer 也按偏移量顺序读取,整个读写路径上几乎没有随机 I/...服务端2月18日 23:40
Kafka 如何保证消息的顺序性?## Kafka 在 Partition 级别保证消息顺序,不保证 Topic 级别的全局顺序
Kafka 的顺序性保证是面试高频考点。核心结论:**Kafka 只在同一个 Partition 内保证消息的写入和消费顺序一致,跨 Partition 没有顺序保证。** 如果业务需要严格顺序,必须把相关消息路由到同一个 Partition。
---
### 一、Partition 内为什么有序
每个 Partition 本质上是一个追加写入的日志(append-only log),每条消息分配一个单调递增的 offset。Consumer 按 offset 顺序拉取,因此分区内天然...服务端2月21日 12:26
Nginx 如何处理动态内容?有哪些配置方式?## Nginx 如何处理动态内容?有哪些配置方式?
Nginx 本身不执行动态脚本,它的角色是**请求分发器**——根据协议类型将动态请求转给后端应用服务器处理,自己只负责连接管理、缓冲、压缩和缓存等"外围工作"。常见的转发协议有四种:FastCGI、uWSGI、SCGI 和 HTTP 反向代理。
## 核心答案:四种协议的区别与选型
| 协议 | 典型后端 | 通信方式 | 适用场景 |
|------|---------|---------|---------|
| FastCGI | PHP-FPM | Unix socket / TCP | PHP 项目,最常见 |
| ...前端2月19日 18:55
RxJS 中 Hot Observable 和 Cold Observable 有什么区别?## 先搞清楚一个核心:数据生产者在哪
Cold 和 Hot 的本质区别只有一个:**数据生产者(Producer)是在订阅时创建,还是在 Observable 创建时就已经存在?**
- **Cold Observable**:生产者在订阅时才创建,每个订阅者拿到独立的生产者,这就是"单播"(Unicast)
- **Hot Observable**:生产者在 Observable 创建时就已经存在,所有订阅者共享同一个生产者,这就是"多播"(Multicast)
理解了这一点,后面所有特性都能推导出来,不需要死记硬背。
## Cold Observable:按需执行,人手一份...前端2月21日 15:15
Prettier 与其他代码格式化工具有什么区别?如何选择?## Prettier 和 ESLint 有什么本质区别?
Prettier 是代码**格式化工具**,ESLint 是代码**质量检查工具**,二者不是替代关系而是互补关系。
核心区别在于工作原理:Prettier 将代码解析为 AST(抽象语法树),然后按照自己的规则重新输出,保证同样的输入永远得到同样的输出;ESLint 则基于规则引擎逐行扫描代码,检测潜在的错误和反模式。
实际项目中标准做法是两者结合:用 `eslint-config-prettier` 关闭 ESLint 中与格式化重叠的规则,让 Prettier 完全负责格式化(缩进、换行、引号风格),ESLint 专...服务端2月21日 12:24
Nginx 如何配置虚拟主机?有哪些配置方式?## Nginx 如何配置虚拟主机?有哪些配置方式?
虚拟主机(Virtual Host)是 Nginx 最核心的能力之一——一台服务器、一个 Nginx 进程,就能同时服务几十个甚至上百个网站。面试中这道题考察的不只是"怎么配",更是你对其背后路由机制的理解深度。
Nginx 虚拟主机的本质就是 `server` 块。每个 `server` 块是一个独立的虚拟主机,Nginx 根据请求的域名、端口或 IP 地址,将请求路由到匹配的 `server` 块处理。三个关键指令决定了路由规则:
- `listen`:监听的地址和端口,如 `listen 80` 或 `listen 443...前端2月21日 15:04
如何在 CI/CD 中集成 Prettier 做代码格式检查?## 为什么要用 Prettier 拦截代码格式问题
代码格式不一致是团队协作中最容易引发无意义争论的问题。Prettier 通过"零配置强制统一"的思路消除了这类争议,但仅靠开发者自觉运行 Prettier 并不可靠——有人会忘记格式化,有人会选择性忽略。把 Prettier 检查嵌入 CI/CD 流水线,是保证代码库格式一致性的最后防线。
推荐的两层防护策略:本地 Git Hook 做即时拦截 + CI 流水线做兜底检查。前者让开发者在提交前就能发现问题,后者防止绕过 Hook 的代码进入主分支。
## 本地拦截:Git Hooks 配置
### Husky + lint-s...服务端2月21日 12:14
Nginx 的 location 指令如何匹配?优先级是什么?## Nginx 的 location 指令如何匹配?优先级是什么?
location 是 Nginx 中最核心的指令之一,它决定了一个请求由哪个配置块来处理。理解它的匹配规则和优先级,不仅是面试高频考点,更是排查 Nginx 配置问题的基本功。
### location 的四种匹配方式
location 指令的语法:`location [=|~|~*|^~] uri { ... }`
修饰符不同,匹配行为完全不同:
| 修饰符 | 匹配方式 | 匹配后是否继续搜索 |
|--------|---------|-------------------|
| `=` | 精确匹配 ...服务端2月21日 12:15
Nginx 如何实现缓存?缓存策略怎么配才能防击穿?## Nginx 如何实现缓存?如何配置缓存策略?
Nginx 的缓存能力是后端服务性能优化的关键手段。面试中常从"Nginx 有哪几种缓存""proxy_cache 和 fastcgi_cache 怎么选""如何防止缓存击穿"这几个角度考察,理解原理比背配置更重要。
## Nginx 缓存的三大层次
Nginx 缓存并不是单一机制,而是分布在请求链路的不同位置:
1. **浏览器缓存**:通过响应头(`Cache-Control`、`Expires`)让客户端自行缓存,Nginx 只负责下发头信息
2. **代理缓存(proxy_cache)**:Nginx 作为反向代理时,缓...前端2月21日 15:05
Prettier 命令行工具有哪些常用命令和选项?## Prettier 命令行工具有哪些常用命令和选项?
Prettier 的命令行工具是日常开发中格式化代码的核心手段,掌握常用命令和关键选项不仅能提升开发效率,也是前端工程化面试中的高频考点。
### 核心命令
**格式化文件:`--write`**
`--write` 是最常用的选项,直接修改文件为格式化后的内容:
```bash
# 格式化单个文件
npx prettier --write src/index.ts
# 格式化整个项目
npx prettier --write .
```
面试追问:`--write` 会先写入临时文件再原子替换原文件,避免写入中断导...