(一) Java 編程方面
1、 如何DUMP內存出來看看內存溢出呢
DUMP分為兩種:
(a)內存dump是指通過jmap -dump <pid>輸出的文件,
(b而線程dump是指通過jstack <pid>輸出的信息。
兩個dump可以單獨使用,也可以在特定場合下結合使用。
2、現在我的端口8080被占用了,如何找出這個進程來用哪個命令;
參考:如何在Windows下查看JAVA端口占用情況(阿里面試)
3、查看進程的CPU使用率:
> jstat -gc 7964 5000
代表: 每隔5秒鍾查看進程7964的內存使用情況;
(二) 基礎知識方面
1、 JDK1.7 月JDK1.8的區別和聯系:
參考:Jdk1.7 與 jdk1.8的區別,最新的特征有哪些(美團,360,京東面試題目)
2、Java 基礎知識,Java堆內存結構, 新生代,老年代如何定義,划分,CMS,G1的算法是怎樣的,性能瓶頸,調優。垃圾回收算法。
類加載技術,當類加載的時候,我想改一下值用Java探針技術,class類在加載的時候 Java探針技術,可以在加載class的時候改變 對象的值;
參考:G1 垃圾收集器入門
關於Java探針的可以參考:Java探針-Java Agent技術-阿里面試題
3、NIO 和IO 的含義,以及他們的三個區別
我以為NIO指的是 Non Block 但是面試官指的是New IO 和IO的區別,我傻眼了。
(a)這是No-Block IO 和IO 的區別和聯系
(b)這是Java1.4之后出的New IO 與IO的區別和聯系:
4、HashMap的Hashcode和equal 的區別
參考:Java == ,equals 和 hashcode 的區別和聯系(阿里面試)
5、ThreadLocal 類掌握情況。存儲在那里?當數值更新后,如何處理,讓全局都更新呢
參考:ThreadLocal 定義,以及是否可能引起的內存泄露(用線程池有可能泄露)
8、讀寫鎖,多個讀鎖互不影響,寫寫互斥,寫鎖優先於讀鎖:
讀寫鎖特點:
a)多個讀者可以同時進行讀
b)寫者必須互斥(只允許一個寫者寫,也不能讀者寫者同時進行)
c)寫者優先於讀者(一旦有寫者,則后續讀者必須等待,喚醒時優先考慮寫者)
參考:Java 線程鎖機制 -Synchronized Lock 互斥鎖 讀寫鎖
(三) 數據結構方面
1、 Synochronized 和 Voliate的區別, 涉及到的CAS處理
參考:JAVA多線程之volatile 與 synchronized 的比較-阿里面試題
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,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 concurrentHashMap 是否為線程安全,區別,如何實現的
4、TreeMap 內部如何實現排序的,比如現在已經有一個treeMap對象了,很多數據,現在我要添加一個數據map.put(a,b),TreeMap是如何快速尋找到 a對象的位置的?
(四) 多線程方面
1、ReentrantLock 可重入鎖,指的是什么可重入(舉個例子,這個一定要重視,兩個阿里的面試官都問到了)。如何理解,公平鎖,非公平鎖。
可重入指的是:線程第一次進入加鎖了之后,以后就不需要獲取鎖了,:
公平鎖參考:分析ReentrantLock的實現原理
可重入鎖,synchroized 和 ReentrantLock都是可重入鎖,就是AQS的state設置為1,2.。之類的,只要不是state=0,(0代表了釋放鎖)其他的鎖都一直等待,
要不然就成了死鎖了,這里有個很形象的說明,
請參考:輕松學習java可重入鎖(ReentrantLock)的實現原理
參考: java並發鎖ReentrantLock源碼分析一 可重入支持中斷鎖的實現原理
用Synchronized實現ReentrantLock:
參考:使用synchronized實現一個Lock-美團面試題目
2、如何實現多線程,Java線程池,如果使用 newFixedPool(20)如果 目前有30個進程過來,他是如何排隊實現一個個執行的。哪來的隊列;
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:是一個容器;
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的類加載順序
(七) 數據庫方面
(1)數據庫隔離級別與臟讀,可重復讀。幻讀的區別
總結: 5個隔離級別 與臟讀,不可重復讀,幻讀的關系:
ISOLATION_DEFAULT | 使用后端數據庫默認的隔離級別 |
ISOLATION_READ_UNCOMMITTED | 最低的隔離級別,允許讀取尚未提交的數據變更,可能會導致臟讀、幻讀或不可重復讀 |
ISOLATION_READ_COMMITTED | 允許讀取並發事務已經提交的數據,可以阻止臟讀,但是幻讀或不可重復讀仍有可能發生 Oracle和SQL Server 默認 都是 READ_COMMITTED |
ISOLATION_REPEATABLE_READ | 對同一字段的多次讀取結果都是一致的,除非數據是被本身事務自己所修改,可以阻止臟讀和不可重復讀,但幻讀仍有可能發生 Mysql 默認就是REPEATABLE READ |
ISOLATION_SERIALIZABLE | 最高的隔離級別,完全服從ACID的隔離級別,確保阻止臟讀、不可重復讀以及幻讀,也是最慢的事務隔離級別,因為它通常是通過完全鎖定事務相關的數據庫表來實現的 |
(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學習