商家事業部面試(Ali),商家事業部面試ali
一、Java基礎
1. 執行個體方法和靜態方法有什麼不一樣?
2. Java中的異常有哪幾類?分別怎麼使用?
3. 常用的集合類有哪些?比如List如何排序?
4. ArrayList和LinkedList內部的實現大致是怎樣的?他們之間的區別和各自適應的情境是什嗎?
5. 記憶體溢出是怎麼回事?
6. ClassLoader有什麼用?
7. ==和equals的區別?
8. hashCode方法的作用?
9. Object類中有哪些方法?列舉3個以上。
10. NIO是什嗎?適用於何種情境?
12. HashMap資料結構、擴充策略,Hash衝突攻擊如何防範,如何?安全執行緒的HashMap?
13. JVM記憶體結構,GC演算法,CMS、G1的原理
14. NIO模型,select/epoll的區別,多工原理
16. Java中一個字元佔多少個位元組,擴充再問int, long, double佔多少位元組
17. 建立一個類的執行個體都有哪些辦法?
18. final/finally/finalize的區別?
19. LinkingBlockingQueue與ArrayBlockingQueue的區別,他們的適用情境?
20. Session/Cookie的區別?
21. String/StringBuffer/StringBuilder的區別,擴充再問他們的實現?
22. Servlet的生命週期?
23. 如何用Java分配一段連續的1G的記憶體空間?需要注意些什嗎?
24. Java有自己的記憶體回收機制,但為什麼還存在記憶體泄露的問題呢?
25. Java裡面用對象作為Key需要注意些什嗎? 如何?hashcode?
二、JVM
1. JVM堆的基本結構。
2. JVM的垃圾演算法有哪幾種?CMS收集演算法的流程?
3. JVM有哪些常用啟動參數可以調整?
4. 如何查看JVM的記憶體使用量情況?
5. Java程式是否會記憶體溢出?
6. 你常用的JVM配置和調優參數都有哪些?分別什麼作用?
7. Java記憶體分代模型,GC演算法,JVM常見的啟動參數;
8. CMS演算法的過程,CMS回收過程中JVM是否需要暫停(這塊回答較好,也可以只是看畢玄的Java分布式開發或網上文章的學習, 可以結合JVM啟動參數常見配置,jstat等命令,看下動手能力,意願;以及實際線上問題排查)
9. 什麼情況下會出現OOM(堆記憶體,永久區,堆外區,方法棧)
10. Java記憶體結構(堆結構,新生代[S0/S1/Elden],年老代,持久代)
11. 常用的GC策略,什麼時候會觸發YGC,什麼時候觸發FGC
三、資料結構與演算法基礎
1. 說一下幾種常見的排序演算法和分別的複雜度。
2. 什麼是跳錶?
3. 如何確認一個鏈表有環?進一步,確認環的位置。
4. 如何遍曆一棵二叉樹?
5. 倒排一個LinkedList。
6. HashSet的實現方式
四、多線程/並發
1. Java中常見的鎖,互斥鎖,讀寫鎖,訊號量
2. 原子Atomic類,如何保證原子性,CAS硬體指令
3. volatile,可見度問題的原因,硬體架構,L3 Cache,QPI,樂觀鎖
4. 如何?一個安全執行緒的資料結構
5. 如何避免死結
6. 如何解決ABA問題
7. Synchronized關鍵字的作用?
8. Volatile關鍵字的作用?
9. Java記憶體模型是怎樣的?
10. HashMap在多線程環境下使用需要注意什嗎?為什嗎?
11. Java程式中啟動一個線程是用run()還是start()?
12. 什麼是守護線程?有什麼用?
13. 什麼是死結?如何避免
14. 線程和進程的差別是什嗎?
15. Java裡面的Threadlocal是怎樣實現的?
16. ConcurrentHashMap的實現原理是?
17. sleep和wait區別
18. notify和notifyAll區別
19. volatile關鍵字的作用
20. ThreadLocal的作用與實現
21. 兩個線程如何串列執行
22. 環境切換是什麼含義
23. 可以運行時kill掉一個線程嗎?
24. 什麼是條件鎖、讀寫鎖、自旋鎖、可重新進入鎖?
25. 什麼是協程(使用者態線程,減少資料拷貝,降低CPU開銷,無callback函數)?
26. 線程池ThreadPoolExecutor的實現原理?
27. J.U.C下的常見類的使用。lock, synchronized, ThreadPool的深入考察; BlockingQueue的使用。(take,poll的區別,put,offer的區別);原子類的實現。
28. 各種常見鎖使用如果上面這些掌握很好,還可以看看更深一點的 False Sharing,Cache Line,可見度與原子性等;
五、Linux使用與問題分析排查
1. 永久連結和軟連結的區別?
2. inode是什嗎?
3. Linux常用命令有哪些?
4. 怎麼看一個Java線程的資源耗用?
5. Load過高的可能性有哪些?
6. /etc/hosts檔案什麼做用?
7. /etc/resolv.conf檔案什麼作用?
8. 如何快速的將一個文本中所有“abc”替換為“xyz”?
9. 你常用的Linux下用來進行網路和磁碟IO分析的工具有哪些?
10. 你常用的Linux下用來進行記憶體和CPU分析的工具有哪些?
11. 發現磁碟空間不夠,如何快速找出佔用空間最大的檔案?
12. Java服務端問題排查(OOM,CPU高,Load高,類衝突)
13. Java常用問題排查工具及用法(top, iostat, vmstat, sar, tcpdump, jvisualvm, jmap, jconsole)
14. Thread dump檔案如何分析(Runnable,鎖,代碼棧,作業系統線程ID關聯)
15. grep,awk,sed; 是否自己寫過shell指令碼;
16. 常見的cpu load過高,us過高,一般是什麼問題。引申出是否用過top,jstat,jstack等。
17. 常見的記憶體問題一般有哪些。 引申出是否用過free,top, jmap等。
六、架構使用
1. Spring中Bean的生命週期。
2. SpringMVC或Struts處理請求的流程。
3. Spring AOP解決了什麼問題?怎麼實現的?aop與cglib,與asm的關係。
4. Spring事務的傳播屬性是怎麼回事?它會影響什嗎?
5. Spring中BeanFactory和FactoryBean有什麼區別?
6. Spring架構中IOC的原理是什嗎?
7. spring的依賴注入有哪幾種方式
8. struts工作流程
9. 用Spring如何?一個切面?
10. Spring 如何?資料庫事務?
11. Hibernate和Ibatis這類ORM架構的區別?什麼是ORM,解決的痛點是什嗎?
12. spriong ioc的生命週期,(init-method,intilizingbean介面方法afterPropertiesSet的先後順序)等。
13. Hibernate對一二級緩衝的使用,Lazy-Load的理解;
14. Spring IoC AOP自己用代碼如何?
15. RPC的負載平衡、服務發現怎麼做的
16. 幾種推送模型的區別,long polling,websocket
七、資料庫相關
1. MySQL InnoDB的特點?
2. 樂觀鎖和悲觀鎖的區別?
3. 資料庫隔離等級是什嗎?有什麼作用?
4. MySQL主備同步的基本原理。
5. 如何從一張表中查出name欄位包含“XYZ”的所有行?
6. 索引資料結構(字典+BitTree)
7. 如何最佳化資料庫效能(索引、分庫分表、大量操作、分頁演算法、升級硬碟SSD、業務最佳化、主從部署)
8. SQL什麼情況下不會使用索引(不包含,不等於,函數)
9. 一般在什麼欄位上建索引(過濾資料最多的欄位)
10. 如何從一張表中查出name欄位不包含“XYZ”的所有行?
11. MySQL,B+索引實現,行鎖實現,SQL最佳化
12. Redis,RDB和AOF,如何做高可用、叢集
13. 如何解決高並發減庫存問題
14. mysql儲存引擎中索引的實現機制;
15. 資料庫事務的幾種粒度;
16. 行鎖,表鎖;樂觀鎖,悲觀鎖
八、網路通訊協定和網路編程
1. TCP建立串連的過程。
2. TCP中斷連線的過程。
3. 瀏覽器發生302跳轉背後的邏輯?
4. HTTP協議的互動流程。HTTP和HTTPS的差異,SSL的互動流程?
5. Rest和Http什麼關係? 大家都說Rest很輕量,你對Rest風格如何理解?
6. TCP的滑動視窗協議有什麼用?講講原理。
7. HTTP協議都有哪些方法?
8. 交換器和路由器的區別?
9. 什麼是VLAN,有什麼作用?
10. 什麼是VXLAN,有什麼作用?
11. http協議(報文結構,斷點續傳,多線程下載,什麼是長串連)
12. tcp協議(建連過程,慢啟動,滑動視窗,七層模型)
13. webservice協議(wsdl/soap格式,與rest協議的區別)
14. spdy/http2.0協議是否有瞭解
15. NIO的好處,Netty執行緒模式,什麼是零拷貝
九、Redis等緩衝系統/中介軟體/NoSQL/一致性Hash等
1. 列舉一個常用的Redis用戶端的並行存取模型。
2. HBase如何?模糊查詢?
3. 列舉一個常用的訊息中介軟體,如果訊息要保序如何??
4. 如何?一個Hashtable?你的設計如何考慮Hash衝突?如何最佳化?
5. 分布式緩衝,一致性hash
6. LRU演算法,slab分配,如何減少記憶體片段
7. 如何解決緩衝單機熱點問題
8. 什麼是布隆過濾器,其實現原理是? False positive指的是?
9. memcache與redis的區別
10. zookeeper有什麼功能,選舉演算法如何進行
11. map/reduce過程,如何用map/reduce實現兩個資料來源的聯合統計
十、設計模式與重構
1. 你在設計一個工廠的包的時候會遵循哪些原則?
2. 你能列舉一個使用了Visitor/Decorator模式的開源項目/庫嗎?
3. 你在編碼時最常用的設計模式有哪些?在什麼情境下用?
4. 如何?一個單例?
5. 代理模式(動態代理)
6. 單例模式(懶漢模式,惡漢模式,並發初始化如何解決,volatile與lock的使用)
7. JDK源碼裡面都有些什麼讓你印象深刻的設計模式使用,舉例看看?
8. Reactor模式
十一、學習與進取心
1. 平時會關注哪些技術?
2. 會看那些技術部落格和網站?
3. 技術上有沒有偶像?
4. 看過哪些技術書籍?
5. 你平常都看些什麼書?你去年和今年看的書中印象最深的基本技術書籍和非技術書籍是?
6. (如果不看書)你平常都上哪些技術論壇?最喜歡哪個?為什嗎?
7. 項目或產品中用到了什麼新技術或架構
8. 最近研究過什麼業界流行的技術或架構
9. 對現在所做的項目或產品的缺陷是否瞭解,有何規劃
10. 是否有帶過項目,如何管理項目
11. 是否有帶過團隊,團隊管理最大的挑戰點是什麼
十二、抗壓能力及抗壓意願
1. 剛才你說的XXX實現跟那個開源的YYY很像,是不是抄來的?
2. 對加班怎麼看?
3. 平台是否有加班,是主動還是被動,是否非常抗拒
4. 是否有負責多件事情,多件事情如何平行處理
5. 你對你最近負責項目中最自豪的點是什嗎?
十三、穩定性考察
1. 瞭解家庭婚姻狀況, 瞭解購房及居住地,籍貫情況,瞭解目前薪資,評估穩定性
2. 如果讓你接手一個曆史悠久的模組,你會怎麼做?
3. 看簡曆跳槽情況,針對性發問,如跳槽頻繁的話問清楚為什麼
十四、開放性問題
1. 一個大檔案4G,裡面一行行的數字,這時記憶體只有256M,如果做排序?
2. 如果你部署的應用所在機器硬碟壞了,會發生什嗎?你的程式要如何處理這種異常?(分布式系統中故障是一種常態,設計要避免單點故障,能容錯,保證系統高可用)
3. 實現一個訊息佇列系統
4. 如何設計一個高可用的架構
5. 多次Hash來解決URL重複訪問問題。
6. 全域唯一ID問題。
7. 秒殺如何設計。
8. 如何進行效能最佳化。
9. 發現CPU 100%,如何排查?
10. 實現一個分布式打點系統。
11. taobao.com和tmall.com的互相登入的問題。
12. 如何快速對一個2億資料的List進行排序?