两年社招微信五面面经

两年社招微信五面面经
最新回答
小面包

2021-09-24 21:45:37

两年社招微信五面面经总结

一面(组员面)
  • 算法题

    找出数组中重复的数字:数组a[N]存放1至N-1,其中某个数字重复一次,要求时间复杂度O(N),空间复杂度非O(N)。

    解法:利用数组下标与数值的关系,遍历数组,将数值对应的下标位置的值取反作为标记。若发现某位置的值已为负,则该数值为重复数字。

    二叉树路径和:判断是否存在从根到叶子节点的路径,路径上所有节点之和等于给定值。

    解法:递归遍历二叉树,累加路径上的节点值,到达叶子节点时判断是否等于目标值。

    struct TreeNode { int value; struct TreeNode *left, *right; }; int haspath(struct TreeNode *root, int value) { if (!root) return 0; if (!root->left && !root->right && root->value == value) return 1; return haspath(root->left, value - root->value) || haspath(root->right, value - root->value);}

    最长上升子序列:参考LeetCode题目

    Longest Increasing Subsequence

    解法:动态规划,维护一个dp数组,dp[i]表示以第i个元素结尾的最长上升子序列长度。

  • 项目与前端基础

    Vue父子组件通信:通过$emit和vuex实现。

    Webpack优化

    开发时优化:热更新、代码分割、缓存。

    生产包优化:代码压缩、Tree-shaking、CDN加速。

    Tree-shaking原理:依赖ES2015的import和export语句,检测未使用的代码并消除。UglifyJS等工具实现DCE(Dead Code Elimination)。

    Node与浏览器事件循环不同:Node采用事件驱动、非阻塞I/O模型,浏览器事件循环处理DOM事件、网络请求等。

    Vue虚拟DOM

    优点:减少直接操作真实DOM的开销,提高性能。

    缺点:首次渲染可能较慢,需额外内存存储虚拟DOM。

    DOM Diff:通常从左到右比较,通过key值优化比较过程。

    防抖与节流

    防抖:执行最后一次触发的事件处理函数。

    节流:保证一定时间段内只调用一次事件处理函数。

    闭包:函数能访问并记住其词法作用域,即使函数在其词法作用域之外执行。应用场景包括模块化、私有变量等。

    HTTP与HTTPS不同:HTTPS在HTTP基础上加入SSL/TLS协议,提供加密传输和身份验证。

    WebAssembly:一种可在现代Web浏览器中运行的二进制指令格式,允许高性能应用在Web上运行。

二面(组长面)
  • 笔试:LRU算法实现。
  • 面试

    项目相关:深入讨论项目细节和实现。

    浏览器事件循环:与一面问题类似,考察对事件循环机制的理解。

    Hybrid开发JS与原生交互原理:通过WebView的JavaScript桥接实现JS与原生代码的交互。

    String类型:考察对JavaScript中String类型的理解和操作。

三面(总监面)
  • 算法题

    三数之和:给定数组,找出所有不重复的三元组,使和为0。

    解法:排序后使用双指针法,避免重复解。

    概率题:计算目击证人认定肇事车辆为蓝色的情况下,车辆实际为蓝色的概率。

    解法:应用贝叶斯定理,结合目击者识别正确率和车辆市场占有率计算。

  • 面试:项目相关问题,考察项目经验和问题解决能力。

四面(交叉面)
  • 算法题

    字符串转数字:根据规则(A=1, B=2, ..., AA=27, ...)将字符串转换为数字。

    解法:遍历字符串,根据字符位置计算数字,考虑进位情况。

    二叉搜索树的第k大节点:不使用额外存储空间,通过逆中序遍历找到第k大节点。

    最长连续递增序列:在整数数组中找出位置连续的最长递增序列。

    解法:遍历数组,记录当前递增序列长度,更新最大值。

    单链表中间位置节点:使用快慢指针法找到单链表的中间节点。

    合并两个有序链表:找出两个有序单链表中value相等的节点,构造成新链表。

    解法:遍历两个链表,比较节点值,将相等的节点链接到新链表。

    反转数组:在原数组上反转,不使用arr.reverse()方法。

    解法:使用双指针法,交换数组首尾元素,向中间移动指针。

  • 面试

    项目相关:延伸出H5如何调用原生方法,以及项目中的性能优化手段。

五面(GM面)
  • 面试

    项目相关:讨论成长最快的一段时间、项目迭代周期、重构原因、测试周主要工作、自动化测试等。

    H5调用原生方法:与四面问题类似,考察对Hybrid开发的理解。

    开放性问题

    Web版微信扫码登录原理:延伸至除了轮询外的其他方式,如WebSocket、长轮询,HTTP1.1通过Connection: keep-alive字段设置长链接。

    好友列表渲染性能:考虑虚拟列表、分页加载等技术优化渲染性能。

    好友头像加载优化:使用图片压缩、懒加载、CDN加速等手段优化大量小图片的加载。

    好友搜索功能:考虑使用哈希表、Trie树等数据结构优化搜索性能,避免遍历所有好友。

    大文件断点续传:通过记录已上传的文件块信息,实现断点续传功能。

    秒传实现:通过计算文件哈希值,判断文件是否已存在,实现秒传功能。

总结:每轮面试均涉及算法题,需重点准备。项目经验及从中延伸的基础问题也是考察重点,需深入理解项目细节和背后原理。前端基础知识考察广泛,注重知识深度和实际应用能力。