二面螞蟻金服(交叉面),已拿offer,Java崗定級(jí)阿里P6
記一次螞蟻金服Java程序員面試經(jīng)歷(均為交叉面)

一面
自我介紹
項(xiàng)目中的監(jiān)控:那個(gè)監(jiān)控指標(biāo)常見(jiàn)的有哪些?
微服務(wù)涉及到的技術(shù)以及需要注意的問(wèn)題有哪些?
注冊(cè)中心你了解了哪些?
consul 的可靠性你了解嗎?
consul 的機(jī)制你有沒(méi)有具體深入過(guò)?有沒(méi)有和其他的注冊(cè)中心對(duì)比過(guò)?
項(xiàng)目用 Spring 比較多,有沒(méi)有了解 Spring 的原理?AOP 和 IOC 的原理
Spring Boot除了自動(dòng)配置,相比傳統(tǒng)的 Spring 有什么其他的區(qū)別?
Spring Cloud 有了解多少?
Spring Bean 的生命周期
HashMap 和 hashTable 區(qū)別?
Object 的 hashcode 方法重寫(xiě)了,equals 方法要不要改?
Hashmap 線(xiàn)程不安全的出現(xiàn)場(chǎng)景
線(xiàn)上服務(wù) CPU 很高該怎么做?有哪些措施可以找到問(wèn)題
JDK 中有哪幾個(gè)線(xiàn)程池?順帶把線(xiàn)程池講了個(gè)遍
應(yīng)盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進(jìn)行全表掃描
SQL 索引的順序,字段的順序
查看 SQL 是不是使用了索引?(有什么工具)
TCP 和 UDP 的區(qū)別?TCP 數(shù)據(jù)傳輸過(guò)程中怎么做到可靠的?
說(shuō)下你知道的排序算法吧
查找一個(gè)數(shù)組的中位數(shù)?
二面
你有什么問(wèn)題想問(wèn)我的嗎?(常規(guī)問(wèn)詢(xún))
自我介紹、工作經(jīng)歷、技術(shù)棧
項(xiàng)目中你學(xué)到了什么技術(shù)?
微服務(wù)劃分的粒度?
微服務(wù)的高可用怎么保證的?
負(fù)載均衡與反向代理,隔離,限流,降級(jí),超時(shí)與重試,回滾,壓力測(cè)試與應(yīng)急預(yù)案
常用的負(fù)載均衡,該怎么用,你能說(shuō)下嗎?
(技術(shù)問(wèn))
http重定向
DNS負(fù)載均衡
反向代理負(fù)載均衡
IP負(fù)載均衡(LVS-NAT)
直接路由(LVS-DR)
IP隧道(LVS-TUN)
網(wǎng)關(guān)能夠?yàn)楹蠖朔?wù)帶來(lái)哪些好處?
Spring Bean 的生命周期
xml 中配置的 init、destroy 方法怎么可以做到調(diào)用具體的方法?反射的機(jī)制
Object 類(lèi)中的方法
對(duì)象比較是否相同
hashmap put 方法存放的時(shí)候怎么判斷是否是重復(fù)的
Object toString 方法常用的地方,為什么要重寫(xiě)該方法
Set 和 List 區(qū)別?
ArrayList 和 LinkedList 區(qū)別
如果存取相同的數(shù)據(jù),ArrayList 和 LinkedList 誰(shuí)占用空間更大?
Set 存的順序是有序的嗎?
常見(jiàn) Set 的實(shí)現(xiàn)有哪些?
TreeSet 對(duì)存入對(duì)數(shù)據(jù)有什么要求呢?
HashSet 的底層實(shí)現(xiàn)呢?
TreeSet 底層源碼有看過(guò)嗎?
HashSet 是不是線(xiàn)程安全的?為什么不是線(xiàn)程安全的?
Java 中有哪些線(xiàn)程安全的 Map?
HashTable 你了解過(guò)嗎?
如何保證線(xiàn)程安全問(wèn)題?
synchronized、lock
volatile 的原子性問(wèn)題?為什么 i++ 這種不支持原子性?從計(jì)算機(jī)原理的設(shè)計(jì)來(lái)講下不能保證原子性的原因happens before 原理
cas 操作
lock 和 synchronized 的區(qū)別?
公平鎖和非公平鎖
Java 讀寫(xiě)鎖
讀寫(xiě)鎖設(shè)計(jì)主要解決什么問(wèn)題?
你項(xiàng)目除了寫(xiě) Java 代碼,還有前端代碼,那你知道前端有哪些框架嗎?
MySQL 分頁(yè)查詢(xún)語(yǔ)句
MySQL 事務(wù)特性和隔離級(jí)別
二、事務(wù)的并發(fā)問(wèn)題
不可重復(fù)讀會(huì)出現(xiàn)在什么場(chǎng)景?
sql having 的使用場(chǎng)景
前端瀏覽器地址的一個(gè) http 請(qǐng)求到后端整個(gè)流程是怎么樣?
http 默認(rèn)端口,https 默認(rèn)端口
DNS 你知道是干嘛的嗎?
你們開(kāi)發(fā)用的 ide 是啥?你能說(shuō)下 idea 的常用幾個(gè)快捷鍵吧?
代碼版本管理你們用的是啥?
git rebase 和 merge 有什么區(qū)別?
你們公司加班多嗎?(題外話(huà))
舉例回答:
項(xiàng)目用 Spring 比較多,有沒(méi)有了解 Spring 的原理?AOP 和 IOC 的原理
答:(1). IoC(Inversion of Control)是指容器控制程序?qū)ο笾g的關(guān)系,而不是傳統(tǒng)實(shí)現(xiàn)中,由程序代碼直接操控??刂茩?quán)由應(yīng)用代碼中轉(zhuǎn)到了外部容器,控制權(quán)的轉(zhuǎn)移是所謂反轉(zhuǎn)。對(duì)于Spring而言,就是由Spring來(lái)控制對(duì)象的生命周期和對(duì)象之間的關(guān)系;IoC還有另外一個(gè)名字——“依賴(lài)注入(Dependency Injection)”。從名字上理解,所謂依賴(lài)注入,即組件之間的依賴(lài)關(guān)系由容器在運(yùn)行期決定,即由容器動(dòng)態(tài)地將某種依賴(lài)關(guān)系注入到組件之中。
(2). 在Spring的工作方式中,所有的類(lèi)都會(huì)在spring容器中登記,告訴spring這是個(gè)什么東西,你需要什么東西,然后spring會(huì)在系統(tǒng)運(yùn)行到適當(dāng)?shù)臅r(shí)候,把你要的東西主動(dòng)給你,同時(shí)也把你交給其他需要你的東西。所有的類(lèi)的創(chuàng)建、銷(xiāo)毀都由 spring來(lái)控制,也就是說(shuō)控制對(duì)象生存周期的不再是引用它的對(duì)象,而是spring。對(duì)于某個(gè)具體的對(duì)象而言,以前是它控制其他對(duì)象,現(xiàn)在是所有對(duì)象都被spring控制,所以這叫控制反轉(zhuǎn)。
(3). 在系統(tǒng)運(yùn)行中,動(dòng)態(tài)的向某個(gè)對(duì)象提供它所需要的其他對(duì)象。
(4). 依賴(lài)注入的思想是通過(guò)反射機(jī)制實(shí)現(xiàn)的,在實(shí)例化一個(gè)類(lèi)時(shí),它通過(guò)反射調(diào)用類(lèi)中set方法將事先保存在HashMap中的類(lèi)屬性注入到類(lèi)中??偠灾趥鹘y(tǒng)的對(duì)象創(chuàng)建方式中,通常由調(diào)用者來(lái)創(chuàng)建被調(diào)用者的實(shí)例,而在Spring中創(chuàng)建被調(diào)用者的工作由Spring來(lái)完成,然后注入調(diào)用者,即所謂的依賴(lài)注入or控制反轉(zhuǎn)。注入方式有兩種:依賴(lài)注入和設(shè)置注入;IoC的優(yōu)點(diǎn):降低了組件之間的耦合,降低了業(yè)務(wù)對(duì)象之間替換的復(fù)雜性,使之能夠靈活的管理對(duì)象。
AOP(Aspect Oriented Programming)
(1). AOP面向方面編程基于IoC,是對(duì)OOP的有益補(bǔ)充;
(2). AOP利用一種稱(chēng)為“橫切”的技術(shù),剖解開(kāi)封裝的對(duì)象內(nèi)部,并將那些影響了 多個(gè)類(lèi)的公共行為封裝到一個(gè)可重用模塊,并將其名為“Aspect”,即方面。所謂“方面”,簡(jiǎn)單地說(shuō),就是將那些與業(yè)務(wù)無(wú)關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的 邏輯或責(zé)任封裝起來(lái),比如日志記錄,便于減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度,并有利于未來(lái)的可操作性和可維護(hù)性。
(3). AOP代表的是一個(gè)橫向的關(guān) 系,將“對(duì)象”比作一個(gè)空心的圓柱體,其中封裝的是對(duì)象的屬性和行為;則面向方面編程的方法,就是將這個(gè)圓柱體以切面形式剖開(kāi),選擇性的提供業(yè)務(wù)邏輯。而 剖開(kāi)的切面,也就是所謂的“方面”了。然后它又以巧奪天功的妙手將這些剖開(kāi)的切面復(fù)原,不留痕跡,但完成了效果。
(4). 實(shí)現(xiàn)AOP的技術(shù),主要分為兩大類(lèi):一是采用動(dòng)態(tài)代理技術(shù),利用截取消息的方式,對(duì)該消息進(jìn)行裝飾,以取代原有對(duì)象行為的執(zhí)行;二是采用靜態(tài)織入的方式,引入特定的語(yǔ)法創(chuàng)建“方面”,從而使得編譯器可以在編譯期間織入有關(guān)“方面”的代碼。
(5). Spring實(shí)現(xiàn)AOP:JDK動(dòng)態(tài)代理和CGLIB代理 JDK動(dòng)態(tài)代理:其代理對(duì)象必須是某個(gè)接口的實(shí)現(xiàn),它是通過(guò)在運(yùn)行期間創(chuàng)建一個(gè)接口的實(shí)現(xiàn)類(lèi)來(lái)完成對(duì)目標(biāo)對(duì)象的代理;其核心的兩個(gè)類(lèi)是InvocationHandler和Proxy。CGLIB代理:實(shí)現(xiàn)原理類(lèi)似于JDK動(dòng)態(tài)代理,只是它在運(yùn)行期間生成的代理對(duì)象是針對(duì)目標(biāo)類(lèi)擴(kuò)展的子類(lèi)。CGLIB是高效的代碼生成包,底層是依靠ASM(開(kāi)源的java字節(jié)碼編輯類(lèi)庫(kù))操作字節(jié)碼實(shí)現(xiàn)的,性能比JDK強(qiáng);需要引入包asm.jar和cglib.jar。使用AspectJ注入式切面和@AspectJ注解驅(qū)動(dòng)的切面實(shí)際上底層也是通過(guò)動(dòng)態(tài)代理實(shí)現(xiàn)的。
(6). AOP使用場(chǎng)景:
Authentication 權(quán)限檢查
Caching 緩存
Context passing 內(nèi)容傳遞
Error handling 錯(cuò)誤處理
Lazy loading延遲加載
Debugging 調(diào)試
logging, tracing, profiling and monitoring日志記錄,跟蹤,優(yōu)化,校準(zhǔn)
Performance optimization性能優(yōu)化,效率檢查
Persistence 持久化
Resource pooling資源池
Synchronization同步
Transactions 事務(wù)管理
另外Filter的實(shí)現(xiàn)和struts2的攔截器的實(shí)現(xiàn)都是AOP思想的體現(xiàn)。
螞蟻金服面試場(chǎng)景以及面試答案(文檔總結(jié))

