INTERVIEW QUESTIONS

四面技術,一面HR。

一面:

1.1、把你最近一個項目的流程圖畫出來並說明每個模塊都是幹嘛用的你負責哪些模塊。

答:筆者畫了流程圖,講解了每個模塊的功能及他們之間的關係,以及每個模塊用到的哪些新技術。(感覺答得一般,口才不好)

1.2、說一下ThreadLocal

筆者有段時間研究過這個ThreadLocal,但是並未真正用過,之前也沒有複習,然後就直接說沒用過了。

見:https://blog.csdn.net/qq_35689573/article/details/88780703

1.3、創建線程池用Executors還是ThreadPoolExecutor?

Executors有四種創建現成的線程池配置策略,見:http://www.cnblogs.com/dolphin0520/p/3932921.html

ThreadPoolExecutor需要自己配置核心線程數、最大線程數、空閒線程數、拒絕策略。筆者剛開始用的是Executors,後來看了阿里巴巴開發手冊裏面建議用ThreadPoolExecutor,之後筆者就一直用的是ThreadPoolExecutor了。

答:用ThreadPoolExecutor,因爲ThreadPoolExecutor可以自己配置核心線程數和最大線程數。

1.4、ThreadPoolExecutor一般配置的是無界隊列還是有界隊列?

答:無界隊列

1.5、無界隊列不會造成內存溢出嗎?

答:不會,因爲可以配置空閒線程數。

反思:這塊是讀者搞混了,我實際上用的是有界隊列(如:new LinkedBlockingQueue<Runnable>(workQueueCount))配置的空閒線程數。

1.6、那你一般怎麼配置線程池?

答:看cpu內核數,一般最大線程數配置成cpu核數的1.5-2倍。

1.7、如果是IO密集型的應該怎麼辦?

答:增大線程數。

1.8、如果有32個cpu,是IO密集型,配置64個線程可以嗎?

答:那得看內存。

1.9、內存很大,128個G。

答:理論上感覺是可以,但是會不會有我沒想到的地方。

1.10、畫一下jvm的內存結構圖。

答:畫了一個內存結構圖:堆、虛擬機棧、本地方法棧、方法區、程序計數器。

1.11、寫了一個常量字符串,問我存在方法區還是存在常量池中?

答:常量池。後來反應過來,常量池不就在方法區裏面嗎?又進坑了。

1.12、垃圾回收器有了解過嗎?

答:垃圾回收器有7種。

1.13、你對哪種有了解,瞭解的程度?

答:都有了解,您說的瞭解程度是有多深?

1.14、CMS垃圾回收的標記過程?

答:初始標記,併發標記,重新標記,併發清除。

1.15、CMS垃圾回收有一定的缺陷,知道是什麼嗎?

答:會產生浮動垃圾,因爲在併發清除階段程序依然在運行。

1.16、對jvm參數在服務器上的配置有了解嗎?怎麼優化一般都?

答:要看程序是IO密集型還是cpu密集型。

1.17、IO密集型的呢?

答:那就用默認的。

1.18、默認的是那種?爲啥要用默認的?

答:新生代用parNew,老年代用CMS,serial old做後備預案。

1.19、爲什麼?

因爲CMS是基於低停頓時間模型的。

1.20、知道LRU嗎?

答:最近訪問的?

1.21、對,如果我要只保留最近訪問的,剩餘的清除怎麼做?用java實現

答:可以用redis的zset。

1.22、用java實現

答:我想了一下,那就用集合吧,用LinkedHashMap。

1.23、爲什麼用LinkedHashMap?

答:LinkedHashMap會把最近訪問放在最後,我們只需要把前面的刪掉就能留下最近訪問的。

1.24、spring的AOP是基於什麼實現的?

答:基於動態代理。

1.25、動態代理有CGLib和Proxy兩種方式,有什麼區別?

答:我沒了解過這個。

1.26、用過volatile嗎?

答:用過,之前統計一個sql連續執行時間超過30秒的次數,用的static volatile統計的。

1.27、爲啥不用AtomicInteger,AtomicInteger可以保證原子性啊?

