碎碎念-面試(八)

前文回顧

昨天寫了一篇碎碎念-回顧寫做(七),提到了如何利用好的學習方式來提高寫做這件事,今天咱們暫時不談寫做。咱們來談談面試,正好最近也面試了一些公司。面試

面試

本人在杭州,杭州做爲一個超二線城市,擁有着很是多的互聯網公司。像阿里,網易,微博,頭條等,都在杭州有總部或者分公司,機會仍是比較多的,雖然最近老是有人說是互聯網寒冬,可是該招的人仍是在招的,只不過可能要求會有很大的提升。算法

阿里

目前進行了兩輪面試。前面兩輪都是電話面試。數據結構

第一輪面試官約在了某一天下午四點左右。併發

M:先介紹了本身和最近在作過的項目。數據結構和算法

W:我叫某某某,在公司這邊主要是作某某某項目,這個項目是某某某,項目是怎麼怎麼實現的,我在裏面負責哪些部分,blablabla....post

M: 那這個項目中某某部分是否是有什麼功能,而後這個功能是怎麼實現的呢?學習

W:這個功能是怎麼怎麼實現的,blabla線程

問了一些項目上面的事...問的差很少了,面試官話鋒一轉,好,既然面試的是Java開發,那麼接下來問一些關於Java相關的問題。「能夠啊」。code

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。

相關文章
相關標籤/搜索