前端2月19日 18:54
RxJS 中 switchMap、mergeMap、concatMap 该怎么选?switchMap、mergeMap、concatMap 都是把外层值映射成内部 Observable,再把结果摊平,但它们处理“新任务来了,旧任务怎么办”的策略不同。switchMap 会取消旧任务,只要最新结果;mergeMap 会并发执行,所有结果都要;concatMap 会排队,一个完成后再做下一个。
## 追问
### 为什么搜索框通常用 switchMap?
用户连续输入时,旧关键词请求已经没有展示价值。switchMap 会退订上一次内部流,避免慢请求晚返回覆盖新结果。
### mergeMap 有什么风险?
mergeMap 默认不限制并发,外层值很多时会同时打出大量...前端2月19日 18:58
RxJS 6 升级到 RxJS 7 时要注意哪些变化?RxJS 7 不是把 RxJS 6 推倒重来,而是在保持 pipe 操作符模型的基础上,重点修了类型、弃用 API、Promise 转换和多播写法。项目从 6 升到 7,通常不用大面积重写业务流,但要重点检查 throwError、toPromise、combineLatest/concat/merge 的静态调用、shareReplay 配置,以及 TypeScript 版本和严格类型报错。
## 追问
### 最大的破坏性变化是什么?
toPromise 被废弃,应该改成 firstValueFrom 或 lastValueFrom。前者拿第一个值后退订,后者等流 complete...服务端2月19日 19:11
RxJS 在 Angular 项目中通常怎么用?在 Angular 里,RxJS 主要用来处理会随时间变化的数据:HTTP 请求、路由参数、响应式表单、组件事件和应用状态。HttpClient 返回 Observable,路由的 paramMap、表单的 valueChanges 也是 Observable,所以 Angular 项目不是额外引入 RxJS,而是日常开发天然会碰到它。
## 追问
### HTTP 为什么返回 Observable 而不是 Promise?
Observable 可以取消、组合,也能和表单、路由这些流保持同一套写法。单次 HTTP 看起来和 Promise 差不多,但需要重试、超时、取消旧请求时更顺手...前端2月19日 19:12
RxJS 性能优化应该从哪些地方下手?RxJS 性能优化先看三件事:有没有重复订阅,有没有处理过多无效事件,有没有订阅生命周期失控。多数慢不是操作符本身慢,而是同一个 HTTP Observable 被订阅多次、输入框每个字符都打接口、组件销毁后流还在跑。优化时不要一上来堆操作符,先用浏览器 Network、Performance 和简单日志确认瓶颈在哪里。
## 追问
### share 和 shareReplay 应该怎么选?
share 只共享当前订阅期,晚来的订阅者拿不到历史值。shareReplay(1) 会回放最近一次结果,适合 HTTP 缓存,但要注意 refCount 和生命周期。
### 为什么搜索框通...服务端2月19日 19:21
SSH 协议是如何建立安全连接的?SSH 不是“把密码加密后发给服务器”这么简单。它先通过 TCP 连接到服务端 22 端口,双方确认协议版本和可用算法,再用密钥交换算法协商出临时会话密钥;后续真正传输命令、文件和端口转发数据时,主要靠对称加密保证速度,靠 MAC 或 AEAD 保证完整性。服务器会拿出自己的主机公钥证明“我就是你上次连过的那台机器”,客户端再用密码、公钥或键盘交互完成用户认证。
## 追问
### 为什么 SSH 既用非对称加密又用对称加密?
非对称加密适合身份验证和安全协商,但计算成本高,不适合持续传输大量数据。SSH 用它安全商量密钥,之后切到 AES、ChaCha20 这类对称算法。
### ...服务端2月19日 19:22
SSH 公钥认证为什么更安全?如何正确配置?SSH 公钥认证的核心不是“把公钥当密码”,而是服务器用公钥验证客户端是否持有对应私钥。登录时私钥不会离开本机,客户端只用私钥对服务器给出的挑战做签名;服务器拿 `authorized_keys` 里的公钥验签,通过才放行。相比密码认证,它更抗撞库,也更适合自动化。
## 追问
### Ed25519、RSA、ECDSA 选哪个?
新环境优先 Ed25519,密钥短、速度快、安全边界清晰。需要兼容老系统时再考虑 RSA 4096。
### 私钥还需要密码短语吗?
需要,尤其是笔记本或开发机上的私钥。密码短语能在文件被复制走时多挡一层,配合 ssh-agent 使用也不会频繁输入。
...服务端2月19日 19:22
SSH 端口转发怎么用?-L、-R、-D 分别适合什么场景?SSH 端口转发就是用 SSH 连接临时搭一条加密通道,把某个端口流量转到另一个网络位置。常见参数是 `-L`、`-R`、`-D`:`-L` 是本地端口转发,`-R` 是远程端口转发,`-D` 是动态 SOCKS 代理。先判断流量入口在哪一端,就不容易选错。
## 追问
### -L、-R、-D 一句话怎么区分?
`-L` 是本机开入口访问远端资源;`-R` 是远端开入口访问本地资源;`-D` 是本机开 SOCKS 代理,目标动态决定。
### 为什么建议绑定 127.0.0.1?
绑定本地只允许本机访问,安全边界更小。绑定 0.0.0.0 可能让局域网甚至公网用户连上这个端口。
...服务端2月19日 19:23
SSH 配置文件哪些选项最影响安全和连接稳定性?SSH 配置文件要分清两类:`~/.ssh/config` 管客户端怎么连,`/etc/ssh/sshd_config` 管服务器允许谁连。客户端重点是减少手输参数、隔离不同环境密钥;服务端重点是关掉高风险入口,如 root 登录、密码登录、无用转发。不要整段复制加固清单,应该按访问路径逐项验证。
## 追问
### ssh_config 和 sshd_config 最大区别是什么?
前者是客户端读的,影响你发起连接时带哪些参数;后者是服务端读的,决定连接是否被允许以及认证策略。
### 为什么不建议关闭 StrictHostKeyChecking?
它会让客户端不再认真校验主机指纹...服务端2月19日 19:23
SSH 密钥交换算法是如何生成会话密钥的?SSH 密钥交换负责让客户端和服务器在不可信网络上协商出同一个会话密钥,重点不是传输密钥,而是双方各自算出相同结果。现代 SSH 通常优先 `curve25519-sha256`,它速度快、实现成熟,并具备前向保密。传统 `diffie-hellman-group1-sha1`、`group14-sha1` 不建议继续启用。
## 追问
### 密钥交换和公钥认证有什么区别?
密钥交换是建立加密信道,发生在登录认证之前。公钥认证是证明“你是谁”,不负责生成会话密钥。
### Curve25519 为什么常被推荐?
它计算快、密钥短,实现上不容易踩参数选择坑。新版 OpenSSH 兼容...服务端2月19日 19:24
SSH 加密算法如何选择才兼顾安全和性能?SSH 加密算法主要分三类:会话数据用对称加密保护,身份和签名用非对称算法完成,完整性由 MAC 或 AEAD 兜底。实际配置时优先保留现代 OpenSSH 支持的组合:`aes256-gcm@openssh.com`、`chacha20-poly1305@openssh.com`、`aes256-ctr`。CBC、3DES 只适合遗留系统,不应出现在新服务器默认列表里。
## 追问
### AES-GCM 和 ChaCha20-Poly1305 怎么选?
有 AES-NI 的服务器优先 AES-GCM,吞吐通常更好。ARM 或老 CPU 上,ChaCha20-Poly1305 往往更...