快手商业化部门一面凉经

时间线:11.29 投递,12.1 简历通过,约面。 12.08一面,答的一坨,估计极大概率已挂,面试时间总计35分钟

update: 12.11晚被发感谢信

个人反思

这两周效率还是不太高,每天有效学习时间6小时左右,背八股 + 刷算法,同时看12306的项目文档,阅读项目代码。期间学到了很多新的东西,但也遗忘了很多八股。现在只能继续边投边面边学了,“沉淀”对于我这种懒人来说是个伪命题,有了面试的压力,心里才有更多的动力去学项目中的业务逻辑和背八股。

虽然时常安慰自己不要焦虑,但是接连的面试已挂还是相当打击人的。12月还有一堆乱七八糟的期末考试,后天11号要考编译原理,到现在都没开始预习。明天又约了一场面试,只能用不到24小时的时间速通期末考了。

在复盘历次面试录屏的时候,我发现我的语言逻辑表达能力相当差劲。我认为对面试(日常实习、明年的暑期和秋招)的准备和发挥有三个阶段:

  1. 了解弄懂项目中某个业务的执行逻辑,并能够编码复现基本功能;
  2. 能口述表达清楚这个业务的具体流程,并且讲清楚背后涉及到的技术原理;
  3. 在基本的业务流程上,延伸去讨论相关的场景和技术改进,有自己的想法。

我现在能弄懂我之前写的玩具项目中的业务逻辑,但是一到面试的过程中就表述的相当混乱。对于此问题的解决,可能还需要多了解回答的技巧,背一下相应的话术。很折磨人,这可能是平时的口头交流过少导致的弊病。

面试内容

  • 简单自我介绍一下

项目拷打

  • 简单介绍一下你的校园生活服务平台都做了些什么。然后你用了哪些技术解决了哪些问题。
  • 抢优惠秒杀优惠券这个功能,你觉得最难的点在哪里?
  • 大概什么场景下会发生超卖?超卖是如何发生的?
  • 对于这个问题,用 Redis 怎么解决的?
  • 这个场景为什么需要可重入锁?

(一时语塞,不知道答什么。之后答了用户可能多次点击下单抢券,后续的点击操作需要保证他能首先获得这个锁 。)

  • 那这里乐观锁解决了什么问题?

(答了乐观锁是基于比较和交换 (CAS) 机制,去比较当前订单号,用于修改数据库中库存信息 。相比于悲观锁判断剩余库存,乐观锁过程会快一些 。)

  • 你这里写了乐观锁和分布式锁,感觉他们两个能力是有些重复的,为什么?

场景题

  • 如果我们这个系统有几亿个用户,现在发优惠券力度大,可能有几千万人抢,并发量比较大,你觉得你现在这个系统会在哪里先出现问题?

(当时听到这个问题很懵,答了可能会在数据库层面出现问题,几千万用户的请求,大量的并发请求可能会把数据库打穿 ,因为缓存中没有数据时,请求需要到数据库进行查询)

  • 针对有开始抢时间(比如下午三点开始抢)的业务场景,你有什么优化好的方案吗?你觉得你能在哪些方面来优化这个事情不被击穿?

(答了限流操作,把这些发送到后台的请求先一步送到一个消息队列里面去 ,然后从消息队中选出一定量的请求送到后台进行进一步操作 )

  • 你把原本实时的交互变成了一个异步的交互,会不会有一个问题,就是说我点抢优惠券之后,需要等一段时间才能知道我有没有抢到这个优惠券?交互体验是不是不好?
  • 如果不在数据库层面上操作,而是在缓存中操作,但是大量的并发打到 Redis,Redis 同样也扛不住。你的 Redis 和数据库都是一个单机服务,没办法通过水平扩容的方式来让它处理。
  • 你这个项目假设可以服务于 QPS 20。那我给他部署十台机器,它能扛住 200 吗?那如果给他部署 100 台机器,它能扛住 QPS 2000 吗?好像它不是一个线性增长的关系,对吧?
  • 这种问题如何解决呢?在比如说在 Redis 集群中
  • 你之前有听过那个 CAP 原则吗?

(没听说过,上面几个场景题答的一塌糊涂)

消息队列与数据库

  • 你了解 RocketMQ 和 Kafka 吗?你觉得他们两个有什么区别?

