春招-微派一面

🕐面试时间:2026.04.02

春招唯一挂的一家

自我介绍

开局2个手撕:

1.leetcode200-岛屿问题

2.leetcode210-课程表2(BFS拓扑排序/ DFS 逆后序)

hot100变形就算了,来了个图论的变形,和hot100的课程表1的思路完全对不上啊,甚至几乎参考不了,这第二题硬控我40分钟,我跟面试官说思路想着主动结束,他说OK思路没毛病你继续写吧,然后我说写不出来他说再试试,后面看了下题解,根本和变形题无关,于是释怀。过程还挺搞笑的,面试官现场教我说他的思路,然后他说着说着最后我跟他说面试官你好像理解错题目了,你可以重新看看题目要求,然后他才发现他说错了,然后说其实差不多,让我继续写......我写个damn的图论啊,出题的人都看错题目了这咋搞?

JDK1.7和1.8的HashMap和ConcurrentHashMap的结构

你知道1.7HashMap修改后变的更安全了吗?为什么?

头插法为什么就安全了?你说一下头插法的流程以及会造成什么问题?

为什么ConcurrentHashMap就并发安全了?

1.8后的HashMap频繁插入后会有什么问题?

说一下AQS的底层?锁中心化问题,CLH队列

你刚刚提到了Volatile对吧?说一下Volatile的作用是什么?

你说Volatile保证了内存可见性,那它能保证原子性吗?

说一下JVM的内存结构

为什么它新生代和老年代选用不同的标记算法呢?这里面新生代和老年代的算法不同肯定是会有考量的?你说一下为什么要这样子设计?性能方面?内存大小方面?

确实是性能会更好,这个确实,但是我要你结合实际说,为什么这个新生代回收的性能会更好?既然性能好为什么老年代不用这个算法?肯定是他们有其他的限定条件,所以才分别选择了不同的算法,你说说具体的原因

说一下内存泄露问题你的排查思路,说一下常见的问题,以及你是怎么排查的

Mysql的MVCC

除了临键锁和间隙锁,还有什么东西是可以用来解决幻读的?

说一下Mysql的ACID

InnoDB引擎为什么用B+树而不用B树你有了解吗?

Redis的Zset的底层是什么数据结构

为什么不用B树代替跳表?

你说范围查询B树的查询效率比跳表低这是为什么?是什么根本的原因导致他们的性能在范围查询的时候低的

那Zset为什么选用跳表呢?平衡树和红黑树不行吗?他们就是适用于范围查询的为什么不选择平衡树和红黑树?跳表对比平衡树和红黑树的优势在哪?

介绍一下Spring的IOC

介绍一下Spring的循环引用问题

你说Spring的三级缓存可以解决循环引用问题,但是其实二级缓存就可以解决循环引用问题,那你知道Spring三级缓存的结构分别放的是什么东西吗?

SpringAOP说一下

介绍一下Bean的生命周期,有几步,分别是什么

场景题(基于微派的实际场景出的,设计的很巧妙跟脑筋急转弯一样)

我们现在要设计一个排行榜嗯,这排行榜要谁先到的谁就在前面,这个就是分数就是分数而且是整数,所以不用考虑分数小数的情况,如果分数如果相同的话,谁先到的排前面。这个怎么设计?有没有办法?而且这个排行榜是实时变动的,例如几W个用户的分数都在实时变动,你通过怎么样的数据结构,怎么样的设计,去保证这个排行榜的排序一定是【第一个到XX时间的XX分数的玩家】排在第一个,其他玩家就算到了这个分数也是要排下面

排行榜很简单,结构肯定就是单纯的一个Zset。但是呢维护一个排行榜的更细致的东西就要有点巧思了,这个我说了一堆Zst的东西和各种处理去维护,但是根本不如实战中那种巧妙的设计,这种要是实战没弄过或者没有做过对应的算法题可能确实想不到

我的思路结构是把Score和时间戳TIME拼接成字符,例如Score_TIME,这样子在排行榜展示的接口逻辑中在内存中二次聚合处理就可以成功展示了,面试官跟我说存的不要String就要单纯的数字也就是Integer和Double类型处理,这个我确实想不到了,但是面试官给的实战解决方案是直接用Double就能解决,省去了内存聚合处理这一块逻辑, Redis的Zset中存的就是增量的结果,只能说这个确实太巧妙了

我的思路:Score_Time,重要信息都存后,展示前在内存中根据信息二次聚合重排,可以成功展示

