Skip to content

部门一面

日期:2025.11.03

技术面1小时,做题40分钟,总用时接近2h

岗位介绍

  • 业务介绍: 微信电商中的微信小店。主要入口是发现页的“直播”或“视频号”,视频号的直播带货用的都是微信小店提供的能力。形态包括直播带货,以及小程序带货、公众号带货等。
  • 团队职责: 负责微信小店的黄金交易链路,包括商品详情、下单、订单这三块业务的 C 端链路及其 B 端链路。
  • 技术栈:
    • C 端: 小程序用得比较多。
    • B 端: 主要使用 Vue 3 + SSR + 微前端。
    • APP 端(商家版): 核心功能基于小程序实现,首页采用特定技术(Flutter)。
  • 工作地点: 广州琶洲。

一、 问题

  1. 你可以讲一下 CSRF 攻击他完整的攻击过程。
  2. 那这个 CSRF TOKEN,它能被黑客获取到吗?
  3. 那你在什么时机会下发这个 CSRF TOKEN?
  4. 然后用 JS 把它取出来,从 cookie 里面把它取出来吗?
  5. 浏览器的缓存机制,你可以从强缓存和协商缓存分别讲一下。
  6. 本地缓存(LocalStorage / SessionStorage)呢?
  7. 可以讲一下 CommonJS 和 ES Module 它们的区别。
  8. TypeScript 它是基于哪个模块儿规范实现的?
  9. 你可以讲一个你认为最有挑战的事情,在你之前的工作中。最好要有一些逻辑性,可以从他的背景开始讲起,那再到方案的选型,再到具体的实现,最终解决了什么问题?
  10. (追问) 技术选型这里主要考虑的其中有一个点是说性能问题,我们想知道它里面具体的性能是相当于是现在就已经是体验起来会比较卡了,所以就不能够再去用一个更强性能的方案?
  11. (追问) 那还有其他的一些方案,例如用 iframe 沙箱再加上 Web Component 的 CSS 沙箱来实现。其实这个方案的话就没有性能问题了,你有了解过吗?
  12. (追问) 你们用模块联邦的一个前提是所有的子应用都要升到 Webpack 5。那有没有考虑到比如你们的模块会不会接入到其他人的系统里面?
  13. (追问) 解决方式就是让他们平台也升级到 Webpack 5,然后支持模块联邦用这种方式来接入到你的平台?
  14. (追问) 在使用模块联邦过程中有没有遇到过一些共享依赖的版本冲突,或者是一些运行时的状态隔离的问题呢?
  15. (追问) 那如果其他项目要接入你们的项目,如果他们遇到这种问题该怎么解决呢?比如他用的 Vue 的版本跟你们用的不一样?
  16. (追问) 那比如其他项目是 Vue 3,它能接入进来吗?
  17. 你们如何解决构建的缓存以及增量构建的这种问题?
  18. 用这种 monorepo 这种方式,你们在协作中有没有遇到过什么困难?
  19. 你还做了 Webpack 切换到 Rspack 的过程。在这个过程中你有遇到什么困难吗?然后最终的效果是怎样的?
  20. 有没有一些 C 端的场景?
  21. 那你在 C 端的一些业务和性能优化上有没有什么了解?
  22. 你是怎么搭建 Dify 工作流的
  23. 增量代码中减少 40% 的冗余,这个是怎么算出来?
  24. 质量这个环节,你提到用 AI 的来做 Code Review,对,这你可以讲一下。
  25. (追问) AI Review 的一些前提就是你要告诉他一系列的规范,或者项目的一些自定义规范?
  26. Node.js 用得多吗?
  27. (编程题1) 实现一个深拷贝函数(兼容的数据结构越多越好,需要解决循环依赖情况)
  28. (编程题2) 监听列表元素曝光(可以查API文档) 当前页面有一个卡片列表,列表中有20个卡片,每个卡片高度200px,宽度400px。 请你实现一个功能,用于监听列表中的每个卡片是否在曝光区域中,并将结果打印出来 (1) 开始曝光(比例达到100%,记录开始时间):console.log(‘第x项开始曝光’) (2) 结束曝光(比例小于100%,记录结束时间):console.log(‘第x项结束曝光’,’曝光时间为n ms’)
  29. (编程题3) 开放题 为了性能要求,我们页面经常会组装一个combo请求(如下): const comboUrl= http://res.wx.qq.com/F.js,E.js,D.js,C.js,B.js,A.js,page.js 请设计函数genUrl(requireTree),输出如上所示的comboUrl,返回的结果需要和comboUrl 一致,请注意文件名的顺序。requireTree的数据结构如下
Plain
const requireTree= {
  "name": "page.js",
  "require": [
    {
      "name": "A.js",
      "require": [
        {
          "name": "C.js",
          "require": [
            {
              "name": "F.js"
            }
          ]
        }
      ]
    },
    {
      "name": "B.js",
      "require": [
        {
          "name": "D.js",
          "require": [
            {
              "name": "F.js"
            }
          ]
        },
        {
          "name": "E.js",
          "require": []
        }
      ]
    },
  ]
};

二、反问

  1. 就是今天的面试一些表现,我有没有什么哪些没有达到你的预期的?
  2. 大概多久出结果?