2020年今日頭條外派的面試題(記錄面試過程)

其實一直有想離開原環境的問題,因爲不想和一幫不奮進,也沒有一個技術領導團隊模式的情況下工作,苦於沒有找到機會,直到今年疫情來臨,想試試水,投出的簡歷基本沒回(沒有大面積投,就看着差不多的投了),加上疫情嚴重,就讓這條路更加難走了,然後呢都是外派主動找我,我也奔着試一試的心態就參加了這場面試,微信語音面試,然後說是面的是高級開發的崗位,就會是高級開發的面試,沒有時間不聊項目,只聊技術,然後被虐的啊,那就正式開始被虐的旅程把!

1.Synchronize和ReentrantLock的區別?

心裏os:哈,難道不是要講項目什麼的麼,哎,有點慌張,我只是大概瞭解啊

答:我就知道Synchronize不用手動釋放鎖,ReentrantLock需要手動釋放鎖,面試官說還有麼,我就說沒了,os:我還是之前學習多線程視頻大概記得好像是這樣的演示,然後應該是對了

我就說Synchronize之前的版本比較重量級,後來進行了改善,會從輕量級鎖可能就會偏重量級等。

Synchronize和ReentrantLock的區別答案:

  • Synchronize競爭鎖的時候會一直等待,ReentrantLock可以嘗試獲取鎖,並得到獲取結果
  • Synchronize獲取鎖無法設置超時,ReentrantLock可以設置獲取鎖的超時時間
  • Synchronize無法實現公平鎖,ReentrantLock 可以滿足公平鎖,即先等待先獲取到鎖
  • synchronized 控制等待和喚醒需要結合加鎖的對象wait()和notify(),notifyAll();ReentrantLock 控制等待和喚醒需要結合加鎖的Condition的await() 和 signal()、signalAll() 方法
  • synchronized 是jvm層面的,ReentrantLock 是 JDK 代碼層面實現
  • synchronized 在加鎖代碼塊執行完或出現異常,自動釋放鎖;ReentrantLock不會自動釋放鎖,需要在 finally{} 代碼塊顯示釋放
  • 都可以做到同一線程,同一把鎖,可重入代碼塊。
     

  2.那你描述一下鎖膨脹的過程把!

   心裏os:完了完了,真的不知道是什麼,可能之前大概瞭解過也忘了

   就對面試官說,我對鎖這塊不算很熟,這塊不知道

   鎖膨脹的過程的博客地址

   https://www.jianshu.com/p/8bd25f680257

   https://blog.csdn.net/xueba8/article/details/88753443

3. 說一下線程池如何創建的,創建的參數是哪些?

    Executors,我不記得參數有哪些了!

    關於線程創建以及參數查看以下博客

    https://www.cnblogs.com/zz-ksw/p/12426940.html

4.你們使用中肯定HashMap經常使用,說一下hashMap的put的過程把

 HashMap採用數組和鏈表結構的,在進行存儲的時候會把key進行hash算法,然後value值直接存儲

詳情請看以下博客,寫的非常不錯!生動有趣帶你看JDK1.8-HashMap的put源碼,看完直呼原來這麼簡單!

5.你說的太簡單了,哈希碰撞什麼的都沒說

 哦哦,哈希碰撞在數組裏只有有限的空間,但是key可以是無數個,hash以後的值就容易出現存儲一個位置的情況,就會出現哈   希碰撞,所以加了鏈表,當碰撞了以後就會存儲鏈表後面

6.爲什麼hashmap初始化是16?

 應該是作者探索以後發現這個數最符合把,巴拉巴拉,(哎,具體的我也不知道)

 hashMap詳情請看下面鏈接

 https://juejin.im/post/5dee6f54f265da33ba5a79c8#heading-0

7.爲什麼hashmap線程不安全?那ConcurrentHashMap呢?

因爲hashmap爲了性能沒有加同步,而ConcurrentHashMap有加鎖操作,在之前是分段鎖,只鎖一部分那樣其他線程來了還可以訪問另一段,但是之後的ConcurrentHashMap放棄了分段鎖的概念,該用cas方式,但是我這樣說了以後,面試官說ConcurrentHashMap後面並沒有用cas方式,但是我怎麼記得是有呢

ConcurrentHashMap介紹請看這篇:

生動有趣帶你看JDK1.8-ConcurrentHashMap的put源碼

8.那再來講一下IO把,能說一下IO麼

你說的是AIO,NIO,BIO麼,還是說fileIputStram,outStream啊,

9.不是AIO,就是你說的File那些,但是你有系統的瞭解IO麼

沒有

10.那你能說一下AIO,BIO,NIO區別麼?

我知道NIO比較高效其他的就不清楚了

BIO、NIO、AIO等IO模式詳解(圖文、代碼示例解說)

11.嗯,框架部分你有深入瞭解麼,如果你覺得你都瞭解那麼接下來可以進行面試,如果不瞭解也可以結束面試

沒有太深入的瞭解,還停留在會用的階段

12.嗯,這次還行吧,回去多準備面試題把,感覺準備的不充分啊,還有有的詞說的不專業

好的,我還會再努力的,謝謝

13.那就加油!這次面試就先這樣。

哎,被虐的,我確實基本沒準備面試題,不是因爲懶,而是我覺得準備的面試題不懂的化都是靠背的,因爲背是不懂什麼意思的,也會導致很快就忘,甚至如果在深入一步的化只能什麼也不會,都不會懂面試官說什麼,所以我不願意這樣準備面試

我之所以有些東西能稍微達出來或者說是知道面試官說什麼基本都是靠平時看看視頻,還有搜索自己瞭解的知識,才記下的,但你知道的還是很多不懂,所以纔會說不出來,只是有大概模糊的印象

本來想試試,結果又再一次發現自己學習的不足,如果按我自己所說不用背去知道去了解的去說的化,我知道這個工作量,因爲後臺知識太多,每一模塊都有無窮無盡的知識。

我以我目前的經驗來說想要深入的學習,一定不是看兩篇博客,買幾個視頻就可以的,視頻講的都是讓你快速麪對應付面試,一小塊一小塊的讓你作爲了解而已,所以真的是很難,感覺應該看那種比較好點,專業的書籍,專業講解某個模塊,就像Mysql你買個3,4本,你基本就把mysql瞭解差不多了

以上就是全部內容!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章