(答了Kafka 是针对大容量进行设计的 。RocketMQ 能做到顺序操作消息 )

  • Kafka 不能做到顺序操作消息吗?
  • MySQL InnoDB 使用的是 B+ 树索引,B+ 树索引跟 B 树索引有什么区别?
  • B 树索引和 B+ 树索引它都是一棵平衡树,对吧?如果我们对 MySQL 进行大量的增删改操作,会导致这个树变得不那么平衡。然后它是如何恢复平衡的?

(答了它可以进行左旋或者右旋节点,有点像 AVL 树里面那种操作 。)

  • MySQL InnoDB 它可以进行旋转操作吗?
  • MySQL 事务隔离级别一共有 4 种。在什么数据库管理情况下可以避免发生幻读?
  • 幻读是如何发生的呢?

关于 Spring AOP

  • 好的,你可以给我简述一下什么是 AOP 吗?就 Spring 的 AOP。

(答了 AOP 就是面向切面编程 。它是通过切入点进行操作,用表达式对要操作的那些方法,前后去加上比较一致的业务逻辑代码)

  • 有什么场景下会需要 AOP?

(答了:做的项目里面,一般来说是对一些日志进行记录 )

  • 如果假设我们项目中不允许使用 Spring,然后让你来手工实现 AOP,你会怎么做?

(这边不是很明白他的意思是啥,想问 AOP 的实现机制还是说怎么去手写 AOP 实现逻辑。想了一会之后,我回答手工实现首先需要解决表达式匹配的问题 。其次需要在方法里面得加上那个切点表达式匹配的逻辑 。还需要自己去实现像 @Before 或 @After 这种逻辑。口胡了一阵子之后我表示不是很了解)

算法题

  • lc200 岛屿数量

(直接在萝卜面试平台上写,12min写完过了给的样例。期间面试官也同步在看写代码的过程,所幸这个题挺基础的。但无济于事,此时我已经知道面试极大概率凉掉了,因为上面的八股和场景题答的稀烂)

#面试题刺客退退退##如何判断面试是否凉了##你觉得技术面多长时间合理?##面试时最害怕被问到的问题##发面经攒人品#
面经总结回顾 文章被收录于专栏

本专栏用于记录我的日常实习、暑期实习和秋招中面经的记录、反思和总结

全部评论
我也面了这个题目跟你基本一样 但是我算法考了个没见过的hard
1 回复 分享
发布于 2025-12-16 15:20 黑龙江
佬,是后端吗?
点赞 回复 分享
发布于 2025-12-18 12:21 上海
佬,品牌营销商业化今天还打电话约我明后天面试,看了你这个有点慌啊
点赞 回复 分享
发布于 2025-12-15 20:44 四川
太强了
点赞 回复 分享
发布于 2025-12-10 11:10 上海
mark
点赞 回复 分享
发布于 2025-12-10 11:09 山东

相关推荐