答:用的static volatile AtomicInteger統計的。

1.28、linux的shell腳本用過嗎?

答:常用的用過。

1.29、跟蹤日誌

答:tail -f 文件名。

1.30、給用戶賦權

答:假如是給用戶、組合其他賦全部權限的話,chmod 777 文件路徑。

1.31、給文件重命名

答:我一般都是mv 源文件 目標文件名。

二面:

2.1、上來就問我Proxy和CGLib的區別?

答:不太好大着臉再直接說不了解,試着說了一下,Proxy使用的類反射,第一次訪問可能性能會比較差,最後我沒了解過這個。

2.2、SpringIOC裏面用到了哪些設計模式

答:單例模式,spring的bean默認都是單例的,工廠模式,beanFactory負責輸出bean。

2.3、還有呢?

答:不知道了?面試官說:嗯,主要的都說了(淚流滿面啊)

2.4、數據庫用過oracle和mysql,是吧?

答:嗯,是的,用的oracle多一點?

2.5、oracle沒用過,沒用過的這個咱就不問了(好認真啊,笑哭)

2.6、kafka、rabbitmq,這兩個消息中間件,怎麼保證一條消息成功到達消費端。

答:那我先說kafka吧,kafka從生產者和消費者兩個層次來說,生產者有個request.require.ack參數設置爲-1保證消息成功到達kafka服務器併成功備份,消費端要確保消息不被丟失就要注意偏移量的提交,我們一般都用同步和異步結合的方式保證偏移量的正確提交。

2.7、如果生產者有兩條同樣的消息,怎麼保證消費只消費一條?

答:這個用kafka應該保證不了了,那我們用rabbitmq吧,其實我心裏想的是因爲第一條消息沒有成功到達消費者,所以纔會發第二條同樣的消息,第一條沒有成功到達,就是沒有正確路由到隊列中,就到了備份交換機了。再發一條就可以了。

2.8、兩條消息都能成功到達消費端呢,怎麼保證消費端只消費一條消息?

答:給每條消息建一個hashCode,保證唯一性,然後輪詢DB。轉念一想性能不太好,想到了redis,可以用redis的bitmap來實現。

2.9:、如果發生了線程衝突呢?

答:加個悲觀鎖synchronized。

2.10、如果在分佈式環境呢?

答:加個分佈式鎖。

2.11、分佈式鎖瞭解過嗎?

答:沒有。(下去了解一下,嗯,好的)

2.12、你常見的異常都有哪些?

答:空指針異常,數組下標越界異常,RunTimeException、IOException、InterruptedException、OutOfMemeory異常、stackOverFlow異常。

2.13、見過stackoverflow異常嗎?

答:沒有,一般都不會超過棧深度的。

2.14、zookeeper啓動後會是什麼什麼的?(其實沒太理解他的問題)

答:說了一通zookeeper的選舉機制,我看到他在zookeeper的旁邊打了一個?號,zookeeper我確實就是搭建過環境,知道他kafka是如何配合工作的,其他就不太熟了。

2.15、zookeeper你們都是怎麼用的?

答:都是和kafka配合使用的,奧,沒單獨用過嗎?沒有。畫了?號。

2.16、說出你用到的springCloud組件?

答:eurake、config、zuul、feign。

2.17、他們之間消息是如何流通的?

答:用戶發送一個請求給server1,server1需要去server2請求數據,server1先去eurake中心獲取server2的實例名及端口號,zuul路由到指定路徑,通過feign實現信息的讀取和交換。

2.18、如果要改配置文件,在不停止服務的前提下如何讓應用實現配置文件的修改?

答:使用config配置中心和bus總線,config中心更改了配置文件,通過bus總線通知相關服務,相關服務器去config中心讀取更新的數據並實現應用的自動重啓。

三面:

3.1、都用過哪些設計模式?

答:單例模式,工廠模式,觀察者模式,責任鏈模式,狀態模式,門面模式,代理模式

3.2、責任鏈模式是什麼?