面试官的思路:选用浮点类型Double,然后小数前的数字是【分数Score】,小数点后的数字是一个无限大的数字可以理解成无限大的9999999999

结构:[分数Score].9999999999

目的在于相同分数的时候,最先到达这个分数的,那个用户排在最前面

zset中key是用户ID,value就是Double类型的[分数Score].9999999999

已知:

  1. 时间戳是递增的
  2. 时间是重要信息,排行榜展示的时候也有时间,所以每次更新分数都要更新时间戳

最终方案:

小数点后无限大的数字减去时间戳,就能实现同分的情况下,最先到达这个分数的用户排在最前面了

人话:

假如2个用户都到了27分

用户A到达这个分数的时间戳是111111,这个数字变成0.111111作为减去的参数

用户B到达这个分数的时间戳是222222,这个数字变成0.222222作为减去的参数

显而易见的是用户B到达分数27比用户A晚

那么按照上面的思路,分数是27,初始化时小数点后是无限大的数字

也就是27.999999.....这里就拿6个9来举例子

然后开始减去操作

用户A:27.999999-0.111111 = 27.888888

用户B:27.999999-0.222222 = 27.777777

用户A最后算出的值是大于用户B的,这样子就能保证同分的情况下,最先到达这个分数的用户排在最前面了

因为每次互动都是 分数.9999999减去0.xxxxxx,时间越晚那么小数点后的数字就越小,时间最早那么小数点后的数字就越大

相当于比较版号,27.7就是比27.8新

最后还是挂了,这个拓扑排序真不是人写的,这个场景题设计的也太巧妙了,虽然挂了但还是有点收获,最搞笑的事我朋友面微派也是这个面试官,仍然是这两个手撕,仍然是课程表2写不出来,但这次面试官好像没看错题了hhh

#牛客AI配图神器#

#春招##发面经攒人品##面试##我的求职进度条#
全部评论

相关推荐

05-19 16:41
复旦大学 Python
ynq2126:我一直觉得现在考算法题没啥意义 真要选拔人才不如把公司实际项目中遇到的问题当成一系列场景题抛给求职者答 这才是能检测能力的东西
点赞 评论 收藏
分享
之前关于实习简历如何包装产出这篇文章中(详情见https://www.nowcoder.com/share/jump/5176304791779247404574),我说过业务是你在包装实习产出时最重要的部分,理解了业务才能更方便你理解手中的代码,这时候业务文档是你landing与包装产出时最重要的部分,在landing时你需要一份介绍组内总体业务的大而全文档带你入门;在包装实习产出时你需要配合技术方案来理解代码写到简历上。但是文档怎么读?读不懂怎么办?原文术语、专有名词晦涩难懂怎么解决?这么多文档同时要看,哪个在先,哪个在后?之间的衔接关系又是什么?上文我介绍了通过skill用ai读代码,今天我们介绍通过skill用ai读文档:用读文档skill帮助你快速landing,理解组内知识库文章读文档总结skill.mdname: docs-explaindescription: “高质量文档解读与总结技能。用于读取规范、设计文档、技术文档、教程、论文、方案说明或含代码文档,并输出:核心思想概括、按逻辑顺序的分步详解(按原大纲或推断逻辑分区)、以及每段代码的意图与执行逻辑自然语言解释。”目标将复杂文档转写为人类可快速理解的总结稿。保证信息准确、逻辑完整、表达清晰,读者读完后能对原文形成稳定且清楚的理解。默认按“零背景读者”标准写作:即使读者没看过原文、不了解术语或函数名,也能顺畅理解整条逻辑链路。强制原则1. 先解释再使用:原文术语、专有名词、函数名、变量名首次出现时,必须立即给出“含义 + 作用 + 所在环节”。2. 不写裸术语:禁止在自然语言中直接抛出未解释的名词(如“恢复函数”“压缩分支”)后继续推理。3. 细节要可推演:每个关键步骤都要说明触发条件、输入、处理、输出、与下一步衔接关系,不得只写结论。4. 多文档必须融合:当输入有多份文档时,按统一主线整合互补信息,不按“文档A/文档B”割裂叙述。5. 纠错要入链路:纠错结论应放入对应步骤中解释“错在哪里、正确是什么、影响什么”,避免孤立短句。skill的最前面已经规定了skill的目标以及强制原则,防止skill走偏,后续我们还有详细的执行流程以及结果输出要求(篇幅要求不展开),我们可以使用这个skill完成你需要的文档解析,landing与包装产出大家都可以使用,理解了业务才方便你更好的理解代码😎
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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