快手业务一面(感觉要凉)

被拷打晕了,问的我头晕眼花,整体40min左右

先扯项目(xfg的大营销,时间不够只做了一阶段):

问项目做着玩的还是别人&*的?
没听清楚后面,我以为问我项目是不是扒的别人的,我就说设计有参考,但是是自己写过来的。结果后面问我有没有实际用户。我就说没有,上线了但是只做了一下压测,让朋友试了试,没有实际推广。(面试官回了一句哦做着玩的。)

介绍一下项目流程,整个抽奖的等等。
第一遍说完又让我重新说整体先,让我别先急着说这么细(但是我感觉说的已经够简略了。。),来来回回反正过了两遍才解释清楚最后极简版说了个接口调用-奖品装配-抽奖-库存扣减。

问用脚本并发抽奖怎么处理?
一开始还是没理解想让我说什么。。我还寻思抽他的呗,又不是顶不住(之前没了解过幂等,跪了),我就说可以正常扣减积分多次抽奖,如果压力过大就在redis加个3s过期的锁拦截一下,控制一下抽奖间隔。然后跟我理半天记不得说的啥了,但是最后统一问题就是同时多个请求打过来会不会造成多次抽奖只扣一次积分。一开始急了先说加个synchronized锁,虽然一开始就知道肯定不可行,但是当时也不知道说啥了,就先说了再说。然后说我性能问题解决不了。然后我想到用redis扣,就说走redis扣积分,再同步到数据库,用单线程模型来保证每次请求都能命中扣减积分,积分不够扣就直接返回。(没说话,感觉还是想让我只能成功处理一个请求,但当时不熟幂等,自然也没辙了,下一个问题)

可能是刚刚说了锁,转头问了八股,问了java有哪些乐观锁说了atomic,问底层实现,说了cas,再追问cas的实现,说了自旋,有aba加版本号或时间戳。

接着问volatile,问原理,没怎么看说不会,只记得作用。然后让我说了作用,转头又继续问了怎么保证的变量可见性(我刚刚不是说不会吗),然后还是说不会。继续问内存屏障了解吗,我说听说过但不是很清楚(只记得是保证不重排的东西?),结果还是被追问内存屏障原理,还是不会。。

转头继续拷打项目怎么保证扣取积分和扣取奖品库存的一致性。
前面被问懵了这里一开始也没听明白,沟通了一下意思是假如扣了积分然后抽奖途中程序挂了怎么办。不清楚,本来想糊弄过去,说发了扣库存信息之后会用redission延时队列的持久化特性来保证扣取信息不丢失。但被继续追问在发奖品之前,抽奖途中就挂了怎么办。不知道了,他说事务不了解吗(实在是忘了。。立马说在接口处加@Transactional,但感觉为时已晚。。)

算法,最长递增子数组,做过,忘了思路了。让我先说说思路,我说用dp,但具体实现忘了,让我先想想。想了两分钟想到方法,说了一半感觉捋不清楚,就说干脆直接写。然后几分钟写完,平台调试不了,他那边跑了有错。帮我检查代码发现又没啥问题。最后就不纠结,算a了也是。

反问:本来不想问了,人已经晕了。还是象征性问了下部门业务。没敢问表现,,自己挺清楚。。问完说再见赶紧下播跑路了。

目前最可怕的一次面试经历。。怎么练场景题呀,项目没用过的东西根本不清楚#牛客AI配图神器#
全部评论
你要是做着生产,就直接创业了,还踏马的面快手?
3 回复 分享
发布于 03-10 18:46 安徽
***面试官,他工作前就自己有项目了
1 回复 分享
发布于 03-15 01:38 陕西
我觉得你当时应该说 哦 原来你们组的项目都是你一个人做的呀 什么 不是你一个人做的 闹着玩呢
点赞 回复 分享
发布于 04-09 08:57 天津
这是测开还是后端啊这么难
点赞 回复 分享
发布于 04-04 10:48 香港
接好运
点赞 回复 分享
发布于 04-03 22:55 湖南
是不是xfg
点赞 回复 分享
发布于 03-24 18:50 四川
一样,快手贼压力,还叹气,不过第二天就奇怪的约二面了
点赞 回复 分享
发布于 03-15 10:39 重庆
哥们啥部门啊?
点赞 回复 分享
发布于 03-11 20:19 江苏

相关推荐

