Java高級工程師面試總結(jié)
隨著java技術(shù)在各行各業(yè)的廣泛應用,企業(yè)對于java人才招聘的要求越來越高。下面是關(guān)于Java高級工程師面試總結(jié),希望大家認真閱讀!
一、獨白
之前也面試別人,現(xiàn)在輪到自己找工作,怎么說呢,每個面試官的看法不一樣,面試的方式就不一樣,比如我面試別人我喜歡問項目中他用到了那些,然后針對用到的技術(shù)去問一些問題,或者說對于某些場景的一些技術(shù)實現(xiàn)方案是我特別喜歡問的,比如當你的接口服務數(shù)據(jù)被人截包了,你如何防止數(shù)據(jù)惡意提交? 相對來說,Java的底層和基礎(chǔ)會問的少一點,當然問的少不是代表不問,而是說側(cè)重點在于你的所做過的項目和你的設計思路如何。當然,懂基礎(chǔ)和底層更好,這樣能讓你知其然,更知其所以然,寫出來的代碼和程序更具有健壯性和可維護性。所以說,基礎(chǔ)還是很重要的。
現(xiàn)在輪到自己出去面試,怎么說呢,其實還是挺緊張的,原以為自己不會因此緊張或者焦慮,實際上,還是有的,在沒找到合適的工作的時候,甚至晚上有點睡不著覺,總覺著有什么事壓在心頭,睡覺都不安心。既然睡不著,那還是看看資料吧,我有個習慣,睡前看點問題,第二天早上就能想到答案,睡前記點資料,第二天早上就能記得特別深刻,不說廢話了,直接進入正題吧。
二、面試技巧
1、背熟你的簡歷
原因:面試的第一個問題,一般都是讓你簡單介紹下你自己,或者介紹一下你最近的項目,而一個面試者,如果連自己的簡歷都無法熟知,對里面提到的項目、技術(shù)都無法描述清楚的話,我想沒有哪家公司會接受這樣的,哪怕你是超級人才,你自我表述不行,估計也會為此頭疼,所以,切記:一定要背好自己的簡歷,不要求你能全部記下,至少要熟記你最近所待過的兩家公司,這兩家公司里面你做過的'項目,你負責的模塊,項目里面用到的技術(shù)以及相對應的技術(shù)實現(xiàn)方案(這個尤為重要)。
2、深入了解并熟記部分Java基礎(chǔ)知識
原因:大部分公司無論面試初級還是高級,無論是筆試還是面試,都會問到一系列基礎(chǔ)題,這些基礎(chǔ)題大概涵括 jvm、字符串、集合、線程等等,如果說每一個讓你死記硬背你肯定記不住,那么就是理解中記憶了,拿jvm來說 ,如果讓你談談你對jvm的理解, 那么你首先得知道JVM有哪些結(jié)構(gòu)組成,每個結(jié)構(gòu)用來做什么的,然后考慮一個Java對象從創(chuàng)建到回收,如何途徑JVM這些結(jié)構(gòu)的。如果你從這些方面來綜合記憶,相信事半功倍,并且你理解的更透徹。 至于如果讓你談集合,舉例List集合下面ArryList、LinkedList、Vector等集合的區(qū)別,那么同樣的方法,你需要理解每一個的結(jié)構(gòu)組成是什么,你才能知道他有什么作用,這樣你在平時的用法上會更精煉,而且在面試過程中,也不至于啞口無言。
3、保持自信心和沉重冷靜的心態(tài)
原因:面試過程中,自信是少不了的,相信你可以, 面試的路上可以自己對自己說一句: I belive I can ! 反正我就是這么做的,自我的心里暗示吧,其實面對面試官的時候,你自信的狀態(tài)也會讓面試官覺得你是個很有底氣的人,至少從感覺上會給你打個高分。另外還有就是保持沉重冷靜,如果是讓你提供技術(shù)方案或者說說某個技術(shù)原理,沒必要一緊張一咕嚕的什么都說,你可以對面試官說:我先想想,然后自己組裝記憶中的知識,組裝下語言,有條理的說出來,這樣能更好的表現(xiàn)你的才能,不是嗎? 面試誰都會緊張,我也會緊張,有時候明明記得的知識點忘了,沒關(guān)系,大膽的說忘了,或者直接說不知道。 要記住,有部分不知道沒關(guān)系,如果全都知道,那你應該是CTO級別了(開個玩笑)。
4、盡量記住面試過程中你回答不出來或者回答存在不妥的問題
原因:面試失敗了沒關(guān)系,畢竟每個公司的要求不一樣,問的問題和你擅長的方面可能有所出入,但是請記住一點:面試過程中那些你回答不出來問題,或者你自己感覺回答不太準確的問題,自己記下來,如果不會的,你可以當場問問面試官有沒有好的解答,如果面試官不愿意告訴你(一般是基礎(chǔ)方面面試官就懶得答你),那么你就自己回家慢慢查資料,如果是某些特定的技術(shù),也可以自己寫寫案例什么的,畢竟知識點就那么多,問題百變,原理不變,面試也是一個學習知識的過程,讓你了解大部分公司目前需要或者要求的技術(shù)。這次不知道,下次就知道了
5、去面試之前,最好先了解你要去面試公司的情況(包括產(chǎn)品、項目情況)
原因:俗話說,知己知彼,百戰(zhàn)不殆,面試就是一場戰(zhàn)斗,你需要了解你面試公司基本情況,包括崗位要求,這樣你就能大概知道你需要面試的這家公司的技術(shù)要求情況。 為何讓你去了解這家公司的主營產(chǎn)品和項目呢,就是讓你大概了解這家公司的一個技術(shù)架構(gòu)的情況,包括你可能對他們的一種實現(xiàn)方式提出質(zhì)疑和疑惑,相信面試官很愿意幫你解答這些問題的。這樣你既圖了表現(xiàn),也學到了知識,何樂而不為。
6、合理安排你的面試時間(如果有多家公司的面試機會,盡量把你想去的公司放到最后去面試)
原因:估計很多人都不理解這個,可能大部分的人對于如何安排面試時間比較迷茫,隨意安排?墒沁@里有個技巧,如果同時有多個面試機會,你把你最想去的公司放到最末尾去面試,這樣你經(jīng)歷過了前面的這些公司篩選,如果成功了是個機會,如果沒成功,也是為最后做鋪墊。 不過這里就需要考慮兩點:1、你需要記住你投簡歷的公司和基本情況(這說明你不是海投的) 2、如果記不住,那么可以先應答一個時間,后續(xù)了解公司信息之后,通過郵件或者其他方式與其約定,調(diào)整面試時間。而且建議安排一天的面試公司不要超過兩家,最好的是上午一家,下午一家,這樣你能有充足的時間調(diào)整狀態(tài)。
三、面試題基礎(chǔ)總結(jié)
1、 JVM結(jié)構(gòu)原理、GC工作機制詳解
答:具體參照:JVM結(jié)構(gòu)、GC工作機制詳解 ,說到GC,記住兩點:1、GC是負責回收所有無任何引用對象的內(nèi)存空間。 注意:垃圾回收回收的是無任何引用的對象占據(jù)的內(nèi)存空間而不是對象本身,2、GC回收機制的兩種算法,a、引用計數(shù)法 b、可達性分析算法( 這里的可達性,大家可以看基礎(chǔ)2 Java對象的什么周期),至于更詳細的GC算法介紹,大家可以參考:Java GC機制算法
2、Java對象的生命周期
答:創(chuàng)建階段 、 應用階段 、不可見階段 、不可達階段 、收集階段 、終結(jié)階段、 對象空間重新分配階段等等,具體參照:Java 對象的生命周期
3、Map或者HashMap的存儲原理
答:HashMap是由數(shù)組+鏈表的一個結(jié)構(gòu)組成,具體參照:HashMap的實現(xiàn)原理
4、當數(shù)據(jù)表中A、B字段做了組合索引,那么單獨使用A或單獨使用B會有索引效果嗎?(使用like查詢?nèi)绾斡兴饕Ч?
答:看A、B兩字段做組合索引的時候,誰在前面,誰在后面,如果A在前,那么單獨使用A會有索引效果,單獨使用B則沒有,反之亦然。同理,使用like模糊查詢時,如果只是使用前面%,那么有索引效果,如果使用雙%號匹配,那么則無索引效果
5、數(shù)據(jù)庫存儲日期格式時,如何考慮時區(qū)轉(zhuǎn)換問題?
答:使用TimeStamp , 原因參照:Java編程中遇到的時區(qū)轉(zhuǎn)換問題
6、Java Object類中有哪些方法?
答:Object有哪些方法
7、HTTP協(xié)議,GET和POST 的區(qū)別
答:淺談HTTP中GET和POST的區(qū)別
四、線程、設計模式、緩存方面
1、SimpleDataFormat是非線程安全的,如何更好的使用而避免風險呢
答:關(guān)于SimpleDateFormat安全的時間格式化線程安全問題
2、如何看待設計模式,并簡單說說你對觀察者模式的理解
答:1、設計模式有神馬用 2、觀察者模式類圖及實現(xiàn)
3、集群環(huán)境中,session如何實現(xiàn)共享
答:1、Java集群之session共享 2、session多服務器共享方案,還有一種方案就是使用一個固定的服務器專門保持session,其他服務器共享
4、分布式、集群環(huán)境中,緩存如何刷新,如何保持同步?
答:A、緩存如何刷新? 1、定時刷新 2、主動刷新覆蓋 ,每個緩存框架都有自帶的刷新機制,或者說緩存失效機制,就拿Redis和 Ehcache舉例, 他們都有自帶的過期機制,另外主動刷新覆蓋時,只需獲取對應的key進行數(shù)據(jù)的覆蓋即可
B、緩存如何保持同步? 這個redis有自帶的集群同步機制,即復制功能,具體參考:基于Redis分布式緩存實現(xiàn) ,Ehcache也有分布式緩存同步的配置,只需要配置不同服務器地址即可,參照:Ehcache分布式緩存同步
5、一條sql執(zhí)行過長的時間,你如何優(yōu)化,從哪些方面?
答:1、查看sql是否涉及多表的聯(lián)表或者子查詢,如果有,看是否能進行業(yè)務拆分,相關(guān)字段冗余或者合并成臨時表(業(yè)務和算法的優(yōu)化)
2、涉及鏈表的查詢,是否能進行分表查詢,單表查詢之后的結(jié)果進行字段整合
3、如果以上兩種都不能操作,非要鏈表查詢,那么考慮對相對應的查詢條件做索引。加快查詢速度
4、針對數(shù)量大的表進行歷史表分離(如交易流水表)
5、數(shù)據(jù)庫主從分離,讀寫分離,降低讀寫針對同一表同時的壓力,至于主從同步,MySQL有自帶的binlog實現(xiàn) 主從同步
個人理解:從根本上來說,查詢慢是占用mysql內(nèi)存比較多,那么可以從這方面去酌手考慮
五、設計方案相關(guān)
面試還會問到一些關(guān)于設計方案相關(guān)的問題,比如
1、你的接口服務數(shù)據(jù)被人截包了,你如何防止數(shù)據(jù)惡意提交?
答:我們可以在接口傳輸參數(shù)里面設置一個業(yè)務編號,這個編號用來區(qū)分是否重復提交。這樣即使數(shù)據(jù)被抓包了,對方也無法區(qū)分每個字段你的含義,這時,這個業(yè)務編號的作用就來了
2、假設服務器經(jīng)常宕機,你從哪些方面去排查問題?
【Java高級工程師面試總結(jié)】相關(guān)文章: