最新阿里高級(jí)Java面試題總結(jié)

最新阿里高級(jí)Java面試題總結(jié)

深圳達(dá)內(nèi)教育      2022-03-06 19:00:01     9

最新阿里高級(jí)Java面試題總結(jié),  1、JVM結(jié)構(gòu)原理、GC工作機(jī)制詳情  答:具體參照:JVM結(jié)構(gòu)、GC工作機(jī)制詳解,說(shuō)到GC,記住兩點(diǎn):1、GC是負(fù)責(zé)回收所有無(wú)任何

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹


  1、JVM結(jié)構(gòu)原理、GC工作機(jī)制詳情


  答:具體參照:JVM結(jié)構(gòu)、GC工作機(jī)制詳解,說(shuō)到GC,記住兩點(diǎn):1、GC是負(fù)責(zé)回收所有無(wú)任何引用對(duì)象的內(nèi)存空間。注意:垃圾回收回收的是無(wú)任何引用的對(duì)象占據(jù)的內(nèi)存空間而不是對(duì)象本身,2、GC回收機(jī)制的兩種算法,a、引用計(jì)數(shù)法b、可達(dá)性分析算法(這里的可達(dá)性,大家可以看基礎(chǔ)2Java對(duì)象的什么周期),至于更詳細(xì)的GC算法介紹,大家可以參考:JavaGC機(jī)制算法。


  2、Java對(duì)象的生命周期


  答:創(chuàng)建階段、應(yīng)用階段、不可見(jiàn)階段、不可達(dá)階段、收集階段、終結(jié)階段、對(duì)象空間重新分配階段等等,具體參照:Java對(duì)象的生命周期。


  3、Map或者HashMap的儲(chǔ)存原理


  答:HashMap是由數(shù)組+鏈表的一個(gè)結(jié)構(gòu)組成,具體參照:HashMap的實(shí)現(xiàn)原理。


  4、當(dāng)數(shù)據(jù)表中A、B字段做了組合索引,那么單獨(dú)使用A或單獨(dú)使用B會(huì)有索引效果嗎?(使用like查詢?nèi)绾斡兴饕Ч?/strong>


  答:看A、B兩字段做組合索引的時(shí)候,誰(shuí)在前面,誰(shuí)在后面,如果A在前,那么單獨(dú)使用A會(huì)有索引效果,單獨(dú)使用B則沒(méi)有,反之亦然。同理,使用like模糊查詢時(shí),如果只是使用前面%,那么有索引效果,如果使用雙%號(hào)匹配,那么則無(wú)索引效果。


  5、數(shù)據(jù)庫(kù)存儲(chǔ)日期格式時(shí),如何考慮時(shí)區(qū)轉(zhuǎn)換問(wèn)題?


  答:使用TimeStamp,原因參照:Java編程中遇到的時(shí)區(qū)轉(zhuǎn)換問(wèn)題。


  6、JavaObject類中有哪些方法?


  答:Object有哪些方法。


  7、HTTP協(xié)議,GET和POST的區(qū)別


  答:淺談HTTP中GET和POST的區(qū)別。


  線程、設(shè)計(jì)模式、緩存方面


  1、SimpleDataFormat是非線程安全的,如何更好的使用而避免風(fēng)險(xiǎn)呢?


  答:關(guān)于SimpleDateFormat安全的時(shí)間格式化線程安全問(wèn)題。


  2、如何看待設(shè)計(jì)模式,并簡(jiǎn)單說(shuō)說(shuō)你對(duì)觀察者模式的理解


  答:1、設(shè)計(jì)模式有神馬用2、觀察者模式類圖及實(shí)現(xiàn)。


  3、集群環(huán)境中,session如何實(shí)現(xiàn)共享


  答:1、Java集群之session共享2、session多服務(wù)器共享方案,還有一種方案就是使用一個(gè)固定的服務(wù)器專門(mén)保持session,其他服務(wù)器共享。


  4、分布式、集群環(huán)境中,緩存如何刷新,如何保持同步?


  答:A、緩存如何刷新?1、定時(shí)刷新2、主動(dòng)刷新覆蓋,每個(gè)緩存框架都有自帶的刷新機(jī)制,或者說(shuō)緩存失效機(jī)制,就拿Redis和Ehcache舉例,他們都有自帶的過(guò)期機(jī)制,另外主動(dòng)刷新覆蓋時(shí),只需獲取對(duì)應(yīng)的key進(jìn)行數(shù)據(jù)的覆蓋即可。


  B、緩存如何保持同步?這個(gè)redis有自帶的集群同步機(jī)制,即復(fù)制功能,具體參考:基于Redis分布式緩存實(shí)現(xiàn),Ehcache也有分布式緩存同步的配置,只需要配置不同服務(wù)器地址即可,參照:Ehcache分布式緩存同步。


  5、一條sql執(zhí)行過(guò)長(zhǎng)的時(shí)間,你如何優(yōu)化,從哪些方面?


  答:1、查看sql是否涉及多表的聯(lián)表或者子查詢,如果有,看是否能進(jìn)行業(yè)務(wù)拆分,相關(guān)字段冗余或者合并成臨時(shí)表(業(yè)務(wù)和算法的優(yōu)化);


  2、涉及鏈表的查詢,是否能進(jìn)行分表查詢,單表查詢之后的結(jié)果進(jìn)行字段整合;


  3、如果以上兩種都不能操作,非要鏈表查詢,那么考慮對(duì)相對(duì)應(yīng)的查詢條件做索引。加快查詢速度;


  4、針對(duì)數(shù)量大的表進(jìn)行歷史表分離(如交易流水表);


  5、數(shù)據(jù)庫(kù)主從分離,讀寫(xiě)分離,降低讀寫(xiě)針對(duì)同一表同時(shí)的壓力,至于主從同步,MySQL有自帶的binlog實(shí)現(xiàn)主從同步;


  6、explain分析sql語(yǔ)句,查看執(zhí)行計(jì)劃,分析索引是否用上,分析掃描行數(shù)等等;


  7、查看mysql執(zhí)行日志,看看是否有其他方面的問(wèn)題;


  個(gè)人理解:從根本上來(lái)說(shuō),查詢慢是占用mysql內(nèi)存比較多,那么可以從這方面去酌手考慮。


  設(shè)計(jì)方案相關(guān)


  面試還會(huì)問(wèn)到一些關(guān)于設(shè)計(jì)方案相關(guān)的問(wèn)題,比如:


  1、你的接口服務(wù)數(shù)據(jù)被人截包了,你如何防止數(shù)據(jù)惡意提交?


  答:我們可以在接口傳輸參數(shù)里面設(shè)置一個(gè)業(yè)務(wù)編號(hào),這個(gè)編號(hào)用來(lái)區(qū)分是否重復(fù)提交。這樣即使數(shù)據(jù)被抓包了,對(duì)方也無(wú)法區(qū)分每個(gè)字段你的含義,這時(shí),這個(gè)業(yè)務(wù)編號(hào)的作用就來(lái)了。


  2、假設(shè)服務(wù)器經(jīng)常宕機(jī),你從哪些方面去排查問(wèn)題?


  答:這個(gè)就留個(gè)各位看官補(bǔ)充了。


  總而言之該看的還是得看,還學(xué)的還是得學(xué)。再次強(qiáng)調(diào),基礎(chǔ)很重要!面試技巧同樣很重要,還是那句話:祝愿各位看官都能找到心儀的工作吧~~


  另外,奉勸大家不要頻繁跳槽,這些知識(shí)點(diǎn)能提升固然好,不要盲目跳槽,找工作很累的,而且沒(méi)有哪家公司喜歡頻繁跳槽的員工。


  Java程序猿跳槽應(yīng)該學(xué)哪些方面的技術(shù)


  互聯(lián)網(wǎng)產(chǎn)品、大型企業(yè)級(jí)項(xiàng)目常會(huì)用到的:


  1.并發(fā)處理技術(shù)。具體到Java上通常是涉及java.util.concurrent、并發(fā)鎖機(jī)制、NIO等方面,當(dāng)然最近比較火爆的Netty框架也可以作為高并發(fā)處理的備選方案之一,這需要對(duì)Java的線程調(diào)度機(jī)制有著比較深的理解。不過(guò)這些可能會(huì)涉及并發(fā)控制的對(duì)象(比如reentrantlock等)只能存在于一個(gè)JVM里的問(wèn)題,一旦系統(tǒng)規(guī)模大到需要部署多個(gè)JVM來(lái)處理并發(fā)的情況,則需要采用共享session的技術(shù)(比如spring-session),或者盡可能將系統(tǒng)后臺(tái)設(shè)計(jì)為無(wú)狀態(tài)的服務(wù),這需要對(duì)RESTful有著較深的理解。


  2.高可用、負(fù)載均衡技術(shù)?;ヂ?lián)網(wǎng)產(chǎn)品、企業(yè)級(jí)應(yīng)用通常要求一年里的Downtime控制在很小的范圍內(nèi),這需要足夠的高可用和負(fù)載均衡架構(gòu)來(lái)支撐,這個(gè)一般和Java技術(shù)本身沒(méi)太大關(guān)系,但卻是一名初級(jí)程序員向高級(jí)程序員甚至是架構(gòu)師CIO進(jìn)階的必備技術(shù),因此可以適當(dāng)了解一下Nginx、HAProxy等對(duì)這方面的支持。另外現(xiàn)在最“時(shí)髦”的做法是將應(yīng)用docker化,配合ETCD、kubernetes等工具在容器的層面上實(shí)現(xiàn)高可用和負(fù)載均衡,當(dāng)然這需要看實(shí)際的需求,最時(shí)髦的不見(jiàn)得是最適用的,要考慮構(gòu)建成本。


  3.緩存技術(shù)。緩存應(yīng)該是大型系統(tǒng)中或高并發(fā)條件下提高響應(yīng)速度的亙古不變的真理(雖然也看到過(guò)淘寶搜索商品功能采用的大數(shù)據(jù)處理技術(shù)實(shí)現(xiàn)的零緩存的文章,但能達(dá)到淘寶的體量和技術(shù)水平一般不太可能),這方面的工具太多了,ehcache、memcached、redis……從Java的角度來(lái)講,需要了解的一是Java對(duì)這些工具的連接器,二是緩存技術(shù)背后的JSR-107標(biāo)準(zhǔn),可以參考spring-cache的實(shí)現(xiàn),閱讀一下源碼加深理解。


  4.異步處理技術(shù)。這通常也是抵消高并發(fā)的處理手段之一,從Java的角度看最簡(jiǎn)單的異步處理就是新啟動(dòng)一個(gè)異步線程,這同樣也需要對(duì)Java的線程調(diào)度有所了解,當(dāng)然也可使用Spring中的@Async之類的也可以簡(jiǎn)單實(shí)現(xiàn)異步線程的處理。如果是非常消耗資源的業(yè)務(wù)處理,簡(jiǎn)單的異步線程是滿足不了需求的,這就需要一些消息中間件來(lái)做這些異步處理了,消息中間件有很多,activemq、rabbitmq、kafka……需要了解的是Java對(duì)這些中間件的連接器。不過(guò)異步處理中最關(guān)鍵的是事務(wù)保證的問(wèn)題,這可能需要對(duì)事務(wù)的兩步提交有所了解。



    以上就是深圳達(dá)內(nèi)教育Java培訓(xùn)機(jī)構(gòu)小編介紹的“最新阿里高級(jí)Java面試題總結(jié)”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。


培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過(guò)大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。