前端回暖了🔥 面试一个月拿到五个 offer

616 阅读5分钟

更新:已经入职啦,有兴趣的同学可以发我简历内推,小组急招


省流交代结果:2年前端,脱产一年读硕,从七月份开始海投 offer,目前拿到 offer 如下:字节跳动,富途牛牛,招银网络科技、某 AIGC 初创团队、某 HK web3 初创团队。

背景:最近感觉行情开始回暖了,有约到蛮多面试的,在面试过程中一边不断地这里复习材料,最后面试准备了六万字左右,算法题主要刷的 leetcode hot100 以及一些前端的常见题目。初创团队的面试风格各异就不列举了,整理出有拿到 offer 的三家公司分享给大家参考

字节一面

  • 介绍下多端基础库,是如何适配多端投放的?
  • pnpm 和 npm 的区别
  • 软链和硬链的区别
  • 如果 monorepo 中不同的包对同一个依赖有多个版本,会导致什么问题?如何解决
  • web 页面性能关注哪些?
  • 除了秒开率还关注哪些数据?
  • 如何做性能优化?
  • 错误数据上报原理
  • flutter 开发和原生开发对比,优缺点
  • 是如何改善这些问题的?
  • pb 协议是如何转 ts 的?
  • 浏览器渲染原理
  • 浏览器有几个进程几个线程?
  • css js dom解析的顺序
  • defer 和 async 的区别
  • 什么是跨域?cookie 有跨域吗?跨域和跨站的区别?cookie samesite
  • 代码1:什么是原型链?判断原型链输出
  • 代码1:什么是作用域?判断作用域输出
  • 代码3:找到在树中去找对应 key 的路径
  • 代码4:实现 flatten
  • 反问环节
{
	key: 'a',
	children: [
		{
			key: 'b', 
			children: {
				key: 'c'
			}
		}
	]
}
// 比如找c, 需要输出 ['a', 'b']

字节二面

  • 自我介绍
  • pb 协议转 ts 定义和 mock 功能,具体讲下流程,对业务开发有何提升?有尝试过其他的方案吗?
  • 讲下混合栈开发立项的背景、技术预研
  • 在混合开发这个项目,有做了什么事情来提高开发效率?
  • 介绍下多端基础库的工作、上线范围
  • 数据上报和性能数据上报都是常规的吗?有比较特殊的页面吗?
  • 在工具链、混合开发、业务开发这几个方向,你哪个方向上的贡献比较突出?为什么?
  • 原型链继承和面向对象继承的区别
  • 手写算法:实现 async 函数的链式调用
  • 反问环节
// 补充 wrapper 函数
function wrapper(fn) {
  let prev = null;
  return function () {
    if (prev) {
      // 串上 then 调用链
      prev = prev.then(() => fn());
    } else {
      prev = fn();
    }
  };
}
function test() {
  const foo = () => {
    console.log("foo start", Date.now());
    return new Promise((resolve) => {
      setTimeout(() => {
        console.log("foo resolve", Date.now());
        resolve();
      }, 1000);
    });
  };
  const nFoo = wrapper(foo);
  nFoo();
  nFoo();
  nFoo();
}
test()

字节三面

  • 自我介绍
  • 某个项目以及负责的模块,项目难点
  • 讲下性能优化的常用方法
  • HTTP 和 HTTPS
  • 看代码输出
  • 删除链表的倒数第k个节点
  • 反问环节
let result = new Array(3);
let a = 3;
let res = 0;
function foo(a) {
  let i = 0;
  for (; i < 3; i++) {
    result[i] = function () {
      res += i * a;
      console.log(res);
    };
  }
}

富途一面

(当时没有立即记录下来,所以比较多问题遗忘了,富途问的偏详细偏底层)

  • 笔试题实现
  • 讲下 pb 协议转 ts 是如何实现的?具体是如何转换的,不用库的话可以怎么实现?
  • npm 的 cache 和 pnpm 的 cache 有什么区别?
  • 软链接和硬链接的区别?
  • 什么资源适合使用软链接 什么适合使用硬链接
  • 谈下对 BFF 的理解
  • Node 进程的内存最大值,为什么要这么设计
  • Http2.0 的新特性
  • 跨域有哪些方案?讲下 CORS 的流程,非简单请求为什么要设计为多发一次请求而不是同简单请求一样?
  • CSRF 攻击的场景,有哪些防御手段?csrf token 是怎么生成的?
  • vue2.x 的监听函数有哪些缺点?vue3 的呢?
  • 反问环节
// 实现一个异步链式调用类
// const person = new Person('小明')
// person.say('hi').sleep(5000).eat('apple')
// 控制台输出:
// hi 小明
// (隔5秒后)
// eat apple

富途二面

  • 给一张汇率兑换的图片,描述场景,要求写出对应的代码(后端接口查询、前端查询逻辑与异常处理),描述其他交互会考虑到的需求点
  • 如何确保接口重试的话不会导致后端逻辑异常?接口的标志符在哪里生成?这个标志符可以如何生成?
  • 给一个梯度交易手续费,要求写出对应的代码查询
  • 如果有外网 bug, 应该如何处理?
  • React hooks 有哪些限制?如果让你来修改源码,可以通过什么方式去除这些限制(不考虑性能)
  • Flutter 混合栈框架的立项背景,Flutter web 有使用吗?
  • Node 如何监控内存?
  • 反问环节

富途三面

  • 自我介绍
  • 介绍影响最深的项目并追问细节
  • 性能优化常用手段
  • 前端开发你觉得都有哪些难点?
  • 概率题:一座城100w个人,20w在河东,80w在河西,现在有100w通电话,问跨河通话的电话的数量?
  • 算法题:不用 api, 用 O(1) 算法,实现 “com.message.account” 反转为 “account.message.com”

招银网络一面

两个面试官 第一个面试官先快速的问一些基础问题,大概15分钟 第二个面试官针对项目发问,主要围绕性能优化、上报系统,问的偏细节,最后加问了下 a 标签伪类的有无加空格的区别、交集还是并集 反问环节

招银网络二面

两个面试官

  • 自我介绍
  • 为什么离职?为什么选择大数据?职业规划?
  • 前后端开发配合模式?
  • 性能优化 一般由什么问题引起?
  • 有关注 web 安全吗
  • 埋点是怎么做的?会对页面性能有什么影响
  • 什么时候有离职的想法?
  • 没有关注校招吗?是否毕业了?为什么选择秋招?
  • 有收到其他公司offer吗?为什么觉得不合适?
  • 薪酬有什么要求?

写在最后

最后选择了字节入职,感觉行情也有慢慢回暖,当然大家还是有工作的情况下慢慢找下家比较好,心态会好一些,我还是太莽了😂 BTW,目前部门 hc 还比较多,大家快快来投,等我入职了就可以内推了!