【面试】字节抖音秋招前端开发

525 阅读2分钟

一面

  1. 自我介绍
  2. 线程、进程的区别,JS为什么是单线程的
  3. HTTP与HTTPS的区别,HTTPS解决了哪些安全性问题
  4. 算法题:二叉树遍历有哪些方法?写出层序遍历
  5. 节流与防抖的区别?写一个节流函数
  6. Vue的数据双向绑定
  7. 算法题:岛屿的周长
 给定一个矩阵。矩阵的每个元素都是边长为 1 的正方形,值为 1 表示陆地,值为 0 表示海洋。
 相邻(上下左右)的陆地格子连成一个岛屿。
 假设矩阵中只有唯一的 1 个岛屿,求该岛屿的周长。
 例子:
 输入:grid = [
  [0,1,0,0],
  [1,1,1,0],
  [0,1,0,0],
  [1,1,0,0]
 ]
 输出:16
 
 输入:grid = [
  [0,0,0,0],
  [0,1,0,0],
  [0,0,0,0],
  [0,0,0,0]
 ]
 
 答案:
function solve(grid) {
    let count = 0;
    let mianji = 0;
    grid.forEach((item, i) => {
        item.forEach((col, j) => {
            if(col === 1) {
                let up = i - 1;
                let left = j - 1;
                if(up >= 0 && grid[up][j] === 1) {
                    count++;
                }
                if(left >= 0 && grid[i][left] === 1) {
                    count++;
                }
                mianji++;
            }
        })
    })
    return mianji * 4 - count * 2;
}

该团队技术栈: React TypeScript Node.js Golang

二面(交叉面)

  1. 自我介绍
  2. ES5实现数组去重(问时间复杂度,以及我用到的indexOf方法底层的时间复杂度)
  3. 并发控制,实现一个dispatch(arr, n)方法,arr是一个Promise构造器promiseG的数组,promiseG()执行会返回一个Promise,需要保证同时最多有n个promise在执行,不需要考虑返回的问题,类似浏览器并发请求的控制
  4. 链表折叠返回,1->2->3->4->5->6 返回 1->6->2->5->3->4
  5. 项目中遇到的难点
  6. 写一个类似百度的搜索框需要注意哪些问题
  7. 逻辑题:在岛上有100只老虎和1只羊,老虎可以吃草,但他们更愿意吃羊。 假设:A:每次只有一只老虎可以吃羊,而且一旦他吃了羊,他自己就变成羊。B:所有的老虎都是聪明而且完全理性的,他们的第一要务是生存,再能吃羊的时候,不介意自己变成羊。问最后这只羊会不会被吃?如果是n只老虎和一只羊呢?(偶数只老虎不会吃,奇数只老虎会吃变成偶数)