服务端3月1日 19:25
DNS 是什么?域名解析的递归查询和迭代查询有什么区别?DNS(Domain Name System)是将域名映射为 IP 地址的分布式数据库系统,是互联网基础设施的核心组件。当浏览器访问域名时,解析流程为:浏览器缓存 → 系统缓存(hosts)→ 本地 DNS 服务器 → 根域名服务器 → 顶级域服务器 → 权威 DNS 服务器,逐级查询直到获得最终 IP。其中客户端到本地 DNS 是递归查询(服务器代为完成全部查询),本地 DNS 到根/TLD/权威服务器是迭代查询(每级只返回下一级地址,由本地 DNS 继续追问)。
## 追问
**常见的 DNS 记录类型有哪些?**
A 记录映射域名到 IPv4,AAAA 到 IPv6,CNAME...服务端2月24日 10:29
Zustand 中间件怎么使用?有哪些内置中间件?Zustand 中间件以函数组合方式包裹 create 的回调,从内到外依次嵌套。内置三个核心中间件:persist(状态持久化到 localStorage/sessionStorage)、devtools(接入 Redux DevTools 调试)、immer(简化不可变更新,可直接写 state.user.name = 'new')。组合顺序:devtools 在最外层,persist 在内层,中间件顺序影响 set/get 的拦截链。
## 追问
**persist 的 partialize 怎么过滤不需要持久化的字段?**
partialize: (state) => ({ ...服务端3月1日 12:18
Babel 是什么?它的编译流程和 polyfill 方案有哪些?Babel 是 JavaScript 转译器,将 ES6+ 语法转为向后兼容的 ES5 代码,确保在旧浏览器中正常运行。编译流程分三步:parse(@babel/parser 将源码转 AST)→ transform(插件遍历 AST 并修改节点)→ generate(@babel/generator 将 AST 还原为代码)。注意 Babel 只转换语法,不补齐新 API(如 Promise、Array.includes),需要 polyfill 方案配合。
## 追问
**Babel 的 plugin 和 preset 是什么关系?**
plugin 是最小转换单元(如 @bab...服务端2月28日 21:49
Spring Boot 中如何实现异步编程?Spring Boot 通过 `@EnableAsync` + `@Async` 实现声明式异步编程。在配置类上标注 `@EnableAsync` 开启支持,在方法上标注 `@Async` 即可在独立线程执行;默认使用 `SimpleAsyncTaskExecutor`(每次新建线程),生产环境应自定义 `ThreadPoolTaskExecutor` 并通过 `@Async("executorName")` 指定线程池。有返回值的方法返回 `CompletableFuture`,调用方可通过 `future.get()` 或 `CompletableFuture.allOf()` 组合...服务端2月24日 10:30
Zustand 中如何用 TypeScript 定义 Store 类型?定义一个包含状态和方法的 interface,作为 create 的泛型参数传入即可:create<StoreState>((set, get) => ({...}))。TypeScript 会自动推断 set 回调中 state 的类型,方法参数也能正确约束。关键点:状态和方法写在同一个 interface 中,方法参数可引用自身类型(如 setUser: (user: StoreState['user']) => void)。
## 追问
**中间件会改变 store 类型,怎么处理类型组合?**
persist/devtools 等中间件会向 store 注入额外属性(如 pe...服务端2月28日 22:24
axios 和 fetch 有什么区别?什么时候该用 axios?axios 是基于 Promise 的 HTTP 客户端,相比原生 fetch 的核心优势在于:请求/响应拦截器(统一添加 token、错误处理)、自动 JSON 转换(fetch 需手动 .json())、请求超时配置(fetch 需封装 AbortController+setTimeout)、上传进度监控、XSRF 防护,以及 4xx/5xx 自动 reject(fetch 只在网络故障时才 reject)。但 fetch 是浏览器原生 API,零体积开销,且正逐步补齐能力(AbortController 已支持取消)。
## 追问
**axios 的拦截器机制是怎么实现的?**...服务端2月28日 21:43
Spring Boot 中如何实现多环境配置?Spring Boot 通过 Profile 机制实现多环境配置。核心做法是创建 `application-{profile}.yml` 文件(如 `application-dev.yml`、`application-prod.yml`),公共配置放 `application.yml`,环境特有配置放对应 Profile 文件,同名属性 Profile 文件覆盖默认值。激活方式包括配置文件中 `spring.profiles.active`、启动参数 `--spring.profiles.active=prod`、环境变量 `SPRING_PROFILES_ACTIVE`。代码层面用 `...服务端3月1日 20:52
Workbox 是什么?它如何简化 Service Worker 的缓存策略?Workbox 是 Google 推出的 Service Worker 工具库,将常见的缓存策略、路由匹配、预缓存等能力封装为开箱即用的模块,大幅降低 SW 开发复杂度。核心提供三种缓存策略:CacheFirst(缓存优先,适合静态资源)、NetworkFirst(网络优先,适合API数据)、StaleWhileRevalidate(先用缓存再后台更新,适合非关键资源)。配合 workbox-precaching 可在 install 阶段批量预缓存,配合 ExpirationPlugin 可控制缓存条目数和过期时间。
## 追问
**CacheFirst 和 StaleWhileR...服务端2月24日 10:28
Zustand 是什么?相比 Redux 有什么优势?Zustand 是一个极简 React 状态管理库,核心 API 只有 create():传入一个返回状态对象的函数,返回一个 hook,组件通过 const count = useStore(s => s.count) 按需订阅,未变化的部分不会触发重渲染。不需要 Provider 包裹,不需要 reducer/action 分发,setState 直接更新。体积约 1KB,零依赖。
## 追问
**Zustand 的 selector 如何避免不必要的重渲染?**
useStore(selector) 只订阅 selector 返回的切片,内部用 Object.is 浅比较判断是...服务端2月28日 21:47
Spring Boot 中如何实现全局异常处理?Spring Boot 通过 `@RestControllerAdvice` + `@ExceptionHandler` 实现全局异常处理。前者是 AOP 组件,拦截所有 Controller 抛出的异常;后者按异常类型匹配处理方法,返回统一的响应体。典型做法是定义自定义 `BusinessException` 携带错误码和消息,在异常处理类中分别处理业务异常、参数校验异常(`MethodArgumentNotValidException`)和兜底异常(`Exception`),对外返回结构化的错误响应,对内记录日志并隐藏堆栈细节。RFC 7807 的 `application/prob...