前言
在茫茫的互聯網海洋中尋尋覓覓,我收藏了800+道Java經典面試題,分享給你們。建議大家收藏起來,在茶餘飯後拿出來讀一讀,以備未雨綢繆之需。另外,面試題答案的話,我打算後面慢慢完善在github,
希望大家都能找到自己理想的offer呀。
- Java 基礎
- Java 集合
- Java 併發 && 多線程
- JVM 篇
- 數據庫
- 緩存/Redis
- 計算機網絡
- 消息隊列
- mybatis
- 操作系統
- Spring
- Netty/tomcat
- 常用Linux 命令
- ZooKeeper
- Elasticsearch
- dubbo框架
- Spring cloud
- Nginx
- 算法
- 大廠方案設計面試題
這些面試題也會收藏在我的個人公衆號上(公衆號:撿田螺的小男孩),歡迎關注,交個朋友哦~
Java 基礎
- equals與==的區別
- final, finally, finalize 的區別
- 重載和重寫的區別
- 兩個對象的hashCode()相同,則 equals()是否也一定爲 true?
- 抽象類和接口有什麼區別
- BIO、NIO、AIO 有什麼區別?
- String,Stringbuffer,StringBuilder的區別
- JAVA中的幾種基本數據類型是什麼,各自佔用多少字節呢
- Comparator與Comparable有什麼區別?
- String類能被繼承嗎,爲什麼。
- 說說Java中多態的實現原理
- Java泛型和類型擦除
- int和Integer 有什麼區別,還有Integer緩存的實現
- 說說反射的用途及實現原理,Java獲取反射的三種方法
- 面向對象的特徵
- &和&&的區別
- Java中IO流分爲幾種?
- 講講類的實例化順序,比如父類靜態數據,構造函數,子類靜態數據,構造函數。
- Java創建對象有幾種方式
- 如何將GB2312編碼的字符串轉換爲ISO-8859-1編碼的字符串呢?
- 守護線程是什麼?用什麼方法實現守護線程
- notify()和 notifyAll()有什麼區別?
- Java語言是如何處理異常的,關鍵字throws、throw、try、catch、finally怎麼使用?
- 談談Java的異常層次結構
- 靜態內部類與非靜態內部類有什麼區別區別
- String s與new String與有什麼區別
- 反射中,Class.forName和ClassLoader的區別
- JDK動態代理與cglib實現的區別
- error和exception的區別,CheckedException,RuntimeException的區別。
- 深拷貝和淺拷貝區別
- JDK 和 JRE 有什麼區別?
- String 類的常用方法都有那些呢?
- 談談自定義註解的場景及實現
- 說說你熟悉的設計模式有哪些?
- 抽象工廠和工廠方法模式的區別?
- 什麼是值傳遞和引用傳遞?
- 可以在static環境中訪問非static變量嗎?
- Java支持多繼承麼,爲什麼?
- 用最有效率的方法計算2乘以8?
- 構造器是否可被重寫?
- char型變量中能不能存貯一箇中文漢字,爲什麼?
- 如何實現對象克隆?
- object中定義了哪些方法?
- hashCode的作用是什麼?
- for-each與常規for循環的效率對比
- 寫出幾種單例模式實現,懶漢模式和餓漢模式區別
- 請列出 5 個運行時異常。
- 2個不相等的對象有可能具有相同的 hashcode嗎?
- 訪問修飾符public,private,protected,以及default的區別?
- 談談final在java中的作用?
- java中的Math.round(-1.5) 等於多少呢?
- String屬於基礎的數據類型嗎?
- 如何將字符串反轉呢?
- 描述動態代理的幾種實現方式,它們分別有什麼優缺點
- 在自己的代碼中,如果創建一個java.lang.String類,這個類是否可以被類加載器加載?爲什麼。
- 談談你對java.lang.Object對象中hashCode和equals方法的理解。在什麼場景下需要重新實現這兩個方法。
- 在jdk1.5中,引入了泛型,泛型的存在是用來解決什麼問題。
- 什麼是序列化,怎麼序列化,反序列呢?
- java8的新特性。
- 匿名內部類是什麼?如何訪問在其外面定義的變量呢?
- break和continue有什麼區別?
- String s = “Hello”;s = s + " world!";這兩行代碼執行後,原始的 String 對象中的內容是否會改變?
- 怎樣將GB2312編碼的字符串轉換爲ISO-8859-1編碼的字符串?
- try-catch-finally-return執行順序
- Java 7新的 try-with-resources語句,平時有使用嗎
- 簡述一下面向對象的”六原則一法則”。
- switch是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
- 數組有沒有length()方法?String有沒有length()方法?
- 是否可以從一個靜態(static)方法內部發出對非靜態(non-static)方法的調用?
- String s = new String(“jay”);創建了幾個字符串對象?
- 匿名內部類是否可以繼承其它類?是否可以實現接口?
- 我們能將int強制轉換爲 byte類型的變量嗎?如果該值大於byte 類型的範圍,將會出現什麼現象?
- float f=3.4;正確嗎?
- 你能寫出一個正則表達式來判斷一個字符串是否是一個數字嗎?
- Reader和InputStream區別?
- 列舉出JAVA中6個比較常用的包
- JDK 7有哪些新特性
- 同步和異步有什麼區別?
- 實際開發中,Java一般使用什麼數據類型來代表價格?
- 64 位 JVM 中,int 的長度是多數?
- java8的新特性
- 字節流與字符流的區別
- Java 事件機制包括哪三個部分?分別介紹下。
- 爲什麼等待和通知是在 Object 類而不是 Thread 中聲明的?
- 每個對象都可上鎖,這是在 Object類而不是 Thread 類中聲明,爲什麼呢?
- 爲什麼char 數組比Java中的 String 更適合存儲密碼?
- 如何使用雙重檢查鎖定在 Java 中創建線程安全的單例?
- 如果你的Serializable類包含一個不可序列化的成員,會發生什麼?你是如何解決的?
- 什麼是serialVersionUID ?如果你不定義這個, 會發生什麼?
- Java 中,Maven 和 ant,gradle 有什麼區別?
- 常見的序列化協議有哪些
- @transactional註解在什麼情況下會失效,爲什麼。
- Java 中,DOM 和SAX 解析器有什麼不同?
- 數組在內存中如何分配;
- 什麼是 Busy spin?我們爲什麼要使用它?
- Java 中怎麼獲取一份線程 dump 文件?
- 父類的靜態方法能否被子類重寫
- 什麼是不可變對象
- 如何正確的退出多層嵌套循環?
- SimpleDateFormat是線程安全的嗎?你一般怎麼格式化
- 抽象類必須要有抽象方法嗎?
- 怎麼實現動態代理?有哪些應用
- 什麼是內部類?內部類的作用
- 泛型中extends和super的區別
- 內部類有幾種,在項目中的有哪些應用
- utf-8編碼中的中文佔幾個字節;int型幾個字節?
- 說說你對Java註解的理解
- Java 中 java.util.Date 與 java.sql.Date 有什麼區別?
- 說一下隱式類型轉換
- 抽象類能使用final修飾嗎
- 給我一個符合開閉原則的設計模式的例子
- Files的常用方法都有哪些
- Java 中,Serializable與Externalizable 的區別?
- Java鎖有哪些種類,它們都有哪些區別
- 抽象的方法是否可同時是靜態的),是否可同時是本地方法),是否可同時被 synchronized 修飾?
- 一個”.java”源文件中是否可以包含多個類(不是內部類)?有什麼限制?
- 說說代理的實現原理
- 瞭解哪設計模式,舉例說說在jdk源碼哪些用到了你說的設計模式
- 什麼是B/S架構?什麼是C/S架構
- Java有那些開發平臺呢?
- Java內部類爲什麼可以訪問到外部類呢?
- Java支持的數據類型有哪些?什麼是自動拆裝箱呢?
- 創建線程有幾種不同的方式
- hashCode()和equals()方法的重要性體現在什麼地方?
- 如何通過反射獲取和設置對象私有字段的值?
- 如何通過反射調用對象的方法?
- 簡述一下面向對象的"六原則一法則"
- Java 對象不使用時爲什麼要賦值爲 null?
- 什麼時候用斷言(assert)?
- AJAX請求爲什麼不安全?
- 一個Java字符串中到底能有多少個字符?
- StringBuilder爲什麼線程不安全?
- 深克隆和淺克隆
- 聊一聊設計模式的基本原則
- Java 能否自定義一個類叫 java.lang.System?
- Java中的兩種異常類型是什麼?他們有什麼區別?
- Java中Exception和Error有什麼區別?
- throw和throws有什麼區別?
- 異常處理完成以後,Exception對象會發生什麼變化?
- 什麼是RMI?
- 解釋下Serialization和Deserialization。
- 環境變量Path和ClassPath的作用是什麼?如何設置這兩個環境變量?
- 字符型常量和字符串常量的區別
- 構造器Constructor是否可被override
- 什麼是方法的返回值?返回值在類的方法裏的作用是什麼?
- 一個類的構造方法的作用是什麼?若一個類沒有聲明構造方法,改程序能正確執行嗎?爲什麼?
- 靜態方法和實例方法有何不同?
- 對象的相等與指向他們的引用相等,兩者有什麼不同?
- 用 Java 寫一個線程安全的單例模式
- 我能在不進行強制轉換的情況下將一個 double值賦值給 long類型的變量嗎?
- java 枚舉類型是否可以繼承 (final)?
- Cloneable 接口實現原理?
- 繼承和聚合的區別?
- 能用Java覆蓋靜態方法嗎?如果我在子類中創建相同的方法是編譯時錯誤?
- 什麼是Java程序的主類?應用程序和小程序的主類有何不同?
- instanceof 工作中使用過嗎?
- Java自帶線程池判斷線程池是否已經結束運行的方法叫什麼
- 成員變量與局部變量的區別有那些?
- 創建一個對象用什麼運算符? 對象實體與對象引用有何不同?
- 一行Java代碼是如何執行的?
Java 集合
- Arraylist與LinkedList區別
- Collections.sort和Arrays.sort的實現原理
- HashMap原理,java8做了什麼改變
- List 和 Set,Map 的區別
- poll()方法和 remove()方法的區別?
- HashMap,HashTable,ConcurrentHash的共同點和區別
- 寫一段代碼在遍歷 ArrayList 時移除一個元素
- Java中怎麼打印數組?
- TreeMap底層?
- HashMap 的擴容過程
- HashSet是如何保證不重複的
- HashMap 是線程安全的嗎,爲什麼不是線程安全的?死循環問題?
- LinkedHashMap的應用,底層,原理
- 哪些集合類是線程安全的?哪些不安全?
- ArrayList 和 Vector 的區別是什麼?
- Collection與Collections的區別是什麼?
- 如何決定使用 HashMap 還是TreeMap?
- 如何實現數組和 List之間的轉換?
- 迭代器 Iterator 是什麼?怎麼用,有什麼特點?
- Iterator 和 ListIterator 有什麼區別?
- 怎麼確保一個集合不能被修改?
- 快速失敗(fail-fast)和安全失敗(fail-safe)的區別是什麼?
- 什麼是Java優先級隊列(Priority Queue)?
- JAVA8的ConcurrentHashMap爲什麼放棄了分段鎖,有什麼問題嗎,如果你來設計,你如何設計。
- 阻塞隊列的實現,ArrayBlockingQueue的底層實現?
- Java 中的 LinkedList是單向鏈表還是雙向鏈表?
- 說一說ArrayList 的擴容機制吧
- HashMap 的長度爲什麼是2的冪次方,以及其他常量定義的含義~
- ConcurrenHashMap 原理?1.8 中爲什麼要用紅黑樹?
- ArrayList的默認大小
- 爲何Collection不從Cloneable和Serializable接口繼承?
- Enumeration和Iterator接口的區別?
- 我們如何對一組對象進行排序?
- 當一個集合被作爲參數傳遞給一個函數時,如何纔可以確保函數不能修改它?
- 說一下 HashSet 的實現原理?
- Array 和 ArrayList 有何區別?
- 在 Queue中poll()和 remove()有什麼區別?
- ArrayList 如何刪除重複的元素或者指定的元素;
- 講講紅黑樹的特點?
- Java集合類框架的最佳實踐有哪些?
- Enumeration接口和Iterator 接口的區別有哪些?
- HashSet和TreeSet有什麼區別?
- Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()?
- 說出ArrayList,LinkedList的存儲性能和特性
- Java中HashMap的key值要是爲類對象則該類需要滿足什麼條件?
- ArrayList集合加入1萬條數據,應該怎麼提高效率
- 如何對Object的list排序
- ArrayList 和 HashMap 的默認大小是多數?
- 有沒有有順序的Map實現類,如果有,他們是怎麼保證有序的
- HashMap是怎麼解決哈希衝突的
Java 併發 && 多線程
- synchronized 的實現原理以及鎖優化?
- ThreadLocal原理,使用注意點,應用場景有哪些?
- synchronized和ReentrantLock的區別?
- 說說CountDownLatch與CyclicBarrier 區別
- Fork/Join框架的理解
- 爲什麼我們調用start()方法時會執行run()方法,爲什麼我們不能直接調用run()方法?
- Java中的volatile關鍵是什麼作用?怎樣使用它?在Java中它跟synchronized方法有什麼不同?volatile 的實現原理
- CAS?CAS 有什麼缺陷,如何解決?
- 如何檢測死鎖?怎麼預防死鎖?死鎖四個必要條件
- 如果線程過多,會怎樣?
- 說說 Semaphore原理?
- AQS組件,實現原理
- 假設有T1、T2、T3三個線程,你怎樣保證T2在T1執行完後執行,T3在T2執行完後執行?
- LockSupport作用是?
- Condition接口及其實現原理
- 說說併發與並行的區別?
- 爲什麼要用線程池?Java的線程池內部機制,參數作用,幾種工作阻塞隊列,線程池類型以及使用場景
- 如何保證多線程下 i++ 結果正確?
- 10 個線程和2個線程的同步代碼,哪個更容易寫?
- 什麼是多線程環境下的僞共享(false sharing)?
- 線程池如何調優,最大數目如何確認?
- Java 內存模型?
- 怎麼實現所有線程在等待某個事件的發生纔會去執行?
- 說一下 Runnable和 Callable有什麼區別?
- 用Java編程一個會導致死鎖的程序,你將怎麼解決?
- 線程的生命週期,線程的幾種狀態。
- ReentrantLock實現原理
- java併發包concurrent及常用的類
- wait(),notify()和suspend(),resume()之間的區別
- FutureTask是什麼?
- 一個線程如果出現了運行時異常會怎麼樣
- 生產者消費者模型的作用是什麼
- ReadWriteLock是什麼
- Java中用到的線程調度算法是什麼?
- 線程池中的阻塞隊列如果滿了怎麼辦?
- 線程池中 submit()和 execute()方法有什麼區別?
- 介紹一下 AtomicInteger 類的原理?
- 多線程鎖的升級原理是什麼?
- 指令重排序,內存柵欄等?
- Java 內存模型 happens-before原則
- 公平鎖/非公平鎖
- 可重入鎖
- 獨享鎖、共享鎖
- 偏向鎖/輕量級鎖/重量級鎖
- 如何保證內存可見性
- 非核心線程延遲死亡,如何實現?
- ConcurrentHashMap讀操作爲什麼不需要加鎖?
- ThreadLocal 如何解決 Hash 衝突?
- ThreadLocal 的內存泄露是怎麼回事?
- 爲什麼ThreadLocalMap 的 key是弱引用,設計理念是?
- 同步方法和同步代碼塊的區別是什麼?
- 在Java中Lock接口比synchronized塊的優勢是什麼?如果你需要實現一個高效的緩存,它允許多個用戶讀,但只允許一個用戶寫,以此來保持它的完整性,你會怎樣去實現它?
- 用Java實現阻塞隊列。
- 用Java寫代碼來解決生產者——消費者問題。
- 什麼是競爭條件?你怎樣發現和解決競爭?
- 爲什麼我們調用start()方法時會執行run()方法,爲什麼我們不能直接調用run()方法?
- Java中你怎樣喚醒一個阻塞的線程?
- 什麼是不可變對象,它對寫併發應用有什麼幫助?
- 你在多線程環境中遇到的共同的問題是什麼?你是怎麼解決它的?
- Java 中能創建 volatile數組嗎
- volatile 能使得一個非原子操作變成原子操作嗎
- 你是如何調用 wait()方法的?使用 if 塊還是循環?爲什麼?
- 我們能創建一個包含可變對象的不可變對象嗎?
- 在多線程環境下,SimpleDateFormat是線程安全的嗎
- 爲什麼Java中 wait 方法需要在 synchronized 的方法中調用?
- BlockingQueue,CountDownLatch及Semeaphore的使用場景
- Java中interrupted 和 isInterruptedd方法的區別?
- 怎麼檢測一個線程是否持有對象監視器
- 什麼情況會導致線程阻塞
- 如何在兩個線程間共享數據
- Thread.sleep(1000)的作用是什麼?
- 使用多線程可能帶來什麼問題
- 說說線程的生命週期和狀態?
- 什麼是上下文切換
- Java Monitor 的工作機理
- 按線程池內部機制,當提交新任務時,有哪些異常要考慮。
- 線程池都有哪幾種工作隊列?
- 說說幾種常見的線程池及使用場景?
- 使用無界隊列的線程池會導致內存飆升嗎?
- 爲什麼阿里發佈的 Java開發手冊中強制線程池不允許使用 Executors 去創建?
- Future有缺陷嘛?
JVM 篇
- 什麼情況下會發生棧內存溢出。什麼時候發生堆溢出?你是怎麼排錯的?
- JVM怎麼判斷對象是可回收對象?有哪些方法。
- JVM的內存結構,新生代與老年代的比例,Eden和Survivor比例。
- 你知道哪幾種垃圾收集器,各自的優缺點,重點講下cms和G1,包括原理,流程,優缺點。
- 簡單說說你瞭解的類加載器,可以打破雙親委派麼,怎麼打破。
- JVM內存爲什麼要分成新生代,老年代,持久代。新生代中爲什麼要分爲Eden和Survivor。
- JVM 出現 fullGC 很頻繁,怎麼去線上排查問題?
- JVM中一次完整的GC流程是怎樣的,對象如何晉升到老年代,說說你知道的幾種主要的JVM參數。
- 垃圾回收算法的實現原理。
- JVM內存模型的相關知識瞭解多少,比如重排序,內存屏障,happen-before,主內存,工作內存等。
- 說一下Java對象的創建過程
- 你們線上應用的JVM參數配置了哪些。
- G1和cms區別。
- 怎麼打出線程棧信息。
- 說一下類加載的執行過程
- JVM垃圾回收機制,何時觸發MinorGC等操作呢?
- ZGC 垃圾收集器,瞭解過嗎
- 對象的訪問定位有哪兩種方式?
- 說一下 jvm 調優的工具?
- 對象什麼時候會進入老年代?
- 內存泄漏和內存溢出區別?
- 什麼是tomcat類加載機制?
- 瞭解逃逸分析技術嗎
- 調用System.gc()會發生什麼?
- 談談Minor GC條件,full GC條件
- Stop The World 瞭解過嗎?
- 談談你認識多少種OOM?如何避免OOM?
- 瞭解過JVM調優沒,基本思路是什麼?如何確定它們的大小呢?
- 淘寶熱門商品信息在JVM哪個內存區域
- 字節碼的編譯過程
- Java需要開發人員回收內存垃圾嗎?
- Java中垃圾回收有什麼目的?什麼時候進行垃圾回收?
- System.gc()和Runtime.gc()會做什麼事情?
- 主內存與工作內存
- 內存間交互操作
- volatile 禁止內存重排序
- 內存模型三大特性
- 談談先行發生原則
- JVM 堆內存溢出後,其他線程是否可繼續工作?
- 說一下JVM 常用參數有哪些?
- VM 爲什麼使用元空間替換了永久代?
- Java堆的結構是什麼樣子的?什麼是堆中的永久代(Perm Gen space)?
- JVM的永久代中會發生垃圾回收麼?
- 什麼是字節碼?採用字節碼的最大好處是什麼?什麼Java是虛擬機?
- MinorGC 的過程
- CPU 佔用過高如何分析
- Serial與Parallel GC之間的不同之處?
- WeakHashMap 是怎麼工作的?
- 解釋 Java 堆空間及 GC?
- 你能保證 GC 執行嗎?
- JVM中哪個參數是用來控制線程的棧堆棧小的?
數據庫
- MySQL 索引使用有哪些事項呢?
- 說說分庫與分表的設計
- 日常工作中你是怎麼優化SQL的?
- MySQL 遇到過死鎖問題嗎,你是如何解決的?
- InnoDB與MyISAM的區別
- 數據庫索引的原理,爲什麼要用 B+樹,爲什麼不用二叉樹?
- 聚集索引與非聚集索引的區別
- limit 100000 加載很慢的話,你是怎麼解決的呢?
- 如何選擇合適的分佈式主鍵方案呢?
- 事務的隔離級別有哪些?MySQL的默認隔離級別是什麼?
- 什麼是幻讀,髒讀,不可重複讀呢?
- 在高併發情況下,如何做到安全的修改同一行數據?
- 數據庫的樂觀鎖和悲觀鎖。
- SQL優化的一般步驟是什麼,怎麼看執行計劃(explain),如何理解其中各個字段的含義。
- select for update有什麼含義,會鎖表還是鎖行還是其他。
- MySQL事務得四大特性以及實現原理
- 如果某個表有近千萬數據,CRUD比較慢,如何優化。
- 如何寫sql能夠有效的使用到複合索引。
- mysql中in 和exists的區別。
- 數據庫自增主鍵可能遇到什麼問題。
- MVCC熟悉嗎,它的底層原理?
- 數據庫中間件瞭解過嗎,sharding jdbc,mycat?
- MYSQL的主從延遲,你怎麼解決?
- 說一下大表的優化方案
- 什麼是數據庫連接池?爲什麼需要數據庫連接池呢?
- 一條SQL語句在MySQL中如何執行的?
- InnoDB引擎中的索引策略,瞭解過嗎?
- 數據庫存儲日期格式時,如何考慮時區轉換問題?
- 一條sql執行過長的時間,你如何優化,從哪些方面入手?
- MYSQL數據庫服務器性能分析的方法命令有哪些?
- Blob和text有什麼區別?
- mysql裏記錄貨幣用什麼字段類型比較好?
- Mysql中有哪幾種鎖,列舉一下?
- Hash索引和B+樹區別是什麼?你在設計索引是怎麼抉擇的?
- mysql 的內連接、左連接、右連接有什麼區別?
- MySQL 的基礎架構
- 什麼是內連接、外連接、交叉連接、笛卡爾積呢?
- 說一下數據庫的三大範式
- mysql有關權限的表有哪幾個呢?
- Mysql的binlog有幾種錄入格式?分別有什麼區別?
- InnoDB引擎的4大特性,瞭解過嗎
- 索引有哪些優缺點?
- 索引有哪幾種類型?
- 創建索引優有什麼原則呢?
- 創建索引的三種方式
- 百萬級別或以上的數據,你是如何刪除的?
- 什麼是最左前綴原則?什麼是最左匹配原則?
- B樹和B+樹的區別,數據庫爲什麼使用B+樹而不是B樹?
- 覆蓋索引、回表等這些,瞭解過嗎?
- B+樹在滿足聚簇索引和覆蓋索引的時候不需要回表查詢數據?
- 什麼是聚簇索引?何時使用聚簇索引與非聚簇索引
- 非聚簇索引一定會回表查詢嗎?
- 聯合索引是什麼?爲什麼需要注意聯合索引中的順序?
- 什麼是數據庫事務?
- 隔離級別與鎖的關係
- 按照鎖的粒度分,數據庫鎖有哪些呢?鎖機制與InnoDB鎖算法
- 從鎖的類別角度講,MySQL都有哪些鎖呢?
- MySQL中InnoDB引擎的行鎖是怎麼實現的?
- 什麼是死鎖?怎麼解決?
- 爲什麼要使用視圖?什麼是視圖?
- 視圖有哪些特點?哪些使用場景?
- 視圖的優點,缺點,講一下?
- count(1)、count(*) 與 count(列名) 的區別?
- 什麼是遊標?
- 什麼是存儲過程?有哪些優缺點?
- 什麼是觸發器?觸發器的使用場景有哪些?
- MySQL中都有哪些觸發器?
- 超鍵、候選鍵、主鍵、外鍵分別是什麼?
- SQL 約束有哪幾種呢?
- 談談六種關聯查詢,使用場景。
- varchar(50)中50的涵義
- mysql中int(20)和char(20)以及varchar(20)的區別
- drop、delete與truncate的區別
- UNION與UNION ALL的區別?
- SQL的生命週期?
- 超大分頁怎麼處理?
- 慢查詢日誌
- 關心過業務系統裏面的sql耗時嗎?統計過慢查詢嗎?對慢查詢都怎麼優化過?
- 主鍵使用自增ID還是UUID,爲什麼?
- mysql自增主鍵用完了怎麼辦?
- 字段爲什麼要求定義爲not null?
- 如果要存儲用戶的密碼散列,應該使用什麼字段進行存儲?
- 優化查詢過程中的數據訪問
- 如何優化長難的查詢語句?有實戰過嗎?
- 優化特定類型的查詢語句
- MySQL數據庫cpu飆升的話,要怎麼處理呢?
- 讀寫分離有哪些解決方案?
- MySQL的複製原理以及流程
- 備份計劃,mysqldump以及xtranbackup的實現原理?
- Innodb的事務實現原理?
- 談談 MySQL 的Explain
- Innodb的事務與日誌的實現方式
- MySQL binlog的幾種日誌錄入格式以及區別
- 500臺db,在最快時間之內重啓。
- 你是如何監控你們的數據庫的?你們的慢日誌都是怎麼查詢的?
- 你是否做過主從一致性校驗,如果有,怎麼做的,如果沒有,你打算怎麼做?
- 你們數據庫是否支持emoji表情存儲,如果不支持,如何操作?
- MySQL中InnoDB引擎的行鎖是通過加在什麼上完成(或稱實現)的?爲什麼是這樣子的?
- 一個6億的表a,一個3億的表b,通過外間tid關聯,你如何最快的查詢出滿足條件的第50000到第50200中的這200條數據記錄。
- 數據庫垂直和水平拆分
緩存/Redis
- Redis用過哪些數據類型,每種數據類型的使用場景
- Redis緩存穿透、緩存雪崩和緩存擊穿原因,以及解決方案
- 如何使用Redis來實現分佈式鎖,redis分佈式鎖有什麼缺陷?
- Redis 持久化機制,有幾種方式,優缺點是什麼,怎麼實現的,RDB和AOF的區別
- Redis集羣,高可用,原理。
- Redis的數據淘汰策略
- 爲什麼要用redis?爲什麼要用緩存,在哪些場景使用緩存
- redis事務,瞭解嗎,瞭解Redis事務的CAS操作嗎
- 如何解決 Redis 的併發競爭Key問題。
- Redis爲什麼是單線程的,爲什麼單線程還這麼快?
- 如何保證緩存與數據庫雙寫時的數據一致性?
- redis和memcached有什麼區別
- JVM本地緩存,瞭解過嗎
- redis的list結構相關的操作。
- redis2和redis3的區別,redis3內部通訊機制。
- Redis的選舉算法和流程是怎樣的?
- Reids的主從複製機制原理。
- Redis的線程模型是什麼?
- Redis的使用要注意什麼,講講持久化方式,內存設置,集羣的應用和優劣勢,淘汰策略等。
- Redis緩存分片
- redis的集羣怎麼同步的數據的?
- 請思考一個方案,設計一個可以控制緩存總體大小的自動適應的本地緩存。
- redis的哨兵模式,一個key值如何在redis集羣中找到存儲在哪裏。
- Redis,一個字符串類型的值能存儲最大容量是多少?
- MySQL裏有2000w數據,redis中只存20w的數據,如何保證redis中的數據都是熱點數據?
- Redis和Redisson有什麼關係?
- Redis中的管道有什麼用?
- Redis事務相關的命令有哪幾個?
- Redis key的過期時間和永久有效分別怎麼設置?
- Redis回收使用的是什麼算法?
- 一個Redis實例最多能存放多少的keys?List、Set、Sorted Set他們最多能存放多少元素?
- Redis—跳躍表,複雜度是多少?
- Redis有哪些優缺點?爲什麼要用 Redis ?
- 爲什麼要用Redis 而不用 map/guava 做緩存?
- 如何用 Redis 統計獨立用戶訪問量?
- 如何選擇合適的持久化方式
- Redis持久化數據和緩存怎麼做擴容?
- Redis key的過期時間和永久有效分別怎麼設置?
- 我們知道通過expire來設置key 的過期時間,那麼對過期的數據怎麼處理呢?
- Redis的過期鍵的刪除策略
- Redis的內存用完了會發生什麼?
- Redis如何做內存優化?
- Redis事務的三個階段
- Redis事務相關命令
- Redis事務保證原子性嗎,支持回滾嗎?
- Redis事務支持隔離性嗎?
- Redis集羣的主從複製模型是怎樣的?
- 生產環境中的 redis 是怎麼部署的?
- 說說Redis哈希槽的概念
- Redis集羣會有寫操作丟失嗎?爲什麼?
- Redis集羣最大節點個數是多少?
- Redis集羣如何選擇數據庫?
- Redis是單線程的,如何提高多核CPU的利用率?
- 爲什麼要做Redis分區?有什麼缺點?
- 你知道有哪些Redis分區實現方案?
- 緩存的實現原理,設計緩存要注意什麼
- 如何解決 Redis 的併發競爭 Key 問題
- 分佈式Redis是前期做還是後期規模上來了再做好?爲什麼?
- 什麼是 RedLock?
- Redis支持的Java客戶端都有哪些?官方推薦用哪個?
- 爲什麼Redis的操作是原子性的,怎麼保證原子性
- Redis常見性能問題和解決方案?
- 一個字符串類型的值能存儲最大容量是多少?
- Redis如何做大量數據插入?
- 假如Redis裏面有1億個key,其中有10w個key是以某個固定的已知的前綴開頭的,如果將它們全部找出來?
- 使用Redis做過異步隊列嗎,是如何實現的?
- Redis如何實現延時隊列?
- Redis回收進程如何工作的?
- 熱點數據和冷數據是什麼
- 使用過Redis哪些命令?
計算機網絡
- 請詳細介紹一下TCP 的三次握手機制,爲什麼要三次握手?
- 講一下HTTP與HTTPS 的區別。
- Session和cookie的區別。
- TCP的四次揮手,爲什麼要有TIME_WAIT 狀態,爲什麼需要四次握手
- http1.0和http1.1有什麼區別。
- HTTP的常見狀態碼有哪些,代表什麼含義?比如200, 302, 404?
- 當你用瀏覽器打開一個鏈接到返回結果,發生了什麼。
- TCP/IP如何保證可靠性,說說TCP頭的結構。
- GET與POST方式的區別
- 如何避免瀏覽器緩存。
- TCP/IP模型?
- 講一講 TCP 和 UDP 各有什麼特點,兩者有什麼區別
- 詳細講一下TCP的滑動窗口
- 說一下擁塞控制
- 如何理解HTTP協議的無狀態性。
- HTTP有哪些 method?
- HTTP長連接和短連接
- HTTPS原理,加簽,驗籤,什麼是數字簽名?什麼是數字證書?對稱加密和非對稱加密等。
- 談下你對 IP 地址分類的理解?
- ARP及RARP協議的工作原理?
- 怎麼解決拆包和粘包?
- DNS 的解析過程?
- 什麼是DoS、DDoS、DRDoS攻擊?如何防禦?
- WebSocket與socket的區別
- 講一講SYN超時,洪泛攻擊,以及解決策略
- ICMP協議的功能
- 什麼是 session,有哪些實現 session 的機制?
- Http請求的過程與原理
- 你知道網絡協議有那些?
- HTTPS 爲什麼是安全的?說一下他的底層實現原理?
- ping的原理
- 如果服務器出現了大量 CLOSE_WAIT 狀態如何解決。
- TCP 黏包是怎麼產生的?
- OSI七層體系結構路
- 由器與交換機的區別
- 什麼是XSS攻擊,如何避免
- 什麼是CSRF攻擊,如何避免
- Https雙向和單向驗證的區別
- 如果客戶端禁止Cookie能實現Session
- HTTP請求中session實現原理
消息隊列
- 消息隊列有哪些使用場景。
- 消息中間件如何解決消息丟失問題?
- 談談消息的重發,補充策略。
- 如何保證消息的順序性。
- 怎麼利用mq實現最終一致性?
- kafka 和其他消息隊列的區別,kafka 主從同步怎麼實現?
- MQ的連接是線程安全的嗎,你們公司的MQ服務架構怎樣的。
- kafka吞吐量高的原因。
- rabbitmq如何實現集羣高可用?
- 使用kafka有沒有遇到什麼問題,怎麼解決的?
- MQ有可能發生重複消費,如何避免,如何做到冪等?
- MQ的消息延遲了怎麼處理,消息可以設置過期時間麼,過期了你們一般怎麼處理?
- rabbitmq 有幾種廣播類型?
- 使用 kafka 集羣需要注意什麼?
- 爲什麼使用消息隊列?有什麼用?
- 消息隊列有什麼優點和缺點?
- Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什麼區別,以及適合哪些場景?
- MQ能否保證消息必達,即消息的可靠性
- 大量消息在MQ里長時間積壓,該如何解決?
- MQ消息過期失效怎麼辦?
- kafka可以脫離zookeeper單獨使用嗎?爲什麼?
- kafka 的分區策略有哪些?
- kafka 有幾種數據保留策略?
- RabbitMQ 中的 broker 是指什麼?cluster 又是指什麼?
- Kafka 消息是採用 Pull 模式,還是 Push 模式?
- RabbitMQ 有哪些重要組件
- 如何確保消息接收方消費了消息?
- 消息基於什麼傳輸?
- 消息怎麼路由?
- 消息如何分發?
mybatis
- mybatis 中 #{}和 ${}的區別是什麼?
- 什麼是SQL注入 ,如何避免。
- 說一下 mybatis 的一級緩存和二級緩存
- mybatis 是否支持延遲加載?延遲加載的原理是什麼?
- mybatis 動態sql中使用標籤與直接寫where關鍵字有什麼區別?
- mybatis 動態sql標籤中循環標籤中有哪些屬性,各自的作用。
- mybatis 和 hibernate 的區別有哪些?
- RowBounds是一次性查詢全部結果嗎?爲什麼?
- MyBatis 定義的接口,怎麼找到實現的?
- Mybatis的底層實現原理。
- Mybatis是如何進行分頁的?分頁插件的原理是什麼?
- Mybatis執行批量插入,能返回數據庫主鍵列表嗎?
- Mybatis都有哪些Executor執行器?它們之間的區別是什麼?
- Mybatis動態sql有什麼用?執行原理?有哪些動態sql?
- mybatis有幾種分頁方式?
- MyBatis框架的優點和缺點
- 使用MyBatis框架,當實體類中的屬性名和表中的字段名不一樣 ,怎麼辦 ?
- 通常一個Xml映射文件,都會寫一個Dao接口與之對應,請問,這個Dao接口的工作原理是什麼?Dao接口裏的方法,參數不同時,方法能重載嗎?
- Xml映射文件中,除了常見的select|insert|updae|delete標籤之外,還有哪些標籤?
- 簡述Mybatis的插件運行原理,以及如何編寫一個插件。
操作系統
- Linux系統下你關注過哪些內核參數,說說你知道的。
- epoll和poll有什麼區別。
- 線上CPU爆高,請問你如何找到問題所在。
- Linux下IO模型有幾種,各自的含義是什麼。
- top 命令之後有哪些內容,有什麼作用。
- 進程通信有幾種方式?
- 說說進程的調度算法
- 常見的幾種內存管理機制
- 什麼是虛擬內存(Virtual Memory)?
- 內存置換算法
- 虛擬地址、邏輯地址、線性地址、物理地址的區別。
- 操作系統的頁式存儲
- 進程和線程的區別
- socket客戶端和服務端通信過程
- 影響調度程序的指標是什麼?
- 進程間狀態有哪些?
- 一個線程在內存中如何存儲?
- 殭屍進程是什麼,如果產生一個殭屍進程,如何查找殭屍進程
- 一個進程有20個線程,在某個線程中調用fork,新的進程會有20個線程嗎?
- 什麼是 RR 調度算法?
- 什麼是 DMA(直接內存訪問)?
Spring 相關
- BeanFactory和 ApplicationContext有什麼區別?
- Spring IOC 的理解,其初始化過程
- Spring Bean 的生命週期
- Spring MVC 的工作原理?
- Spring 循環注入的原理?
- Spring 中用到了那些設計模式?
- Spring AOP的理解,各個術語,他們是怎麼相互工作的?
- Spring框架中的單例bean是線程安全的嗎?
- Spring @ Resource和Autowired有什麼區別?
- Spring 的不同事務傳播行爲有哪些,有什麼作用?
- Spring Bean 的加載過程是怎樣的?
- 請舉例說明@Qualifier註解
- Spring 是如何管理事務的,事務管理機制?
- 使用Spring框架的好處是什麼?
- Spring由哪些模塊組成?
- ApplicationContext通常的實現是什麼?
- 什麼是Spring的依賴注入?
- 你怎樣定義類的作用域?
- Spring框架中的單例bean是線程安全的嗎?
- 你可以在Spring中注入一個null 和一個空字符串嗎?
- 你能說下 Spring Boot 與 Spring 的區別嗎
- SpringBoot 的自動配置是怎麼做的?
- @RequestMapping 的作用是什麼?
- spring boot 有哪些方式可以實現熱部署?
- 說說Ioc容器的加載過程
- 爲什麼 Spring 中的 bean 默認爲單例?
- 說說Spring中的@Configuration
- FileSystemResource 和ClassPathResource 有何區別?
- 什麼是 Swagger?你用 Spring Boot 實現了它嗎?
- spring的controller是單例還是多例,怎麼保證併發的安全。
- 說一下Spring的核心模塊
- 如何向 Spring Bean 中注入一個 Java.util.Properties
- 如何給Spring 容器提供配置元數據?
- 如何在Spring中如何注入一個java集合,實現過嗎?
- 什麼是基於Java的Spring註解配置? 舉幾個例子?
- 怎樣開啓註解裝配?
- Spring支持哪些事務管理類型
- 在Spring AOP 中,關注點和橫切關注的區別是什麼?
- spring 中有多少種IOC 容器?
- 描述一下 DispatcherServlet 的工作流程
- 介紹一下 WebApplicationContext吧
- Spring Boot 的配置文件有哪幾種格式?它們有什麼區別?
- Spring Boot 需要獨立的容器運行嗎?
- Spring Boot 自動配置原理是什麼?
- RequestMapping 和 GetMapping 的不同之處在哪裏?
- 如何使用Spring Boot實現異常處理?
- Spring Boot 中如何解決跨域問題 ?
- Spring Boot 如何實現熱部署 ?
- Spring Boot打成的 jar 和普通的jar有什麼區別呢?
- bootstrap.properties 和 application.properties 有何區別 ?
- springboot啓動機制
Netty/tomcat
- BIO、NIO和AIO區別
- 說一下Netty 的各大組件
- Netty 線程模型和 Reactor 模式
- 什麼是 Netty 的零拷貝?
- NIO 的底層實現。
- netty的心跳處理在弱網下怎麼辦
- Netty 高性能表現在哪些方面?
- Netty 和 Tomcat 有什麼區別?
- Netty 發送消息有幾種方式?
- 默認情況 Netty 起多少線程?何時啓動?
- Netty 支持哪些心跳類型設置?
- Java 中怎麼創建 ByteBuffer
- Java 中的內存映射緩存區是什麼?
- 簡單講講tomcat結構,以及其類加載器流程,線程模型等
- tomcat如何調優,涉及哪些參數
- IO多路複用機制
- Netty 的應用場景有哪些?
- 有幾種I/O 網絡模型?
- 說說Netty的執行流程?
- select、poll、epoll的機制及其區別?
常用Linux 命令
- 修改目錄,文件權限的命令
- 如何獲取一個本地服務器上可用的端口。
- 說說常見的linux命令,linux查看內存的命令是什麼?
- 查看系統磁盤空間剩餘情況的命令
- 如何獲取java進程的pid
- 如何獲取某個進程的網絡端口號;
- 如何實時打印日誌
- 如何統計某個字符串行數;
- 用一行命令查看文件的最後五行。
- 用一行命令輸出正在運行的java進程。
- 絕對路徑,當前目錄、上層目錄,切換目錄分別用什麼命令?
- 怎麼清屏?怎麼退出當前命令?
- 目錄創建,創建文件,複製文件分別用什麼命令?
- 查看文件內容有哪些命令可以使用?tail?cat?less?more?
- 怎麼使一個命令在後臺運行?
- 終止進程用什麼命令? 帶什麼參數? kill-9 pid有什麼風險?
- 搜索文件用什麼命令? 格式是怎麼樣的?
- 使用什麼命令查看網絡是否連通?
- 使用什麼命令查看 ip 地址及接口信息?
- awk 詳解
ZooKeeper
- Zookeeper的用途,選舉的原理是什麼。
- Zookeeper watch機制原理。
- zookeeper 怎麼保證主從節點的狀態同步?
- 集羣中有3臺服務器,其中一個節點宕機,這個時候 zookeeper 還可以使用嗎?
- zookeeper都有哪些功能?
- 什麼是paxos算法,什麼是zab協議。
- zookeeper 是如何保證事務的順序一致性的?
- zookeeper 負載均衡和 nginx 負載均衡區別
- Zookeeper 的典型應用場景
- 說說四種類型的數據節點Znode
- Zookeeper 的服務器角色(Leader,Follower,Observer)
- Zookeeper 有哪幾種幾種部署模式?
Elasticsearch
- 詳細描述一下Elasticsearch索引文檔的過程。
- 詳細描述一下Elasticsearch搜索的過程。
- Elasticsearch 的倒排索引是什麼。
- Elasticsearch是如何實現master選舉的。
- lucence內部結構是什麼。
- Lucene全文搜索的原理
- 在併發情況下,Elasticsearch 如何保證讀寫一致呢?
- 詳細闡述一下 Elasticsearch 搜索的過程。
- Elasticsearch 索引數據多了怎麼辦呢,如何調優,部署
- Elasticsearch 對於大數據量(上億量級)的聚合如何實現?
dubbo框架
- Dubbo的服務請求失敗怎麼處理
- dubbo的負載均衡有幾種算法?(隨機,輪詢,最少活躍請求數,一致性hash)
- Dubbo 和 Spring Cloud 有什麼區別?
- dubbo都支持什麼協議,推薦用哪種?
- 畫一畫服務註冊與發現的流程圖
- Dubbo默認使用什麼註冊中心,還有別的選擇嗎?
- 在 Provider 上可以配置的 Consumer 端的屬性有哪些?
- Dubbo啓動時如果依賴的服務不可用會怎樣?
- Dubbo推薦使用什麼序列化框架,你知道的還有哪些?
- Dubbo默認使用的是什麼通信框架,還有別的選擇嗎?
- 服務上線怎麼兼容舊版本?
- Dubbo服務之間的調用是阻塞的嗎?
- Dubbo telnet 命令能做什麼?
- Dubbo如何一條鏈接併發多個調用。
- Dubbo 的使用場景有哪些?
- Dubbo 核心功能有哪些?
- Dubbo 核心組件有哪些?
- Dubbo 服務器註冊於發現的流程?
- Dubbo 支持哪些協議,它們的優缺點有哪些?
- Dubbo 的註冊中心集羣掛掉,發佈者和訂閱者之間還能通信麼?
- Dubbo源碼使用了哪些設計模式
- Dubbo集羣提供了哪些負載均衡策略?
- Dubbo的集羣容錯方案有哪些?
- Dubbo 支持哪些序列化方式?
- Dubbo超時重試,Dubbo超時時間設置
spring cloud
- Eureka和Zookeeper區別
- 什麼是服務熔斷?什麼是服務降級?
- 什麼是Ribbon?
- 什麼是 Netflix Feign?它的優點是什麼?
- Ribbon和Feign的區別?
- 什麼是Spring Cloud Bus?
- Spring Cloud Gateway?
- 什麼是SpringCloudConfig?
- 什麼是 Hystrix?它如何實現容錯?
- 什麼是微服務?微服務優缺點
- Sentinel,微服務哨兵,瞭解過嗎
nginx
- Nginx的模塊與工作原理是什麼?
- Nginx 是什麼?有什麼作用?
- 說說Nginx的一些特性。
- 請說一下Nginx如何處理HTTP請求。
- 你知道,Nginx服務器上的Master和Worker進程分別是什麼嗎?
- nginx常用命令,啓動,重啓,檢查配置文件等
- Nginx 和 Apache 比較,各有什麼優缺點?
- Nginx 多進程模型是如何實現高併發的?
- 說說Nginx的反向代理和負載均衡
- 請列舉Nginx服務器的最佳用途。
算法
- 談一談一致性哈希算法。
- 快排怎麼實現
- 手寫二分查找
- 如何判斷一個單鏈表是否有環
- 平衡二叉樹的時間複雜度;
- 反轉單鏈表
- 合併多個單有序鏈表
- LRU 淘汰算法,用java自己實現一個LRU。
- 跳錶和平衡樹區別
- 你瞭解大O符號(big-O notation)麼?你能給出不同數據結構的例子麼?
- 如何手擼一個隊列?
- 10億個數字裏裏面找最小的10個。
- 平衡二叉樹的時間複雜度;
- 有1億個數字,其中有2個是重複的,快速找到它,時間和空間要最優。
- 八大基本排序的時間,空間複雜度
- 堆排序的原理
- 樹的幾種遍歷方式
- 遞歸算法
- 一個亂序數組,求第K大的數。排序方式使用字典序。
- 一棵二叉樹,求最大通路長度。
- 萬億級別的兩個URL文件A和B,如何求出A和B的差集C,(Bit映射->hash分組->多文件讀寫效率->磁盤尋址以及應用層面對尋址的優化)
- 最快的排序算法是哪個?給阿里2萬多名員工按年齡排序應該選擇哪個算法?堆和樹的區別;寫出快排代碼;鏈表逆序代碼
- LeetCode的經典算法題目,都要刷一遍以上哈~
分佈式
- 說說分佈式事務?分佈式事務的解決方案
- 什麼是分佈式系統?
- 講講CAP理念。
- 怎麼理解強一致性、單調一致性和最終一致性?
- 如何實現分佈式鎖?
- 如何實現分佈式 Session?
- 負載均衡的理解?
- 分佈式集羣下如何做到唯一序列號?
- 分佈式事務
- 什麼是一致性hash。
系統設計/方案設計
- 談談如何設計秒殺系統。
- 一千萬的用戶實時排名如何實現;
- 五萬人併發搶票怎麼實現
- 手機掃二維碼登錄是怎麼實現的?
- Google是如何在一秒內把搜索結果返回給用戶的。
- 12306網站的訂票系統如何實現,如何保證不會票不被超賣。
- 如果有幾十億的白名單,每天白天需要高併發查詢,晚上需要更新一次,如何設計這個功能。
- 接口的冪等性如何設計
- 如何設計存儲海量數據的存儲系統
- 分佈式session如何管理,你有哪些方案
- 講一下如何給高併發系統做限流?
- 使用SpringBoot如何開發郵件發送系統?
- 你如何設計一個能抗住大流量的系統,說說設計方案
- 如何設計一個高併發的系統?
- 數據量大的情況下分頁查詢很慢,有什麼優化方案?
- 設計一個秒殺系統,30分鐘沒付款就自動關閉交易。
- 如何使用redis和zookeeper實現分佈式鎖?有什麼區別優缺點,會有什麼問題,分別適用什麼
- 如何設計一個安全的API接口。
- 線上系統突然變得異常緩慢,你如何查找問題。
- 設計一個社交網站中的“私信”功能,要求高併發、可擴展等等。 畫一下架構圖。
- 後臺系統怎麼防止請求重複提交
- 講講你理解的服務治理。
- 執行某操作,前50次成功,第51次失敗a全部回滾b前50次提交第51次拋異常,ab場景分別如何設置
- 一個大的含有50M個URL的記錄,一個小的含有500個URL的記錄,找出兩個記錄裏相同的URL
- 海量日誌數據,提取出某日訪問百度次數最多的那個IP
- 1000個線程同時運行,怎麼防止不卡
- 設計一個分佈式自增id生成服務
個人公衆號
- 歡迎關注我個人公衆號,交個朋友,一起學習哈~