看看,我如何在面试官前吹牛P

你好,我是 yes。java

这篇文章我想谈谈如何在面试官前面吹牛P。web

我给了六个案例,教你如何把 B 格提上去。面试

这篇文章的灵感来自于一个读者,他在群里@了我。算法

我一看,确实啊!缓存

首先 “几个 offer” 说明关于 Synchronized 的面试题很常见。安全

而后从 “面试官和我争” 能够看出,确实不少人的理解是错的。微信

而后你再从 JVM 源码层面和他说说,这面试不就妥了?网络

若是我是面试官,这候选人透露出来他看过 JVM 代码,而且还发现了书上的错误,说的有理有据的,这 level 不就上来了?并发

这面试不就稳了?app

就是这篇关于Synchronized的一个点

提高 B 格的时候到了。

想一想看,当面试官问你看过什么源码呀

你答:我看过 JVM 关于 Synchronized 的源码,我发现网上有好多理解都是错误的...阿巴阿巴。

安逸得惨咯!

这么一想,我发现我写过的文章还有好多能够装23的地方!

好比这篇:从Dubbo源码到CPU分支预测之旅

面试官问:看过 Dubbo 源码嘛?

你答:看过,我以前看源码的时候还发现了一个很奇怪的地方,有个地方 if 和 switch结合着用。

我就很奇怪,因此我就用 benchmark 跑了跑,试了试  if 和 switch 的执行效率。

我发现全 if 的效率是最高的。

因而我又反编译了代码。

我发现 switch 是经过查表直接拿索引去访问的,而 if 是每次都会取出变量和条件进行比较。

那不是应该  switch 的效率最佳吗?

带着疑问的我继续查阅资料,后来我发现原来是 CPU 分支预测(详细看上面文章)搞得鬼,因此 Dubbo 的源码才会这样写。

你看,这一波下来,你这表现满分啊

会主动看源码!

会用示例跑(动手)。

会反编译比较,钻研(动手)。

最后到底层 CPU(6666)。

这一套下来?面试官不要你要谁?

再好比这篇:炸了!一口气问了我18个JVM问题!

面试官:你平时看什么书呀

你答:我看过《深刻理解Java虚拟机》,我还发现了一个错误呢。

面试官:什么错误呀?

你答:不是由于“Con-current Mode Failure”而致使 Full GC ,而是由于发生了 Full GC 因此抛这个错。

我当时好奇看了看 CMS 的源码,我发现.....

后续不贴了,以前的文章写的很清楚了,也是从源码上找证据

面试官一听,这小伙子看书就算了,由于想钻研还去看源码,源码不只看进去了还看出错误?

不只热爱学习还有钻研精神,我要给他发 offer!!!!

再好比这篇:Kafka索引设计与二分查询与底层缓存

面试官:你看过 Kafka 源码嘛

你答:看过。

当时看到了 Kafka 索引的设计,采用了稀疏索引,利用二分查找来加快搜索速度。

可是我从源码发现这个二分查找是变型的,由于就消息队列的特性而言,索引数据都是在文件末尾追加的写入的,而且写入的数据基本上会立马被读取。

也就是说数据热点集中在尾部,而操做系统又是根据LRU来管理内存页的,因此标准的二分会致使缺页中断的状况发生。

因此 Kafka 巧妙的采用了冷热分区来实现变型的二分查找

你看看,这一波下来,面试官大拇指不给你给谁?

看过源码, 懂得基本算法,理解消息队列尾部热点特性,晓得操做系统LRU来淘汰内存页,啧啧!

面试官对你说:

再好比这篇:ConcurrentBag 听过没?好家伙高并发知识点十分密集!

面试官:让你设计一个链接池你怎么设计

你答:我以前看过 HikariCP 的源码。

重点就是无锁设计,由于链接池是读多写少的场景,因此能够利用 CopyOnWriteArrayList 来存储链接,而后再利用本地化存储的思想来减小竞争。

获取链接的流程:

  1. 先去 ThreadLocal 找以前用过的链接,找到则直接返回。
  2. 若是找不到就去 CopyOnWriteArrayList 实现的  sharedList 里面找链接(这里还有个窃取的概念),若是找到则返回。
  3. 若是找不到则用 SynchronousQueue 等待链接,超时则返回 null。

再详细就看上面文章吧。

怎么说?

通常的回答,估计也就会说个加锁保证线程安全。

好点的,说个读多写少场景,用个写时复制。

你这波无锁+写时复制+本地资源加速缓存+SynchronousQueue 无缓存等待队列。

若是你以为还不够细,那就再说说 HikariCP 的 FastList,它优化了 ArrayList。

ArrayList 每次 get 都会有范围检查,而且 remove 是从前日后遍历的。

而在链接池这个场景每次 get 范围检查没有必要,而且 remove 的时候从后往前遍历更好。

够不够细?

我细到 ArrayList 的 get 的范围检查我都要计较!(HikariCP 不愧是最快的)

面试官可能在角落里瑟瑟发抖。

再好比这个:RPC 核心,万变不离其宗

面试官:让你设计一个RPC框架你怎么设计

你答:容我想一想(伪装思考,其实小宇宙就快忍不住爆发了)。

RPC 框架基础的核心其实就这么几点:

  • 动态代理(屏蔽底层调用细节)
  • 序列化(网络数据传输须要扁平的数据)
  • 协议(规定协议,才能识别数据)
  • 网络传输(I/O模型BB一下,通常用 Netty 做为底层通讯框架便可)

注意,上面加粗的其实二字,必定要说,要注意语气,要显得你游刃有余,低调奢华。

固然上面只是基础核心,生产级别须要注册中心做为服务的发现、路由分组、负载均衡、异常重试、限流熔断等。

更详细的就看上面的文章吧~

面试官已经躲在角落里瑟瑟发抖了。

再好比.....

好比不了了,太多了!

不信你去翻翻看!

我写这篇文章的时候,我发现电脑屏幕居然愈来愈高。

原来,是我慢慢地从椅子上滑了下去....

我怕我再举几个例子,我要给本身跪下了。

我时常会看看本身写的文章。

而后,默默在内心念叨这家伙真滴牛P。

因此不要错过个人文章哟,可能每一篇都是装23的机会。

由于微信推送机制,文章可能没法及时送达,因此加个星标,文章必会及时推送~。

唉,再这样下去,我怕和半佛老师同样,成为一个天天在镜子面前给本身磕头的硬核男人。


我是 yes,从一点点到亿点点,咱们下篇见

本文分享自微信公众号 - yes的练级攻略(yes_java)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索