![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CO0AjMwQGOyQWMwMTYxEDO4ATMiRGZ3QmM1IWMmJzM08CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
話不多說,直接上題
JAVA基礎
- JAVA中的幾種基本資料類型是什麼,各自占用多少位元組。
- String類能被繼承嗎,為什麼。
- String,Stringbuffer,StringBuilder的差別。
- ArrayList和LinkedList有什麼差別。
- 講講類的執行個體化順序,比如父類靜态資料,構造函數,字段,子類靜态資料,構造函數,字段,當new的時候,他們的執行順序。
- 用過哪些Map類,都有什麼差別,HashMap是線程安全的嗎,并發下使用的Map是什麼,他們内部原理分别是什麼,比如存儲方式,hashcode,擴容,預設容量等。
- JAVA8的ConcurrentHashMap為什麼放棄了分段鎖,有什麼問題嗎,如果你來設計,你如何設計。
- 有沒有有順序的Map實作類,如果有,他們是怎麼保證有序的。
- 抽象類和接口的差別,類可以繼承多個類麼,接口可以繼承多個接口麼,類可以實作多個接口麼。
- 繼承和聚合的差別在哪。
- IO模型有哪些,講講你了解的nio ,他和bio,aio的差別是啥,談談reactor模型。
- 反射的原理,反射建立類執行個體的三種方式是什麼。
- 反射中,Class.forName和ClassLoader差別 。
- 描述動态代理的幾種實作方式,分别說出相應的優缺點。
- 動态代理與cglib實作的差別。
- 為什麼CGlib方式可以對接口實作代理。
- final的用途。
- 寫出三種單例模式實作 。
- 如何在父類中為子類自動完成所有的hashcode和equals實作?這麼做有何優劣。
- 請結合OO設計理念,談談通路修飾符public、private、protected、default在應用設計中的作用。
- 深拷貝和淺拷貝差別。
- 數組和連結清單資料結構描述,各自的時間複雜度。
- error和exception的差別,CheckedException,RuntimeException的差別。
- 請列出5個運作時異常。
- 在自己的代碼中,如果建立一個java.lang.String類,這個類是否可以被類加載器加載?為什麼。
- 說一說你對java.lang.Object對象中hashCode和equals方法的了解。在什麼場景下需
- 要重新實作這兩個方法。
- 在jdk1.5中,引入了泛型,泛型的存在是用來解決什麼問題。
- 這樣的a.hashcode() 有什麼用,與a.equals(b)有什麼關系。
- 有沒有可能2個不相等的對象有相同的hashcode。
- Java中的HashSet内部是如何工作的。
- 什麼是序列化,怎麼序列化,為什麼序列化,反序列化會遇到什麼問題,如何解決。
- java8的新特性。
JVM知識
- 什麼情況下會發生棧記憶體溢出。
- JVM的記憶體結構,Eden和Survivor比例。
- JVM記憶體為什麼要分成新生代,老年代,持久代。新生代中為什麼要分為Eden和Survivor。
- JVM中一次完整的GC流程是怎樣的,對象如何晉升到老年代,說說你知道的幾種主要的JVM參
- 數。
- 你知道哪幾種垃圾收集器,各自的優缺點,重點講下cms和G1,包括原理,流程,優缺點。
- 垃圾回收算法的實作原理。
- 當出現了記憶體溢出,你怎麼排錯。
- JVM記憶體模型的相關知識了解多少,比如重排序,記憶體屏障,happen-before,主記憶體,工作
- 記憶體等。
- 簡單說說你了解的類加載器,可以打破雙親委派麼,怎麼打破。
- 講講JAVA的反射機制。
- 你們線上應用的JVM參數有哪些。
- g1和cms差別,吞吐量優先和響應優先的垃圾收集器選擇。
- 怎麼打出線程棧資訊。
- 請解釋如下jvm參數的含義:
- -server -Xms512m -Xmx512m -Xss1024K
- -XX:PermSize=256m -XX:MaxPermSize=512m -
- XX:MaxTenuringThreshold=20XX:CMSInitiatingOccupancyFraction=80 -
- XX:+UseCMSInitiatingOccupancyOnly。
開源架構知識
- 簡單講講tomcat結構,以及其類加載器流程,線程模型等。
- tomcat如何調優,涉及哪些參數 。
- 講講Spring加載流程。
- Spring AOP的實作原理。
- 講講Spring事務的傳播屬性。
- Spring如何管理事務的。
- Spring怎麼配置事務(具體說出一些關鍵的xml 元素)。
- 說說你對Spring的了解,非單例注入的原理?它的生命周期?循環注入的原理,aop的實作原
- 理,說說aop中的幾個術語,它們是怎麼互相工作的。
- Springmvc 中DispatcherServlet初始化過程。
- netty的線程模型,netty如何基于reactor模型上實作的。
- 為什麼選擇netty。
- 什麼是TCP粘包,拆包。解決方式是什麼。
- netty的fashwheeltimer的用法,實作原理,是否出現過調用不夠準時,怎麼解決。
- netty的心跳處理在弱網下怎麼辦。
- netty的通訊協定是什麼樣的。
- springmvc用到的注解,作用是什麼,原理。
- springboot啟動機制。
- 點選這裡有一套答案版的Spring試題。
作業系統
- Linux系統下你關注過哪些核心參數,說說你知道的。
- Linux下IO模型有幾種,各自的含義是什麼。
- epoll和poll有什麼差別。
- 平時用到哪些Linux指令。
- 用一行指令檢視檔案的最後五行。
- 用一行指令輸出正在運作的java程序。
- 介紹下你了解的作業系統中線程切換過程。
- 程序和線程的差別。
- top 指令之後有哪些内容,有什麼作用。
- 線上CPU爆高,請問你如何找到問題所在。
多線程
- 多線程的幾種實作方式,什麼是線程安全。
- volatile的原理,作用,能代替鎖麼。
- 畫一個線程的生命周期狀态圖。
- sleep和wait的差別。
- sleep和sleep(0)的差別。
- Lock與Synchronized的差別 。
- synchronized的原理是什麼,一般用在什麼地方(比如加在靜态方法和非靜态方法的差別,靜
- 态方法和非靜态方法同時執行的時候會有影響嗎),解釋以下名詞:重排序,自旋鎖,偏向鎖,輕
- 量級鎖,可重入鎖,公平鎖,非公平鎖,樂觀鎖,悲觀鎖。
- 用過哪些原子類,他們的原理是什麼。
- JUC下研究過哪些并發工具,講講原理。
- 用過線程池嗎,如果用過,請說明原理,并說說newCache和newFixed有什麼差別,構造函
- 數的各個參數的含義是什麼,比如coreSize,maxsize等。
- 線程池的關閉方式有幾種,各自的差別是什麼。
- 假如有一個第三方接口,有很多個線程去調用擷取資料,現在規定每秒鐘最多有10個線程同
- 時調用它,如何做到。
- spring的controller是單例還是多例,怎麼保證并發的安全。
- 用三個線程按順序循環列印abc三個字母,比如abcabcabc。
- ThreadLocal用過麼,用途是什麼,原理是什麼,用的時候要注意什麼。
- 如果讓你實作一個并發安全的連結清單,你會怎麼做。
- 有哪些無鎖資料結構,他們實作的原理是什麼。
- 講講java同步機制的wait和notify。
- CAS機制是什麼,如何解決ABA問題。
- 多線程如果線程挂住了怎麼辦。
- countdowlatch和cyclicbarrier的内部原理和用法,以及互相之間的差别(比如
- countdownlatch的await方法和是怎麼實作的)。
- 對AbstractQueuedSynchronizer了解多少,講講加鎖和解鎖的流程,獨占鎖和公平所
- 加鎖有什麼不同。
- 使用synchronized修飾靜态方法和非靜态方法有什麼差別。
- 簡述ConcurrentLinkedQueue和LinkedBlockingQueue的用處和不同之處。
- 導緻線程死鎖的原因?怎麼解除線程死鎖。
- 非常多個線程(可能是不同機器),互相之間需要等待協調,才能完成某種工作,問怎麼設計這種協調方案。
- 用過讀寫鎖嗎,原理是什麼,一般在什麼場景下用。
- 開啟多個線程,如果保證順序執行,有哪幾種實作方式,或者如何保證多個線程都執行完
- 再拿到結果。
- 延遲隊列的實作方式,delayQueue和時間輪算法的異同。
- 點選這裡有一套答案版的多線程試題。
TCP與HTTP
- http1.0和http1.1有什麼差別。
- TCP三向交握和四次揮手的流程,為什麼斷開連接配接要4次,如果握手隻有兩次,會出現什麼。
- TIME_WAIT和CLOSE_WAIT的差別。
- 說說你知道的幾種HTTP響應碼,比如200, 302, 404。
- 當你用浏覽器打開一個連結(如:http://www.javastack.cn)的時候,計算機做了哪些工作步驟。
- TCP/IP如何保證可靠性,說說TCP頭的結構。
- 如何避免浏覽器緩存。
- 如何了解HTTP協定的無狀态性。
- 簡述Http請求get和post的差別以及資料包格式。
- HTTP有哪些method
- 簡述HTTP請求的封包格式。
- HTTP的長連接配接是什麼意思。
- HTTPS的加密方式是什麼,講講整個加密解密流程。
- Http和https的三次握手有什麼差別。
- 什麼是分塊傳送。
- Session和cookie的差別。
- 點選這裡有一套答案版的試題。
架構設計與分布式
- 用java自己實作一個LRU。
- 分布式叢集下如何做到唯一序列号。
- 設計一個秒殺系統,30分鐘沒付款就自動關閉交易。
- 如何使用redis和zookeeper實作分布式鎖?有什麼差別優缺點,會有什麼問題,分别适用什麼
- 場景。(延伸:如果知道redlock,講講他的算法實作,争議在哪裡)
- 如果有人惡意建立非法連接配接,怎麼解決。
- 分布式事務的原理,優缺點,如何使用分布式事務,2pc 3pc 的差別,解決了哪些問題,還有
- 哪些問題沒解決,如何解決,你自己項目裡涉及到分布式事務是怎麼處理的。
- 什麼是一緻性hash。
- 什麼是restful,講講你了解的restful。
- 如何設計一個良好的API。
- 如何設計建立和保持100w的長連接配接。
- 解釋什麼是MESI協定(緩存一緻性)。
- 說說你知道的幾種HASH算法,簡單的也可以。
- 什麼是paxos算法, 什麼是zab協定。
- 一個線上文檔系統,文檔可以被編輯,如何防止多人同時對同
- 一份文檔進行編輯更新。
- 線上系統突然變得異常緩慢,你如何查找問題。
- 說說你平時用到的設計模式。
- Dubbo的原理,有看過源碼麼,資料怎麼流轉的,怎麼實作叢集,負載均衡,服務注冊
- 和發現,重試轉發,快速失敗的政策是怎樣的 。
- 一次RPC請求的流程是什麼。
- 自己實作過rpc麼,原理可以簡單講講。Rpc要解決什麼問題。
- 異步模式的用途和意義。
- 程式設計中自己都怎麼考慮一些設計原則的,比如開閉原則,以及在工作中的應用。
- 設計一個社交網站中的“私信”功能,要求高并發、可擴充等等。 畫一下架構圖。
- MVC模式,即常見的MVC架構。
- 聊下曾經參與設計的伺服器架構并畫圖,談談遇到的問題,怎麼解決的。
- 應用伺服器怎麼監控性能,各種方式的差別。
- 如何設計一套高并發支付方案,架構如何設計。
- 如何實作負載均衡,有哪些算法可以實作。
- Zookeeper的用途,選舉的原理是什麼。
- Zookeeper watch機制原理。
- Mybatis的底層實作原理。
- 請思考一個方案,實作分布式環境下的countDownLatch。
- 背景系統怎麼防止請求重複送出。
- 描述一個服務從釋出到被消費的詳細過程。
- 講講你了解的服務治理。
- 如何做到接口的幂等性。
- 如何做限流政策,令牌桶和漏鬥算法的使用場景。
- 什麼叫資料一緻性,你怎麼了解資料一緻性。
- 分布式服務調用方,不依賴服務提供方的話,怎麼處理服務方挂掉後,大量無效資源請求
- 的浪費,如果隻是服務提供方吞吐不高的時候該怎麼做,如果服務挂了,那麼一會重新開機,該怎
- 麼做到最小的資源浪費,流量半開的實作機制是什麼。
- dubbo的泛化調用怎麼實作的,如果是你,你會怎麼做。
- 遠端調用會有逾時現象,如果做到優雅的控制,JDK自帶的逾時機制有哪些,怎麼實作的。
算法
- 10億個數字裡裡面找最小的10個。
- 有1億個數字,其中有2個是重複的,快速找到它,時間和空間要最優。
- 2億個随機生成的無序整數,找出中間大小的值。
- 給一個不知道長度的(可能很大)輸入字元串,設計一種方案,将重複的字元排重。
- 周遊二叉樹。
- 有3n+1個數字,其中3n個中是重複的,隻有1個是不重複的,怎麼找出來。
- 寫一個字元串(如:www.javastack.cn)反轉函數。
- 常用的排序算法,快排,歸并、冒泡。 快排的最優時間複雜度,最差複雜度。冒泡排序的
- 優化方案。
- 二分查找的時間複雜度,優勢。
- 一個已經建構好的TreeSet,怎麼完成倒排序。
- 什麼是B+樹,B-樹,列出實際的使用場景。
- 一個單向連結清單,删除倒數第N個資料。
- 200個有序的數組,每個數組裡面100個元素,找出top20的元素。
- 單向連結清單,查找中間的那個元素。
資料庫知識
- 資料庫隔離級别有哪些,各自的含義是什麼,MYSQL預設的隔離級别是是什麼。
- 什麼是幻讀。
- MYSQL有哪些存儲引擎,各自優缺點。
- 高并發下,如何做到安全的修改同一行資料。
- 樂觀鎖和悲觀鎖是什麼,INNODB的标準行級鎖有哪2種,解釋其含義。
- SQL優化的一般步驟是什麼,怎麼看執行計劃,如何了解其中各個字段的含義。
- 資料庫會死鎖嗎,舉一個死鎖的例子,mysql怎麼解決死鎖。
- MYsql的索引原理,索引的類型有哪些,如何建立合理的索引,索引如何優化。
- 聚集索引和非聚集索引的差別。
- select for update 是什麼含義,會鎖表還是鎖行或是其他。
- 為什麼要用Btree實作,它是怎麼分裂的,什麼時候分裂,為什麼是平衡的。
- 資料庫的ACID是什麼。
- 某個表有近千萬資料,CRUD比較慢,如何優化。
- Mysql怎麼優化table scan的。
- 如何寫sql能夠有效的使用到複合索引。
- mysql中in 和exists 差別。
- 資料庫自增主鍵可能的問題。
- MVCC的含義,如何實作的。
- 你做過的項目裡遇到分庫分表了嗎,怎麼做的,有用到中間件麼,比如sharding jdbc等,他
- 們的原理知道麼。
- MYSQL的主從延遲怎麼解決。
消息隊列
- 消息隊列的使用場景。
- 消息的重發,補充政策。
- 如何保證消息的有序性。
- 用過哪些MQ,和其他mq比較有什麼優缺點,MQ的連接配接是線程安全的嗎,你們公司的MQ服務
- 架構怎樣的。
- MQ系統的資料如何保證不丢失。
- rabbitmq如何實作叢集高可用。
- kafka吞吐量高的原因。
- kafka 和其他消息隊列的差別,kafka 主從同步怎麼實作。
- 利用mq怎麼實作最終一緻性。
- 使用kafka有沒有遇到什麼問題,怎麼解決的。
- MQ有可能發生重複消費,如何避免,如何做到幂等。
- MQ的消息延遲了怎麼處理,消息可以設定過期時間麼,過期了你們一般怎麼處理。
緩存
- 常見的緩存政策有哪些,如何做到緩存(比如redis)與DB裡的資料一緻性,你們項目中用到了
- 什麼緩存系統,如何設計的。
- 如何防止緩存擊穿和雪崩。
- 緩存資料過期後的更新如何設計。
- redis的list結構相關的操作。
- Redis的資料結構都有哪些。
- Redis的使用要注意什麼,講講持久化方式,記憶體設定,叢集的應用和優劣勢,淘汰政策等。
- redis2和redis3的差別,redis3内部通訊機制。
- 目前redis叢集有哪些玩法,各自優缺點,場景。
- Memcache的原理,哪些資料适合放在緩存中。
- redis和memcached 的記憶體管理的差別。
- Redis的并發競争問題如何解決,了解Redis事務的CAS操作嗎。
- Redis的選舉算法和流程是怎樣的。
- redis的持久化的機制,aof和rdb的差別。
- redis的叢集怎麼同步的資料的。
- 知道哪些redis的優化操作。
- Reids的主從複制機制原理。
- Redis的線程模型是什麼。
- 請思考一個方案,設計一個可以控制緩存總體大小的自動适應的本地緩存。
- 如何看待緩存的使用(本地緩存,集中式緩存),簡述本地緩存和集中式緩存和優缺點。
- 本地緩存在并發使用時的注意事項。
搜尋
- elasticsearch了解多少,說說你們公司es的叢集架構,索引資料大小,分片有多少,以及一些
- 調優手段 。elasticsearch的反向索引是什麼。
- elasticsearch 索引資料多了怎麼辦,如何調優,部署。
- elasticsearch是如何實作master選舉的。
- 較長的描述一下Elasticsearch索引文檔的過程。
- 較長的描述一下Elasticsearch搜尋的過程。
- Elasticsearch在部署時,對Linux的設定有哪些優化方法?
- lucence内部結構是什麼。
以上是總結出的最全Java面試題目,以下是最新總結出的BAT面試java必考題目和答案。
面試答案
針對于上面的面試題我總結出了java程式員面試涉及到的絕大部分面試題及答案做成了文檔和架構視訊資料免費分享給大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并發等架構技術資料),希望能幫助到您面試前的複習且找到一個好的工作,也節省大家在網上搜尋資料的時間來學習。
資料領取方式:轉發+評論,關注我私信回複【面試資料】即可免費擷取!
面試答案
面試答案
208頁核心面試寶典
轉發+評論,關注我私信回複【面試資料】即可免費擷取!