1. 程式人生 > 程式設計 >1篇文章全面總結2019年Java面試知識,掌握這些你也能進大廠!

1篇文章全面總結2019年Java面試知識,掌握這些你也能進大廠!

前言

2019年還有不到2個月的時間就結束了,這一年你收穫了沒?你成長了沒?改變了沒?年初給自己定下的目標實現了沒?

這段時間小編整理了2019年目前為止的一些Java面試題資料資料,希望可以和大家一起學習分享~

這些Java面試題資料包括:Java基礎、Java集合框架、JVM、Java多執行緒、MySQL、Redis、Spring、訊息佇列、Dubbo、演演算法、設計模式、資料庫、網路協議、Linux系統、計算機原理等等相關知識點.,以及BATJ真實面試題,這些Java資料400頁pdf檔案,希望這些資料對當大家有幫助!

本檔案提供詳細的目錄,大家可以根據自己的實際需要選擇自己薄弱的知識參考閱讀。

Java 基礎知識

  • 過載和重寫的區別
  • String 和 StringBuffer、StringBuilder 的區別是什麼?String 為什麼是不可變的?
  • 自動裝箱與拆箱
  • Java 中的異常處理
  • 介面和抽象類的區別是什麼
  • Object類的常見方法
  • 獲取用鍵盤輸入常用的的兩種方法

Java基礎知識的資料由於篇幅限制,就不一一舉例了,歡迎大家關注我的公種浩【程式設計師追風】,文章都會在裡面更新,整理的資料也會放在裡面。

Java 集合框架

  • Arraylist 與 LinkedList 異同
  • ArrayList 與 Vector 區別
  • HashMap的底層實現
  • HashMap 和 Hashtable 的區別
  • HashMap 的長度為什麼是2的冪次方
  • HashMap 多執行緒操作導致死迴圈問題
  • HashSet 和 HashMap 區別
  • ConcurrentHashMap 和 Hashtable 的區別
  • ConcurrentHashMap執行緒安全的具體實現方式/底層具體實現
  • 集合框架底層資料結構

面試官在多執行緒這一部分很可能會問你有沒有在專案中實際使用多執行緒的經歷。所以,如果你在你的專案中有實際使用Java多執行緒的經歷 的話,會為你加分不少哦!

Java多執行緒

  • 說一說自己對於 synchronized 關鍵字的瞭解
  • 說說自己是怎麼使用 synchronized 關鍵字,在專案中用到了嗎
  • 講一下 synchronized 關鍵字的底層原理
  • 說說 JDK1.6 之後的synchronized 關鍵字底層做了哪些優化,可以詳細介紹一下這些優化嗎
  • 談談 synchronized和ReenTrantLock 的區別
  • 說說 synchronized 關鍵字和 volatile 關鍵字的區別
  • 為什麼要用執行緒池?
  • 實現Runnable介面和Callable介面的區別
  • 執行execute()方法和submit()方法的區別是什麼呢?
  • 如何建立執行緒池
  • 介紹一下Atomic 原子類
  • JUC 包中的原子類是哪4類?
  • 講講 AtomicInteger 的使用
  • 能不能給我簡單介紹一下 AtomicInteger 類的原理

Java多執行緒的知識由於篇幅限制,就不一一舉例了,歡迎大家關注我的公種浩【程式設計師追風】,文章都會在裡面更新,整理的資料也會放在裡面。

JVM的設計目標是提供一個基於抽象規格描述的計算機模型,為解釋程式開發人員提供很好的靈活性,同時也確保Java程式碼可在符合該規範的任何系統上執行。JVM對其實現的某些方面給出了具體的定義,特別是對Java可執行程式碼,即位元組碼(Bytecode)的格式給出了明確的規格。這一規格包括操作碼和運算元的語法和數值、識別符號的數值表示方式、以及Java類檔案中的Java物件、常量緩衝池在JVM的儲存映象。這些定義為JVM直譯器開發人員提供了所需的資訊和開發環境。Java的設計者希望給開發人員以隨心所欲使用Java的自由。

JVM

  • 記憶體模型以及分割槽,需要詳細到每個區放什麼。
  • GC 收集器有哪些?CMS 收集器與 G1 收集器的特點。
  • Minor GC 與 Full GC 分別在什麼時候發生?
  • 堆裡面的分割槽:Eden,survival (from+ to),老年代,各自的特點。
  • 簡述 java 垃圾回收機制?
  • java 中垃圾收集的方法有哪些?
  • 類載入器雙親委派模型機制?什麼是類載入器,類載入器有哪些?
  • 簡述 java 記憶體分配與回收策率以及 Minor GC 和Major GC

網路協議

  • TCP、UDP 協議的區別
  • 在瀏覽器中輸入url地址 ->> 顯示主頁的過程
  • 各種協議與HTTP協議之間的關係
  • HTTP長連線、短連線
  • TCP 三次握手和四次揮手(面試常客)

網路協議的知識由於篇幅限制,就不一一舉例了,歡迎大家關注我的公種浩【程式設計師追風】,文章都會在裡面更新,整理的資料也會放在裡面。

MySQL是一種關係資料庫管理系統,關係資料庫將資料儲存在不同的表中,而不是將所有資料放在一個大倉庫內,這樣就增加了速度並提高了靈活性。

MySQL所使用的 SQL 語言是用於訪問資料庫的最常用標準化語言。MySQL 軟體採用了雙授權政策,分為社群版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放原始碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站資料庫。

MySQL

  • Mysql 的技術特點是什麼?
  • MYSQL 資料表在什麼情況下容易損壞?
  • 說說自己對於 MySQL 常見的兩種儲存引擎:MyISAM與InnoDB的理解
  • 資料庫索引瞭解嗎?
  • 能說下MySQL 的基本儲存結構嗎?
  • Mysql如何為表字段新增索引?
  • 對於大表的常見優化手段說一下
  • mysql 裡記錄貨幣用什麼欄位型別好
  • 當MySQL單表記錄數過大時,資料庫的CRUD效能會明顯下降,有哪些常見的優化措施?

簡單來說 redis 就是一個資料庫,不過與傳統資料庫不同的是 redis 的資料是存在記憶體中的,所以存寫速度非常快,因此 redis 被廣泛應用於快取方向。另外,redis 也經常用來做分散式鎖。redis 提供了多種資料型別來支援不同的業務場景。除此之外,redis 支援事務 、持久化、LUA指令碼、LRU驅動事件、多種叢集方案。

Redis

  • 為什麼要用 redis /為什麼要用快取?
  • 為什麼要用 redis 而不用 map/guava 做快取?
  • redis 和 memcached 的區別?
  • 上述 Redis 分散式鎖的缺點?
  • redis 常見資料結構以及使用場景分析
  • redis 記憶體淘汰機制(MySQL裡有2000w資料,Redis中只存20w的資料,如何保證Redis中的資料都是熱點資料?)
  • redis 持久化機制(怎麼保證 redis 掛掉之後再重啟資料可以進行恢復)?
  • 快取雪崩和快取穿透問題解決方案?
  • 如何解決 Redis 的併發競爭 Key 問題?
  • 如何保證快取與資料庫雙寫時的資料一致性?

Spring一般是不可避免的,如果你的簡歷上註明瞭你會Spring Boot或者Spring Cloud的話,那麼面試官也可能會同時問你這兩個技術,比如他可能會問你springboot和spring的區別。 所以,一定要謹慎對待寫在簡歷上的東西,一定要對簡歷上的東西非常熟悉。

另外,AOP實現原理、動態代理和靜態代理、Spring IOC的初始化過程、IOC原理、自己怎麼實現一個IOC容器? 這些東西都是經常會被問到的。

Spring

  • Spring Bean 的作用域?
  • 如何用基於 Java 配置的方式配置 Spring?
  • 請說下 Spring Bean 的生命週期?
  • Spring Bean 的作用域之間有什麼區別?
  • 請舉例說明如何在 Spring 中注入一個 Java Collection?
  • Spring 框架中有哪些不同型別的事件?
  • Spring 框架中都用到了哪些設計模式?
  • 開發中主要使用 Spring 的什麼技術 ?

Spring的知識點由於篇幅限制,就不一一舉例了,歡迎大家關注我的公種浩【程式設計師追風】,文章都會在裡面更新,整理的資料也會放在裡面。

“RabbitMQ?”“Kafka?”“RocketMQ?”...在日常學習與開發過程中,我們常常聽到訊息佇列這個關鍵詞。這也是面試經常被問到的

訊息佇列

  • 什麼是訊息佇列?
  • 為什麼要用訊息佇列?丟訊息怎麼辦?
  • 如何解決訊息重複問題?
  • ActiveMQ 中的訊息重發時間間隔和重發次數嗎?
  • ActiveMQ 伺服器宕機怎麼辦?
  • ActiveMQ 如何調優?
  • Basic.Reject 的用法是什麼?
  • 為什麼不應該對所有的 message 都使用持久化機制?
  • 為什麼 heavy RPC 的使用場景下不建議採用 disk node ?

訊息佇列的知識由於篇幅限制,就不一一舉例了,歡迎大家關注我的公種浩【程式設計師追風】,文章都會在裡面更新,整理的資料也會放在裡面。

Dubbo 是由阿里開源,後來加入了 Apache 。正式由於 Dubbo 的出現,才使得越來越多的公司開始使用以及接受分散式架構,所以面試時也是經常被問到的

Dubbo

  • 什麼是 Dubbo?
  • 什麼是 RPC?RPC原理是什麼?
  • 為什麼要用 Dubbo?
  • 什麼是分散式?為什麼要分散式?
  • 先來解釋一下什麼是負載均衡?
  • Dubbo 叢集提供了哪些負載均衡策略?
  • Dubbo 支援哪些協議,每種協議的應用場景,優缺點?
  • Dubbo 的叢集容錯方案有哪些?
  • Dubbo 和 Spring Cloud 的關係?

資料結構比較常問的就是:二叉樹、紅黑樹(很可能讓你手繪一個紅黑樹出來哦!)、二叉查詢樹(BST)、平衡二叉樹(Self-balancing binary search tree)、B-樹,B+樹與B*樹的優缺點比較、 LSM 樹這些知識點。

資料結構很重要,而且學起來也相對要難一些。建議學習資料結構一定要循序漸進的來,一步一個腳印的走好。一定要搞懂原理,最好自己能用程式碼實現一遍。

資料結構

  • 什麼是佇列
  • 說下什麼是佇列的種類
  • 什麼是 Set?說下HashSet 和 TreeSet 底層資料結構
  • 什麼是List?List的常見實現類是什麼?

在Linux作業系統中,所有被作業系統管理的資源,例如網路介面卡、磁碟驅動器、印表機、輸入輸出裝置、普通檔案或是目錄都被看作是一個檔案。

也就是說在LINUX系統中有一個重要的概念:一切都是檔案。其實這是UNIX哲學的一個體現,而Linux是重寫UNIX而來,所以這個概念也就傳承了下來。在UNIX系統中,把一切資源都看作是檔案,包括硬體裝置。UNIX系統把每個硬體都看成是一個檔案,通常稱為裝置檔案,這樣使用者就可以用讀寫檔案的方式實現對硬體的訪問。

Linux

  • 簡單介紹一下 Linux 檔案系統?
  • 一些常見的 Linux 命令瞭解嗎?
  • Linux 中主要有哪幾種核心鎖?
  • Linux 中的使用者模式和核心模式是什麼含意?
  • 使用者程式間通訊主要哪幾種方式?
  • 通過夥伴系統申請核心記憶體的函式有哪些?
  • 模組程式能否使用可連結的庫函式?
  • Linux 通過什麼方式實現系統呼叫?
  • Linux 軟中斷和工作佇列的作用是什麼?

再強調幾點:

  • 1. 一定要謹慎對待寫在簡歷上的東西,一定要對簡歷上的東西非常熟悉。因為一般情況下,面試官都是會根據你的簡歷來問的; 能有一個上得了檯面的專案也非常重要,這很可能是面試官會大量發問的地方,所以在面試之前好好回顧一下自己所做的專案;
  • 2. 和麵試官聊基礎知識比如設計模式的使用、多執行緒的使用等等,可以結合具體的專案場景或者是自己在平時是如何使用的;
  • 3. 注意自己開源的Github專案,面試官可能會挖你的Github專案提問;

願各位Java工程師朋友們能始終不忘初心!每個人都有每個人的難處。引用一句《阿甘正傳》裡面的臺詞:“生活就像一盒巧克力,你永遠不知道下一塊是什麼味道“。

另外,我個人覺得面試也像是一場全新的征程,失敗和勝利都是平常之事。所以,勸各位不要因為面試失敗而灰心、喪失鬥志。也不要因為面試通過而沾沾自喜,等待你的將是更美好的未來,繼續加油!

由於篇幅限制小編,以上Java知識點全部整理在一個pdf檔案裡了,檔案裡的詳解資料太全面,所以只把部分知識點截圖出來粗略的介紹,每個小節點裡面都有更細化的內容!歡迎大家關注我的公種浩【程式設計師追風】,文章都會在裡面更新,整理的資料也會放在裡面。

效能調優系列

1.Comcat效能調優

JVM引數調優: -Xms<size> 表示JVM初始化堆的大小,一Xmx<size>表示JVM堆的最大值。這兩個值的大小一般根據需要進行設定。當應用程式需要的記憶體超出堆的最大值時虛擬機器器就會提示記憶體溢位,並且導致應用服務崩潰。因此- -般建議堆的最大值設定為可用記憶體的最大值的80%。在catalina.bat中,設定JAVA _0PTS='-Xms256m-Xmx512m',表示初始化記憶體為256MB,可以使用的最大記憶體512MB。

2.JVM效能調優

