渣渣菜b面试经验和思考过程
注:本人是个大彩笔,我只是想和大家分享一下我在面试过程中一些思考,一些回答问题的方式,仅供参考,祝愿各位都能拿到自己欣喜的offer~一起加油
- 上来就让我谈谈对线程和进程的理解
- 首先说了一下网上比较经典的答案
- 然后我又说根据Linux源码,线程和进程又应该算是同一个东西。(提出一个不同的意见)
- 那你说说为什么算是同一个东西?(果然)
- 比如我有个c文件,如果os要执行我这个文件,我首先要编译成能读懂的文件,但是指令都是二进制,而我加载到内存中以后,那么此刻我需要开辟一块空间,用来存储我所要执行的资源,这个就叫进程,活着的程序,cpu可以读取他的数据,执行代码块。其实对于Linux来说,进程和线程没有区别,比如我们这里有2个进程共享了一个资源空间,那么linux就会模拟这个进程为线程
- ps:其实我也有点虚,不过无论对错,应该是让面试官对我有点印象了 = =
- 线程中断
- 可以实现中断的三种方法,volatile变量、AtomicBoolean、Thread类中断api
- 又说了一下对中断的理解,比如中断仅仅是一种协同机制......吧啦吧啦
- 如何唤醒?
- 三种唤醒方式
- 这种题应该是想问问你locksupport的东西,所以你就引领者往这上面带,不过我这个没复习,记得不是很牢固了,所以也没多说,生怕追问下去
- 又问了几个标准的八股文,我觉得太经典了就不多做赘述了,就说几个可以和大家分享一下的
- syn原理
- 我看目前普遍大家都是回答到flags: acc_syn 或monitorenter、monitorexit
- 我比较能扯,我扯了一下mutex源码,加锁解锁,对os资源的消耗 引出 锁升级的过程,并把我对于锁升级的理解和简单的源码分析说了一下。
- 又扯出volatile和cas的底层实现吧啦吧啦的(这是我自己引出来的,因为我知道他下面可能会问)
- 我觉得syn、volatile、cas 这三个属于是十次面试得问九次
- aqs源码这东西大致说了一下,但是有一些细节点都忘了,就直接说不记得了,然后就过了
- JVM
- 内存模型
- 垃圾回收
- 都比较常见,就不写了
- Redis
- 除了基本的五个数据类型、数据结构,我着重说了一下bitmap、hyperloglog、geo这三个,并说了一些我自己的理解,和应用场景,面试官也对这种问题和我探讨了一番
- 聊了聊双写一致性(redis+mysql),因为没有太多工程经验,我没敢多吹b,比较规规矩矩的
- 分布式锁、删除策略,这些我都觉得比较简单,也不多说了
- Mysql八股文,都是比较常见,没有什么好分享的
- 还聊了点io的东西,扯到了bio、nio、select/epoll、多路复用这种
- syn原理
总结:其实我比较能扯,我尝试着自己去带面试的节奏,我尽量能把我一时间想起来的,都一股脑的说出去,问到的,没问到的,他接下来可能想问到的,只要沾边,我都尽可能自己去先说,目前来看效果不错,按面试大哥说的 我技术深度不错,他这一面是通过了。
按照我粗糙的理解,和浅薄的知识面,我觉得如果你和我一样,本科是个垃圾中的垃圾,那么我觉得咱们如果想和985的大哥们一起竞争,你得有自己独特的一面,比如知识的深度,同样一个问题,syn他们回答到java字节码层面,你能不能继续钻研一下native方法如何实现的,c++层面如何做的,其实不用很精通,有一套自己的话术,能说出来,我觉得就可以了,至少我见过的同龄人,掌握这么多的并没有太多。
仅供参考~祝各位生活愉快~学习进步
#面经#