2025-08-20 模拟面试(四)
一、 JavaScript 核心 & 深度原理
HTTP/2 的革命性改进及对前端的影响
- 革命性改进有以下几点:多路复用,头部压缩,二进制分帧,服务器推送
- 在 http1 前端可能会为了减少 http 请求而做雪碧图,代码合并,域名分片等技术。但是在 http2 里 http 的开销被降的非常低了 而如果合并了大量资源反而会降低缓存命中率,导致得不偿失,所以这个需要认真对待。
- 可以更细粒度的拆分代码,只加载当前页面所需的代码
- 对于关键资源,可以使用服务器推送技术,来优化首屏时间
- 文件没那么大,请求变多了之后,设置良好的缓存策略变的至关重要了。
设计一个前端项目的自动化部署流程(CI/CD)?
- 触发:git push 到特定分支触发 CI(如 github actions)
- CI 阶段:安装依赖(npm ci)->代码检查(Lint)->运行测试->构建(npm run build)
- CD 阶段:将构建产物(dist)上传至对象存储(OSS)+CDN 或者同步至服务器
- 刷新: 触发 CDN 缓存刷新
- 通知与回滚:通知部署结果,并有一键回滚机制
请比较 interface 和 type 的异同。 相同点:都可以定义对象形状,函数类型,都支持扩展。 不同点有:
- interface 更偏向声明一个结构,支持声明合并(声明多个会自动合并),主要用于定义对象,类的公共契约
- type 更偏向于定义类型别名,功能更加强大,可以定义联合类型(|),交叉类型(&),元祖类型,以及使用 keyof,typeof 等操作符进行复杂操作
请说明 keyof,typeof 和条件类型的作用
- keyof T:获取类型 T 的所有键的联合类型
- typeof variable:在类型上下文中,获取类型的类型
- 条件类型 T extends U ? X :Y:根据类型兼容性判断,选择返回的类型