当前位置: 首页 > 面试经验 >

飞书前端面经(四面挂)

优质
小牛编辑
77浏览
2023-10-22

飞书前端面经(四面挂)

一面 9.14 1h+

  • 自我介绍
  • 代码题答错了以为a是3了呜呜
var result = [];
var a = 3;
var total = 0;
function foo(a){
    for(var i=0;i<3;i++){
        result[i] = function(){
            total += i*a;
            console.log(a,i,total)
        }
    }
}
foo(1);
result[0]() //3
result[1]() // 6
result[2]() // 9
  • 对作用域的理解(上一题做错了所以函数作用域这里理解的不太对
  • 对闭包的理解,使用场景
  • 手写Promise.all
  • 手撕题:括号匹配如果括号匹配错误输出error,匹配成功输出所有在()中的内容。输入:((2+3)+(3*4))+2
  • 工作中遇到的问题

反问:

自研canvas框架,负责飞书表格

二面 9.21 1h+

多半凉了感觉没啥问的就做题了

  1. 自我介绍
  2. 项目中使用了Vite,Vite做了哪些事(初始化,热更新,打包,代理服务器)
  3. Vite打包主要做了哪些事?❌
  4. 打包后为什么要分成多个chunk
  5. 在浏览器中如何读取缓存,怎么确定是哪个缓存❌
  6. 强缓存和协商缓存说了一些,还是没有理解上一个问题
  7. 使用vue-router做了什么,使用的单页面还是多页面
  8. vue-router实现单页面的原理
  9. 刷新页面的时候如何保证不会404,history的情况下后端应该做什么配置(返回对应的html文件)
  10. vue从数据变更到界面变化会经历哪些过程(双向绑定+diff)
  11. node.js是怎么把js跑在服务端的,由什么组成的?❌
  12. 开始做题 a. 给定一个非递减排列的数组nums,和一个目标数值target,判断target是否是nums的主元素,是则返回true,否则返回false。主元素的定义是:在数组中出现的次数严格大于数组元素个数的二分之一。

输入:nums = [1,2,3,4,4,4,4,4,4,5,6] ,target = 4

输出:true

说思路:

  1. 刚开始没看到非递减,说了用哈希的思路
  2. 面试官问了时间复杂度和空间复杂度看到了非递减,计算target的开始位置和结束位置来计算
  3. 进一步优化,使用二分查找开始和结束位置

b. 括号匹配(真的好爱出括号匹配啊做了好多种了)

输入一个由小写字母a-z以及左括号(和有括号)组成的字符串s,尽可能少的删除括号,使得字符串中的括号匹配,返回删除括号后的字符串。(输出不唯一)

输入:s = “a(b(c(de)fgh)(((bb))”

输出:“a(b(cde)fgh)((bb))”

思路:栈负责括号匹配,记录括号下标,右括号匹配过程中做删除,遍历字符串后如果栈不为空则删除多余的左括号。(删除方式被面试官提醒了一下)

没反问啥

三面 10.9 30min+

面试官人好好,很和蔼

  1. 自我介绍
  2. 实习
  3. 响应式原理,diff算法
  4. 手写题:版本号比较
  5. 论文相关,什么时候能实习
  6. 还要哪些正在流程中

反问

还有一轮技术面+hr面

又没了解业务啊啊啊呜呜呜

学习webpack—尝试做个插件

四面 10.17 50min+

  1. 自我介绍
  2. 项目相关:验证码,如何防机器人(答得不好),划词细节
  3. 高亮显示使用的css样式
  4. 微信扫码登录流程
  5. token如何传递,前端拿到后如何处理
  6. 博客项目相关,就随便聊聊,面试官估计找不到啥想问的了
  7. 做题 二叉树求最近公共祖先节点 + 手写并发
  8. 进程和线程,区别
  9. 进程通信的方式
  10. 两个并发进程同时操作i++会有什么结果,为什么会被吞操作,怎么保证执行结果
  11. mutex本质上是什么东西,是一块内存还是寄存器❌?(只说了是原语,不能被打断)
  12. 如果访问资源的时候mutex=0,这个线程会被怎么操作
  13. 阻塞和唤起是具体怎么实现的 ❌
  14. 浏览器中了解的进程和线程(一时脑抽只说出来线程)
 类似资料: