15 道超經典大廠 Java 面試題!重中之重

從超高頻的後端面試題出發,指明學習方向html

你們好,我是魚皮。前端

還記得個人老弟小阿巴麼?他目前正值大一暑假,在家自學編程(刷短視頻)中。git

他整個大一期間基本都在學習前端。後來,我帶他寫了一次後端,結果就崩了,寫了一堆 bug!程序員

詳情請閱讀:前端老弟第一次寫後端,崩了!github

但沒想到,這貨踩了坑後,反而愛上了後端開發。這一到週末就纏着我,讓我給他講講後端開發應該學習哪些知識。面試

雖然很想給他總結一份後端學習路線,但我也很忙,因而就思考有沒有什麼更快捷的方式讓他了解到後端要學的技術。redis

我想一想:他學編程是爲了找好工做,想找到好工做就要先經過面試。。。算法

有了!正好我朋友在大廠 「阿巴阿巴」 作 Java 後端面試官,我直接把小阿巴送過去參與面試,不就能讓他知道本身要學的技術了麼?sql

OK,起飛!數據庫

起飛

一天後,小阿巴回來了,一臉苦樣,說本身一道題都沒答出來。

我問了下考點,大笑道:你運氣太好了,這不全是後端面試中的 超高頻 經典題目麼?全中!

好了,下面就經過此次的大廠面試題,分享下後端程序員要學的知識以及原因。

從面試題看後端必學知識

大綱:

後端必學 - 思惟導圖

編程語言

對於開發崗位的程序員,不管是前端仍是後端,最低要求都是 熟練使用 至少一門編程語言。像前端的核心語言是 JavaScript,後端有 Java、C++、Golang、Python 等。

目前 Java 後端崗位的需求量比較大,因此這裏以 Java 爲例。

基礎

面試題

Java 中 == 和 equals 的區別?

題解

blog.csdn.net/qq_38162448…

分析

熟練並不僅是能寫出代碼就夠了,不少編程語法層面的 小細節 也必須關注!在工做中,不少 bug 的產生正是由於對細節知識的欠缺,所以這些細節也是面試官最愛考察的點。

好比 Java 中的 == 和 equals 都是判斷變量是否相等,但有啥區別呢?若是使用不當,頗有可能會把相同值的變量判斷爲不相等,致使業務邏輯錯誤。還有 final 關鍵字、volatile 關鍵字等,都是經常使用的 Java 語法,也是高頻考點。

因此,鞏固語法基礎很重要,推薦《Java 核心技術卷 I》。

類庫

面試題

Java 中的集合及其繼承關係?

題解

www.bilibili.com/video/BV1zD…

分析

每種編程語言都有內置的類庫和函數,雖然可能不是最方便的,但一般源碼實現都比較合理、性能也不錯。想熟練使用一門編程語言,提升開發效率,或者編寫本身的封裝庫,就必定要先掌握語言原生的類庫。

好比 Java 中提供了集合類,讓咱們很輕鬆地操做各類數據結構,好比數組、鏈表、Set、Hash 等,這些都是工做中經常使用的類,所以有必要了解它們的原理,才能更合理、正確地去使用。像 HashMap 的實現原理、HashMap 和 HashTable 的區別、ArrayList 和 LinkedList 的區別,也是高頻考點。

Java 集合框架關係

框架

面試題

什麼是 Spring 的依賴注入?

題解

zhuanlan.zhihu.com/p/25459839

分析

除了作基礎架構以外,在企業中開發基本都是用現成的框架,不用什麼都本身寫,可以大大提高開發效率。但會用框架只是最基本的要求,怎麼能最大化框架的性能、下降出 bug 的機率、進一步下降開發成本、甚至如何本身設計實現一個框架,纔是優秀的程序員應該思考的。所以,經常使用框架的設計原理是高頻考點,好比 Java 中 Spring 框架的核心設計 IOC 和 AOP、使用多級緩存解決循環依賴等。

底層

面試題

JVM 的內存結構是怎樣的?

題解

www.bilibili.com/video/BV1iJ…

分析

大廠面試中,少不了編程語言的底層實現。

雖然工做中不多會直接用到這方面的知識,但書到用時方恨少,大廠對求職者的需求一般不是你如今能作什麼,而是你將來是否可以應對潛在的挑戰。萬一到時候線上程序出一個緊急且嚴重的 bug,須要分析垃圾收集器的日誌,讓你現學,還來得及麼?這就要求咱們瞭解底層,對 Java 來說,關鍵就是 Java 虛擬機(JVM)。

此外,瞭解底層可以加深你對編程語言的理解和對架構的認知,不少底層的設計原理是能夠應用到工做寫程序中的,像如何分配管理內存、垃圾收集器的設計、回收算法等。

簡單來講就是:把工具玩兒明白,讓造工具成爲可能。

推薦書籍:《深刻理解Java虛擬機》第3版

《深刻理解 Java 虛擬機》第3版

計算機基礎

不管你學習什麼編程語言,這些知識都是程序員重要的基本功。雖然未必在工做中直接用到,但打好基礎,可以全方面提高你的編程能力和素養,在面對問題時纔會有更多的想法和思考。

面試官經過這些問題,能看出你的學習是否紮實,是否可靠。

數據結構

面試題

如何用棧實現隊列?

題解

leetcode-cn.com/problems/im…

分析

數據結構是獨立於編程語言的重要思想,像鏈表、數組、棧、隊列、集合、字符串、哈希表、樹等等,都是寫程序經常使用的數據結構,所以也是面試高頻考點。

工做中,雖然不會讓你本身實現一個數據結構,但至少要了解每一個數據結構的特色、使用場景、時間和空間複雜度,不然寫出來的代碼可能會 「又重又慢」,稍有不慎,內存溢出!

棧

算法

面試題

假設你正在爬樓梯。須要 n 階才能到達樓頂。每次你能夠爬 1 或 2 個臺階,有多少種不一樣的方法能夠爬到樓頂呢?

題解

leetcode-cn.com/problems/cl…

分析

和數據結構相似,算法也是程序員的核心素養。像排序、動態規劃、遞歸、迭代、二分、分治、深搜廣搜等基礎算法,都是面試的重點。

計算機網絡

面試題

TCP 三次握手、四次揮手經歷了哪些過程?

題解

blog.csdn.net/ThinkWon/ar…

分析

對後端開發而言,大部分的工做就是寫接口,接受前端或其餘客戶端發送的網絡請求,給出對應的數據響應。所以,網絡知識至關重要。

好比工做中經常使用的網絡協議、HTTP 請求與響應、會話、四七層負載均衡等,都是常見考點。由於不少的協議都是在 TCP、UDP 的基礎上進行封裝,因此 TCP 和 UDP 也是高頻考點。瞭解這些有助於寫出更優雅規範的接口、減小網絡請求的耗時、或者提升整個接口的併發度等。

TCP 三次握手

操做系統

面試題

什麼是死鎖?

題解

zhuanlan.zhihu.com/p/26945588

分析

操做系統雖然是很底層的知識,但畢竟咱們編寫的程序都是跑在操做系統上的,所以操做系統的一些概念無時無刻不在被開發者使用,好比進程和線程、死鎖、文件、套接字、CPU、內存管理、輸入輸出等。你思考問題的深度、程序性能優化的極限,很大程度上取決於對操做系統的瞭解。

軟件開發

Mysql

面試題

MySQL 如何性能優化?

題解

www.zhihu.com/question/19…

分析

大部分作後端開發的程序員離不開數據庫,並且工做中基本就是寫 CRUD,從數據庫中增刪改查數據。

對於在學校裏作的小項目,基本瞭解數據庫的使用,會寫幾條簡單的 SQL 語句就夠了。可是在大廠業務(尤爲是 ToC)中,數據量動輒百萬千萬、甚至數億,這就對數據庫設計和性能優化提出了要求。

所以,大廠後端面試中,超高頻的面試題就是:MySQL 如何性能優化?對於這類問題,只靠背誦很容易被面試官揭穿,比較推薦本身去作個項目,設計個庫表實戰,看看不一樣的優化方式是否有效、能獲得多大的效果。

還有很常見的面試題就是:給你一個場景,讓你去設計數據庫表結構。大部分題目都要求你臨場發揮,因此在平時多作項目、多去參考其餘系統的設計真的很重要。

此外,還要了解數據庫中的常見概念,好比事務、鎖、索引等;還有一些基本操做,好比存儲過程、備份、定位慢查詢。不然可能寫出的代碼會有 bug、一不當心插入的數據就不一致了、一不當心就把整個表給鎖住了、刪庫跑路也無能爲力等。

Redis

面試題

Redis 有哪些數據類型?

題解

www.runoob.com/redis/redis…

