服务端2月28日 20:51
OpenCV.js 和原生 OpenCV 有什么区别?OpenCV.js 是把 OpenCV 编译到 WebAssembly/JavaScript 后在浏览器或 Node.js 里运行;原生 OpenCV 通常指 C++、Python、Java 版本,跑在桌面、服务器或移动端。两者算法体系相近,但运行环境、性能、内存管理和部署方式差异很大:前者胜在纯前端和隐私,后者胜在性能、硬件能力和完整生态。
## 追问
### API 一样吗?
很多函数名接近,比如 `cvtColor`、`GaussianBlur`、`Canny`,但写法不完全一样。OpenCV.js 使用 `cv.Mat`、`cv.MatVector`,更像 C++ API 的...服务端2月28日 20:54
OpenCV.js 和其他前端图像处理库怎么选?OpenCV.js 适合做“看懂图像”的任务,比如边缘检测、轮廓识别、模板匹配、视频帧处理;Fabric.js、p5.js、Three.js 更偏“画出来”和交互展示;TensorFlow.js 适合跑模型做分类、检测、分割。选型不要只看库名,先看需求是图像处理、交互编辑、3D 渲染,还是机器学习推理。
## 追问
### OpenCV.js 相比 Fabric.js 强在哪?
OpenCV.js 强在传统计算机视觉算法,能做滤波、形态学、特征点、轮廓等处理。Fabric.js 强在 Canvas 对象模型、拖拽、缩放、文字和图形编辑,适合做海报编辑器,不适合复杂视觉算法。
###...服务端2月28日 21:42
Spring Boot 的启动流程是怎样的?关键阶段有哪些?Spring Boot 启动本质上是 `SpringApplication.run()` 创建并刷新 Spring 容器的过程。主线可以记成:创建 SpringApplication、准备 Environment、创建 ApplicationContext、刷新容器、启动 WebServer、执行 Runner、发布 ready 事件。真正初始化 Bean、自动配置和启动内嵌 Tomcat 的核心都发生在 `refreshContext()` 里的 `ApplicationContext.refresh()`。
## 追问
### SpringApplication 实例化时做了什么...服务端2月28日 22:25
如何在 axios 中实现请求和响应拦截器?Axios 拦截器就是请求发出前、响应返回后统一插一层处理逻辑。请求拦截器常用来加 token、加请求 ID、处理 loading;响应拦截器常用来拆 `data`、统一处理业务错误、401 登录失效和网络异常。项目里一般不要直接改全局 axios,而是 `axios.create()` 建实例,再给实例挂拦截器,避免多个后端服务互相污染配置。
## 追问
### 请求拦截器和响应拦截器分别适合做什么?
请求拦截器改 `config`,比如加 `Authorization`、`baseURL`、防缓存参数。响应拦截器处理 `response` 或 `error`,比如把 `{ cod...服务端2月28日 22:26
axios 中如何进行错误处理?有哪些常见错误类型?Axios 错误处理先看三类:`error.response` 表示服务端返回了非 2xx 状态码,重点处理 400、401、403、404、5xx;`error.request` 表示请求发出但没收到响应,多半是网络、超时、CORS;两者都没有通常是请求配置写错。实际项目里建议:业务层只处理当前页面关心的错误,全局拦截器统一做登录失效、错误提示、日志和重试。
## 追问
### error.response 和 error.request 有什么区别?
`response` 说明后端有响应,只是状态码失败;`request` 说明请求发出去了但没有拿到响应。前者看 `status`...服务端3月1日 00:14
Android 内存泄漏有哪些常见场景?如何检测和避免?Android 内存泄漏本质是对象生命周期结束了,却还被 GC Roots 间接引用,导致无法回收。高频场景有:静态变量持有 Activity、非静态 Handler 或匿名内部类持有外部类、监听器/广播未注销、线程或网络请求未取消、Cursor/IO 流未关闭、集合缓存长期保存 View 或 Context。检测优先用 LeakCanary 看引用链,复杂问题再用 Android Studio Memory Profiler 抓 Heap Dump。避免原则很简单:谁注册谁注销,谁启动谁取消,长生命周期对象不要持有短生命周期 Context。
## 追问
### 为什么静态变量持有...服务端3月1日 00:16
Android View 的绘制流程是怎样的?View 的绘制流程一句话就是:从 ViewRootImpl 发起,依次执行 measure、layout、draw。measure 负责算宽高,核心是父 View 传下来的 MeasureSpec;layout 负责确定 left、top、right、bottom;draw 负责真正画到 Canvas 上。自定义 View 里最常见的问题是只重写 onDraw,却忘了在 onMeasure 处理 wrap_content。尺寸或位置变化用 requestLayout,内容变化用 invalidate,别混着用。
## 追问
### MeasureSpec 有哪几种模式?
EXACT...服务端3月1日 00:17
Android 热修复原理是什么?主流方案怎么选?Android 热修复的本质是在不发新版 APK 的情况下,让应用优先执行修复后的代码。常见路线有三类:类加载方案把补丁 dex 插到 `dexElements` 前面,重启后优先生效;底层替换方案改 ArtMethod 入口,可即时生效但兼容性压力大;插桩方案在编译期埋跳转逻辑,运行时分发到补丁实现。
## 追问
### Tinker 为什么通常需要重启?
Tinker 走类加载和差分合成路线,把补丁 dex、资源或 so 合并后,在下次启动时让 ClassLoader 加载新内容。它稳定、覆盖面广,但不能保证所有改动立即生效。
### Sophix、AndFix 这类方案为什么...服务端3月1日 00:19
Android 性能优化怎么做?常用工具有哪些?Android 性能优化先看指标,再动代码。常见方向是启动、卡顿、内存、网络、电量和包体积;常用工具是 Android Profiler、Perfetto/Systrace、Layout Inspector、GPU Overdraw、LeakCanary、StrictMode、Battery Historian。不要凭感觉优化,先抓 trace、heap dump 或线上监控数据,定位瓶颈后再改。
## 追问
### 卡顿一般怎么排查?
先看主线程是否超过 16ms,抓 Perfetto 或 System Trace,重点看 UI Thread、RenderThread、Choreo...服务端3月1日 12:02
pnpm 在 CI/CD 中如何加速安装和构建?pnpm 在 CI/CD 里提速,核心是三件事:固定依赖、缓存 store、只构建必要包。`pnpm install --frozen-lockfile` 保证流水线不重新解析依赖;缓存 pnpm store 可以避免每次从网络下载;Monorepo 里用 `--filter` 只跑受影响的包,比全量构建更省时间。
## 追问
### 为什么优先缓存 pnpm store,而不是只缓存 node_modules?
pnpm 的依赖真实内容放在 store,项目里的 `node_modules` 主要是链接。缓存 store 命中率更稳定,也更适合不同 job 复用。`node_mod...