03-26 20:24
已编辑
北京邮电大学 Java
面试官人很好,也很耐心,但是也喜欢咬着我不放三分钟自我介绍开局拷打项目:经典一致性问题。这里一直在聊redis库存扣减到写入sql这一整段的最终一致性。我首先讲了我目前的实现,异步扣减+手动ack持久化订单消息+定时任务更新库存。面试官说性能会不会太差,用户抽奖能立即拿到结果吗?我就说压测平均响应也在100ms以内,并且抽奖肯定有转盘动画之类的,完全能撑住。这里又问了一下并发抽奖怎么办,说了加3s过期分布式锁,限制单用户短时间内重复点击抽奖。面试官好像对回答还是不满意,接着问,假如我一定需要优化性能,减少响应速度,问我有什么改进方法,我说可以考虑还是改回自动ack,把持久化订单信息放到扣减库存后,发mq消息前(错误示范,当时没想太多,这样做redis抗并发的意义就没了,还不如直接写库)。不过面试官好像也没意识到出错了(,他目标似乎不在这上面。接着又说了半天场景(对不起我又没听明白是问啥),大概就是说,假如写库的时候会有规则校验之类的,这时候挂了咋办。(这里我已经感觉到不妙了,因为还是没明白面试官想问的方向),我说自己的项目都是把这部分给放到校验之前,保证这部分只专心做写库。还是不满意,继续追问,实际情况很复杂,假如这里就是需要做其他的校验,该怎么办。我说可以用事务来回滚,又被问分布式transactional出问题怎么办,直说了不大了解(其实就是怕被问到这儿,还是没躲过去)八股(我通过面经梳理的顺序,实际上感觉问的还挺跳跃):可能正好提到了事务,话接上文,于是问了我嵌套@Transactional会有什么问题?(后面复盘才知道当时应该是问同类下调用事务方法的失效场景)。问多态底层原理。对不起真不知道,直说了不清楚,再狡辩回答了一下多态的体现(方法重写重载等等等。。。)==和equals区别。过String的数组为什么要用final修饰?对不起我又没见过这样问的,,说可能是为了保证字符串不可变,线程安全,当时还脑洞大开说跟builder和buffer那俩相比,没有对字符串的操作而是直接生成新的字符串,性能上也会更好(实在是不知道说啥)反射的优缺点。过aop的底层原理。说了动态代理和字节码操作,又详细说了动态代理因为动态代理说到了CGLIB和JDK实现,又顺着问了我两者的区别。过jvm内存。过为什么永久代被替换为元空间。说了个永久代oom风险更高,其他记不大清了堆对象是怎么进行分代和转化的。大部分对象新生代,大对象老年代。通过年龄计数器来确定对象的升代。G1的过程和优点。过,这部分还好记挺熟io流。没怎么看,早知道不偷懒了对象创建过程。过mysql索引底层结构,和其他对比。过B+树范围查询怎么做的。从下界节点走类似中序遍历直到收集到上界节点。redo log和undo log,他俩结合起来能解决什么问题?单独说没问题,问我结合的时候我还有点懵??没懂想让我回答什么,最后说了个可以实现事务和宕机恢复(但我单独介绍也说过了,dbq不知道)。Spring启动过程。过算法(其实是说思路,变种场景题):基本有序的数组什么排序最快。插入追问为什么是插入。梳理了一下逻辑讲了讲插入的过程和可以优化到O(n)找第k个位置的元素怎么找。快速选择和堆排一个很大的文件,比如要做词典,怎么在其中匹配对应字符串。说了字典树假如连续一长串不规则字符串呢?不是很清楚,说es,但追问我es原理,说了倒排索引,继续问是怎么实现的,承认了看过一些,但没看太仔细怎么在一个串中找到出现次数超过一半的字符。说用哈希表统计然后计算。追问假如输入是一个流呢?(其实也想说哈希表也能做啊,但感觉可能想让我回答其他的)只好说不大清楚最后:毕设方向是什么?回复,我目前是大三()还没确定,问知不知道方向?我们学校一般大四才开始做毕设base地意向北京,但部门在杭州,能不能接受;ok反问:部门业务最后一个场景题做法?摩尔投票,(听到的时候感觉很熟悉,不知道好久之前看过这个,但现在忘了)#牛客AI配图神器# 总结全程1h2m,还得练,这就回去加班看事务
点赞 评论 收藏
分享
评论
7
42
分享

创作者周榜

更多
牛客网
牛客企业服务