分析

Redis 是一款高性能的 Key-Value 數據庫,它在後端開發中的做用很是大。

好比爲了提升接口性能、減輕數據庫壓力,用 Redis 作緩存;爲了解決併發衝突,使用 Redis 作分佈式鎖;爲了實現單點登陸、提升用戶效率,使用 Redis 存儲會話或令牌;Redis 還能夠用於作實時排行榜、計數器、布隆過濾器、隊列系統等。

所以,大廠面試中,Redis 的考點也愈來愈多,常見的有 Redis 的基本使用(有哪些數據類型?有哪些應用場景?集羣搭建)、工做機制(持久化機制 RDB 和 AOF 的區別?爲何單線程?) 、場景設計等。

設計模式

面試題

請手寫單例模式的實現代碼?

題解

www.cnblogs.com/yuanxion/p/…

分析

設計模式是程序員們在軟件開發過程當中抽象出的、用於同一類問題的解決方案,通常是比函數、組件更高層的抽象,用了設計模式的代碼通常有以下特色:

  1. 重用代碼,減小重複的代碼編寫和複製粘貼
  2. 更好維護、可擴展
  3. 提升開發效率
  4. 新手看不懂,懂設計模式的程序員一看就懂

正由於這些優勢,設計模式不管是對工做效率仍是思想的提高都頗有幫助,也成爲了面試高頻考點。常見的設計模式雖然有 3 大類、23+ 種,但面試重點主要是單例模式、工廠模式、觀察者模式等。

併發編程

面試題

爲何用線程池?

題解

www.cnblogs.com/xinxindiand…

分析

如何用最少的資源,寫出性能更高、更可靠、更可擴展的程序是後端程序員須要思考的問題。所以,高併發編程是面試的重點。像線程池、鎖、隊列、併發包、同步異步等,都是高頻考點。有時還會給一些實際問題讓你分析,好比經典的秒殺系統的設計、訂單超賣問題如何解決。

線程池

Linux

面試題

Linux Top 命令的輸出信息分別表示什麼?

題解

blog.csdn.net/weixin_4142…

分析

企業項目通常都是部署在雲服務器上的,大部分服務器的操做系統都是 Linux,所以後端開發工做中,必不可少地要操做 Linux 服務器,好比部署項目、安裝和配置服務、查看系統運行信息、定位線上問題排障等。

所以,要熟悉基本的 Linux 命令,可以適應無鼠標的命令行操做。

還要了解一些經常使用的系統分析命令,幫助排查問題。好比 top 命令,能夠查看系統的資源佔用、總體負載,還能具體查看每一個進程佔用了多少 CPU、內存,從而鎖定異常線程。

Linux top 命令

Git

面試題

你用過 Git 版本控制系統麼?

題解

github.phodal.com/

分析

企業開發大部分都是團隊協同而非單兵做戰,不少人要同時編寫同一個項目的代碼,那麼如何保證代碼的同步、減小衝突、查看改動呢?這就須要使用版本控制系統,目前最主流的是 Git。

現在,Git 已是程序員的必修課了,但不少同窗只是草草瞭解幾個簡單的 Git 操做,好比上傳和更新代碼到 GitHub,這是不行的。在工做中,還常常會用到工做區、分支、合併、回退、解決衝突的功能,也必須知道如何操做。

順帶一提,大多數員工剛進公司要作的事就是用 Git 拉取代碼,若是連這個都不會,就真的很尷尬了。

架構

面試題

什麼是微服務?和傳統架構有什麼區別?

題解

www.zhihu.com/question/55…

分析

現在的架構形式豐富多彩,早就不是一套架構吃遍天的時代了。單點、集羣、分佈式、SOA、微服務、容器、雲原生、服務網格,這些架構都有什麼特色?分別適用於哪些場景?如何選擇?如何實現?這些問題都是後端程序員須要考慮、學習和實踐的。

架構圖示例


聽完我這一通分析,一貫囂張的小阿巴竟也變得沉默了,點了個 就放下了手機。

想學好後端進大廠,真的是任重而道遠,你們加油!

我是魚皮,最後再送你們一些 幫助我拿到大廠 offer 的學習資料

跑了,留下 6T 的資源!

歡迎閱讀 我從 0 自學進入騰訊的編程學習、求職、考證、寫書經歷,再也不迷茫!

我學計算機的四年,共勉!

相關文章
相關標籤/搜索