06 | 面试现场第一期:当问到组件实现原理时,面试官是在刁难你吗?
唐扬
该思维导图由 AI 生成,仅供参考
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《高并发系统设计 40 问》,新⼈⾸单¥59
《高并发系统设计 40 问》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(38)
- 最新
- 精选
- 👽首先谈谈我对HashMap的理解。 首先,实现原理:基于数组和链表,JDK8以后也会在特定情况下转为红黑树。 以对象的Hash值确定数据所在下标,如果下标里已经有数据,则用链表存储。在链表超过8时转化为红黑树。 转红黑树的目的是:红黑树的查找时间复杂度是logn,而链表是n,红黑树保证了在同一个下标下数据元素过多时候的高性能。 为什么在8之后才转红黑树:因为转红黑树,以及维护红黑树的左旋右旋需要额外的性能开销。而在数据量较小的时候,优化时间复杂度意义不明显。(例如:二分查找在数据量小的时候,性能提升不大)自认为这一条回答也算是红黑树和链表的优劣势。 HashMap不是线程安全的,所以有ConcurrentHashMap。 ConcurrentHashMap的线程安全,是使用了加锁的方式。 1.8之后,对加锁的数据粒度更加细化。每次只锁一个node。所以1.8以后的ConcurrentHashMap在并发下性能大幅度提高。 关于redis的问题,说实话,我觉得跳表 和 红黑树,我觉得都是可以的。因为核心目的是高性能,这两个在查找的时候性能都不错。硬要说的话红黑树性能更高(看测评是更高,理论上讲实际差距不是特别大),但是同时也更耗费内存(因为跳表的内存消耗是可控的)。而现在2019年这个时间点,为了用户体验,更多的还是以空间换时间,所以,我个人认为,红黑树可能更合适。 然后是想请教的面试问题: 1,请问老师如何看待基础与技能广度的重要性对比?就是说,主流的分布式框架我掌握的并不全,但是我觉得我数据结构,算法,Java这些的基础比同期其他人都要好,我认为我可以很快掌握公司所需的技术。您会接受我这样的人嘛? 2,现在的公司,面试动不动就需要你有高并发经验。但是,没有高并发的经验就无法进入有高并发场景的公司。(一个先有鸡还是先有蛋的问题)关于这种现象,您怎么看?有没有什么建议?
作者回复: 1. 其实我会看工作年限,如果您工作了五年之后,我觉得基础知识更重要,技能广度可以慢慢培养;如果工作了七八年了,还是需要有一些技术的视野的 2. 要多思考,多看出,了解高并发的基础知识,然后考虑如果自己的业务到了更高的量级要如何解决
2019-10-14836 - 小喵喵好多面试官喜欢数据来说话,比如做高并发系统时,面试官问,你做的高并发系统TPS是多少,QPS又是多少,日活跃是多少?负载用什么来做?为什么要做负载,每一台机器的配置是如何?(核数?CPU?内存?硬盘等?)对于这些数据化问题,心里没有底,随便回答一个数据,面试官一下子就看出来了,知道你在忽悠,没有真正做过高并发系统。请老师举例一些量化(数据化)的面试问题,并且如何回答?
作者回复: 这就要你在平时的时候多了解维护系统的数据了,数据对于性能优化很重要
2019-09-30725 - 吃饭饭感觉自己有点笨了,老师举的案例我没有看明白是哪里的问题。问题是:存储用户认证信息的缓存命中率极低,只有 20% 发现,老师发现 slab class5 占用了 2G 内存中的 1.9G ,但是用户认证信息用的是 slab class6。既然单独的空间都是 2G ,class5 的占用跟 class6 有什么关系,class6 的空间很充足,为什么还是会自动剔除,难道这里自动过期吗,求解答?
作者回复: 是说slab class 5 占用了绝大多数的空间,那么slab class 6最多只能分配到100M,可是我们的缓存的用户认证信息的数据量远大于100M,而认证信息的数据大小又大于class 5的大小,没法存储到slab class 5里面,所以就会产生剔除了
2019-10-08614 - 邋遢的流浪剑客无论是为了面试还是个人成长,基础知识都很重要,其实开源组件会用是很简单的,真正涉及到开源组件的底层原理离不开数据结构、计算机网络、操作系统这些基础知识,这些知识可不是一朝一夕就能搞定的,现实情况是很多程序员往往忽略了这方面的学习
作者回复: 是的,没错~
2019-09-30214 - longslee老师咱还真遇见过“刁难”的哈哈,比如Java的那几个HashMap问题,我觉得我都答了,他还问我“你是不是背的啊?”(😫不知道是何用意)。 另,非常希望老师站在面试官的角度,对我这种只有传统项目经验,没有实际高并发实战但平时也略有学习(比如学习您的专栏😊)的人,提出怎样的问题;针对面试中要求的一个中间件,我确实没有用过,面试官优先觉得这人不行,还是能根据所答基础知识推导出以后学习这项技能没问题呢?
作者回复: 如果是我的话,我会更关注基础知识,你可以没有用过,但是基本的原理要了解了~
2019-10-0427 - 仙道咱们平时的工作大多数都是CRUD,如何在面试中介绍项目经验
作者回复: 剧透一下,在面试现场的第二期会讲到哈~
2019-10-0227 - 小喵喵请老师举几个案例分析一下,工程师和架构师是如何做自我介绍的?
作者回复: 倒也不分工程师和架构师,只是在面试介绍项目经历的时候可以多突出你的贡献,比如你解决了什么问题,如何优化了性能,设计了那些方案,突出做的事情的难点,以及你的解决思路。我可以在后面面试现场里面讲讲这个:)
2019-09-3026 - 次声波~~我最近刚开始当面试官,其实我觉得当面试官也很难...在有限的时间内真的很难看出来面试者是不是一个好的coder,能否高效写出逻辑清晰的代码。现在网上面试题那么多,多准备准备基本上java 和数据结构的题都能答得无懈可击。请问您一般是怎么招人的啊?
作者回复: 1. 多问原理 2. 考察解决问题的能力,比如你遇到什么问题,问问解决的思路 3. 当场写代码
2019-10-1544 - 若尘2B老师,您上面说的Memcache案例直击到了痛点。但是引发出另一个问题,您那次的案例是基于出现问题之前去深挖了组建的设计、原理还是问题导向。那次案例时隔多长,您现在记忆犹新。我现在的矛盾深挖原理都爱是基于问题导向,在处理阶段可以掌握那些组建的使用和问题处理,但是时间一久就容易忘记,虽然也会写使用的经验,总结,爬坑日志,但问题不再出现之后,最多2月基本忘的干净。我们该怎么管理自己掌握的技能,在面对技术迭代更新都如此之快的时代我们要怎样才不会被淘汰?
作者回复: 问题导向是应该的,遇到问题要深挖,找到根本原因,其中肯定会了解一些原理。但是问题毕竟不多,可以多关注一些你用到组件的基本原理
2019-10-0424 - 堵车我知道面试官要问什么,我就是答不出来。
作者回复: 额 加油💪
2019-10-0923
收起评论