微信社招 6 轮面试(已拿 Offer)

编程如画

共 2963字,需浏览 6分钟

 · 2020-07-27

910067186d138c76e7e483a060873557.webp欢迎在留言区回复

前言

前段时间面试微信的服务端开发岗位,拿到了 Offer,分享一下面试经历。

之前发的一篇文章,已拿 Offer!百度、字节跳动等后台面经提到了大鹏跳槽离职的情况,微信的面试流程较长,轮数较多,而且和其他公司面试流程差异较大,所以单独写出来。

其中涉及项目相关的问题因为因人而异,没有太大的参考价值,所以没有列出来,但这个同样是不可或缺的一部分。

第一轮面试

这轮面试总体是问基础知识,保证面试者基础过关

  1. 公钥和私钥区别是什么,可以把公钥当做私钥,私钥当做公钥使用么?
  2. 加密算法都有哪些?
  3. base64 是加密算法么?
  4. 解释下什么是惊群效应?
  5. 访问域名之后会经过哪些步骤,寻找子网的协议叫做什么,找到进程除了端口号还需要什么?
  6. 在没有设置主键的情况下,设置了唯一索引会将其作为主键构建索引么
  7. 进程和线程的区别,chrome 每个 tab 之间是多进程还是多线程,为什么?
  8. DOM 频繁修改会有什么问题,如何解决,用虚拟 DOM 有什么坏处
  9. 限流算法都有什么,你们使用的算法原理是什么?
  10. 50 亿个公众号阅读量找到最多的 10 个怎么找
  11. sku 和 spu 关系是什么,如何做属性关联的?
  12. 如何查看系统的资源使用状态,top 中 cache 和 buffer 的含义
  13. 进程间通信方式都有什么?
  14. RSA 算法是怎么个实现原理?
  15. 多个进程写一个文件如何避免冲突,如果加锁的话会导致等待时间过长有什么优化方案么?(说了个消息队列)
  16. redis 如何解决缓存穿透问题,如果不确定 key 的情况下,存在穿透怎么办
  17. 软件中断和硬件中断的区别
  18. 如何理解中断?中断的实现原理

第二轮面试

笔试 1 小时

  1. 有 64 匹马,赛场只有 8 条赛道,请问最少需要比赛多少场才能确定跑得最快的那 4 匹马,不可以借助计时器给每一匹马一一计时;

  2. 一个桶里面有白球. 黑球各 100 个,现在按下述的规则取球:

  • i . 每次从桶里面拿出来两个球;
  • ii. 如果取出的是两个同色的球,就再放入一个黑球;
  • iii. 如果取出的是两个异色的球,就再放入一个白球。
  • 问:最后桶里面只剩下一个黑球的概率是多少?
  1. 给定字符串 str1 和 str2,将 str2 插入 str1 中,问有多少种插入方法使得新串是回文。例如:
Str1=lol
Str2=o
总共有四种插入方法,分别得到olol,lool,lool,lolo,其中能到回文的方法有两种。
输入:
lol
o
输出:
2
  1. 两个有序(从小到大)单链表,合并为一个有序的单链表。
struct LinkNode{
 int value;
 struct LinkNode *next;
};
struct LinkNode *merge(struct LinkNode *firstLink, struct LinkNode *secondLink)
  1. 公司有内部 bbs,员工都会在上面发帖交流。据统计,有三个员工 ID 发帖很多,他们各自的发帖量都超过帖子总数 N 的 1/4。如果给到你所有帖子的发帖人 ID 列表,请写代码找出这三个 ID,要求时间复杂度 O(n),空间复杂度 O(1)

面试 1.5 小时

其中这里的面试共有 2 位面试官,第一位面试官问基础知识,第二位面试官问项目

  1. 进程和线程的区别?
  2. 什么是虚拟内存?
  3. 1 亿个数字中有 2 个相同,怎么找?
  4. 访问一个链接的流程
  5. 访问 http 为什么会跳到 https
  6. linux 常用指令都有什么?
  7. 如何实现序列化和反序列化
  8. 数据库索引的结构,有什么特点?
  9. 堆和栈的关系,对象在堆中内存是连续的么?
  10. 乐观锁怎么理解?
  11. 数据库上乐观锁怎么应用的?
  12. 负载均衡都有什么算法?
  13. arp 协议是怎么理解的?
  14. http 包的结构是什么样的?
  15. tcp 和 udp 区别
  16. tcp 怎么保证稳定传输的?
  17. 限流算法怎么实现的?令牌桶具体是怎么实现的?
  18. 交换分区做什么的?

