(一) 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學習