阿里面試-2018


(一) Java 編程方面

 1、 如何DUMP內存出來看看內存溢出呢

DUMP分為兩種:

(a)內存dump是指通過jmap -dump <pid>輸出的文件,

(b而線程dump是指通過jstack <pid>輸出的信息。

兩個dump可以單獨使用,也可以在特定場合下結合使用。

參考:Jvm dump介紹與使用(內存與線程)

 

 2、現在我的端口8080被占用了,如何找出這個進程來用哪個命令; 

  參考:如何在Windows下查看JAVA端口占用情況(阿里面試)

3、查看進程的CPU使用率:

 > jstat -gc 7964 5000 

代表: 每隔5秒鍾查看進程7964的內存使用情況;

參考:Java JVM- jstat查看jvm的GC情況

(二) 基礎知識方面

1、 JDK1.7 月JDK1.8的區別和聯系:

參考:Jdk1.7 與 jdk1.8的區別,最新的特征有哪些(美團,360,京東面試題目)

2、Java 基礎知識,Java堆內存結構, 新生代,老年代如何定義,划分,CMS,G1的算法是怎樣的,性能瓶頸,調優。垃圾回收算法。

類加載技術,當類加載的時候,我想改一下值用Java探針技術,class類在加載的時候 Java探針技術,可以在加載class的時候改變 對象的值;

參考:CMS收集器和G1收集器優缺點

參考:G1 垃圾收集器入門

參考:圖解 CMS 垃圾回收機制原理,-阿里面試題

關於Java探針的可以參考:Java探針-Java Agent技術-阿里面試題

3、NIO 和IO 的含義,以及他們的三個區別

我以為NIO指的是 Non Block 但是面試官指的是New IO 和IO的區別,我傻眼了。

(a)這是No-Block IO 和IO 的區別和聯系

參考:IO多路復用,同步,異步,阻塞和非阻塞 區別

(b)這是Java1.4之后出的New IO 與IO的區別和聯系:

參考:Java NIO:IO與NIO的區別 -阿里面試題

 

4、HashMap的Hashcode和equal 的區別

參考:Java == ,equals 和 hashcode 的區別和聯系(阿里面試)

5、ThreadLocal 類掌握情況。存儲在那里?當數值更新后,如何處理,讓全局都更新呢

 參考:ThreadLocal 定義,以及是否可能引起的內存泄露(用線程池有可能泄露)

8、讀寫鎖,多個讀鎖互不影響,寫寫互斥,寫鎖優先於讀鎖:

讀寫鎖特點:

a)多個讀者可以同時進行讀
b)寫者必須互斥(只允許一個寫者寫,也不能讀者寫者同時進行)
c)寫者優先於讀者(一旦有寫者,則后續讀者必須等待,喚醒時優先考慮寫者)

 參考:Java 線程鎖機制 -Synchronized Lock 互斥鎖 讀寫鎖

 

(三) 數據結構方面

1、 Synochronized 和 Voliate的區別, 涉及到的CAS處理

參考:JAVA多線程之volatile 與 synchronized 的比較-阿里面試題

參考:java並發中的原子變量和原子操作以及CAS介紹

2、concurrentHashMap 在1.7與1.8底下的區別,

JDK1.7版本的ReentrantLock+Segment+HashEntry,到JDK1.8版本中synchronized+CAS+HashEntry+紅黑樹,

參考:ConcurrentHashMap原理分析(1.7與1.8)

3、阿里的第二面是去阿里本部面試的環節對數據結構要求很高,

我曾問過阿里面試人員需要了解哪些數據結構知識才能面試通過,

阿里面試官答道:只要把HashMap,HashTable,HashSet,CurrentHashMap的原理搞清楚了,數據結構面試一定沒問題。所以,弟兄們,想進阿里

一定要把這幾個數據結構搞清楚。

參考:Hashtable數據存儲結構-遍歷規則,Hash類型的復雜度為啥都是O(1)

參考:HashMap的實現原理--鏈表散列

HashMap,HashSet,Hashtable 的復雜度是O(1),

TreeMap,TreeSet內部排序了使用了紅黑樹,因此時間復雜度是O(log(n))

參考:HashMap, HashTable,HashSet,TreeMap 的時間復雜度

紅黑樹,因為只搜索一邊,因此復雜度連O(n)都到不了,只要log(n) 就夠了。

時間復雜度;如何計算的,好好看看

HashMap,HashTable ,CurrentHashMap的區別

HashTable不允許有空值,HashMap 的key和value允許有空值,因此不能用HashMap的get()方法判斷是否有指定的值,應該用containsKey();

參考:HashMap和HashTable的區別

參考:hashmap,hashTable concurrentHashMap 是否為線程安全,區別,如何實現的

 4、TreeMap 內部如何實現排序的,比如現在已經有一個treeMap對象了,很多數據,現在我要添加一個數據map.put(a,b),TreeMap是如何快速尋找到 a對象的位置的?

 

(四) 多線程方面

1、ReentrantLock 可重入鎖,指的是什么可重入(舉個例子,這個一定要重視,兩個阿里的面試官都問到了)。如何理解,公平鎖,非公平鎖。

可重入指的是:線程第一次進入加鎖了之后,以后就不需要獲取鎖了,:

 參考:ReentrantLock實現原理-何為可重入

公平鎖參考:分析ReentrantLock的實現原理

參考:ReentrantLock實現原理

