服务端2月24日 22:24
Cookie 的 Expires 和 Max-Age 有什么区别?## 核心结论
**Max-Age 优先于 Expires**。两者同时设置时,浏览器只认 Max-Age。Expires 是 HTTP/1.0 的产物,用绝对时间;Max-Age 是 HTTP/1.1 引入的,用相对秒数,不受客户端时钟偏差影响。现代开发应优先使用 Max-Age,仅在需要兼容 IE 时同时设置 Expires 作为降级。
## 两者的本质区别
| 维度 | Expires | Max-Age |
|------|---------|---------|
| 规范来源 | HTTP/1.0 (Netscape 草案) | HTTP/1.1 (RFC 6265) |...服务端3月1日 10:25
pnpm 如何处理 peer dependencies?与 npm 有什么不同?pnpm 通过隔离的 node_modules 结构和严格的依赖图解析,在安装阶段就检测 peer dependencies 冲突,而 npm 的扁平化结构可能让版本不匹配的 peer 依赖静默通过,直到运行时才暴露问题。
## 核心机制差异
npm 采用扁平化 node_modules,依赖会被提升(hoist),包能访问到不该访问的依赖(幽灵依赖)。peer dependencies 版本不匹配时,npm v7 之前直接忽略,v7+ 会自动安装但可能产生重复实例。
pnpm 使用 `.pnpm` 存储目录 + 符号链接的隔离结构,每个包只能访问自己声明的依赖。peer depe...服务端2月25日 21:50
WebRTC的数据通道有什么作用?如何使用它传输非媒体数据?WebRTC 数据通道(Data Channel)是 WebRTC 中与媒体通道并列的传输机制,基于 SCTP over DTLS 协议栈,在浏览器之间建立加密的点对点连接来传输任意二进制或文本数据。
## 数据通道的核心作用
**与媒体通道的区别**:媒体通道使用 SRTP 传输音视频,而数据通道使用 SCTP over DTLS 传输非媒体数据。两者共享同一个 ICE 传输层,但走不同的协议栈,互不干扰。
**相比 WebSocket 的优势**:WebSocket 需要服务器中继,数据经由服务端转发;数据通道建立后直接在两端之间传输,省去服务器中转的延迟和带宽开销。API 设...服务端2月24日 23:35
什么是 GORM,它的核心特性有哪些?## GORM 是什么
GORM 是 Go 语言中应用最广泛的 ORM 库,基于反射机制将结构体映射为数据库表,将方法调用转换为 SQL 语句。它遵循约定优于配置的原则——结构体名的蛇形复数即为表名,`ID` 字段默认为主键,`CreatedAt` / `UpdatedAt` 自动管理时间戳。
## 核心特性
- **关联关系**:支持 Has One、Has Many、Belongs To、Many To Many 四种关联,通过 `Preload` 预加载或 `Joins` 联表查询获取关联数据
- **钩子机制**:在 Create / Update / Delete / F...服务端2月28日 20:44
Shell 脚本中如何进行错误处理和调试?有哪些常用的技巧?Shell 脚本没有编译器的类型检查和异常机制,错误一旦发生往往悄无声息地传播,导致脚本在错误的状态下继续运行,产出难以排查的脏数据。所以错误处理和调试能力是区分"能跑的脚本"和"可靠脚本"的分水岭,也是面试中的高频考点。
## 错误处理的核心手段
### set 选项:让脚本在错误面前不再沉默
Shell 默认行为是"命令失败了就失败了,继续执行下一条",这在自动化场景中极其危险。`set` 选项可以从源头改变这个行为:
```bash
set -e # 任何命令返回非零退出码时,脚本立即终止
set -u # 引用未定义变量时报错退出,而非...服务端3月1日 10:22
什么是 pnpm,它与 npm 和 Yarn 有什么区别?## pnpm 是什么
pnpm(Performant npm)是 Node.js 的包管理工具,核心设计目标是通过**内容寻址存储**解决 npm/Yarn 的磁盘浪费和幽灵依赖问题。
## 存储机制:内容寻址 vs 扁平复制
npm 和 Yarn classic 采用扁平化安装:每个项目的 `node_modules` 都复制一份完整的包文件。10 个项目用 lodash,磁盘上就有 10 份副本。
pnpm 的做法不同——所有包只存一份到全局 store(通常在 `~/.local/share/pnpm/store`),项目中通过**硬链接**指向 store 中的文件:
...服务端2月28日 20:46
Shell 脚本中如何进行进程管理?如何启动、监控和终止进程?Shell 进程管理是运维和后端面试的高频考点,核心考查你对进程生命周期、信号机制和作业控制的理解。
## 进程启动
Shell 中启动进程有前台、后台和脱离终端三种方式,区别在于进程与当前 shell 的绑定关系。
### 前台与后台执行
前台执行会阻塞当前 shell,后台执行在命令末尾加 `&`,shell 立即返回控制权:
```bash
# 前台执行(阻塞 shell)
./long_task.sh
# 后台执行(shell 不阻塞)
./long_task.sh &
echo "后台进程 PID: $!"
```
`$!` 保存最近一个后台进程的 PID,是进程...服务端3月1日 10:27
pnpm 常用命令有哪些?与 npm 命令有什么区别?## 核心回答
pnpm 常用命令与 npm 高度相似,关键差异在于:`npm install <pkg>` 对应 `pnpm add <pkg>`;`npx` 对应 `pnpm dlx`;monorepo 用 `pnpm -r`(递归)和 `pnpm --filter`(按包过滤)替代 npm workspaces。但命令相似只是表象,真正的区别在于底层机制——pnpm 使用**内容寻址存储**(content-addressable store)+ **符号链接结构**,解决了 npm 的幽灵依赖和磁盘浪费问题。
**追问:为什么 pnpm 不存在幽灵依赖?**
npm 采用扁...服务端2月24日 22:59
什么是 React Query,它解决了前端开发中的哪些常见问题?React Query(现名 TanStack Query)是一个专门管理服务器状态的异步状态管理库。它解决的核心问题是:把原本散落在 useEffect + useState + 全局状态库中的数据获取逻辑,收敛到声明式的 Hook 调用中。
## 它解决的关键问题
**1. 手动管理请求状态的样板代码**
没有 React Query 时,每个请求都要写 loading、error、data 三件套:
```js
// 传统写法
const [data, setData] = useState(null);
const [loading, setLoading] = useS...服务端2月28日 22:12
如何进行 SSH 安全加固?有哪些最佳实践和安全配置建议?SSH 安全加固是运维和后端面试中的高频考点,也是生产环境必须落地的安全措施。一次配置不当的 SSH 服务,可能让整个服务器暴露在暴力破解和未授权访问的风险之下。本文从认证、网络、加密、密钥管理、监控五个层面系统讲解 SSH 安全加固方案。
## 核心原则:最小权限 + 纵深防御
SSH 安全加固不是单一配置的修改,而是从多个层面构建防线。核心思路:即使某一层被突破,还有下一层阻拦。没有任何一项配置能单独保证安全,只有组合使用才能形成有效防御体系。
## 认证层加固
### 禁用密码认证,仅允许密钥登录
密码认证是暴力破解的最大突破口。密钥认证从根本上消除了密码被猜解的风险——...