摘要:面試官要不你來手寫下單例模式唄候選者單例模式一般會有好幾種寫法候選者餓漢式簡單懶漢式在方法聲明時(shí)加鎖雙重檢驗(yàn)加鎖進(jìn)階懶漢式靜態(tài)內(nèi)部類優(yōu)雅懶漢式枚舉候選者所謂餓漢式指的就是還沒被用到,就直接初始化了對象。
面試官:我看你的簡歷寫著熟悉常見的設(shè)計(jì)模式,要不你來簡單聊聊你熟悉哪幾個(gè)吧?
候選者:常見的工廠模式、代理模式、模板方法模式、責(zé)任鏈模式、單例模式、包裝設(shè)計(jì)模式、策略模式等都是有所了解的
候選者:項(xiàng)目手寫代碼用得比較多的,一般就模板方法模式、責(zé)任鏈模式、策略模式、單例模式吧
候選者:像工廠模式、代理模式這種,手寫倒是不多,但畢竟Java后端一般環(huán)境下都用Spring嘛,所以還是比較熟悉的。
面試官:要不你來手寫下單例模式唄?
候選者:單例模式一般會有好幾種寫法
候選者:餓漢式、簡單懶漢式(在方法聲明時(shí)加鎖)、DCL雙重檢驗(yàn)加鎖(進(jìn)階懶漢式)、靜態(tài)內(nèi)部類(優(yōu)雅懶漢式)、枚舉
候選者:所謂「餓漢式」指的就是還沒被用到,就直接初始化了對象。所謂「懶漢式」指的就是等用到的時(shí)候,才進(jìn)行初始化
候選者:那我就都寫寫吧,反正就那些代碼
面試官:那你們用的哪種比較多?
候選者:一般我們項(xiàng)目里用靜態(tài)內(nèi)部類的方式實(shí)現(xiàn)單例會比較多(如果沒有Spring的環(huán)境下),代碼簡潔易讀
候選者:如果有Spring環(huán)境,那還是直接交由Spring容器管理會比較方便(Spring默認(rèn)就是單例的)
候選者:枚舉一般我們就用它來做「標(biāo)識」吧,而DCL這種方式也有同學(xué)會在項(xiàng)目里寫(在一些源碼里也能看到其身影),但總體太不利于閱讀和理解(:
候選者:總的來說,用哪一種都可以的,關(guān)鍵我覺得要看團(tuán)隊(duì)的代碼風(fēng)格吧(保持一致就行),即便都用「餓漢式」也沒啥大的問題(現(xiàn)在內(nèi)存也沒那么稀缺,我認(rèn)為可讀性比較重要)
面試官:嗯...
面試官:我看你在DCL的單例代碼上,寫了volatile修飾嘛?為什么呢?
候選者:你不記得我們曾經(jīng)聊過volatile的了嘛?指令是有可能亂序執(zhí)行的(編譯器優(yōu)化導(dǎo)致亂序、CPU緩存架構(gòu)導(dǎo)致亂序、CPU原生重排導(dǎo)致亂序)
候選者:在代碼new Object的時(shí)候,不是一條原子的指令,它會由幾個(gè)步驟組成,在這過程中,就可能會發(fā)生指令重排的問題,而volatile這個(gè)關(guān)鍵字就可以避免指令重排的發(fā)生。
面試官:那你說下你在項(xiàng)目里用到的設(shè)計(jì)模式吧?
候選者:嗯,比如說,我這邊在處理請求的時(shí)候,會用到責(zé)任鏈模式進(jìn)行處理(減免if else 并且讓項(xiàng)目結(jié)構(gòu)更加清晰)
候選者:在處理公共邏輯時(shí),會使用模板方法模式進(jìn)行抽象,具體不同的邏輯會由不同的實(shí)現(xiàn)類處理(每種消息發(fā)送前都需要經(jīng)過文案校驗(yàn),所以可以把文案校驗(yàn)的邏輯寫在抽象類上)
候選者:代理模式手寫的機(jī)會比較少(因?yàn)轫?xiàng)目一般有Spring環(huán)境,直接用Spring 的AOP代理就好了)
候選者:我之前使用過AOP把「監(jiān)控客戶端」封裝以「注解」的方式進(jìn)行使用(不用以硬編碼的方式來進(jìn)行監(jiān)控,只要有注解就行了)
面試官:那你能聊聊Spring常見的設(shè)計(jì)模式嘛?
候選者:比如,Spring IOC容器可以理解為應(yīng)用了「工廠模式」(通過ApplicationContext或者BeanFactory去獲取對象)
候選者:Spring的對象默認(rèn)都是單例的,所以肯定是用了「單例模式」(源碼里對單例的實(shí)現(xiàn)是用的DCL來實(shí)現(xiàn)單例)
候選者:Spring AOP的底層原理就是用了「代理模式」,實(shí)現(xiàn)可能是JDK 動態(tài)代理,也可能是CGLIB動態(tài)代理
候選者:Spring有很多地方都用了「模板方法模式」,比如事務(wù)管理器(AbstractPlatformTransactionManager),getTransaction定義了框架,其中很多都由子類實(shí)現(xiàn)
候選者:Spring的事件驅(qū)動模型用了「觀察者模式」,具體實(shí)現(xiàn)就是ApplicationContextEvent、ApplicationListener
面試官:嗯,了解...
歡迎關(guān)注我的微信公眾號【Java3y】來聊聊Java面試,對線面試官系列持續(xù)更新中!
【對線面試官-移動端】系列 一周兩篇持續(xù)更新中!
【對線面試官-電腦端】系列 一周兩篇持續(xù)更新中!
原創(chuàng)不易?。∏笕B??!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/125108.html
摘要:中的強(qiáng)制轉(zhuǎn)換規(guī)則面試官中強(qiáng)制類型轉(zhuǎn)換是一個(gè)非常易出現(xiàn)的點(diǎn),知道強(qiáng)制轉(zhuǎn)換時(shí)候的規(guī)則嗎注規(guī)則最好配合下面什么時(shí)候發(fā)生轉(zhuǎn)換使用這些規(guī)則看效果更佳。調(diào)用方法用來把對象轉(zhuǎn)換成原始類型的值數(shù)值字符串和布爾值。 前言 showImg(https://segmentfault.com/img/bVbu4Fb?w=940&h=400);之前面試了幾個(gè)開發(fā)者,他們確實(shí)做過不少項(xiàng)目,能力也是不錯(cuò)的,但是發(fā)現(xiàn)...
摘要:正因?yàn)槿绱?,現(xiàn)在很多簡歷上的項(xiàng)目經(jīng)歷的質(zhì)量都是參差不齊,同時(shí)有的項(xiàng)目經(jīng)歷又非常相似,面試官一眼就能知道你的項(xiàng)目到底是真是假。雖然以上三點(diǎn)原則不能包治百病,但是對很多同學(xué)來說應(yīng)該是蠻有益處的。閱讀本文大概需要 5 分鐘。作者:黃小斜showImg(https://user-gold-cdn.xitu.io/2019/3/30/169cdb4bd2cac24c);?作為一個(gè)程序員,想必大家曾經(jīng)都...
摘要:準(zhǔn)備不充分第一輪不過第一家,廣州琶洲一家環(huán)境超級好,福利也不錯(cuò),主營美顏的公司,這也是我最感遺憾的一次面試機(jī)會。主要是第一輪面試第一個(gè)問題的種數(shù)據(jù)類型,只答了一個(gè)。 前言 首先需要說明的一點(diǎn),本人只是一個(gè)畢業(yè)一年,只有一年工作經(jīng)驗(yàn)的普通PHPer,能力有限,這篇文章只是將我這幾周來的感受和體驗(yàn)分享出來,希望能給許多像我一樣,或者互聯(lián)網(wǎng)行業(yè)的新手帶來一些收獲,當(dāng)然哪里說的不對或不足還是希...
摘要:要面試大廠,自己的知識儲備一定要非常豐富,若缺胳膊少腿,別說在實(shí)際工作當(dāng)中,光是面試這一關(guān)就過不了。 金九銀十剛過去,有一部分朋友在這期間肯定經(jīng)歷了一番大廠面試的洗...
閱讀 3805·2023-01-11 11:02
閱讀 4308·2023-01-11 11:02
閱讀 3132·2023-01-11 11:02
閱讀 5240·2023-01-11 11:02
閱讀 4804·2023-01-11 11:02
閱讀 5578·2023-01-11 11:02
閱讀 5384·2023-01-11 11:02
閱讀 4084·2023-01-11 11:02