两个部门,六轮面试,终与字节无缘

本文详细记录了作者在字节跳动面试的全过程,包括大数据部门和互娱研发部门的多轮面试。面试涉及内容广泛,涵盖前端知识、数据结构、算法、网络协议、数据库、操作系统等多个方面。面试官不仅考察了技术知识,还关注了面试者的思维过程和问题解决能力。虽然最终未能拿到offer,但面试官给出了宝贵的建议,强调面试中思考的质量比速度更重要,并鼓励深入理解和追求技术的极致。
摘要由CSDN通过智能技术生成

这个面试机会来的挺意外的,先在 Boss 投递的简历,后再牛客网看到了内推人的微信,加了微信问了下进度,挂了,内推人给我打电话根据简历简单询问了一下情况(内推人很谦逊,毕业于一所 211 大学,和我说他的学历也很一般),然后和 hr 沟通捞了我一下,才有的这个面试机会,太感谢了。

一面

6 月 9 日 16:00

  • 自我介绍
  • 怪异盒模型和标准盒模型的区别
    • 给了一段代码说两个盒子背景为蓝色的区域
    • 两个盒子分别设置了 box-sizing: border-box, box-sizing: content-box
  • 如何触发 BFC
    • 给一段代码问效果是什么样的
    • 会有一个外边距合并的问题,怎么解决这个问题
  • 垂直水平居中
  • 你了解得数组遍历方式有哪些,你觉得那个性能最优那
  • this 指向谁,如何更改 this 的指向
    • // 非原题 非原题 非原题 const o1 = { text: 'o1', fn: function() { return this.text; } } const o2 = { text: 'o2', fn: o1.fn } console.log(o2.fn());
  • 你常用的 React Hooks 有哪些,描述功能
    • 打出来
  • 服务端渲染了解吗 和 SPA(单页面应用) 的区别
  • Commonjs 和 ES6 Module 得区别
    • 还了解过其他的吗,不了解(AMD、CMD、UMD...)
  • 算法题
    • 题不难,但是思路跑偏了
    • 先用的递归O(n ^ 2)
    • 可以优化一下吗?
    • 改成了循环可以提前终止
    • 面试官: 其实你思路跑偏了,O(n)的复杂度就可以,用栈(瞬间顿悟),不过解出来就好
  • 反问

大概 45 分钟吧

说一面就给我过了,等会 17:00 二面

二面

  • 讲讲项目,说说你的亮点
    • 亮点,性能优化吧,怎么测量的,怎么优化的,优化前后的对比
    • Network, Lighthouse, Performace, Memory, Webpack、网络
    • 面试官也会提出一些问题,问我怎么优化,原理是什么
  • 有写过 webpack 的 plugins 吗
    • 没有
  • 看代码,css 选择器权重
  • 算法:二叉树
    • 考点递归回溯,非原题
  •  有这么一个数据结构: const data = [ { "id": "1", "sub": [ { "id": "2", "sub": [ { "id": "3", "sub": null }, { "id": "4", "sub": [ { "id": "6", "sub": null } ] }, { "id": "5", "sub": null } ] } ] }, { "id": "7", "sub": [ { "id": "8", "sub": [ { "id": "9", "sub": null } ] } ] }, { "id": "10", "sub": null } ] 现在给定一个id,要求实现一个函数 findPath(data, id) { } 返回给定id在 data 里的路径 示例: id = "1" => ["1"] id = "9" => ["7", "8", "9"] id = "100"=> [] PS: id 全局唯一,无序 ```
  • 说下 EventLoop
  • 看代码
    • 非原题
  • async function async1() { console.log('async1 start'); await async2(); console.log('async1 end'); } async function async2() { console.log('async2'); // 注意:这里如果返回 Promise 的话执行顺序就不一样了 } console.log('script start'); setTimeout(function() { console.log('setTimeout'); }, 0) async1(); new Promise(function(resolve) { console.log('promise1'); resolve(); }).then(function() { console.log('promise2'); }); console.log('script end');

大概 40 分钟吧,等会 18:00 三面

三面

  • 自我介绍
  • 几几年的
  • 哪里人啊
  • 高考是出现了什么状况吗
    • 没有啊,就是当时没那个想法
  • 这个学历对你产生了多少影响
  • 还是聊聊技术吧,给一个场景,二分查找
    • 写出来了
    • 你还能在优化一下吗
    • 额,时间复杂度O(logn), 空间复杂度 O(1),这挺优的啊(有点懵)
    • 不,这个优化不止是时间和空间复杂度,可以从工程化的角度出发
    • 还是有点懵
    • 提点了我一下(l 和 r 为什么要定义在外面)
    • 哦哦,关联太多,所以耦合就高,您是指的这个吗(没回复)
  • // 当时用的 js,用 ts 只是为了表达的更清晰一点 interface Barrage { time: Number; barrage: String; } const binarySearch = (arr: Barrage[], time: number) => { let l = 0; let r = arr.length - 1; while (l <= r) { const mid = (l + r) / 2; if (arr[mid].time === time) { return arr[mid].barrage; } else if (arr[mid].time < time) { l = mid + 1; } else { r = mid - 1; } } return null; }
    • 那数组的边界
    • 我就在那看,看了大概十几秒吧,会越界吗...
    • 面试官:好吧,那我们先下一题
  • 一个异步任务调度器,最多同时执行两个异步任务
    • 有思路吗?
    • 用个数组先存起来,判断执行的数量,需要就取出来,
    • 好,那你写吧
    • 结果写了好久,半个小时起步,还没写出个结果
    • 执行逻辑大概写出来了,但返回的逻辑没写出来
    • 提点我一下,我
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值