首页 > 19本shopee社招后台开发面经
头像
教欧文打篮球
编辑于 2021-03-27 20:03
+ 关注

19本shopee社招后台开发面经

跳槽心路历程:
本科毕业不到两年,工作虽然很轻松,但感觉没成长,日渐焦虑,怕自己待下去就废了,当然也觉得自己技术水平还ok(每天都会抽时间去看书、文章、博客、源码等),因此年后回来就想跳槽,想看看更大的世界~
shopee是深圳准一线的网红厂了,听说wlb钱多,所以找了前同事内推,抽时间面了一波。当然了,第一次面试是走出舒适区的过程,面试前怕被吊打,而且本人是java技术栈的,面go岗位还是有点八字不合的感觉。

感谢牛客中海量优质面经的帮助,但社招面经还是很少,因此我也来发篇社招面经回馈一下社区。

废话不多说,下面是面经详情:
一面技术基础拷问环节,大概1h30min。
1.项目相关,业务细节就不说了,每个人不一样,但是有几个刁难你的技术问题得好好思考再回答。
日千万级的推送都在mq处理吗?怎么保证不丢?
答:沉默了一会,只能说不保证,就算推到底层,还是有可能发送不成功,那为什么我要为了千分之一甚至万分之一的丢失率去损失可用性呢?后面我扯到了rocketmq事务消息防止丢失,但其实这个场景是不适用的。
为什么不用kafka,用rocketmq?
答:心里os:还能我选的吗?公司有什么就用什么呗。然后我说kafka一般是消费binlog使用,rocketmq一般是业务场景使用,而且公司是java技术栈的,用rocketmq会有更高的操控性,做二次开发,然后面试官说了句kafka也是jvm上跑的啊,这时我们都沉默了。
使用预加载到redis的形式去计算发放数量,怎么跟数据库保持一致性?
答:还是只能说不保证,但是能保证只少发不亏损,数据库唯一索引保证写入唯一性,已经写入的会补偿数量,如果数据库报错会告警+mq补偿,业务能接受一定的不准确性等等。write through write behind等方式还是不太适用。
用户端的活动数据怎么保证高并发访问不挂?
答:用redis集群+binlog异步刷新来保证高并发,其实我们的qps没达到打垮redis集群的程度,所以还是有点尴尬。然后扯了一下京东hotkey的原理,服务端计算hotkey访问数,自动推送到客户端本地内存,来做到scale out。

下面是常规八股文环节,还是比较简单的,其实当时的项目被灵魂拷问后有点紧张,答得很一般。
1.一致性hash,虚拟节点作用,为什么一致性hash是一个环。
2.https四次握手,数字签名,证书验证,非对称加密、对称加密。
3.tcp四次挥手,为什么需要close-wait要发两次才能结束。
4.10g乱序文件找中位数,思路即可。你的思路算法的瓶颈在哪,是内存排序,还是读写磁盘文件?
5.写sql,深翻页优化,我写了inner join、where index>?两种方式。where index>?方式有什么缺点?inner join为什么快?
6.innodb索引格式,为什么是b+树,查询次数,为什么要回表查。
7.分布式事务怎么实现?当时只说了扫表(怎么减轻扫表压力)+rocketmq事务消息实现原理+seata at实现原理。其实还可以扯下tcc、xa,不过感觉面试官已经知道这题问不倒我了,就没继续说下去。
8.linux怎么管理内存?扯虚拟内存格式,malloc,缺页中断,页表,换出算法(FIFO、LRU、CLOCK)等等。
9.进程线程协程区别?从task_struct开始,线程共享虚拟内存fd等等,扯了一大堆,面试官听不下去了,说了一下协程呢?然后我说了java quasar的原理(修改字节码,使用stack数据结构保存现场恢复现场等),协程的本质就是用线程调度的用户内存task。
10.你的博客写得很平淡无奇啊。又尴尬了,我只能说喜好不一样,研究好中间件框架一个很重要的事情就是让你从哪个类开始看源码,抓住主流程,分支流程就很简单了,然后反驳了一句如果是我去看源码的话,我会很喜欢这种博客的。坚定立场,不能怂!
11.限流有哪几种方式?我扯了阿里sentinel的令牌桶、漏斗、冷启动、自适应限流(bbr、cpu load),为什么bbr公式能做到自适应限流?当时没想明白这个问题问什么,然后面试官说了可以根据结果来做调整。
12.手撕算法,中序非递归遍历二叉树。我没练过手撕算法,都是记思路的,一看到题有思路就跳过这样来刷题。结果现场有点翻车,虽然思路是对的,但是有几个小bug。希望大家还是可以练练手撕,有思路不一定能完美写出来。
反问环节,我问你们的技术栈是啥,然后他看了下我面的岗位,好像才知道我是不到两年的本科,感觉把我当成来面高级岗位的。我简历没写年龄,只写了学校毕业时间和目前公司的就职时间,其实够专业的话也能算出我的年龄,为了避免尴尬,还是把年龄写上吧。。

