碎碎念-面试(八)

367 阅读4分钟

前文回顾

昨天写了一篇碎碎念-回顾写作(七),提到了如何利用好的学习方式来提升写作这件事,今天我们暂时不谈写作。我们来谈谈面试,正好最近也面试了一些公司。

面试

本人在杭州,杭州作为一个超二线城市,拥有着非常多的互联网公司。像阿里,网易,微博,头条等,都在杭州有总部或者分公司,机会还是比较多的,虽然最近总是有人说是互联网寒冬,但是该招的人还是在招的,只不过可能要求会有很大的提高。

阿里

目前进行了两轮面试。前面两轮都是电话面试。

第一轮面试官约在了某一天下午四点左右。

M:先介绍了自己和最近在做过的项目。

W:我叫某某某,在公司这边主要是做某某某项目,这个项目是某某某,项目是怎么怎么实现的,我在里面负责哪些部分,blablabla....

M: 那这个项目中某某部分是不是有什么功能,然后这个功能是怎么实现的呢?

W:这个功能是怎么怎么实现的,blabla

问了一些项目上面的事...问的差不多了,面试官话锋一转,好,既然面试的是Java开发,那么接下来问一些关于Java相关的问题。“可以啊”。

M:知道Java并发包下面的一些组件吗?

W:知道一些。

M:那可以聊聊ConcurrentHashMap吗?

W:嗯,暂时还没有看过ConcurrentHashMap。。(心想完了,这个容器好久没有使用,而且最近也没有准备了,难道阿里面试之旅就终结在这里了?)

M:那你知道CAS吗?(后来看过ConcurrentHashMap之后,可能面试官想要问的就是CAS)

W:知道啊。Atomic包下面的就是使用的CAS原理。CAS原理是有点类似于乐观锁的机制。先是进行比较,最后才进行替换。

M:那CAS是怎么保证比较和替换是原子的呢?

W:内部应该是让比较和替换是同一个操作,不然不能保证原子。

M:那是怎么保证是同一个操作呢?

W:这个就不太清楚了。。。(又完了,其实CAS我最近也没有看过)

M:那你知道unsafe包和native方法吗?

W:知道一些。native是Java的本地方法。

M:其实CAS内部使用的是Java的本地方法。(面试官进行了小小的提示和解答,后面我提问的环节,还提到了这个问题,但是当时心里还是很焦虑)

M:那你有使用过volidate吗?

W:也了解一些。

M:那么volidate拥有哪些特性?

W:使用到volidate的变量,每次都会刷新工作内存到主内存,也每次都会从主内存取最新的数据到工作内存中。

M:这个提到的应该是volidate的可见性。还有呢?

W:呃....还会防止指令重排序。(以前有看到过,但是最近真没看,所以有些忘记了)

M:那它是怎么做到防止指令重排序的?

W:Java在编译成字节码的时候,遇到volidate相关的变量时,不会对这部分代码进行重排序。(后面发现如果想要回答的更好,那么面试官可能更像要知道lock这个指令)

M:还有呢?

W:暂时想不出来了。

M:那么如果使用到volidate变量,然后有两个线程,每个线程都不断对这个变量自增1,进行100循环。那么最后,这个变量会变成200吗?

W:(想了一会)不会,因为volidate变量,一个线程可能还在加1的过程中,另外一个线程就去取了这个数据也进行加1操作,那么最后这个变量被两个线程两次加1之后,最后的值还是2。有一次线程的操作是无效的,可想而知最后也不会变成200。

M:OK,其实这个是叫做原子性。(回答对了,面试官还是比较满意的)

W:原来是这样啊。有些专有的技术名词都忘记了(心想,还好还好)

M:对数据结构和算法熟悉吗?

W:还可以。有一些了解。

......未完待续

关于写作

以后这里每天都会写一篇文章,题材不限,内容不限,字数不限。尽量把自己每天的思考都放入其中。

面试是一块很大的内容,下次想要好好整理下,今天时间有限,只能先写这么多了。

我是shane。今天是2019年8月1日。百天写作计划的第八天,8/100。