Java類載入過程 Java類載入需要經歷一下7個過程: 1.載入 載入是類載入的第一個過程,在這個階段,將完成一下三件事情 (1)通過一個類的全限定名獲取該類的二進位制流。 (2)將該二進位制流中的靜態儲存結構轉化為方法去執行時資料結構。 (3)在記憶體中生成該類的Class物件,作為該類的資料訪問入口。

3.MySQL調優

微服務系列

什麼是 Spring Cloud?

Spring cloud 流應用程式啟動器是基於 Spring Boot 的 Spring 整合應用程式,提供與外部系統的整合。Spring cloud Task,一個生命週期短暫的微服務框架,用於快速構建執行有限資料處理的應用程式。

使用 Spring Cloud 有什麼優勢?

使用 Spring Boot 開發分散式微服務時,我們面臨以下問題

1.與分散式系統相關的複雜性-這種開銷包括網路問題,延遲開銷,頻寬問題,安全問題。

2.服務發現-服務發現工具管理群集中的流程和服務如何查詢和互相交談。它涉及一個服務目錄,在該

目錄中註冊服務,然後能夠查詢並連線到該目錄中的服務。

3. 冗餘-分散式系統中的冗餘問題。

4. 負載平衡 --負載平衡改善跨多個計算資源的工作負荷,諸如計算機,計算機叢集,網路鏈路,中央

處理單元,或磁碟驅動器的分佈。

5.效能-問題 由於各種運營開銷導致的效能問題。

6. 部署複雜性-Devops 技能的要求。

併發程式設計系列

Synchronized原理

synchronized和ReentrantLock的區別

synchronized是和if、else、for、while一樣的關鍵字,ReentrantLock是類,這是二者的本質區別。既然ReentrantLock是類,那麼它就提供了比synchronized更多更靈活的特性,可以被繼承、可以有方法、可以有各種各樣的類變數,ReentrantLock比synchronized的擴充套件性體現在幾點上:

(1)ReentrantLock可以對獲取鎖的等待時間進行設定,這樣就避免了死鎖

(2)ReentrantLock可以獲取各種鎖的資訊

(3)ReentrantLock可以靈活地實現多路通知

另外,二者的鎖機制其實也是不一樣的。ReentrantLock底層呼叫的是Unsafe的park方法加鎖,synchronized操作的應該是物件頭中mark word,這點我不能確定。

開源框架系列

1.spring面試

什麼是 Spring 框架,Spring 框架有哪些主要模組

Spring 框架是一個為 Java 應用程式開發提供綜合、廣泛的基礎性支援的 Java 平臺。

Spring 幫助開發者解決了開發中基礎性的問題,使得開發人員可以專注於應用程式的開發。

Spring 框架本身也是按照設計模式精心打造的,這使得我們可以在開發環境中安心地整合

Spring 框架,不必擔心 Spring 是如何在後臺工作的。

什麼是 SpringMvc?

SpringMvc 是 spring 的一個模組,基於 MVC 的一個框架,無需中間整合層來整合。

分散式專題

1.分散式限流面試

談下你對 Zookeeper 的認識?

ZooKeeper 是一個分散式的,開放原始碼的分散式應用程式協調服務。它是一個為分散式應用提供一致性服務的軟體,提供的功能包括:配置維護、域名服務、分散式同步、組服務等。

ZooKeeper 的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。

Zookeeper 都有哪些功能?

1. 叢集管理:監控節點存活狀態、執行請求等;

2. 主節點選舉:主節點掛掉了之後可以從備用的節點開始新一輪選主,主節點選舉說的就是這個選舉的過程,使用 Zookeeper 可以協助完成這個過程;

3. 分散式鎖:Zookeeper 提供兩種鎖:獨佔鎖、共享鎖。獨佔鎖即一次只能有一個執行緒使用資源,共享鎖是讀鎖共享,讀寫互斥,即可以有多線執行緒同時讀同一個資源,如果要使用寫鎖也只能有一個執行緒使用。Zookeeper 可以對分散式鎖進行控制。

4. 命名服務:在分散式系統中,通過使用命名服務,客戶端應用能夠根據指定名字來獲取資源或服務的地址,提供者等資訊。

以上這些整理的Java資料共有400多頁的pdf檔案,檔案裡的詳解資料太全面,所以只把部分知識點截圖出來粗略的介紹,每個小節點裡面都有更細化的內容!歡迎大家關注我的公種浩【程式設計師追風】,文章都會在裡面更新,整理的資料也會放在裡面。

2019年還有不到2個月的時間就結束了,這一年你收穫了沒?你成長了沒?改變了沒?年初給自己定下的目標實現了沒?

最後

整理資料不易,希望這些Java資料的的Java工程師朋友們有幫助!喜歡文章記得點個贊喲,感謝支援!