工作一年多,參加搜狐社招!面試官都問了我什麼?

點擊上方“Coder編程”,選擇“置頂公衆號”

技術文章第一時間送達!

面試題來了.png

每天進步一點,不做curd工程師與Api調用工程師
歡迎訪問個人博客網站:https://www.coder-programming.cn/

自我介紹

基礎部分:

2.java集合框架說一下,常見的有哪些?

3.hashMap和ConcurrentHashMap的區別,以及底層的數據結構是什麼?對於具體的改變在哪個版本回答的比較模糊,其他部分回答的還可以,面試官也沒有細問HashMap和ConcerrentHashMap的put和get過程,沒有問擴容、縮容等問題,需要重點去關注一下這部分?

4.因爲說ConcurrentHashMap的時候說到了synchronized和ReetrantLock,說一下Synchronized和ReentrantLock的區別?這部分對synchronized的鎖的優化沒說上是在哪個具體的版本改進的?但是區別還是說的比較好?

5.說一下synchronized的鎖升級過程?這部分說回答的也挺好的?

6.說一下CAS?CAS是什麼?用來解決什麼問題?底層用的是那個類?回答的還可以,但具體細節還有待細化。

7.CAS的使用會有什麼問題?怎麼解決該問題?ABA問題,原子類裏面的AtomicStampedReference可以解決該問題,帶一個時間戳,除了當前值和期望值外,還有當前時間戳和預期時間戳。

6.String s = new String("abc"),創建了幾個對象,每個對象分別在什麼位置?注意分別回答,s在棧中,new String對象在堆中,常量在1.7之前在永久代中,字符串常量池在永久代中;在1.7之後,常量abc在堆中,因爲字符串常量池在堆中,通過直接指針的方式連接。

7.由於上面問題提到了堆棧,說下jvm內存結構,每一部分的作用是什麼?

8.是不是看過深入理解java虛擬機?我說看過一部分,類文件結構沒有看完,其他大概看過了,也沒有問類加載的問題

9.jvm調優部分:實際工作中有調過優嗎?JVM參數設置,STS調優經驗,這部分回答的不是太好,因爲確實實際工作中用的比較少,但是作爲面試,還是要準備一下相關問題

10.工作中用到過多線程嗎?用的是哪些線程池?每種線程池有哪些缺陷?底層所使用的的隊列分別是什麼?

11.線程池工作原理部分有了解嗎?說一下線程池工作原理?

12.CycliBarrier用來幹什麼?CycliBarrier的最後命令由那個線程執行?是主線程還是最後一個到達的線程?是最後一個到達的線程,可以在CyclicBarrier的構造函數中設置最後要執行的代碼,在此之前可以打印出來當前線程的線程名稱查看;

13.CountDown有了解過嗎?CountDown和CycliBarrier的區別是是什麼?在使用上有啥區別?

項目部分:

14.看你用過緩存,你們一般用什麼緩存?用來解決什麼問題?

15.redis是怎麼部署的?主從部署?有了解過redis集羣部署嗎?我說redis集羣部署沒有了解過,但是有了解過mysql的集羣部署,有讀寫分離部署,主從複製,分庫分表等相關方案,面試官也沒有具體細問,面試過最後說可以下去了解一下redis的集羣部署,因爲現在互聯網公司大多數都是集羣部署的。

16.說一下redis的數據類型吧?zset的底層數據結構是啥?zset的適用場景有哪些?我說了熱搜榜單排行榜,各種排行榜可以用Zset;

17.說redis的時候說到了redis的集羣部署解決了CAP理論中的AP,所以面試官開始問分佈式相關知識了?(面試回答問題的時候也可以這樣引導面試官,但是我引導錯了,因爲這部分我瞭解不多,給自己挖了個坑);說一下CAP是什麼?BASE有了解過嗎?

18.上面說CAP的時候說到了Zookeeper保證了C,強一致性性,所以問Zookeeper保持強一致性的原理和算法:有了解過ZAB和Paxos分佈式一致性算法嗎?具體算法沒有說清楚,大概說了一下Leader選擇過程,說的不是很細緻;最後面試官說下去可以研究一下分佈式這部分知識,可以看下Etcd,是一個分佈式、可靠KV存儲的分佈式系統,使用的協議,和Zookeeper的區別等;

19.看你有用過MQ,你們用的是什麼消息隊列?用來解決什麼問題?怎麼用的?是那種模式,點對點還是發佈訂閱?有消息持久化嗎?怎麼保證消息的重複消費?

20.SpringBoot的事務有了解過嗎?我說用的是Sping的聲明式事務(其實想引導面試官到Spring上來的,但是面試官Spring的問題並沒有多問),然後事務的註解是什麼?

21.你們用的ORM框架是什麼?mybatis?

22.根據表生成對象的時候生成了哪幾類對象?分別存放在什麼位置?那個包下?

編碼部分:

確定某一個整數是不是快樂數?Lettcode 202題,和麪試官溝通之後做出來了。

問答環節:

問我有沒有想問的問題?

1.由於剛纔分佈式和redis集羣部分回答的不是很好,對於這部分的學習有什麼建議嗎?

可以先學習一下docker容器技術,因爲現在大多數部署都是容器技術的,之後可以學點分佈式中間件相關的等等等。。。

2.您所在團隊現在使用的技術棧主要是什麼?

3.如果有機會的話,後續面試流程是什麼樣的?

整體感覺:

還是正規互聯網公司問的全面,面試官也很親和,會指導你去回答和解決問題,不像一般公司,問的問題很偏,一方面準備不充分,一方面確實有點不按套路出牌。這次面試一方面是想嘗試一下傳說中的大廠面試,另一方面也想檢驗一下最近的學習成果,對於JVM理論部分和併發與多線程問題的學習反饋。大廠面試上述三部分必須要有突出部分,編碼部分是很重要的,一定要多刷算法題,對於社招也不是太難,所以多刷題,多總結思路,劍指offer和leetcode是不錯的選擇;項目部分對於做過的東西要知道爲什麼這麼做?如果不這麼做會有什麼問題?使用過程中遇到過那些問題?對於分佈式中間件的問題不會少的,所以一定要做好準備;基礎部分是地基了,一定要打好地基,我大學期間沒有學好基礎,算法與數據結構、計算機網絡、操作系統、數據庫理論和mysql,這些基礎的東西一定要搞懂,大廠對於基礎特別看重,所以如果你還在上大學,一定要多看看這部分,多看看大廠校招和社招JD,不然開始的時候會碰壁很多次。

最後說明

對於社招來說,上面三個方面必須又要能拿的出的起碼兩個方面,所以加油吧;沒有一件事情是簡單的,每個人都有自己的苦惱和要解決的問題,找準自己的定位,想辦法解決自己的問題,關鍵是要追隨內心,不能隨波逐流,希望我越來越堅強,希望你越來越開心,畢竟活着就是一件很奢侈的事情!周國平先生曾在一個採訪中說:他研究尼采,想知道他探究的問題究竟有沒有答案,最後得出的結論是:人生本沒有什麼意義,生老病死,關鍵是作爲你自己,要給你的人生賦予某種意義,願我們都能給自己的人生賦予某種意義!

哈哈哈,一份面經最後扯成雞湯了,不喜勿噴!

作者:EverAfter201811171815842
鏈接:https://www.nowcoder.com/discuss/440175

推薦

文末

文章收錄至
Github: https://github.com/CoderMerlin/coder-programming
Gitee: https://gitee.com/573059382/coder-programming
歡迎關注並star~

微信公衆號

                  我知道你 “在看

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