1. 程式人生 > 其它 >超全Java中高階面試複習大綱,整理了3家面試問題:美團+位元組+騰訊

超全Java中高階面試複習大綱,整理了3家面試問題:美團+位元組+騰訊

一面

  • 自我介紹
  • 專案中的監控:那個監控指標常見的有哪些?
  • 微服務涉及到的技術以及需要注意的問題有哪些?
  • 註冊中心你瞭解了哪些?
  • consul 的可靠性你瞭解嗎?
  • consul 的機制你有沒有具體深入過?有沒有和其他的註冊中心對比過?
  • 專案用 Spring 比較多,有沒有了解 Spring 的原理?AOP 和 IOC 的原理
  • Spring Boot除了自動配置,相比傳統的 Spring 有什麼其他的區別?
  • Spring Cloud 有了解多少?
  • Spring Bean 的生命週期
  • HashMap 和 hashTable 區別?
  • Object 的 hashcode 方法重寫了,equals 方法要不要改?
  • Hashmap 執行緒不安全的出現場景
  • 線上服務 CPU 很高該怎麼做?有哪些措施可以找到問題
  • JDK 中有哪幾個執行緒池?順帶把執行緒池講了個遍
  • 應儘量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描
  • SQL 索引的順序,欄位的順序
  • 檢視 SQL 是不是使用了索引?(有什麼工具)
  • TCP 和 UDP 的區別?TCP 資料傳輸過程中怎麼做到可靠的?
  • 說下你知道的排序演算法吧
  • 查詢一個數組的中位數?

二面

你有什麼問題想問我的嗎?(常規問詢)

  • 自我介紹、工作經歷、技術棧
  • 專案中你學到了什麼技術?
  • 微服務劃分的粒度?
  • 微服務的高可用怎麼保證的?
  • 負載均衡與反向代理,隔離,限流,降級,超時與重試,回滾,壓力測試與應急預案
  • 常用的負載均衡,該怎麼用,你能說下嗎?

(技術問)

  • http重定向
  • DNS負載均衡
  • 反向代理負載均衡
  • IP負載均衡(LVS-NAT)
  • 直接路由(LVS-DR)
  • IP隧道(LVS-TUN)
  • 閘道器能夠為後端服務帶來哪些好處?
  • Spring Bean 的生命週期
  • xml 中配置的 init、destroy 方法怎麼可以做到呼叫具體的方法?反射的機制
  • Object 類中的方法
  • 物件比較是否相同
  • hashmap put 方法存放的時候怎麼判斷是否是重複的
  • Object toString 方法常用的地方,為什麼要重寫該方法
  • Set 和 List 區別?
  • ArrayList 和 LinkedList 區別
  • 如果存取相同的資料,ArrayList 和 LinkedList 誰佔用空間更大?
  • Set 存的順序是有序的嗎?
  • 常見 Set 的實現有哪些?
  • TreeSet 對存入對資料有什麼要求呢?
  • HashSet 的底層實現呢?
  • TreeSet 底層原始碼有看過嗎?
  • HashSet 是不是執行緒安全的?為什麼不是執行緒安全的?
  • Java 中有哪些執行緒安全的 Map?
  • HashTable 你瞭解過嗎?
  • 如何保證執行緒安全問題?
  • synchronized、lock
  • volatile 的原子性問題?為什麼 i++ 這種不支援原子性?從計算機原理的設計來講下不能保證原子性的原因happens before 原理
  • cas 操作
  • lock 和 synchronized 的區別?
  • 公平鎖和非公平鎖
  • Java 讀寫鎖
  • 讀寫鎖設計主要解決什麼問題?
  • 你專案除了寫 Java 程式碼,還有前端程式碼,那你知道前端有哪些框架嗎?
  • MySQL 分頁查詢語句
  • MySQL 事務特性和隔離級別

二、事務的併發問題

  • 不可重複讀會出現在什麼場景?
  • sql having 的使用場景
  • 前端瀏覽器地址的一個 http 請求到後端整個流程是怎麼樣?
  • http 預設埠,https 預設埠
  • DNS 你知道是幹嘛的嗎?
  • 你們開發用的 ide 是啥?你能說下 idea 的常用幾個快捷鍵吧?
  • 程式碼版本管理你們用的是啥?
  • git rebase 和 merge 有什麼區別?

你們公司加班多嗎?(題外話)

舉例回答:

專案用 Spring 比較多,有沒有了解 Spring 的原理?AOP 和 IOC 的原理

答:(1). IoC(Inversion of Control)是指容器控制程式物件之間的關係,而不是傳統實現中,由程式程式碼直接操控。控制權由應用程式碼中轉到了外部容器,控制權的轉移是所謂反轉。 對於Spring而言,就是由Spring來控制物件的生命週期和物件之間的關係;IoC還有另外一個名字——“依賴注入(Dependency Injection)”。從名字上理解,所謂依賴注入,即元件之間的依賴關係由容器在執行期決定,即由容器動態地將某種依賴關係注入到元件之中。

