腾讯 两次二面给我的经验
本人Java 选手,BG 双非本985硕士无实习,秋招面试腾讯两次,一次提前批一次秋招(秋招无笔试,感觉和提前批区别不大),均挂在了二面。
1. 提前批-TEG云架平(C++)
1.1 一面
因为自己是主要使用Java,所以面试的内容主要是还是以计算机网络和操作系统等基础知识为主(一面的内容主要还是计网,我猜二面肯定会多考操作系统,楼主狠狠的押题住了),中间穿插了一些场景题,无项目问题。
这里楼主印象比较深刻的场景题就是:有n个节点的数据需要同步,请设计一个同步算法,并分析时间复杂度。
楼主一开始以为得用一致性哈希,最后发现直接用已同步的节点与其他未同步节点同步就行,时间复杂度是logN的。
编程题:斐波那契数列。
这里主要考察了这个算法的优化问题,如何平衡时间与空间,楼主很行。
总共面试时长应该不到1h。
1.2 二面:
一面秒过,不到一周的时间就约二面了,看来楼主一面表现还可以。
面试的时间比较久远了,主体的面试内容楼主记不太清了,唯有一道场景题给楼主印象深刻,场景题的描述可能有误哈
场景题:存在客户端与服务端的post,也存在服务节点之间的post,如何保证数据的一致性。
比如A为客户端,B、C为服务端节点,A请求B要求设置value=1,但是由于网络故障这个请求暂时没有收到,此时C请求B设置节点value=2,此时网络恢复导致value=1,如何保证数据的一致性(这里可能是顺序一致性)。
我秒答使用序列号机制保证这种顺序一致性,比较消息的序列号的来判定是否执行value的修改。面试官又问,如何确定这个初始的序列号呢,楼主懵了。面试官暗示我想想TCP的三次握手,楼主太笨了没想出来。最后面试官给了答案,可以在请求之前约定初始的序列号,比如A给B发送消息说setNum1中的序列号都可以,然后B收到消息后从setNum1中选取B也允许的序列号返回作为初始的序列号(楼主是真想不到啊)。
编程题:从n个正整数中取k个数,使得k个数之和小于s,求取值的方案数。
楼主第一眼的思路是排序加滑动窗口,但这样连续取的话肯定是不满足的,然后这题也不让用DFS,楼主懵了。
然后面试说给你简化一下吧,你就求k个数之和等于s就行,用滑动窗口做。(我勒个去,纯纯误人子弟啊)
然后楼主按照面试官的说法写了一份代码提交了。
后来和同学讨论,说用dp来做,合理,不知道为啥面试官不提醒我用DP呢,反而还误导我。
2. 秋招-CDG金融科技(Java)
2.1 一面
来吧我的Java主战场(隔了一周多,把楼主捞起来秋招了),楼主中途郁郁了,也没有面试,早就忘光光啦。
面试内容主要以Java为主,408的内容很少,没啥印象了。
补充:想起来了,面试官狠狠的问了我Java反射,它优缺点啥的,太痛苦了,难怪我想不起来了。
编程题:最长无重复字串
2.2 二面
痛,太痛了!
二面极其Open,就三个题。
场景提1:如何设计购物车
这个题主要考察的对join表的处理,因为作为一个现代化的购物车,你需要显示库存,降价,商铺名称等信息,其中会涉及到一些联表。
题主答的是冷热分离,然后热数据用缓存,分别使用推拉的方式处理冷热缓存数据。
场景题2:mq的设计
我的天。
哥们儿只知道kafka 零拷贝这套,还有其他分布式的一些东西,瞎答了一波。(之前也看过b站的小白debug讲这些设计,但都光光了)
场景题3:转账
A给B转账,A和B位于两个节点上,如保证数据一致性。
盲想就是加锁,但效果肯定差,有点懵。
因为涉及到两个节点,所以是分布式事务,使用mysql的MVCC肯定保障不了。
楼主想到了TCC这种框架,面试官让我写了下伪代码,但楼主太沉迷加锁了。
后来面试官说让余额分为固定余额和流动余额,你只要锁住流动余额就行,这样就不会影响到用于查询的固定余额了。(ps:还是经验不足啊)
无编程题,面试完秒挂。
面试官有点严肃,楼主狠狠的给了差评。
3. 结语
面试腾讯感觉和字节很像,很重视深度,楼主需要再历练一下了,多看看项目。
#互联网##秋招##面经腾讯美团百度#