阿里面試 Jvm dump介紹與使用(內存與線程) 如何在Windows下查看JAVA端口占用狀況(阿里面試) Java JVM- jstat查看jvm的GC狀況 Jdk1.7 與 jdk1.8的區

(一) Java 編程方面html

 一、 如何DUMP內存出來看看內存溢出呢java

DUMP分爲兩種:web

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

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

兩個dump能夠單獨使用,也能夠在特定場合下結合使用。算法

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

 

 二、如今個人端口8080被佔用了,如何找出這個進程來用哪一個命令; 數據庫

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

三、查看進程的CPU使用率:後端

 > jstat -gc 7964 5000 

表明: 每隔5秒鐘查看進程7964的內存使用狀況;

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

(二) 基礎知識方面

一、 JDK1.7 月JDK1.8的區別和聯繫:

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

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

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

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

參考:G1 垃圾收集器入門

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

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

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

我覺得NIO指的是 Non Block 可是面試官指的是New IO 和IO的區別,我傻眼了。

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

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

(b)這是Java1.4以後出的New IO 與IO的區別和聯繫:

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

 

四、HashMap的Hashcode和equal 的區別

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

五、ThreadLocal 類掌握狀況。存儲在那裏?當數值更新後,如何處理,讓全局都更新呢

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

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

讀寫鎖特色:

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

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

 

(三) 數據結構方面

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

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

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

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

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

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

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

我曾問過阿里面試人員須要瞭解哪些數據結構知識才能面試經過,

阿里面試官答道:只要把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 是否爲線程安全,區別,如何實現的

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

 

(四) 多線程方面

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

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

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

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

參考:ReentrantLock實現原理

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

要否則就成了死鎖了,這裏有個很形象的說明,

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

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

用Synchronized實現ReentrantLock:

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

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

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

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

參考:Java多線程——<五>後臺線程(daemon)

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

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

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

四、start,run的區別;

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

(五) Spring方面

一、Spring Boot 是否用過,

   Spring Cloud 多看看,瞭解太少,不光是能夠轉變成 RPC,框架,還能夠總體提升延遲多少秒,尋找最近的路由規則,

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

 

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

 一、Docker:是一個容器;

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

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

   (a)RPC用什麼協議通信的

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

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

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

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

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

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

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

 

六、zookeeper是如何註冊服務,並負載均衡的

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

七、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緩存技術來實現。

三、redis memechen 的區別和聯繫。

(八) 協議通信方面

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

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

9、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 字段 只有兩列,都是 姓名 和身份證號,如何快速的找出相同的記錄;

10、搜索引擎框架:

 solr 與 lucene;

參考:solr學習

相關文章
相關標籤/搜索