前端2月21日 15:15
如何在 Monorepo 项目中配置和使用 Prettier?## 核心答案
在 Monorepo 中配置 Prettier,关键是**统一配置 + 分包覆盖 + 工具链集成**三步走:根目录放一份基础 `.prettierrc` 作为全局基准,通过共享配置包 `@org/prettier-config` 让各子项目继承,再用 `overrides` 按包定制差异规则,最后配合 Husky + lint-staged 在提交时自动格式化、Turborepo/Nx 在 CI 层做缓存检查。
## 根目录统一配置
最简单的方式是在 monorepo 根目录创建 `.prettierrc`:
```json
{
"semi": true,
...前端2月21日 15:04
Prettier 与 ESLint 有什么区别?如何协作使用?## Prettier 与 ESLint 有什么区别?如何协作使用?
前端项目中,Prettier 和 ESLint 是最常搭配使用的两个工具,但它们的职责完全不同。理解各自的定位,才能正确配置和协作使用。
### Prettier 和 ESLint 各自负责什么
**Prettier 是代码格式化工具**,只关心代码长什么样:
- 统一缩进、引号、分号、换行等风格
- 解析代码生成 AST 后重新输出,确保格式完全一致
- 配置项很少(约20个),设计理念是"别吵了,就用这个"
- 支持 JS/TS/CSS/HTML/JSON/Markdown 等多种语言
**ESLint ...服务端2月21日 12:20
Nginx 如何实现访问控制?有哪些访问控制方法?## Nginx 如何实现访问控制?有哪些访问控制方法?
Nginx 的访问控制是后端面试高频考点,核心思路是"在反向代理层拦截非法请求,减轻后端压力"。主要方法有五种:**IP 黑白名单**、**HTTP 基本认证**、**请求方法限制**、**基于请求头的鉴权**、**地理/时间条件控制**,实战中往往组合使用。下面逐一拆解原理和配置要点。
### 一、IP 黑白名单:最基础的网络层控制
Nginx 通过 `allow` / `deny` 指令按 IP 或 CIDR 段做访问控制,规则从上到下依次匹配,命中即生效:
```nginx
location /admin {
...服务端2月21日 12:18
Nginx 如何实现限流?有哪些限流策略?## Nginx 如何实现限流?有哪些限流策略?
Nginx 限流的核心思路是控制单位时间内的请求量或并发连接数,防止后端服务被流量打垮。面试中这道题主要考察三个层面:你知道哪些限流模块、你理解底层算法吗、你在生产环境怎么用。
### 限流的两种基本方式
Nginx 提供两大限流模块:
- **`limit_req`**:限制请求速率,控制单位时间内允许的请求数
- **`limit_conn`**:限制并发连接数,控制同一时刻的 TCP 连接数
两者的区别在于粒度——`limit_req` 关注的是请求频率(每秒多少个请求),`limit_conn` 关注的是连接数(同时存在...服务端2月19日 13:31
Redis 事务、Lua 脚本和分布式锁的实现原理和使用场景是什么?Redis 事务、Lua 脚本和分布式锁是 Redis 面试中出现频率最高的三个高级特性,很多候选人只能说出命令用法,却讲不清背后的原理和边界,面试官一追问就卡壳。下面逐一拆解。
## Redis 事务的原理与局限
Redis 事务通过 MULTI、EXEC、DISCARD、WATCH 四个命令协作完成。MULTI 开启事务后,后续命令进入队列而非立即执行;EXEC 一次性提交队列中的所有命令;DISCARD 放弃事务;WATCH 实现乐观锁,监控 key 是否在事务提交前被修改。
```bash
WATCH balance
MULTI
DECRBY balance 100
INC...前端2月19日 14:11
Puppeteer 性能优化有哪些核心策略?Puppeteer 在爬虫和自动化测试场景下,性能瓶颈主要来自 Chromium 的资源消耗——每次启动一个浏览器实例就要占 50-100MB 内存,每个 Page 再加 30-80MB,而页面加载时的网络 I/O 和 DOM 渲染又是时间上的最大开销。理解哪些环节最耗资源,才能对症下药。核心优化方向有三个:减少浏览器开销、降低页面加载成本、合理管理并发与内存。
## 浏览器启动与实例管理
每次 `puppeteer.launch()` 都会启动一个完整的 Chromium 进程,开销约 50-100MB 内存。批量任务中复用浏览器实例是最基本也最有效的优化:
```javascr...前端2月19日 14:07
Puppeteer 如何实现页面截图与 PDF 生成?## 核心答案
Puppeteer 通过 `page.screenshot()` 和 `page.pdf()` 两个核心方法实现截图与 PDF 生成。截图支持全页、元素级别、裁剪区域等多种模式,可输出 PNG/JPEG 格式;PDF 生成基于 Chrome 的打印渲染引擎,支持自定义纸张、边距、页眉页脚等配置。两者均依赖 Headless Chrome 的渲染能力,PDF 生成仅支持无头模式。
## 截图 API 详解
### page.screenshot() 的关键参数
`screenshot` 方法接受一个可选配置对象,以下参数在实际开发中使用频率最高:
- **path...前端2月19日 14:05
什么是 Puppeteer?核心原理和实战场景有哪些?## 什么是 Puppeteer?
Puppeteer 是 Google Chrome 团队开发的 Node.js 库,通过 Chrome DevTools 协议(CDP)提供高级 API 来控制无头或有头 Chrome/Chromium 浏览器。简单说,它让你用代码驱动浏览器完成截图、爬虫、自动化测试等操作,是前端工程师最常接触的浏览器自动化工具之一。
## 核心架构
Puppeteer 的 API 围绕几个核心对象组织,理解它们的层级关系是掌握 Puppeteer 的基础:
- **Browser**:浏览器实例,通过 `puppeteer.launch()` 创建,是所有操...服务端2月19日 14:06
Puppeteer 如何实现网络请求拦截?有哪些实际应用场景?Puppeteer 通过 CDP(Chrome DevTools Protocol)提供的 Network 域能力实现请求拦截,核心 API 是 `page.setRequestInterception(true)`。启用后,每个请求都会被暂停,必须手动调用 `continue()`、`abort()` 或 `respond()` 才能放行。这一机制在爬虫加速、接口 Mock、安全测试等场景中非常实用。
## 启用请求拦截的基本方式
```javascript
const puppeteer = require("puppeteer");
(async () => {
cons...服务端2月19日 13:48
Redis 与 MySQL、MongoDB、Memcached 有什么区别?如何选择?Redis、MySQL、MongoDB、Memcached 是后端开发中最常用的四种数据存储方案,面试中经常被放在一起考察。它们的设计目标完全不同,理解本质差异才能做出正确的技术选型。
## 核心区别:一张表看懂
| 维度 | Redis | MySQL | MongoDB | Memcached |
|------|-------|-------|---------|-----------|
| 存储介质 | 内存为主,可持久化 | 磁盘为主 | 磁盘(内存映射) | 纯内存 |
| 数据模型 | Key-Value + 多种数据结构 | 关系型表 | 文档型(BSON) | Ke...