2023.3.27-腾讯后台开发-微信支付团队-一面凉经
楼主刚刚学习一个月,非常地菜,也不知道为什么会被WXG捞起来TAT,而且简历只有Java技术栈
开场介绍
10:00开始于牛客在线面试房间,面试官先问我对实习地点(部门在深圳)有无说法,我说没有,哪座城市都行。
接着,他说看我简历都是Java,但他们这都是写C++的,“我上次写Java都好多年前了”。
(内心吐槽: 那为什么要捞我啊我很菜啊啊啊啊)
做题
给出一个单向链表,要求原地螺旋重排链表 (剑指 Offer II 026 重排链表)。
要求:
- 代码简洁,可复用、模块化
- 异常处理规范
- 讲清楚时间复杂度和空间复杂度
- 不能使用语言的特性,只能使用基本类型和基础语法(如果要用到栈或队列的话,必须自己用数组实现)
讨论
面试官在牛客侧边栏慢慢地敲完这些字,然后我想先建个ListNode数据结构再说,刚上手敲(我这样很不礼貌,应该询问他的)
面试官立马打断我说:“别这么急,我面过几十个优秀的同学,他们写的代码几乎没有一个让我满意的,你先听我说完要求。”
他讲完要求后,让我复述一遍,以确认我是否理解了他的要求。
然后要我思考怎么解,我的第一反应是最简单的暴力解法: 每趟遍历到tail,然后把tail插到当前cur的后面。面试官说你可以把链表拆分,再想想怎么做。
经他点拨,我就想起来了,先通过快慢指针找到链表中点,分割链表,然后反转后半部分链表,再和前半部分合并即可,这样整体时间复杂度就是O(N),而且也符合原地的要求。
他听我说完后,给我25分钟,写出满足他要求的"模块化"代码,可以用本地IDE写,要打开屏幕共享。
这期间他要开个小会,然后我就开写了,过一会他让我闭麦("同学你用的机械键盘吧,有点吵", 老尴尬了我)。
写题
大概过了25分钟,我用IDEA写完了(我写得很简单,几乎没有模块化,主要是我比较菜,光写都很久),简单拆分了功能,每个函数只有简单的空指针异常检查)。
他让我把代码复制到牛客的代码编辑页面里,然后他很快看完了,就说:"你这也没模块化啊,不行。。。"。
赧颜了,整个做题环节一共55分钟,到10:55了,他也开完会了。
八股
就问了3道,可能因为我语无伦次的,他就没继续问了
-
Q: 操作系统还记得吗?
A: 不记得了,很久以前学的(楼主最近主要在学Java那一套,操原还没复习)。
Q:你说说操作系统是怎么解决进程之间的死锁
A: 根本没看操原的我只记得一个破坏环路条件,我只说了这个然后直接说明记不太清了。
-
Q: 关系型数据库知道吗?说说3NF
A: 3NF很简单就是2NF之上再消除传递函数依赖,但是我很紧张直接口胡成2NF的部分函数依赖,刚说出口我就想起来说错了,然后赶忙补救一下。
-
Q: 计网的还记得吗?说说TCP拥塞控制
A: 我 balabala, 讲完了慢启动、拥塞避免的线性增长阶段,再讲到超时重传时的拥塞窗口大小cwnd和ssthresh的变化,刚准备讲快重传,他就打断我说可以了,并且说:"我感觉你有点啰嗦,说得没有条理,你要想好再回答。"
系统设计
长短链解析系统设计
Q: 你知道网站短链和长链吧?要你设计一个长短链解析系统,且你要考虑有的短链属于热点链接,访问量很多,你怎么设计?
讨论
这个我知道大概是通过Nginx 302重定向,短链对应的域名解析到Nginx服务端这边,然后Nginx将请求重定向到解析后的长链上,然后我又提了一嘴热点链接可以放到Redis缓存里,直接跳过解析阶段返回。
面试官Q: 你这也不是系统啊?我看你项目里用了微服务,你从这个角度讲讲。
啊,我就说做个服务集群,里面的每个服务实例都要通过服务注册中心进行服务发现和注册,然后在Nginx后面再放个专门的微服务网关,根据负载均衡将解析请求打到不同的实例上。Redis和MySQL之间组成旁路缓存模式,服务实例处理请求的时候先看看能不能到Redis中获取,缓存中没有的话就自己根据算法解析或者从数据库或者从别的数据源取来,返还给客户端时顺便写到Redis里。
面试官Q: 你的这个系统有缓存和持久化数据源比如说数据库两种,按照你说的,如果突发大量请求解析热点链接,而这些都不在缓存中,那压力不还是来到了数据库上吗?
我想了想这是缓存击穿问题,就考虑从两个方面缓解这个压力:
-
热点高峰来的时候启动消息队列,把这些请求当作消息存到消息队列的信道里,每个服务实例慢慢消费这些信息(主要是怕请求高峰导致丢失部分请求)。
-
使用MySQL集群主从模式,这种场景下的压力都在读数据库上,用一些分发中间件(比如sharding-jdbc)分流读写请求,从节点负责处理读请求,主节点负责写请求,主从间数据定期同步以保证数据一致性。
我的马后炮:本来还想说分库分表,但是一想到这个好像没有啥用户数据之类的,想了想说不好分表(其实应该可以水平分表吧,但是我不晓得怎么处理这个TAT),好像还能用布隆过滤器快速判断短链存不存在(处理无效请求,应对缓存穿透问题)。
然后就11:30了,做题一共花了55分钟, 八股加系统设计一共35分钟QAQ,面试官说到时间了,先这样吧。
反问
感觉自己凉透了,很菜还被拷打。
想问问您在微信支付部门工作是种什么样的体验
面试官主语: 微信支付部门是很严谨的,微信支付是直接和钱打交道,所以我们的工作氛围就很严谨,做事之前要仔细考虑问题,慢就是快。你先前那么快的就上手敲(我的不礼貌行为一直被他记着呢),还没思考完就做,越快错得越多。
我们部门提倡终身学习的,可能对于其他部门学习没有具体衡量指标,但是在我们这有,你需要在几百人面前汇报最近学习的知识,并接受同事们的提问,同时还有指标衡量你是否能够将学到的知识应用到工作里。
超大型组会?
先前答题的时候我很啰嗦,非常紧张,想问问您有什么诀窍或者说方法训练说话的条理或逻辑性(等他批评我)
你可以深呼吸啊,还有,(开始拷打鼠鼠我了)我认为语速快并不是你嘴笨,语速快的原因有两方面,第一,你不自信(鼠鼠我非常不自信的唉),第二,你对知识掌握得不够熟练,缺少底气,所以在答题的时候无法组成条理,用另外的知识来掩盖你不熟悉的知识(一针见血,我确实不记得了555)。
最后,没有问题了,礼貌告别面试官,等他先挂会话。
总结
这是我的第一次面试,鼠鼠我一直都是信奉躺平的,说白了就是非常得懒,没有自我驱动力,研二寒假因为疫情提早回家,在家里爽玩2个月,开学后发现大家都开始投实习了,后知后觉
腾子确实很牛,希望腾子不要再捞我这个菜鸡了(这下面评不好,肯定也不会捞我了吧)
先这样吧
#面经##腾讯##实习#