Skip to content

【字节跳动】前端面试题总结

看代码说结果

代码输出结果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']

回溯算法

Released under the MIT License.