跳到主要内容

武汉

职位要求

负责公司 Web 与PC桌面端(基于 Electron)的前端研发工作,涵盖私有化交付、多平台构建适配、性能优化与安全防护。需具备扎实的 Vue 技术栈能力,理解浏览器与 Electron 渲染机制,具备良好的工程化与模块化实践经验,对技术有极致追求。 岗位要求: • 精通 Vue 及其生态,有中大型项目经验; • 熟悉 Electron 开发模式,掌握主/渲染进程通信、打包构建、原生接口调用等; • 了解浏览器与 Electron 的渲染机制,具备良好页面性能优化能力; • 具备良好的模块化和工程化思维,能独立构建适用于多环境的交付方案; • 理解常见前端安全问题(如 XSS、CSP、代码注入)并具备实际防护经验; • 有私有化部署或企业级软件交付经验者优先; • 重视代码质量,善于沟通协作,具备主动学习与技术沉淀能力。

题库

问答题

  1. 自我介绍

  2. 回流和重绘,如何减少

  3. meta 标签和属性

  4. script 标签的 async 和 defer 区别

  5. 实现 say.call.call 结果

  6. css 选择器有哪些

  7. BFC 使用

  8. 三种隐藏方式差别 visibility:hidden,display:none,opacity:0 性能特定?

  9. 自我介绍,项目介绍;

  10. 项目中为什么要用Pinia不用Vuex;

  11. 项目中用了Iframe,讲一下CSP(Content-Security-Policy);

  12. 场景题:一个页面点击任何一个按钮,触发请求。这里考察事件捕获。

  13. 追问:如果我想取消掉呢?(这里一方面面试官那边信号不好没听清,也没理解是取消请求还是取消点击事件还是取消别的)

  14. 说一下事件循环,什么是宏任务,什么是微任务;

  15. Echarts怎么设置图例,怎么将折线图变为曲线图,怎么修改图的位置;

  16. 怎么把装饰器转为ES5的写法(之前只了解Python有装饰器,JS这块第一次听到);

  17. 场景题:一个组件被很多组件复用,怎么设置父子组件、或者祖孙组件通讯?用Vuex会有什么问题?

  18. 反问:技术栈?有什么需要提升的地方?多久有结果?

  19. 说下实习做的内容

  20. 自我介绍

  21. 实习的收获?

  22. 有自己感兴趣的方向吗?

  23. 平时怎么去接触到新技术的?

  24. 有自己目前在维护的项目吗?

  25. 做的项目有遇到什么难点吗?

  26. 国际化做了哪方面的事情?

  27. 怎么做多行文本溢出隐藏?如果浏览器不支持这个css属性呢?

  28. 代码高亮是怎么做的?

  29. 了解过代码高亮原理吗?我直接扯到babel的原理?词法分析,语义分析,ast,转换,生成,差不多就是跟编译原理相关的

  30. 怎么去提高脚本的加载速度?

  31. 如果要点击一个按钮去加载语言包,怎么做?我说了import()动态导入,如果浏览器不支持import()呢?讲了下import ()原理,其实就是创建个script脚本插入到页面中

  32. 你有用过ahooks和自定义hook,说说?

  33. 你刚才说到了用useLatest处理闭包?了解过怎么实现吗?useRef

  34. 说说react hook的限制?我还扯了下hooks源码,原理

  35. 说说了解的react性能优化手段?

  36. 说下项目中有哪些封装的比较复杂的组件?讲了可滑动的进度条组件和用better-scroll封装的滚动容器。

  37. 怎么实现一个轮播图?还说下无缝滚动原理

  38. 你用了虚拟列表,知道实现原理吗? 讲了列表项定高的实现思路:定位,算起始索引、终止索引,滚动事件,requestAnimationFrame,虚拟列表快速滚动会产生白屏,怎么处理?我说了骨架屏,还有其他方案吗?不会了

  39. 知道不定高的虚拟列表实现原理吗?磕磕巴巴说了一点,然后直接说不会

  40. 在项目中做过哪些性能优化?

  41. 怎么去减少回流重绘?批量操作样式,批量操作dom,documentFragment,css硬件加速,will-changes...,还有嘛?不知道了

  42. 说说分析项目的异常的思路?

  43. 有去优化或者了解过项目打包相关的吗?

  44. 大型前端项目如何优化编译时间(一直在问还有吗)

  45. 有哪些分析内存泄露的方法

  46. 如何理解模块化,为什么一些功能要划分为一个模块

  47. webpack 流程

  48. webpack 中 loader 和 plugin 的区别

  49. 有写过自定义hook吧,实现一下useHover

  50. 你有用过ahooks和自定义hook,说说?

  51. 说下项目中有哪些封装的比较复杂的组件?讲了可滑动的进度条组件和用better-scroll封装的滚动容器。

  52. 怎么实现一个轮播图?还说下无缝滚动原理

  53. webpack的热更新怎么实现?

  54. 状态码301和401什么意思?

  55. 常用的hook都有哪些?

  56. 用hook都遇到过哪些坑?

  57. 了解useReducer吗

  58. 什么是 CSP

  59. splitChunks是如何实现公共包提取?解决了什么问题?

  60. 怎么做的 IMSDK

  61. 怎么处理连接雪崩问题

  62. 怎么计算的白屏率

  63. 多 Tab 怎么做的资源优化

  64. 如何做性能优化

编码题

  1. 实现 call 函数

  2. js 哈夫曼树(Huffman Tree)

  3. 讲讲线性表中栈和队列的区别

  4. 如何判断链表是环,尽可能讲出多的方法, 最优的方法是什么,时间复杂度和空间复杂度是多少

  5. 编码题

    /**
    * // 给定一个输入
    const entry = {
    a: {
    b: {
    c: {
    dd: 'abcdd',
    },
    },
    d: {
    xx: 'adxx',
    },
    e: 'ae',
    },
    };

    // 要求输出以下结果
    const output = {
    'a.b.c.dd': 'abcdd',
    'a.d.xx': 'adxx',
    'a.e': 'ae',
    };
    */
  6. 不定长二维数组的全排列

    // 输入 [['A', 'B', ...], [1, 2], ['a', 'b'], ...]

    // 输出 ['A1a', 'A1b', ....]
  7. 两个字符串对比, 得出结论都做了什么操作, 比如插入或者删除

    pre = 'abcde123'
    now = '1abc123'

    // a前面插入了1, c后面删除了d
  8. Vue里面的keep-alive?自己如何实现keep-alive?

  9. 链表的反转