服务端3月1日 20:21
Service Worker 是什么?它如何实现离线缓存和后台同步?Service Worker 是运行在浏览器后台的独立 JS 线程,充当应用与网络之间的代理服务器。它能拦截所有网络请求、管理缓存资源,从而实现离线访问、推送通知和后台同步等能力,是 PWA 的核心技术。其生命周期为 register → install → activate → fetch,浏览器会在空闲时自动终止 SW 线程以节省资源。SW 无法直接操作 DOM,只能通过 postMessage 与主线程通信,且必须在 HTTPS 环境下运行。
## 追问
**SW 的 install 和 activate 阶段分别适合做什么?**
install 阶段适合预缓存关键资源(App...服务端2月28日 21:45
Spring Boot 如何整合 MyBatis 进行数据库操作?引入 mybatis-spring-boot-starter 后,通过 @MapperScan 扫描接口、XML 或注解编写 SQL 即可完成整合。核心三要素:Mapper 接口(定义方法签名)、映射文件(编写 SQL 与 ResultMap)、自动配置(驼峰映射、数据源)。简单 CRUD 用注解(@Select/@Insert),复杂动态 SQL 用 XML(where/set/foreach)。PageHelper.startPage 即可实现分页,@Transactional 管理事务。
## 追问
**@Mapper 和 @MapperScan 有什么区别?**
@Mappe...服务端2月28日 21:54
Spring Boot 中如何实现安全认证?Spring Boot 通过 `spring-boot-starter-security` 集成 Spring Security,核心流程为:请求进入 `SecurityFilterChain`,依次经过认证过滤器(如 `UsernamePasswordAuthenticationFilter` 或自定义 JWT Filter),由 `AuthenticationManager` 委托 `UserDetailsService` 加载用户并校验凭证,认证成功后将 `Authentication` 存入 `SecurityContextHolder`;授权阶段通过 `@PreAuthoriz...服务端2月28日 21:56
Spring Boot 微服务如何实现服务注册与发现?服务注册与发现是微服务架构的基础设施:服务启动时将自身地址注册到注册中心,消费方从注册中心拉取可用实例列表并调用。主流方案有 Eureka(AP、已停维)、Nacos(AP/CP 可切换、国产生态)、Consul(CP、云原生友好)。核心流程三步:注册(实例启动时上报 IP/端口)、心跳(定时续约保活)、拉取(客户端缓存实例列表并定时刷新)。Nacos 是当前新项目首选,临时实例走客户端心跳,持久实例走服务端探活,还内置配置中心。
## 追问
**Eureka 自我保护机制触发后,实例下线能否被感知?**
不能立即感知。自我保护模式下 Eureka 不再剔除过期实例,客户端可能拿到已...服务端2月28日 21:41
Spring Boot Starter 的作用和原理是什么?Starter 是 Spring Boot 提供的依赖聚合与自动配置的组合机制。它将某项功能所需的所有依赖打包成一个 POM 依赖描述符,同时通过 `@EnableAutoConfiguration` 扫描 `META-INF/spring.factories`(或 2.7+ 的 `AutoConfiguration.imports`)中注册的自动配置类,配合 `@ConditionalOnClass`、`@ConditionalOnMissingBean` 等条件注解,实现按需装配 Bean。因此引入一个 starter 即可获得完整的依赖集合和零配置的功能启用。
## 追问
- ...服务端2月24日 23:04
React Query 性能优化的常见瓶颈和解决方案有哪些?React Query 最大性能陷阱是组件过度渲染:query 数据变化时所有订阅组件都重渲染。解法是用 select 提取组件关心的子字段,select 返回值用浅比较去重,相等则跳过渲染。第二陷阱是缓存策略不当:staleTime 控制数据何时标记为过期触发重新请求(默认0即立即过期),gcTime(v5 前叫 cacheTime)控制未使用的缓存何时被垃圾回收(默认5分钟)。不常变的数据应设较长 staleTime 避免无谓请求。第三是 queryKey 设计:key 变化就触发新请求,key 中包含频繁变化的值(如时间戳)会导致缓存失效。queryKey 应稳定且分层:['use...服务端2月28日 22:15
SSH 连接失败如何排查?常见原因有哪些?SSH 故障按报错分四类:Connection refused 说明目标端口未监听(sshd 未运行或防火墙阻断);Connection timeout 说明网络不可达(路由/防火墙丢弃包);Permission denied 是认证失败(密钥不匹配或权限错误);Host key verification failed 是 known_hosts 中记录的指纹与服务器当前密钥不一致。排查第一步始终是 ssh -vvv 看详细握手过程,日志会精确显示卡在哪个阶段。密钥权限是最常见的低级错误:私钥必须 600,.ssh 目录 700,authorized_keys 600,权限过宽 sshd...服务端2月24日 22:22
Cookie 和 Session 有什么区别?何时用 Cookie,何时用 Session?Cookie 存在客户端浏览器,每次请求自动携带,上限约 4KB,可被用户查看和篡改;Session 存在服务端(内存/Redis/数据库),客户端只持有 Session ID(通常通过 Cookie 传递),数据大小无硬性限制,安全性更高。核心区别是状态存储位置:Cookie 是客户端状态,Session 是服务端状态。选择依据:非敏感偏好数据(主题、语言)用 Cookie;登录态、权限等敏感数据用 Session。Session 的局限在于服务端需存储状态,分布式场景需用 Redis 等集中式存储共享 Session,否则粘性Session限制了水平扩展。JWT 是第三条路:将状态编...服务端2月28日 21:20
OpenCV.js 在移动端和 Web 应用中有哪些最佳实践?OpenCV.js 在移动端和 Web 应用中有广泛的应用,但需要考虑性能、兼容性和用户体验。以下是移动端和 Web 应用的最佳实践:
## 1. 移动端优化策略
### 响应式设计
```javascript
class MobileImageProcessor {
constructor() {
this.isMobile = this.detectMobile();
this.processingSize = this.getOptimalSize();
}
detectMobile() {
return /Android|webOS|...服务端2月24日 22:22
Session Cookie 和 Persistent Cookie 有什么区别?Session Cookie 不设 Expires 和 Max-Age 属性,浏览器将其存在内存中,关闭浏览器即消失;Persistent Cookie 设有明确的过期时间,存储在磁盘上,过期前跨会话持久存在。服务端通过 Set-Cookie 响应头控制类型:不设过期属性是 Session Cookie,设 Max-Age 或 Expires 则为 Persistent Cookie。安全层面两者都应标记 HttpOnly 和 Secure,Persistent Cookie 因长期驻留磁盘更易被窃取,敏感数据应避免持久化。SameSite 属性(Strict/Lax/None)对两者同...