答:就是發送一個請求,有很多種處理方法,然後向下傳遞,找到最合適的那個處理方法。

3.3、責任鏈模式有一個缺陷知道是什麼嗎?(全程超級嚴肅,面無表情)

答:想了一會,不知道。

3.4、如果鏈太長和話,會影響響應性能,你想那麼一長串鏈嗎?(大致就是這個意思吧,原話記不太清了)有什麼解決方式嗎。換個設計模式?

答:奧。那用狀態模式?不對,策略模式?意思相近,但是不是策略模式。

3.5、爲什麼要換工作?

答:爲了給公司創造更大的價值,(笑),說點實在的,爲了個人發展吧等等。

3.6、springSecurity的安全什麼?(這個題也沒太聽清)你是就是用過springSecurity,瞭解他的原理嗎?

答:是的,就是用過,不瞭解。

3.7、網絡IO瞭解嗎?

答:不瞭解。至此三面整段垮掉,開始感覺完了。面試官說要開會走了。

四面:

4.1、linux的shell腳本熟悉嗎?

答:知道常用的

4.2、查看一個文件有多少行?

答:猶豫(其實我根本就是忘了),tail -n(面試官,啊,笑)實際是(wc -l 文件名)

4.3、ack用過嗎?

答:沒用過。

4.4、說一下static吧

答:一般用static來修飾方法和字段。(估計面試官想問的不止這些)

4.5、ThreadLocal瞭解嗎?(全程都在很溫和的笑)

答:好像是....(被打斷,說的可能太離譜,心想:我真的沒關注過ThreadLocal怎麼老是問這個問題)

4.6、用過ThreadLocal嗎?

答:沒有(沒用過那就算了)

4.7、如果我現在有一個58.com的實體類,裏面有一個num屬性,我現在想把一個ArrayList集合裏面的所有這種對象按照這個num屬性的大小進行排序,怎麼做?

答:用TreeSet,實現comparator接口做個比較器。

4.8、看過源碼嗎,都看過什麼源碼?說一下你看源碼的收穫

答:看過集合的源碼,spring的源碼,tomcat的源碼

4.9、說一下spring源碼你都學到了什麼吧?

答:我說就看過一遍,但是沒看懂,感覺還要再看幾遍才行(面試驚訝,看了一遍??哈哈,說完覺得自己好像在吹牛,確實粗略看過一遍,只不過是跟着一本書看的,書上只寫重要的模塊重要功能,並不是每個類都看了),spring加載配置文件會有幾種不同的方式(說完感覺像沒說一樣);beanFactory一般採用懶加載,調用getBean()方法纔開始實例化,ApplicationContext服務啓動就會加載其中定義的bean到Spring容器中;spring的事務模塊處理都封裝在tx模塊,下面包括hibernate、jta,mybatis。。。

4.10、JTA?JTA不是在mybatis下面嗎?你知道JTA是幹嘛的嗎

答:不知道。

4.11、瞭解類反射嗎?

答:嗯,用來反射來生成一個對象。

4.12、還能用來幹嘛?

答:想了半天,面試官的提示說用類反射調用方法之類的。

4.11、爲什麼要換工作?

答:因爲現在。。

4.12、發展有侷限性了是不?

答:趕緊點頭答是的是的,(他一直在看錶,估計有急事,聽不完我說完了,都替我說了)

4.13、好了,你還有什麼要問我的嗎?

答:嗯?還有面試嗎?

4.14、咋的,你有事兒啊?

答:沒有。

4.15、你是想知道自己掛了沒有是吧?

答:我笑了笑,沒說話。

五面(HR):

5.1、介紹一下你自己

5.2、說說你的項目經歷

5.3、爲什麼換工作?

5.4、如果我明天給你offer,你還會繼續找工作還是回去提離職?

5.5、結婚了嗎?

憑着記憶整理出這些,給自己做反思和記錄,給你們做參考。面試官有些話是我憑着記憶填出來的,大概意思對,並不是原話,各位看官就不要挑刺了啊。

幾位面試官都很認真,很用心,和他們一起共事應該能學到很多東西。

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