type
status
date
slug
summary
tags
category
icon
password

2024 腾讯 微信支付 后端实习面经

岗位:微信支付后台开发
 

📎一面(2024.3.20,已通过)

遇到北哥了特别搞笑hhh
 

算法题

上来先写算法题
 
  1. lc54 螺旋矩阵(中等
  1. 手写Hash(不需要写哈希函数),调出插入,查找,删除三个接口
  1. 手写大顶堆(这题没要求我写,说哈希表写出来就行了,但说实话不太会,好像要写平衡树)
 

计网

  • 三次握手和四次挥手的过程
  • 为什么要有time-wait阶段?time-wait阶段是多长时间?(2MSL)
  • 如果系统突然出现大量的time-wait可能是什么情况?要如何应对?(keep-alive)
  • Http1.0,1.1,2.0分别使用的是长连接还是短连接?
  • 讲一下滑动窗口的底层实现(3个指针)
  • TCP长连接过程中,服务器和客户端长时间没有互通数据占用连接,要怎么办?
  • TCP长连接过程中,如果客户端突然断电立刻重启,这条TCP连接会怎么样?
  • 还是上述情况,如果客户端对应的进程挂了会怎么样?(陷入内核,由内核断开tcp连接)
 

操作系统

  • 讲一下虚拟内存,把你所知道的所有东西都讲出来
  • Linux系统的内存分布是怎么样的?(段页式)
  • 阻塞IO和非阻塞IO分别是什么?
  • 讲一下IO多路复用,select和epoll的底层
  • 线程池的工作队列是用来做什么的?(用来缓存还未有线程能来执行的任务)
  • 如何解决工作队列的并发问题?(加互斥锁,消息队列)
  • 消息队列是吧,用过kafka吗?(没有哈哈哈哈)
 

数据结构

  • 快速排序和归并排序的时间,空间复杂度
  • C++中,unordered_map和map的底层数据结构分别是什么?
  • 稍微讲一下红黑树(很难泵hhh)
 

支付系统

  • 看你做过支付系统,你在做项目的过程中,比较大的困难是什么(数据库字段设计,金额精度)
  • 一个支付在第三方支付系统成功,但是在你这里没有拿到成功的信息,也就是你的数据库没有入库,你要怎么做?(支付回调,事后轮询,事后对账)
 

📎二面(2024.3.28,已通过)

面试官就前期开了摄像头,后面就关掉了,有点怕kpi(收回,感恩面试官)
 

算法题(2选1写,都不难)

(1)给定最长0xff字节的16进制数据,要求以10进制格式打印出该数值。(未选择
 
输入:
unsigned char *hex = “95AFF9F703A8AFCBC027AD7818237234987234987”,
 
输出为:看不清了。。。但应该无所谓
 
 
 
(2)给定一个n,然后输入长度为n的数组,再输入一个S,你可以在每个数字的前面添加加号或减号,请你求出有多少种组合可以实现数组计算得到的值等于S。(已选择
 
输入:
 
输出:
 
Answer:
回溯法直接秒
 
剩下就是纯拷打项目了,没什么好说的,见招拆招,最不怕的就是面试官拷打我项目了hhh,但也不能保证能过。
 
反问:
部门做什么?微信支付,视频号的电商支付(woc 10个年终的部门啊,收了我吧球球了 🤤)
 

📎三面(2024.4.7,已通过)

很客气的面试官,还跟我道歉说因为部门调整,搞得我面试进度特别慢
 

算法题

给定A,B两个字符串,然后要求一个C,使得C可以整除A和B,也就是说,存在一个C,满足C = n * A 和C = m * B(m,n均为正整数),请你求出最短的C并返回,如果不存在就返回-1。
 
示例1:
 
示例2:
 
示例3:
 
分两种情况:
  • 如果A和B全是同一个字母,那么只需要求出A和B长度的最小公倍数即可(gcd模板开背)
gcd模板:
  • 如果有不同字母,那么B必须要整除A,可以的话就返回B,不可以的话就返回-1
 

C++

(1)C++里面有哪些类型强制转换的操作?
 

操作系统

(1)进程间的通信方式有哪些?
(2)乐观锁和悲观锁的区别?应用场景分别是哪些?
(3)有没有用过加锁的map?(扯上项目了)
(4)锁整个map很影响性能,有没有好的解决方法?(请看经典实现,map之分片锁)
 
其他都是项目相关,狠狠拷打我fastCache的底层结构
 

📎四面-面委面(2024.4.9,已挂,要加面)

被狠狠拷打了,希望能过吧
 
挂了呜呜呜,还是北哥告诉我的,北哥真是好人,就周五问了他一下,他就一直帮我看进度
 
主要问了项目,被拷打了一个点:
(1)为什么把密钥拼接在前面进行加密,比拼接在后面加密要好?不是都一样的破解套路嘛?
 
其实还有一种破解 MD5 的方法——长度扩展攻击。不过这种方法是在一定条件下(破解加盐之后产生的 MD5 码)才能用的。这种方法由 MD5 分块计算的特性而来。
 

算法题

超级困难版本,给了三道题,一个半小时完成
 
notion image
 
Answer1:
Answer2:
Answer3:
notion image
 
 

📎五面-面委面(2024.5.6,已通过)

一整个面试就一个问题:请你设计一个FTP文件传输系统,你要怎么设计它的架构?
 
一开始我听完立刻就懵了,这啥?先讲了一下文件传输系统的一些小流程,设计上传和下载的api接口balabala,然后就开始往某个具体的方向上引导
 

方向1:文件存储方式

联想到之前超参数面试官问过我类似的设计,然后我下来专门去看了,但没仔细看。。。导致给自己挖坑
 
说我看过golang的第三方开源系统seaweedfs,它的设计理念是去掉linux系统里面的文件描述符inode,然后自己重构一个新的更精简的文件描述符,同时把小文件进行打包,打包成数据块,用来优化存储结构,在这里也可以用类似的思想,来设计ftp服务器的存储
 
(1)为什么这个新的结构可以实现更精简的存储和索引方式呢?(说删掉了目录表和软硬链接的开销)
(2)然后他开始质疑:硬连接会增大原本inode的空间开销吗?(赶紧说不会,会直接建新的inode)
(3)inode的数据结构是什么?(直接懵了,太久没看八股了,直接说不会)
 
然后这个方向的提问就不了了之,然后就开始继续问我ftp系统还能怎么设计?
 

方向2:高性能网络模式:Reactor

这个就会涉及到IO多路复用,还有线程进程的区分处理,先给他讲完Reactor系统的设计,他开始提问
 
(1)那你这个reactor系统有多少个进程线程?(可以只有一个进/线程,也可以有多个)
(2)那你这个多个线程的Reactor模型是怎么设计的?(一个用于接收/分发任务,其余用于处理任务)
(3)你刚刚提到IO多路复用,那epoll通知你这个任务可以来执行了,你这个系统要干嘛?(直接给我整懵了,那不就处理任务吗hhh,然后我就给他把IO文件拷贝的流程讲了一遍)
(4)那你调用Read()函数,这个是从哪里拷贝到哪里?(我又有点懵,我就说如果有DMA的情况下,应该是从用户态拷贝到内核态吧)(md答反了,应该是内核到用户)
 
然后又问了我几个东西,记不清了,反正到最后一个没答上来,直接说不太会,然后他就结束了这个方向的探讨;
 
(额外*)那你这个ftp服务器,还有什么值得设计的功能吗?(断点重传)
(额外*)那断点重传是怎么实现的?(断点信息放session)
(额外*)那能放cookie吗?(嘶,不太清楚,我说好像也行但容易被篡改拿到破损的文件数据)
 
开始问,如果这个ftp系统要优化,你要怎么做?
 

方向3:分布式系统

我提出可以如果并发请求太高的情况下,可以设计分布式系统来解决这个问题
 
(1)分布式系统你要怎么设计(一个用于接收/转发请求,其他的服务器来存放文件数据,此情况是在假设分布式服务器都存放了全量数据的情况下)
(2)那你怎么保证负载均衡呢?(轮盘,取哈希打对应服务器,一致性哈希)
(3)你刚刚这个轮盘的说法,好像没办法保证你上面的断点重传功能?(用ip做哈希来进行服务器的访问,保证相同ip访问同一个服务器)
(4)一定要取ip吗,我们现在有nat技术,你这样可能会导致所有的请求都打到同一台机器上(传输文件之前先跟我拿token,根据token的哈希值来做转发,保证用户请求唯一对应)
(5)那现在假设我就一个用户,他一直请求,导致单个服务器负载过大,其他服务器都没事做,这种情况你要怎么做?
从这里开始我引入了分片存储的分布式方案,每个服务器只存储一部分数据,根据文件名做哈希来分片存放,同时要先预处理好热点文件,将它们均匀放在每个服务器里面,这样只要上面的用户一直请求不同的文件,也会打到不同的服务器上
(6)那你这样还怎么做一致性哈希呢?(我又懵了,想了想说这样就不需要一致性哈希了,他居然说对,笑死)
(7)那现在你这个服务器,只有一个用来转发请求的机器,它挂了你岂不是全部都访问不了了?(设计类似于redis的哨兵集群)
(8)那你这个主服务器的选举方式是怎么样的?(类似Raft协议的投票选举方式)
(9)那你这个投票规则是什么?(得半数以上票者当选)
(10)为什么不能是拿到一半or比一半更少就当选?(产生脑裂)
 
然后这个方向就结束了,他继续问我,还有什么优化方式?
 

方向4:QUIC:使用UDP替换TCP

一般文件传输我们都是用tcp进行传输,我们可以用udp更快,但是udp不保证可靠传输,所以我们还需要在应用层给他进行新的封包,保证其可靠交付,也就是http3.0所使用的QUIC协议
 
(1)为什么UDP可以比TCP快?(开始吟唱八股)
(2)QUIC和UDP的区别是什么?(继续吟唱八股)
(3)那你这个QIUC也加上了滑动窗口,超时重传机制,为什么它可以比TCP快呢?(udp协议并发传输,支持乱序收包,Stream流)
(4)据我所知,TCP现在也可以做并发传输,也就是你说的Stream流,那TCP的和QUIC的有什么区别呢?(TCP复用了同一个滑动窗口,QUIC是单独的窗口)
(5)那你这个QUIC可靠交付的逻辑是什么?(恒定递增的序列号)
 
此方向结束,然后还继续问我有什么优化方式?我已经实在是说不上话了,呃了一分钟,他就直接提示缓存,然后开始问(md我已经脑子发热了,这个都没想到。。。)
 

方向5:缓存 & Nosql

(1)假设我现在想设计一个缓存用来存储这些文件,让它更快读取,你觉得要用什么数据结构来在缓存中存储这些文件呢?(类似于nosql的设计,用json数据体来存储)
(2)ok,用json,但我是问你数据查找的结构,单个文件用json,那我怎么找到对应的文件呢?(缓存用跳表,磁盘用B+树)
(3)除了跳表和B+树,还有吗?(我呃了5s,还没说,他就说今天先面到这里)
 
到此结束,也没有反问环节,他急匆匆地走了hhh,从17:00面到18:40,面了一个半小时,而且他自己饭都没吃,估计急着吃饭去了hhh
 
果然,直觉是对的,面到自己饭都忘记吃了,这我还能不通过? 🤣
 

📎hr面(2024.5.9)

 

📎offer(2024.5.28)🎉🎉🎉

2024 字节跳动 国际电商后端实习面经2024 拼多多 后端实习面经
公告
type
status
date
slug
summary
tags
category
icon
password
🎉Welcome!!!🎉
NTU在读master
字节、腾讯实习 Get!💯
Blockchain、分布式爱好者
向天祈求一份好offer

近期会更新MIT 6.824课程lab
共勉。