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