(2). 在Spring的工作方式中,所有的類都會在spring容器中登記,告訴spring這是個什麼東西,你需要什麼東西,然後spring會在系統執行到適當的時候,把你要的東西主動給你,同時也把你交給其他需要你的東西。所有的類的建立、銷燬都由 spring來控制,也就是說控制物件生存週期的不再是引用它的物件,而是spring。對於某個具體的物件而言,以前是它控制其他物件,現在是所有物件都被spring控制,所以這叫控制反轉。

(3). 在系統執行中,動態的向某個物件提供它所需要的其他物件。

(4). 依賴注入的思想是通過反射機制實現的,在例項化一個類時,它通過反射呼叫類中set方法將事先儲存在HashMap中的類屬性注入到類中。 總而言之,在傳統的物件建立方式中,通常由呼叫者來建立被呼叫者的例項,而在Spring中建立被呼叫者的工作由Spring來完成,然後注入呼叫者,即所謂的依賴注入or控制反轉。 注入方式有兩種:依賴注入和設定注入; IoC的優點:降低了元件之間的耦合,降低了業務物件之間替換的複雜性,使之能夠靈活的管理物件。

AOP(Aspect Oriented Programming)

(1). AOP面向方面程式設計基於IoC,是對OOP的有益補充;

(2). AOP利用一種稱為“橫切”的技術,剖解開封裝的物件內部,並將那些影響了 多個類的公共行為封裝到一個可重用模組,並將其名為“Aspect”,即方面。所謂“方面”,簡單地說,就是將那些與業務無關,卻為業務模組所共同呼叫的 邏輯或責任封裝起來,比如日誌記錄,便於減少系統的重複程式碼,降低模組間的耦合度,並有利於未來的可操作性和可維護性。

(3). AOP代表的是一個橫向的關 系,將“物件”比作一個空心的圓柱體,其中封裝的是物件的屬性和行為;則面向方面程式設計的方法,就是將這個圓柱體以切面形式剖開,選擇性的提供業務邏輯。而 剖開的切面,也就是所謂的“方面”了。然後它又以巧奪天功的妙手將這些剖開的切面復原,不留痕跡,但完成了效果。

(4). 實現AOP的技術,主要分為兩大類:一是採用動態代理技術,利用擷取訊息的方式,對該訊息進行裝飾,以取代原有物件行為的執行;二是採用靜態織入的方式,引入特定的語法建立“方面”,從而使得編譯器可以在編譯期間織入有關“方面”的程式碼。

(5). Spring實現AOP:JDK動態代理和CGLIB代理 JDK動態代理:其代理物件必須是某個介面的實現,它是通過在執行期間建立一個介面的實現類來完成對目標物件的代理;其核心的兩個類是InvocationHandler和Proxy。 CGLIB代理:實現原理類似於JDK動態代理,只是它在執行期間生成的代理物件是針對目標類擴充套件的子類。CGLIB是高效的程式碼生成包,底層是依靠ASM(開源的java位元組碼編輯類庫)操作位元組碼實現的,效能比JDK強;需要引入包asm.jar和cglib.jar。 使用AspectJ注入式切面和@AspectJ註解驅動的切面實際上底層也是通過動態代理實現的。

(6). AOP使用場景:

  • Authentication 許可權檢查
  • Caching 快取
  • Context passing 內容傳遞
  • Error handling 錯誤處理
  • Lazy loading延遲載入
  • Debugging 除錯
  • logging, tracing, profiling and monitoring日誌記錄,跟蹤,優化,校準
  • Performance optimization效能優化,效率檢查
  • Persistence 持久化
  • Resource pooling資源池
  • Synchronization同步
  • Transactions 事務管理

另外Filter的實現和struts2的攔截器的實現都是AOP思想的體現。

螞蟻金服面試場景以及面試答案(文件總結)

最後

一次偶然,從朋友那裡得到一份“java高分面試指南”,裡面涵蓋了25個分類的面試題以及詳細的解析:JavaOOP、Java集合/泛型、Java中的IO與NIO、Java反射、Java序列化、Java註解、多執行緒&併發、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、資料結構、演算法、Elasticsearch 、Kafka 、微服務、Linux。

這不,馬上就要到招聘季了,很多朋友又開始準備“金三銀四”的春招啦,那我想這份“java高分面試指南”應該起到不小的作用,所以今天想給大家分享一下。

請注意:關於這份“java高分面試指南”,每一個方向專題(25個)的題目這裡幾乎都會列舉,在不看答案的情況下,大家可以自行測試一下水平 且由於篇幅原因,這邊無法展示所有完整的答案解析

CodeChina開源專案:【一線大廠Java面試題解析+核心總結學習筆記+最新講解視訊】