【字节跳动】前端面试题总结
看代码说结果
代码输出结果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']
回溯算法