04-22 23:15
中南大学 Java
时间:4.21公司地点:北京时长:52min做了一些简化,提取了更有借鉴价值的部分1. 部门介绍2. 自我介绍3. 这两个项目你觉得哪个项目复杂度高一些,可以多聊一会4. 你这个项目主要是想解决什么样的问题呢5. 你刚才说这些方法的话,应该说也是社区内或者说比较常见的一些处理方式了,对吧?我都或多或少都能get到,但是我有一个问题,就是**你做这件事情之前,就是每一个技术的应用之前,你有没有去验证这个技术确实提升了准确率呢**6. 我们的这些处理方式是否真正的真的提升了它的准确率。就是我们只是堆砌技术,还是说我们确确实实是提升了这件事情?7. 你这一知识库当时怎么选的?你做的知识库是什么类型的知识库?8. 那你这知识库里面涉及了哪些方面的内容?比如说文学类的,还是什么科技类的?是什么航天类的等等?有没有就说具体一些?9. 那你这个博客内容写的多吗?10. 那如果14篇文章的话,而且你这14篇文章看起来所涉及的范围是比较发散的,那么在这种情况下,其实这个rag的检索本身就不容易出现,刚才说的那个检索有问题的情况,这可能本身就不是个问题。11. 在我们去真正去做一件事情这的处理的时候,其实我们还是应该先去有一个度量的标准,不然我们优化可能是负优化,我们都不知道对吧?就是说我现在要做 rag 检索。我要去先做一个度量的方式,然后去验证它的准确率,你应该怎么做?12. 你怎么判断问题回答是准确的13.那么我怎么看到线上的这些回答的准确率呢?14. 有必要搞多级缓存吗15. 好,那首先就多级缓存来说,你觉得,它有什么弊端,还有它有什么优势?这个讲一下。16. 我有一个问题,首先其实我们一般认为 redis 它的那个吞吐是非常高的,而且如果说我们比如说数量很大,Redis 它也是支持那个多节点对吧,比如说…… 不管是哪种方案吧,Redis 也可以支持多节点的这种部署,所以在这种情况下的话,我们认为 redis 从网络压力这一块是没有太大问题的。那么在你看来,有了 redis 的话,我们还要去引入本地缓存的主要目的是什么?因为刚才你说的只是为了减少网络开销。 但是现在我们实际的生产环境中 redis 的是网络开销 其实是没什么太大的问题的。你应该明白我的意思,就是 redis 网络开销不是它的核心问题,就是我为什么非要引入本地缓存17. 我看后面你还自己写过两个 SKILL 对不对?能具体展展开一个就是你可能平时,有没有平时用的比较多的,我想知道不是那种为了写而写的那种,就真正能解释你生活中问题的那种 SKILL18. 你最近面试多吗?19. 那八九场的话,就是你觉得你做的自己就是面试,就是相当于面试自己的这种 Skill 和你真正去面试中拿到的面试题,它相似度高吗?>我是我当时了解到,主要是主要是因为网络开销的问题,进一步提升响应速度20. 说实话 redis 并不存在很大量的网络开销问题  对不对?21. 我看后面你还自己写过两个 SKILL 对不对?能具体展展开一个就是你可能平时,有没有平时用的比较多的,我想知道不是那种为了写而写的那种,就真正能解释你生活中问题的那种 SKILL22. 你最近面试多吗?23. 那八九场的话,就是你觉得你做的自己就是面试,就是相当于面试自己的这种Skill和你真正去面试中拿到的面试题,它相似度高吗24. OK, 那你觉得你这个 SKILL 有没有帮你解决到一些实际面试中的问题,有没有确实命中的一些面试中的一些真正的面试题25. 对你来说,现在比如经验完经历完这场面试之后,你觉得你的 SKILL 应该如何提升呢?26. 你理解什么叫 CAS?27. 那它和悲观锁有什么不同?那首先第一个问题就是纯靠CAS就能解释就能实现这个乐观锁吗?28. 解释一下volatile的这个关键字的目的和作用29. 既然我们提到了CAS操作就一定能保证。并发更新的安全性了。那么我们为什么还要用 volatile 去修饰这个变量呢?这不多此一举吗?30. 好,那继续问 CAS 里面会有什么问题?就它会有什么其他的什么问题呢?31. 你了解 CAS 的 ABA 问题吗?32. 讲一下怎么解决就可以了33. 那现在回到这儿来说就是有乐观锁和悲观锁两种锁,对不对。那么,我什么时候要选择乐观锁?什么时候要选择悲观锁?你看,我们知道 JDK 里面 synchronized 的关键字是悲观锁,对吧?而 ReentrantLock 是个就是这种我们一般认为是 CAS+volatile 这种乐观锁的方式那么这两种方式的话,你觉得我们在应用中。什么情况下会采用乐观锁?什么时候要采用悲观锁?34. 为什么?35. 这个我知道好,那现在问一个问题 就是说,既然高并发情况下用悲观锁就很好,那我无脑用悲观锁不就完了吗?就是既然说。乐观锁有就是说并发高了,它就不行,自选浪费 CPU,对吧?那我无脑用悲观锁,不就 OK 了吗?不挺好的吗?36.那还有一个问题,就是我们刚才说的这些并发的处理的方式。都是基于一个理念叫共享内存,对吧,相当于都是无论是悲观锁还是乐观锁,我们都相当于是要在对象上加锁,然后限制一些线程的进入和退出,对不对。 那么有没有别的方式照样可以实现并发更新的?并发更新的这样的一个方式,就除了共享内存方式,还有没有别的。比如说或者说我这么说吧,就全世界上处理同一个数据的多线程更新的这个问题,只有乐观锁和悲观锁两种方式吗?是非阻塞不能处理吗?因为不管是哪个锁,其实都会进入到一个阻塞的状态,对吧?必须是通过阻塞的方式才能搞实现多线程对同一变量的更新吗?37. 手撕环节:[电话号码的字母组合](*******************************************************************)48. 反问环节
查看30道真题和解析
点赞 评论 收藏
分享
评论
9
19
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务