前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《吐槽》这破八股文并发知识

《吐槽》这破八股文并发知识

作者头像
Java3y
发布2022-09-08 12:19:07
2630
发布2022-09-08 12:19:07
举报
文章被收录于专栏:Java3yJava3y

我是y哥的读者,已经毕业几年了,一直在做业务开发,最近想要跳槽,自然就会读读y哥写的对线面试官系列,毕竟现在面试都得搞八股文啊。

花了一个晚上读了两个章节,分别是《Java基础》和《Java并发》,读完来吐槽一波

《Java基础》这个章节现在就4篇文章,说实话不太够看。其中《注解》《泛型》《反射和动态代理》都没什么好说的,都是以线上真实应用的角度介绍这些知识点,没什么八股文的内容,所以我一看就懂了。毕竟做了这么久的业务开发,这些多多少少都知道,应用场景也是符合线上所讲的。

唯一之前没注意到的就是在《注解》文章里,原来Lombok的原理就是在编译期里做的,抽象语法树那块做的“增强”而实现的。

看到《Java NIO》这个文章就又又回想起我初学NIO的时候了,确实现在工作几年我跟y哥一样在线上环境都没机会用NIO,也没用过NIO的封装Netty,没啥好讲的。

y哥以IO模型切入,然后说了IO复用模型这块(我知道这IO复用模型在开源框架层面上应用确实是很广泛,被问到的概率还是挺大的)。然后经典面试题:select和epollo的区别,什么是零拷贝。

唉,这些东西见一次忘一次,上次还记得,这次回看又感觉很陌生

接下来就是并发了,当我看到一句:「进程作为资源分配的基本单位,线程作为资源调度的基本单位」我愣了一下。如果此时我直接去面试,面试官问我线程和进程的区别,我能不能答出这一句,恐怕是不能。。。

还有死锁那块,为什么会死锁我可能能答出来,但是解决死锁的思路可能我就只记得:获取锁的时候设置超时时间就好了,一定时间内获取不到直接放弃,这不就行了吗。我感觉线上大多数都是这么干的,虽然我在线上环境也没搞过。

什么固定加锁的顺序啊,减少锁的范围啊,这种不看是真答不出来。

CAS这个大部分都记得,没啥说的,应该最多考个ABA,而 LongAdder 和 AtomicLong 的区别,我怀疑y哥是凑字数写上去的,不过大概也知道一个思路。为什么某某的性能高?把粒度降低,那竞争锁的线程就没那么高,自然性能就上去了。

到了Synchronized呢,印象中还记得些JDK1.6锁升级的事,但细节真的是全忘了。什么mark word,什么监视器对象,什么lock record,真服了。在生产环境里印象中也没写过几次Synchronized这个关键字,idea不提示可能的忘了这个单词怎么拼了,还什么monitorenter和monitorexit指令。

AQS和ReentrantLock这个呢,大致的实现框架是还记得的,算又是复习了一把。但是具体的源码过程就是真的忘了,没想到获取一个锁原来有这么多步,我印象中不是这样的啊!

线程池这个没啥好说的,一般都是围绕几个核心的参数来讲讲他的运行过程,因为在线上环境也有好几个地方用到了线程池,所以这块没有忘太多,如果要我讲源码的话,也只能GG了,不过y哥也没写源码的内容

ThreadLocal这个玩意呢,应用开发用得不多,我所知道的可能在做日志组件的时候或许会有用到(之前看过y哥发他朋友的日志组件,看了下代码)。源码以前在校招的时候见过,也大概知道它的原理,也大概知道内存泄露这个知识点,但我不理解为啥这个能作为一个还算是高频的面试题,明明应用开发不会怎么用到的才对。

CountDownLatch和CyclicBarrier这东西我在线上环境重来没用过,我知道是干嘛的,以前也看过一次源码,但是真的忘没了。。算是复习一把吧,核心就是这张图;

Java内存模型这个就更离谱了,我在应用开发时从来没关心过里边的细节,我觉得Java就是为了不让我们去关注这些细节,然后定义了这个「规范」,而面试再回头问你为啥有这个规范,原因是啥,这个规范的内容是什么。

难顶,明天再刷后面的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java3y 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档