大廠永遠是程式員夢想的地方,俗話說的話“不想當將軍的士兵不是好士兵”,不想進大廠的程式員是沒有夢想的
無論是現在還是以前進大廠的門檻始終很高,最重要的還是面試環節,大廠的面試題是很難的,這里我準備了一份阿里、騰訊、京東、華為合集大廠300+道面試題分享給大家,文中有對應的面試答案免費提供!!
大廠面試資料整理不易、對這份面試答案感興趣的工程師朋友們勞煩幫忙點贊一下

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啟動機制,

作業系統
- 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內部結構是什么,
阿里、騰訊、京東、華為面試答案合集(面試復習寶典)
1、阿里內部手冊、Java核心知識點

2,大廠面試答案


大廠面試資料整理不易、對這份面試答案感興趣的工程師朋友們勞煩幫忙點贊一下哦

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/204629.html
標籤:其他
