服务端2月21日 16:18
ASCII 和 UTF-8、GB2312 有什么区别?ASCII 是 7 位字符编码,只能表示 128 个字符,适合英文、数字、控制符等基础文本。它和其他编码最大的区别不是“好不好”,而是覆盖范围不同:ASCII 管英文基础字符,GB2312/Shift-JIS 管特定语言,UTF-8 管全球字符。
## 追问
### ASCII 和 ISO-8859-1 有什么区别?
ASCII 只有 0-127;ISO-8859-1 扩展到 256 个字符,前 128 个字符和 ASCII 完全一致。
### ASCII 和 GB2312、Shift-JIS 兼容吗?
它们通常保留 ASCII 区间,所以英文部分可兼容。但中文、日文字符需要额外字节...服务端2月21日 18:09
Gradle Wrapper 是什么?如何生成和使用?Gradle Wrapper 是项目自带的一组脚本和配置,用来固定 Gradle 版本。开发者不用提前安装 Gradle,只要执行 `./gradlew build`,Wrapper 就会按配置下载并运行指定版本,保证本地、CI、同事机器上的构建环境一致。它通常包含 `gradlew`、`gradlew.bat`、`gradle/wrapper/gradle-wrapper.jar`、`gradle/wrapper/gradle-wrapper.properties`,真正决定版本的是 `distributionUrl`。
## 追问
### 为什么不用本机安装的 gradle?
本机...服务端2月21日 18:11
Gradle 和 Maven 有什么区别?该怎么选?Gradle 和 Maven 都是 Java 构建工具。简单选型:项目简单、团队追求稳定统一,选 Maven;项目大、模块多、构建慢,或做 Android/Kotlin,优先选 Gradle。Maven 的核心是“约定优于配置”,结构固定,上手容易,企业老项目和 CI 生态成熟;缺点是 XML 冗长,自定义构建逻辑不够顺手。Gradle 用 Groovy/Kotlin DSL,任务模型更灵活,增量构建、构建缓存、并行构建更强;缺点是自由度高,脚本容易失控。
## 追问
### 配置方式有什么区别?
Maven 写 XML,声明式强;Gradle 写 DSL,更像代码,能表达复杂逻辑。
...前端2月21日 20:27
Promise.all 和 Promise.race 有什么区别?`Promise.all` 等“全部成功”,`Promise.race` 等“第一个完成”。`all` 会并行启动所有 Promise,只有全部 fulfilled 才 fulfilled,结果数组顺序和传入顺序一致;任意一个 rejected,整体立刻 rejected。`race` 也是并行启动,但谁先 settled 就采用谁的结果,不管成功还是失败。
## 追问
### all 和 race 的返回值有什么不同?
`all` 返回结果数组;`race` 返回第一个完成的值或错误。
### all 里有一个失败,其他请求会取消吗?
不会。`all` 只是让返回的 Promise...前端2月21日 20:27
Promise 链式调用是怎么工作的?Promise 链式调用的核心是:每次调用 `.then()` 都会返回一个新的 Promise,后一个 `.then()` 接收前一个回调的返回值。返回普通值就直接传下去;返回 Promise 就等待它 settled;抛错或返回 rejected Promise,错误会沿链向后冒泡,直到被 `.catch()` 捕获。
## 追问
### then 里返回普通值和 Promise 有什么区别?
返回普通值时,下一个 then 立即拿到这个值;返回 Promise 时,下一个 then 要等它完成后再执行。
### then 里不 return 会怎样?
等于返回 `undefin...前端2月21日 20:28
Promise 错误处理面试怎么答?Promise 错误处理要抓住两句话:错误会沿 Promise 链向后传播,最近的 catch 或 then 第二个参数会接住它;catch 返回普通值表示恢复,重新 throw 才会继续失败。项目里一般推荐在链尾统一 catch,async/await 用 try/catch;多个任务用 Promise.allSettled 处理部分失败,避免一个请求失败拖垮全部结果。
## 追问
### catch 和 then 的第二个参数有什么区别?
then 的第二个参数只能处理前一个 Promise 的失败,抓不到同一个 then 成功回调里新抛出的错误;catch 更适合放在链尾统一兜底...前端2月21日 20:31
Promise 并发控制如何实现?Promise 并发控制就是限制同一时间运行的异步任务数量。面试可以先说结论:维护一个任务池,启动任务后放入 executing,数量达到上限就 await Promise.race(executing),等任意任务结束再继续放新任务。最后用 Promise.all 收集全部结果。真实项目里常用于批量请求、上传、爬取、发邮件,目的是保护浏览器连接数、服务端限流和内存。
## 追问
### 并发控制和 Promise.all 有什么区别?
Promise.all 会一次性启动所有任务;并发控制只同时跑固定数量。前者适合少量独立任务,后者适合几百、几千个任务。
### 为什么用 Prom...前端2月21日 20:33
Promise 性能优化面试怎么答?Promise 性能优化的核心不是“少用 Promise”,而是少制造没必要的异步层级,让能并行的任务并行,让高频请求有缓存、去重和并发限制。面试里先答三点:避免 new Promise 包一层已有 Promise;独立任务用 Promise.all 并行;批量任务别一次性打满,用队列或 p-limit 控制数量。再补一句:性能问题通常来自请求瀑布、重复请求、长链微任务和未释放的引用。
## 追问
### Promise.all 一定更快吗?
不一定。只有任务互不依赖时才更快;如果后一个请求依赖前一个结果,强行并行会写错逻辑。Promise.all 还会遇到一个失败就整体失败的问题。
...服务端2月21日 20:31
Promise.allSettled() 有什么作用?和 Promise.all 有什么区别?`Promise.allSettled()` 会等待一组 Promise 全部结束,不管成功还是失败,最后返回每个任务的状态和结果;`Promise.all()` 则要求全部成功,只要一个 reject 就立刻 reject。面试里一句话区分:all 适合“缺一个都不行”,allSettled 适合“尽量都跑完,再分别处理结果”。例如批量请求、批量上传、页面多个独立模块加载,更适合 allSettled。
## 追问
### allSettled 返回值长什么样?
每一项都有 `status`。成功是 `{ status: 'fulfilled', value }`,失败是 `{ st...服务端2月21日 20:37
Promise 和回调函数有什么区别?为什么能解决回调地狱?Promise 和回调函数都能处理异步,但抽象层次不同。回调是“异步完成后调用你给的函数”,容易出现多层嵌套、错误分散、控制流难追踪;Promise 把异步结果封装成一个有状态对象,可以链式调用、统一 catch、组合 `all/race/any/allSettled`。面试里可以说:Promise 不是让异步变同步,而是让异步流程更可组合、错误更集中、代码更容易维护。
## 追问
### Promise 解决了回调地狱吗?
解决了一部分。链式 then 可以拉平嵌套,async/await 又进一步接近同步写法。但如果业务拆分不好,Promise 链也会写得很乱。
### Prom...