可重入鎖,synchroized 和 ReentrantLock都是可重入鎖,就是AQS的state設置為1,2.。之類的,只要不是state=0,(0代表了釋放鎖)其他的鎖都一直等待,

要不然就成了死鎖了,這里有個很形象的說明,

請參考:輕松學習java可重入鎖(ReentrantLock)的實現原理

參考: java並發鎖ReentrantLock源碼分析一 可重入支持中斷鎖的實現原理

用Synchronized實現ReentrantLock:

參考:使用synchronized實現一個Lock-美團面試題目

2、如何實現多線程,Java線程池,如果使用 newFixedPool(20)如果 目前有30個進程過來,他是如何排隊實現一個個執行的。哪來的隊列;

參考:多線程之線程池-各個參數的含義- 阿里面試題目

參考:聊聊並發(七)——Java中的阻塞隊列

參考:Java多線程——<五>后台線程(daemon)

參考:Java中的多線程=你只要看這一篇就夠了 

3、Sleep 和Wait的區別 ,他們的CPU有沒有釋放內存

參考:sleep、yield、wait、join的區別(阿里面試)

4、start,run的區別;

參考:多線程-Thread的run()與start()的區別

(五) Spring方面

1、Spring Boot 是否用過,

   Spring Cloud 多看看,了解太少,不光是可以轉變成 RPC,框架,還可以整體提高延遲多少秒,尋找最近的路由規則,

 2、Spring 加載流程,Spring的框架知識包括IOC,AOP ,事務處理

 

(六) 部署 網絡架構搭建方面

 1、Docker:是一個容器;

參考:Docker 入門 到部署Web 程序

2、RPC有沒有用過相應的框架,比如google的JRPC,Docker不是RPC,它只是個容器,(這個問題,360,美團,阿里,京東都問過);

   (a)RPC用什么協議通訊的

3、分布式部署,分布式事務。是否理解,是否用過,3次阿里的面試均提到這個問題,一定要了解; 

4、大型web服務器架構如何設計

(a) 比如數據庫設計,讀寫分離==》一個Master主數據庫負責讀寫,多個Slave從數據庫讀,使用BinLog實時同步從數據庫,不能亂了

參考:數據庫讀寫分離和數據一致性的沖突

5、Flame, ETL (數據倉庫技術) 好好看看 這個,技術

ETL技術參考:ETL工具之Kettle的簡單使用一(不同數據庫之間的數據抽取-轉換-加載)

參考:ETL技術( Extract-Transform-Load) 數據倉庫技術-比如kettle

 

6、zookeeper是如何注冊服務,並負載均衡的

參考:zookeeper如何實現負載均衡的?(具體連接哪一個zookeeper服務器的選擇?)阿里面試

7、Tomcat,Jboss的類加載順序

參考:圖解Tomcat類加載機制(阿里面試題)

(七) 數據庫方面

(1)數據庫隔離級別與臟讀,可重復讀。幻讀的區別

總結: 5個隔離級別 與臟讀,不可重復讀,幻讀的關系:

ISOLATION_DEFAULT 使用后端數據庫默認的隔離級別
ISOLATION_READ_UNCOMMITTED 最低的隔離級別,允許讀取尚未提交的數據變更,可能會導致臟讀、幻讀或不可重復讀
ISOLATION_READ_COMMITTED

允許讀取並發事務已經提交的數據,可以阻止臟讀,但是幻讀或不可重復讀仍有可能發生

Oracle和SQL Server  默認 都是 READ_COMMITTED

ISOLATION_REPEATABLE_READ

對同一字段的多次讀取結果都是一致的,除非數據是被本身事務自己所修改,可以阻止臟讀和不可重復讀,但幻讀仍有可能發生

Mysql 默認就是REPEATABLE READ

ISOLATION_SERIALIZABLE 最高的隔離級別,完全服從ACID的隔離級別,確保阻止臟讀、不可重復讀以及幻讀,也是最慢的事務隔離級別,因為它通常是通過完全鎖定事務相關的數據庫表來實現的

參考:Spring 學習7 -事務

(2)如果必須要保證一致的話,不能進行讀寫分離了,可以進行業務拆分,把這部分業務單獨拿出來 可以采用多庫不區分讀寫以及memcache緩存技術來實現。

3、redis memechen 的區別和聯系。

(八) 協議通訊方面

(1) TCP,UDP的區別,3次握手 4次揮手的流程

參考:TCP協議詳解7層和4層解析(美團面試,阿里面試) 尤其是三次握手,四次揮手 具體發送的報文和狀態都要掌握

九、Maven方面

如何處理包名沖突,比如A引用了log1.5,B 引用了log1.6,

maven的引用遵循:最短路徑和最先引用規則,一般是找到低版本的那個,然后exclusions一下,不然沒法用了,循環引用。

不明白的可以看看這個:

參考:Maven 3-Maven依賴版本沖突的分析及解決小結 (阿里,美團,京東面試)

 

編程題目;

   現在有一張表有很多數據,但是列只有兩列,姓名和身份證號,現在想用身份證號的出生年月進行排序,目前給出的CPU內存很小,如何做到最快排序。

參考:面試- 阿里-. 大數據題目- 給定a、b兩個文件,各存放50億個url,每個url各占64字節,內存限制是4G,讓你找出a、b文件共同的url?

(5)現有兩張表 A,B 字段 只有兩列,都是 姓名 和身份證號,如何快速的找出相同的記錄;

十、搜索引擎框架:

 solr 與 lucene;

參考:solr學習

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM