有贊研發面經Spring+併發鎖+分佈式+算法

有贊

Java開發工程師

有贊研發面經Spring+併發鎖+分佈式+算法

有贊:問得非常細節

一面:

1 Java併發技術瞭解嗎,說了線程,juc的線程池,併發容器,阻塞隊列,原子數據類型等。

2 問我原子數據類型怎麼實現,cas

3 線程池有哪些參數,阻塞隊列用的是普通隊列麼,答不是,是blockingqueue

4 concurrenthashmap和hashmap的區別,chm的實現原理,你在什麼場景下用到chm,為什麼,我說了多線程查詢數據,put可能覆蓋,或者hashmap的擴容可能產生死鏈

5 還用過哪些數據結構,list,set,map,stack和queue。

6 Spring瞭解麼,問我瞭解五大組件不,不瞭解,說了ioc和aop。然後問我分別怎麼實現的,使用xml和註解配置實現類有什麼區別,怎麼解析它們的數據。

7 Spring如何動態地加載一個bean到bean容器中,不是通過配置文件配置的,不會。

8 Spring aop的實現原理,如何加一層動態代理的,我說是創建bean過程中直接生成代理類的實例

9 Spring的spring quartz知道麼,必須不知道

10 spring源碼看過麼,mvc瞭解麼,說了一下mvc的原理和請求過程

11 hibernate和mybatis的源碼看過麼,沒有

12 如何實現不同環境中配置文件的自動切換,使用腳本或者命令,他說使用hibernate的註解可以實現切換。

13 nio和io的區別,nio是阻塞輪詢的,如何改用異步通知的機制,我說使用aio註冊異步回調函數。

14 nio的包裝框架了解麼,我說netty,看得深入麼,我說沒有深入看。

15 分佈式服務dubbo瞭解麼,有哪些功能,如何自己實現一個dubbo,我分別從rpc和微服務的角度說了一下。問我有哪些序列化方式。

16 mysql問了幾個簡單問題。

17 對我們公司瞭解麼,只是稍微瞭解。

二面:

1 項目

2 Java的內存模型,堆和棧分別存什麼

3 Java的深拷貝和淺拷貝

4 Spring的aop怎麼實現的,動態代理的原理是什麼

5 Spring MVC的請求過程。

6 跳出Spring,說一下瀏覽器的請求過程

7 網絡編程這一塊,你瞭解哪些,說了socket和nio

8 nio的底層實現一般是epoll,講一下epoll吧。

9 mysql的索引說一下,二級索引是怎麼進行查找的

10 MySQL的兩個引擎區別

11 hibernate的orm是怎麼實現的,我說的是xml和註解的解析,以及jdbc封裝

12 hibernate的事務如何實現,我說是jdbc的事務實現。

13 分佈式數據庫查詢一個表的前十條數據,對id進行hash來索引節點,如何進行查詢。我說那就對id hash,找到節點分別查詢。

14 分佈式系統的概念,如果有數據一致性怎麼辦,答cap和base

15 瞭解哪些分佈式技術,說了緩存,負載均衡,消息隊列,Hadoop

16 負載均衡的衡量指標,不知道

17 消息隊列了解哪個,rabbitmq和kafka,為什麼kafka比rm快,答了零拷貝,具體實現原理答錯了,應該是避免複製數據到應用緩衝,直接使用sendfile傳輸數據。

18 hadoop瞭解哪些,hdfs的文件讀寫機制說一下。

19 沒什麼問題了

20 需要來現場面試,其實我不想去現場面,然後隔天給我發了拒信

三面:

1 自我介紹和項目

2 Java的內存分區

3 Java對象的回收方式,回收算法。

4 CMS和G1瞭解麼,CMS解決什麼問題,說一下回收的過程。

5 CMS回收停頓了幾次,為什麼要停頓兩次。

6 Java棧什麼時候會發生內存溢出,Java堆呢,說一種場景,我說集合類持有對象。

7 那集合類如何解決這個問題呢,我說用軟引用和弱引用,那你講一下這兩個引用的區別吧。

8 Java裡的鎖瞭解哪些,說了Lock和synchronized

9 它們的使用方式和實現原理有什麼區別呢,使用的話,synchronize用於方法和代碼塊,可以鎖對象和類以及方法,Lock一般鎖一塊代碼。並且Lock可以搭配condition使用。

實現原理的話,synchronized使用底層的mutex鎖,需要系統調用,而Lock則使用AQS實現。

10 synchronized鎖升級的過程,說了偏向鎖到輕量級鎖再到重量級鎖,然後問我它們分別是怎麼實現的,解決的是哪些問題,什麼時候會發生鎖升級。

11Tomcat瞭解麼。說一下類加載器結構吧,我說不知道,說了些別的。

12 問我會什麼框架,說了Spring,問我Spring中如何讓A和B兩個bean按順序加載,我說依賴關係,他問怎麼實現,然後說要用dependon註解,我說不了解。

13 beanfactory和applicationcontext是什麼關係,使用有什麼區別。

14 MySQL的sql優化了解麼,答瞭解索引優化。

15 他問我如何做一條sql的優化,說了慢日誌和explain。

16 MySQL集群的主從複製怎麼做的,具體有哪些線程做哪些事情,使用了哪些日誌。

17 CAP定理說一下,為什麼三者只能選二,為什麼分區容忍性必須保證。

18 平時瞭解哪些技術是犧牲了一致性來保證可用性的,我說消息隊列,他問我MySQL是不是,我說MySQL主從複製應該是。

19 工作中CAP的A和P是怎麼選擇的,我說選P吧,他的意思是選A。

20 算法題:

一:10億個數去重,我說用hash分片做,他說可能不均勻,然後我說了bitmap,他說那數字量更多怎麼辦,我說那就兩個bitmap把。他說下一題吧。

二:十億個數找前10個最大的,小頂堆過一遍即可。他說如果要提高效率呢,我說可以分片做堆排序再進行歸併即可。他說OK。


分享到:


相關文章: