ZiuChen.github.io/docs/article/【字节跳动】前端面试题总结.md
2023-02-18 23:03:12 +08:00

137 lines
2.4 KiB
Markdown

# 【字节跳动】前端面试题总结
## 看代码说结果
### 代码输出结果1
```js
console.log(['1', '2', '3'].map(parseInt))
```
```
[1, NaN, NaN]
```
### 代码输出结果2
```js
let [a = 1, b] = []
console.log(a, b)
```
```
1 undefined
```
### 代码输出结果3
```js
Promise.resolve()
.then(() => {
Promise.resolve()
.then(() => {
console.log(1)
})
.then(() => {
console.log(2)
})
})
.then(() => {
console.log(3)
})
```
```
1 3 2
```
### 代码输出结果4
```js
const obj = { 3: '3', 2: 2, 1: '1', name: 'name', age: 'age' }
console.log(Object.keys(obj))
```
```
['1', '2', '3', 'name', 'age']
```
### 代码输出结果5
```js
let myArray = {}
myArray['0'] = 'a'
myArray['1'] = 'b'
myArray.length = 2
console.log(...myArray)
```
```
```
### 代码输出结果6
```js
console.log([1, 2, 3, 4, 5].splice(1, 2, 3, 4, 5))
console.log([1, 2, 3, 4, 5].slice(1, 2, 3, 4, 5))
```
```
[2, 3]
[2]
```
### 代码输出结果7
```js
console.log([].constructor === Array)
console.log(typeof [] === 'array')
console.log(typeof null === 'object')
console.log('' instanceof Object)
```
```
true
false
true
false
```
## 问答题
### HTTP缓存的请求头与响应头有哪些
- 强制缓存
- 响应头: Expires 与 Cache-Control
- Expires 绝对时间
- Cache-Control 相对时间
- 协商缓存
- 响应头: Etag 请求头: If-Non-Match
- 响应头: Last-Modified 请求头: If-Modified-Since
### 宏任务与微任务有哪些区别?简述他们的应用场景
宏任务与微任务优先级不同
- 先执行同步代码,后执行异步代码
- 主线程代码执行完毕后,检查微任务队列是否为空,非空则优先执行微任务
- 每次执行宏任务之前,都会检查微任务队列是否为空,非空则优先执行微任务
常见的宏任务与微任务
- 宏任务 `script` `setTimeout` `setInterval` `postMessage` `MessageChannel` `setImmediate (NodeJS)`
- 微任务 `Promise.then` `Object.observe` `MutationObserver` `process.nextTick (NodeJS)`
## 算法
中文数字转为阿拉伯数字
给定一个字符串,返回该字符串的所有组合
```js
输入 abc
输出 ['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
```
回溯算法