服务端2月24日 23:37
GORM 中的关联关系有哪些类型?GORM 支持四种核心关联关系:Belongs To(属于)、Has One(有一个)、Has Many(有多个)、Many To Many(多对多),另外还支持多态关联。面试中最常考的是四种基本关系的区别与预加载机制。
## 一张表记住四种关系
| 关系类型 | 方向 | 外键位置 | 典型场景 |
|---------|------|---------|---------|
| Belongs To | 子→父 | 子模型中 | 用户属于某个部门 |
| Has One | 父→子 | 关联模型中 | 用户有一张身份证 |
| Has Many | 父→子(多个) | 关联模型中...服务端2月24日 23:36
GORM 中 First、Find、Where 等常用查询方法有哪些区别?GORM 是 Go 语言中最流行的 ORM 库,查询方法是日常开发中使用频率最高的 API。掌握 First、Find、Where 等方法的区别和使用场景,是 GORM 面试的核心考点。
## 检索单条记录:First、Last、Take 的区别
这三种方法都会自动添加 `LIMIT 1`,且记录不存在时返回 `ErrRecordNotFound`,但生成的 SQL 不同:
| 方法 | 排序方式 | 生成 SQL 示例 |
|------|---------|--------------|
| First | 主键升序 | SELECT * FROM users ORDER BY...服务端2月24日 23:44
GORM 中如何使用原生 SQL?当 GORM 的链式 API 无法满足复杂查询需求时,需要通过原生 SQL 直接操作数据库。GORM 提供了 Exec 和 Raw 两个核心方法,分别对应"不返回数据"和"返回数据"两种场景。
## Exec 与 Raw 的本质区别
这是面试中最常被追问的知识点:**Exec 用于执行不返回行的语句(INSERT/UPDATE/DELETE/DDL),Raw 用于执行需要返回结果集的查询(SELECT)**。两者都支持参数化占位符,但返回值处理方式不同:
- `Exec` 返回的 `*gorm.DB` 可通过 `RowsAffected` 获取影响行数
- `Raw` 必须配合 `...服务端2月17日 13:01
Cypress 是什么?核心概念与主要特点有哪些?Cypress 是一个基于 JavaScript 的现代前端端到端(E2E)测试框架,直接在浏览器内运行测试代码,不依赖 WebDriver 等外部驱动。它由 Cypress.io 团队开发维护,以自动等待、时间旅行调试和实时重载三大特性著称,2026 年周 npm 下载量稳定在 650 万以上,仍是前端测试领域的主流选择之一。
## 架构原理:为什么 Cypress 比 Selenium 快
Cypress 和 Selenium 的根本区别在于运行架构。Selenium 通过 WebDriver 协议在浏览器外部发送指令,每条命令都需要经过 HTTP 往返;Cypress 则将测试...服务端2月17日 13:05
Cypress 的自动等待机制是如何工作的?Cypress 区别于 Selenium 等传统测试框架的核心能力之一,就是在执行每条命令时自动等待目标元素就绪,而不需要开发者手动插入 `wait()` 或 `sleep()`。理解这套自动等待(包括重试)机制的运行方式,是写出稳定 E2E 测试的前提。
## 自动等待解决了什么问题
前端测试中,异步操作无处不在——DOM 渲染需要时间,网络请求需要等待响应,CSS 动画需要播放完毕。传统做法是手动加等待时间,但固定等待既浪费时间又不可靠:等短了容易 flaky,等长了拖慢整个测试套件。
Cypress 的思路是**不猜时间,而是反复检查条件**。当执行一条命令时,Cypress...服务端3月1日 12:04
pnpm 如何处理依赖版本冲突?## pnpm 如何处理依赖版本冲突?
你刚用 pnpm 装完依赖,终端却飘红一片:ERR_PNPM_PEER_DEP_ISSUE。或者更隐蔽——项目跑起来了,但某个库拿到的不是它期望的依赖版本,线上偶发一个幽灵 bug。
这些都是依赖版本冲突的典型表现。pnpm 的严格隔离机制让冲突更容易暴露,但也给了你更精确的解决手段。这篇文章把 pnpm 处理版本冲突的机制和实战解法一次性讲透。
### 冲突是怎么产生的?
一个项目同时依赖 package-a 和 package-b,它们各自要求不同版本的 lodash:
```json
{
"dependencies": {
...服务端3月1日 10:22
pnpm 的 node_modules 结构是怎样的?为什么这样设计?## 核心答案
pnpm 的 node_modules 采用**符号链接 + 硬链接**的混合结构,由三层组成:
1. **node_modules/[package]** — 符号链接层,只暴露直接依赖
2. **node_modules/.pnpm/[package@version]/node_modules/** — 实际包内容,硬链接到全局 store
3. **全局 store(~/.local/share/pnpm-store)** — 内容寻址存储,所有项目共享
这样设计的核心目标是:**消灭幽灵依赖 + 节省磁盘空间 + 保持 Node.js 模块解析兼容**。
...服务端3月1日 10:29
pnpm 的性能优势体现在哪些方面?与 npm/Yarn 对比如何?pnpm 的性能优势集中在三个层面:安装速度、磁盘占用和依赖安全性。下面逐项拆解,并与 npm、Yarn 做横向对比。
## 安装速度:硬链接让缓存安装接近即时
pnpm 在有缓存时的安装速度远超 npm 和 Yarn,核心原因是硬链接机制——同一台机器上只要某个包的版本曾经下载过,后续项目安装时直接从全局 store 创建硬链接,无需重复拷贝文件。
| 场景 | npm | Yarn Berry (PnP) | pnpm |
|------|-----|------------------|------|
| 冷安装(无缓存) | 45-55s | 30-40s | 25-35s...服务端3月1日 10:26
pnpm 的全局 store 是什么?如何管理和清理?pnpm 之所以能在磁盘占用和安装速度上远超 npm 和 yarn,核心就在于其全局 store 机制。理解 store 的原理,不仅能帮你排查依赖问题,还能在日常开发中做出更好的决策。
## 全局 store 是什么
全局 store 是 pnpm 在本地维护的一个集中式依赖仓库。所有项目安装的包,其文件都只存放在 store 中一份,项目通过硬链接(hard link)引用这些文件,而非复制副本。
这意味着:10 个项目都用 lodash@4.17.21,磁盘上只占一份 lodash 的空间。
## Store 的位置与结构
默认情况下,store 位于用户主目录下:
`...服务端3月1日 12:01
pnpm 的 .npmrc 配置有哪些常用选项?pnpm 通过 `.npmrc` 文件管理配置,支持项目级、用户级、全局级三个层级,项目级优先级最高。掌握常用配置不仅影响日常开发效率,也是 Monorepo 和 CI/CD 环境的必备知识。
## 注册表与镜像源
最基础的配置是切换包下载源。国内开发者在项目根目录 `.npmrc` 中配置淘宝镜像几乎是标配:
```ini
registry=https://registry.npmmirror.com/
```
企业私有包则通过作用域隔离:
```ini
@mycompany:registry=https://npm.mycompany.com/
```
这样 `@myco...