第三轮面试

本轮面试主要考察面试者项目水平和能力

缺点:在某些点上更多的挖掘技术深度

第四轮面试

这一轮面试属于交叉面试,由其他部门的面试官来面试

问题:现在有一个任务,某个公司要通过微信在早上 10 点钟发红包,现在有一个数据库表,里面存储了所有员工的 openId,还有一个微信支付的接口,传入 1 个 openId 之后可以进行红包支付,每次调用时间 1 秒钟,如何才能尽快的将该任务完成,请写出三种方案

面试官特意提醒可以不局限在题目本身上,这道题要按照真实情况去处理给出方案

下面是我当时给出的方案

1. 第一种方案

  • 方案:多线程提高并发量,先从数据库获取到全部的员工列表信息,然后进行分割,比如按照尾号进行分割,同一尾号的由一个线程来去处理。
  • 优点:开发简单,只需要启动多线程或者线程池即可,能够较大可能的利用服务器资源
  • 缺点:

(1)首先员工的数量并不确定,把员工数据全部拉取出来可能存在数据量过大的情况。

(2)还有就是要考虑服务器性能,是否能够满足多线程所需的条件,比如说如果只有一个 cpu,其实并没有达到并行的效果

(3)如果服务器不满足资源的话,这样的话就要考虑多个机器去执行,多线程放到多个机器去执行还需要额外的开发工作量

(4)这里面没有考虑发送失败的情况,如果发送失败还需要有重新发送机制

2. 第二种方案

  • 方案:多进程去提高并发量,启动多个应用,不同的应用去读取不同的数据,比如用尾号来区分。
  • 优点:方便分别部署在不同的服务器上去执行,能够尽可能的利用更多的服务器资源去解决问题,如果考虑重新发送的话也方便再写一个应用去部署新的服务器启动
  • 缺点:

(1)数据库在多进程读取时,数据库表会不会被锁住,如果锁住的话性能就会降低,所以要选择合适的存储引擎。

(2)有可能需要占用更多的服务器资源

3. 第三种方案

  • 方案:和微信支付部门同事协调,单个 openid 发送接口其实并不合理,应该提供批量发送接口,允许发送数组,因为目前最大的瓶颈在接口耗时上面。
  • 优点:从根本上解决瓶颈问题,也能缓解微信支付端的压力,不会被临时的批量调用数据量压垮
  • 缺点:这个存在的问题是将开发工作量交给了微信支付部门,需要与其协调资源,确保能够按时完成工作

第五轮面试

本轮面试属于 GM 面试,要讲 PPT,前面的面试官让我好好准备一下,挑出一个自己认为最有价值的项目讲清楚

PPT 讲完之后,面试官还试用了下我做的 mdnice 等开源工具,一不小心就被发现了 bug,提出了意见

第六轮面试

本轮面试属于 HR 面试,会问离职原因、家庭、城市、薪资和绩效等问题

总结

1. 多久能将所有面试面完

我本人面试了半个月完成了所有面试,但是这个速度应该是比较快的,慢的可能会长达一个月的时间,所以建议跳槽面试前做好长期准备

2. 面试完成后就发 offer 么

面试完成后,其实只是完成了整个流程的一半,距离发 offer 和入职还有很长的时间,通常的流程是

内推 -> 多轮面试 -> 邮件反馈当前薪资 -> 口头 offer 沟通薪资 -> 正式 offer -> 背调 -> 入职指引 -> 确定入职时间 -> 正式入职

所以面试是一个长期战斗,知己知彼,百战不殆

3. 工作地点在哪里

我面试的部门在深圳,微信的岗位大部分都在广州

4. 想交流面试题和技术怎么办

大鹏搞了个技术交流群,未来不定期发面试题供大家学习讨论,欢迎加微信后回复「技术」拉你入群

来个直击灵魂的三连吧


浏览 91
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报