最后
本人也收藏了一份Java面試核心知識(shí)點(diǎn)來(lái)應(yīng)付面試,借著這次機(jī)會(huì)可以免費(fèi)送給我的讀者朋友們:
目錄:

Java面試核心知識(shí)點(diǎn)
一共有30個(gè)專(zhuān)題,足夠讀者朋友們應(yīng)付面試?yán)玻补?jié)省朋友們?nèi)サ教幩压钨Y料自己整理的時(shí)間!

Java面試核心知識(shí)點(diǎn)
資料的領(lǐng)取方式:關(guān)注轉(zhuǎn)發(fā)后私信我【面試資料】即可免費(fèi)獲取哦!
已經(jīng)有讀者朋友靠著這一份Java面試知識(shí)點(diǎn)指導(dǎo)拿到不錯(cuò)的offer了,各位讀者朋友們快來(lái)找我免費(fèi)獲取吧!
大廠(chǎng)面試115道(上下集)

有朋友靠這份大廠(chǎng)面試文檔面試了阿里、新浪、中國(guó)平安最后拿到了中國(guó)平安offer?。?!

資料的領(lǐng)取方式:關(guān)注轉(zhuǎn)發(fā)后私信我【面試資料】即可免費(fèi)獲取哦!
本文就是愿天堂沒(méi)有BUG給大家分享的內(nèi)容,大家有收獲的話(huà)可以分享下,想學(xué)習(xí)更多的話(huà)可以到微信公眾號(hào)里找我,我等你哦。