二面非常规面试,准备的八股文完全失效,只问了2个技术问题+1个项目描述,全程被吊打,大概1h30min。
1.我看你简历有对go语言感兴趣?对协程了解吗?我们聊聊协程实现?被面试官引入坑了。
还是扯了一堆java quasar的原理。
问:stack里面保存什么?
答:method栈帧,pc,局部变量。
问:局部变量是什么?应该不会保存在stack里面吧?
答:java分配对象内存是在堆里面的,你可以理解为一个指针。
问:协程怎么停顿?
答:抛异常造成suspend,保存现场。
问:协程为什么高效?
答:避免内核中线程的上下文切换、协程数据更轻量。
问:还有吗?等了一会我没思路,然后面试官自己说了其实还有一个,线程是可以随时发生上下文切换的,而协程是需要在固定位置显式切换的,所以保存上下文更轻量。
答:哦哦哦,对,没想到。

2.用户访问A服务,A服务需要调用B服务,但是B服务的处理耗时在不断上涨,问A服务的关键指标(cpu、io、mem等)会怎么变化?
听到问题后,我直接原地爆炸,头皮发麻,只能用dubbo的思维去硬扯,其实没太分析出来,可能分析出来5 6成吧,尴尬。
面试官继续问:你都是分析同步调用,那异步调用呢?
更爆炸了,当时陷入了java rpc线程的思路死循环中,异步调用不是一样吗?除非说A服务需要同时调用B C服务,可以用异步同时调用B C服务再get来达到并发调用的效果,但是指标应该是一样的?
然后我扯了一句,太细了,打了句哈哈,我们线上遇到这样的问题都是直接扩容解决的。面试官反问为什么扩容能解决,然后我说了句处理固定数量qps的请求,如果多个应用一起扛的话,每个应用能够均摊,如果B服务也能顶住的话,其实可以不被B服务影响吞吐量。
其实后面细想,面试官真的是在问这个吗?协程协程,抓住协程跟线程的区别,这题就迎刃而解了,为什么协程高效?因为完全异步调用时协程能够接受在调用处停顿啊,线程做不到。其实问题是承上启下的,当时没get到他的点,太可惜了。

3.项目相关,挑了一个来讲,比较细,面试官一开始没理解我的讲解方式,让你画架构图你却在扯什么数据结构,然后我来了句点睛之笔后他就懂了,有些业务细节甚至扯到组织架构相关了(有兴趣的可以查下康威定律),然后他说也想过这种方式去做他的业务,业务匹配度高就是不一样,后面就聊得比较开心了。

4.聊天模式,你是怎么样的人,上司和同事怎么看你,你的优缺点,你的核心竞争力,你跳槽的期许,有没有面大厂等等。
5.反问环节,扯了下k8s落地相关,我说有看到他们的k8s岗位招聘,是已经落地了吗?
二面面试官问的问题有点爆炸,能看出来是个技术leader,遇到技术leader面试其实不会全部关注你目前的技术水平,也会关注你的潜力、合作度,能否融入团队等,硬实力是门槛,软实力其实更重要!所以聊天模式也要好好回答,面完下来感觉人是很nice的。

三面是平淡无奇的hr面,就不分析了。

最后总结:
1.面其他语言的岗位最好不用把大部分精力放在本语言特有的八股文上,比如常规的spring、jvm、juc八股文?虽然我都会哈哈哈。不过一些无关语言的,比如rpc、mq等,还是可以准备的。
2.社招的话项目匹配度高还是很加分的,把项目总结好,多用star法则(背景,用了什么手段,解决什么问题,达到什么效果),不要只写功能的堆叠(XX系统有什么什么功能,用了什么什么框架中间件)。
3.问题很多都是承上启下的,如果不会,可以往这边去思考下,面试官真的在刁难吗?
4.不懂的问题不要慌,要学会扯到你会的地方,表达你的技术积累,面试是自己的秀场,不是一问一答的过程。
5.八股文一定得答细致了,比如一个经典问题:mysql有哪几种日志?一般可能答个redo undolog可能就完事了,但真的有那么简单吗?完全可以继续说有中继日志慢查询日志错误日志查询日志等,然后继续扯下去(中继日志扯到主从同步,慢查询日志扯到sql调优),让面试官觉得就算你是背的也是背透了,你的知识面是能够发散的。
6.不要紧张,不要紧张,不要紧张,重要的事情说三遍,紧张真的会严重影响发挥!

更多模拟面试

全部评论

(15) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

热门推荐