• Arraylist與LinkedList默認空間是多少;
• Arraylist與LinkedList區別與各自的優點List 和 Map 區別;
• 談談HashMap,哈希表解決hash衝突的方法;
• 爲何要重寫hashcode()和equals()以及他們之間的區別與關係;
• Object的hashcode()是怎麼計算的?
• 若hashcode方法永遠返回1或者一個常量會產生什麼結果?
• Java Collections和Arrays的sort方法默認的排序方法是什麼;
• 引用計數法與GC Root可達性分析法區別;
• 淺拷貝和深拷貝的區別;java
淺拷貝只是對指針的拷貝,拷貝後兩個指針指向同一個內存空間,深拷貝不但對指針進行拷貝,並且對指針指向的內容進行拷貝,經深拷貝後的指針是指向兩個不一樣地址的指針。
• String s="abc"和String s=new String("abc")區別;
• HashSet方法裏面的hashcode存在哪,若是重寫equals不重寫hashcode會怎麼樣?
• 反射的做用與實現原理;
• Java中的回調機制;
• 模板方法模式;
• 開閉原則說一下;
• 發佈/訂閱使用場景;
• KMP算法(一種改進的字符串匹配算法);
• JMM裏邊的原子性、可見性、有序性是如何體現出來的,JMM中內存屏障是什麼意思,正則表達式
原子性:java中提供兩個高級的字節碼指令monitorenter、monitorexit,使用對應的關鍵字synchronized來保證代碼塊內的操做是原子性的 可見性:java中使用volatile來保證多線程操做變量的可見性。volatile修飾的變量在修改後會被馬上同步到主內存,該變量每次使用以前都會從主內存中刷新 有序性:java中使用synchronized和volatile來實現有序性,只是顯示方式有所區別。volatile禁止指令重排,synchronized保證同一時刻只容許一個線程操做
• AtomicInteger底層實現原理;
• synchronized與ReentraLock哪一個是公平鎖;
• CAS機制會出現什麼問題;
• 用過併發包下邊的哪些類;算法
線程池相關:Executors、ThreadPoolExecutor、FutureTask 容器相關:ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteArraySet、ArrayBlockingQueue 原子類相關:AtomicInteger、AtomicIntegerArray、AtomicLong、AtomicLongArray、AtomicReference
• 一個線程連着調用start兩次會出現什麼狀況?數據庫
/** * Causes this thread to begin execution; the Java Virtual Machine * calls the <code>run</code> method of this thread. * <p> * The result is that two threads are running concurrently: the * current thread (which returns from the call to the * <code>start</code> method) and the other thread (which executes its * <code>run</code> method). * <p> * It is never legal to start a thread more than once. * In particular, a thread may not be restarted once it has completed * execution. * * @exception IllegalThreadStateException if the thread was already * started. * @see #run() * @see #stop() */ public synchronized void start() { /** * This method is not invoked for the main method thread or "system" * group threads created/set up by the VM. Any new functionality added * to this method in the future may have to also be added to the VM. * * A zero status value corresponds to state "NEW". */ if (threadStatus != 0) throw new IllegalThreadStateException();
• wait方法能不能被重寫,wait能不能被中斷;緩存
Object.wait()方法源碼: public final void wait() throws InterruptedException { wait(0); } 能夠看到,wait方法是final類型的,因此不能重寫; wait方法拋出InterruptedException,因此能夠被中斷,咱們須要主動捕獲這個異常
• 線程池的實現?四種線程池?重要參數及原理?任務拒接策略有哪幾種?
• 線程狀態以及API怎麼操做會發生這種轉換;
• 經常使用的避免死鎖方法;安全
• Minor GC與Full GC分別在何時發生?何時觸發Full GC;
• GC收集器有哪些?CMS收集器與G1收集器的特色。
• Java在何時會出現內存泄漏;
• Java中的大對象如何進行存儲;
• rt.jar被什麼類加載器加載,什麼時間加載;
• 本身寫的類被什麼加載,什麼時間加載;
• 本身寫的兩個不一樣的類是被同一個類加載器加載的嗎?爲何?
• 爲何新生代內存須要有兩個Survivor區?服務器
因爲新生代對象朝生夕滅、存活對象少的特色,因此它的的GC方式是複製-清除方式,將存活的對象一次性拷貝到其中一個空的survivor區,Eden和另外一個survivor區所有清空
• 幾種經常使用的內存調試工具:jmap、jstack、jconsole;
• 類加載的五個過程:加載、驗證、準備、解析、初始化;
• G1停頓嗎,CMS回收步驟,CMS爲何會停頓,停頓時間;
• 棧主要存的數據是什麼,堆呢?
• 堆分爲哪幾塊,好比說新生代老生代,那麼新生代又分爲何?
• 軟引用和弱引用的使用場景(軟引用能夠實現緩存,弱引用能夠用來在回調函數中防止內存泄露);網絡
• 數據庫索引,什麼是全文索引,全文索引中的倒排索引是什麼原理
• 數據庫最佳左前綴原則是什麼?
• 數據庫的三大範式;
• 悲觀鎖和樂觀鎖的原理和應用場景;
• 左鏈接、右鏈接、內鏈接、外鏈接、交叉鏈接、笛卡兒積等;
• 通常狀況下數據庫宕機瞭如何進行恢復(什麼是Write Ahead Log機制,什麼是Double Write機制,什麼是Check Point);
• 什麼是redo日誌、什麼是undo日誌;
• 數據庫中的隔離性是怎樣實現的;原子性、一致性、持久性又是如何實現的;
• 什麼是組合索引,組合索引何時會失效;
• 關係型數據庫和非關係型數據庫區別;
• 數據庫死鎖如何解決;
• MySQL併發狀況下怎麼解決(經過事務、隔離級別、鎖);
• MySQL中的MVCC機制是什麼意思,根據具體場景,MVCC是否有問題;
• MySQL數據庫的隔離級別,以及如何解決幻讀;多線程
• Redis中zSet跳躍表問題;
• Redis的set的應用場合?
• Redis高級特性瞭解嗎?
• Redis的pipeline有什麼用處?
• Redis集羣宕機如何處理,怎麼樣進行數據的遷移;
• Redis的集羣方案;
• Redis原子操做怎麼用比較好;
• Redis過時策略是怎麼實現的呢?併發
• Spring中@Autowired和@Resource註解的區別?
• Spring聲明一個 bean 如何對其進行個性化定製;
• MyBatis有什麼優點;
• MyBatis如何作事務管理;
• Linux靜態連接和動態連接;
• 什麼是IO多路複用模型(select、poll、epoll);
• Linux中的grep管道用處?Linux的經常使用命令?
• 操做系統中虛擬地址、邏輯地址、線性地址、物理地址的概念及區別;
• 內存的頁面置換算法;
• 內存的頁面置換算法;
• 進程調度算法,操做系統是如何調度進程的;
• 父子進程、孤兒進程、僵死進程等概念;
• fork進程時的操做;
• kill用法,某個進程殺不掉的緣由(僵死進程;進入內核態,忽略kill信號);
• 系統管理命令(如查看內存使用、網絡狀況);
• find命令、awk使用;
• Linux下排查某個死循環的線程;
• 數據鏈路層是作什麼的?
• 數據鏈路層的流量控制?
• 網絡模型的分層、IP和Mac地址在那個層、TCP和HTTP分別在那個層;
• TCP滑動窗口;
• TCP爲何可靠;
• TCP的同傳,拆包與組裝包是什麼意思;
• Https和Http有什麼區別;
• Http 爲何是無狀態的;
• TCP三次握手,爲何不是三次,爲何不是四次;
• TCP的擁塞控制、流量控制詳細說明?
• Http1.0和Http2.0的區別;
• 兩個不一樣ip地址的計算機之間如何通訊;
• 地址解析協議ARP;
• OSI七層模型分別對應着五層模型的哪一部分;
• TCP三次握手數據丟失了怎麼辦?那若是後面又找到了呢?
• 消息隊列使用的場景介紹和做用(應用耦合、異步消息、流量削鋒等);
• 如何解決消息隊列丟失消息和重複消費問題;
• Kafka使用過嗎,什麼是冪等性?怎麼保證一致性,持久化怎麼作,分區partition的理解,LEO是什麼意思,如何保證多個partition之間數據一致性的(ISR機制),爲何Kafka能夠這麼快(基於磁盤的順序讀寫);
• 異步隊列怎麼實現;
• 你項目的併發是多少?怎麼解決高併發問題?單機狀況下Tomcat的併發大概是多少,MySQL的併發大體是多少?
• 什麼是C10K問題;
• 高併發狀況下怎麼辦;
• 分佈式理論,什麼是CAP理論,什麼是Base理論,什麼是Paxos理論;
• 分佈式協議的選舉算法;
• 說一下你對微服務的理解,與SOA的區別;
• Dubbo的基本原理,RPC,支持哪些通訊方式,服務的調用過程;
• Dubbo若是有一個服務掛掉了怎麼辦;
• 分佈式事務,操做兩個表不在一個庫,如何保證一致性。
• 分佈式系統中,每臺機器如何產生一個惟一的隨機值;
• 系統的量級、pv、uv等;
• 什麼是Hash一致性算法?分佈式緩存的一致性,服務器如何擴容(哈希環);
• 正向代理、反向代理;
• 什麼是客戶端負載均衡策略、什麼是服務器端負載均衡策略;
• 如何優化Tomcat,常見的優化方式有哪些;
• Nginx的Master和Worker,Nginx是如何處理請求的;
• 如何防止表單重複提交(Token令牌環等方式);
• 有一個url白名單,須要使用正則表達式進行過濾,可是url量級很大,大概億級,那麼如何優化正則表達式?如何優化億級的url匹配呢?
• 常見的Nginx負載均衡策略;已有兩臺Nginx服務器了,假若這時候再增長一臺服務器,採用什麼負載均衡算法比較好?
• 掃描二維碼登陸的過程解析;
https://blog.csdn.net/zhang_zhenwei/article/details/80847473
• 如何設計一個生成惟一UUID的算法?
• 實現一個負載均衡的算法,服務器資源分配爲70%、20%、10%;
• 有三個線程T1 T2 T3,如何保證他們按順序執行;
• 三個線程循環輸出ABCABCABC....
• 什麼是XSS攻擊,XSS攻擊的通常表現形式有哪些?如何防止XSS攻擊;