3.6 京东创新零售一面凉经
处女面遇到一个非常严肃的面试官,全程只问了八股加一点场景,无手撕,我努力的在答八股的过程中提到项目中是怎么做的,但面试官一点不问(项目是自己改造的短链系统和 一个rag 项目)。只面了 25min,不知道是不是 kpi。
1.项目使用的 jdk 版本?
答:17
2.17 的新特性都了解吗?
不了解,没怎么使用过。强行讲了一个项目中对 17 默认的垃圾处理器做调优的例子。
3.G1 还有年轻代老年代吗?
答了 G1 的 region 相关。
4.jdk8 的新特性呢?
Lambda 表达式,stream 流,别的不太了解了,提了下我更了解 7->8 的一些组件设计上的升级,比如 concurrenthashmap,jvm 等等的升级。
5.stream 流常见方法?
只记得.fillter.stream.collect
6.并发请求下游接口怎么实现?
答了CompletableFuture
7.线程池任务执行顺序?
常规作答先用核心线程,然后进等待队列,都满了才会创建额外线程。
8.线程池创建后会立刻创建核心线程吗?
不会,懒加载机制。
9 为什么要采用懒加载机制?
主要答了为了节约内存资源和 cpu 资源,面试官说不对。感觉可能更想强调提升启动速度?
追问怎么关闭懒加载?不了解。
10.说了一个具体的线程池参数,问不触发拒绝策略的最大任务数?
答了最大线程数加等待队列大小。
11.拒绝策略?
答了四种拒绝策略。
12.面试官描述一大段场景,总结下就是一个A 调用 B,AB 共用一个线程池,有什么问题?
当时脑子瓦特了,说了个如果ab使用了threadlocal的话可能造成数据混乱。面试官说没有,然后提醒了下会发生死锁。
13.死锁产生条件?
讲了四大条件,并带入到这个场景说了下。
14.一个数据库表索引量的上限?
不了解,强行说了下索引肯定不是越多越好,会增加维护成本。
15.经典的联合索引问题,a,b,c什么情况下走索引?
正常回答。
16.什么情况下考虑分库分表?
答2000万行以上的数据量之后单表性能可能会显著下降,考虑分库分表。
17.面试官问为什么,说其实有时候一亿的数据量级下查询也很快。
那我不知道了啊,ai跟我说的2000万啊😭
18.redis有什么用法?
答了缓存,分布式锁,简易消息队列,redis加lua做限流,并且结合自己的项目说了。
19.项目中限流算法怎么做的?
答令牌桶,讲了下令牌桶怎么做的。
20.令牌桶算法优势和缺点?
详细讲了优缺点,并且和其他几种算法做了对比。
21.追问令牌桶能应对突发流量不是有点吗,怎么又变成缺点了?
答:在系统能应对的能力范围内是优点,如果超出系统承载能力就会变为缺点。
22.redis事务了解吗?
答了redis本身事务不怎么使用,比较鸡肋,不像mysql一样可以保证强一致性,出错无法回滚。更多的时候采用lua脚本来实现。
23.lua脚本能保证强一致性吗?
也不能,说了下lua脚本的本质,并且也无法回滚。
24.什么情况下会导致lua脚本出现数据不一致。
答了执行一半redis宕机的情况,感觉答偏了,可能更常见的是lua脚本执行一半出错?
25redis集群部署了解吗?
了解,简单讲了主从集群,哨兵模式,分片集群。
26.让你写一个消费者,优先考虑什么?
从广播模式集群模式,扯到push和pull,说主要采用push模式被打断了,面试官说怎么采用push呢,肯定用pull啊。当时给我干懵了,现在反思一下应该是一个误会,因为我主要讲的是rocketmq,而rocketmq所谓的push其实就是pull结合长轮询,导致了误会,当时没解释清楚,也怪我这块只背了没了解原理😭。
27.继续讲考虑什么?
继续扯消费者数量和queue数量的问题,以及5.0之后怎么解决这个问题的。被打断,面试官说不应该优先考虑幂等性吗?然后我继续说了rocketmq本身的策略是保证消息至少被消费一次,本身没什么好方法解决幂等性问题,更多要在业务层面解决。
28我问的就是消费者怎么考虑啊,这不就是业务上吗?
简单讲了乐观锁,分布式锁。或者状态机。深入的我也不太了解了。
29广播模式下和集群模式下处理幂等性策略有区别吗?
说了应该有区别,具体的不了解。
30.系统运行时发现出现大量消息堆积,怎么解决?
答了从两方面考虑,一个是提高消费者消费能力,比如增加消费者服务器数量,但是要考虑queue的数量和消费者数量的对比,在一个考虑对生产者利用sentinel做限流熔断降级巴拉巴拉。面试官似乎不满意,问我之前是不是没实习过。感觉我答的都是补救措施,而不能根本解决问题。
反问。
#27届求职交流#