前言
作爲一個 Java 程序員,你平時總是陷在業務開發裏,每天噼裏啪啦忙敲着代碼,上到系統開發,下到 Bug 修改,你感覺自己無所不能。然而偶爾的一次聚會,你聽說和自己一起出道的同學早已經年薪 50 萬,而自己卻囊中羞澀。於是你也想看看新機會,找個新平臺,好好發展。
但是面試的時候,當那個笑眯眯的面試官問出那些你再熟悉不過的 Java 問題時,你只是感覺似曾相識,卻怎麼也回答不到點上。比如 HashMap 的工作原理,再或者 volatile 的使用場景。
這個時候,你可能會懷疑自己的能力,也痛恨爲什麼當初自己沒有好好複習。
該新版文檔在Github上上傳一個星期已經收穫30K+star的Java核心面試神技(這參數,質量多高就不用我多說了吧)非常全面,包涵Java基礎、Java集合、JavaWeb、Java異常、OOP、IO與NIO、反射、註解、多線程、JVM、MySQL、MongoDB、Spring全家桶、計算機網絡、分佈式架構、Redis、Linux、git、前端、算法與數據結構、MyBatis、RocketMQ、Netty、Dubbo、Zookeeper、分佈式緩存、數據結構等等內容非常豐富,已經幫很多人拿下互聯網一線公司的offer。下面我來跟大家一起分享一下。
JavaOOP
- 什麼是B/S架構?什麼是C/S架構
- Java都有哪些開發平臺?
- 什麼是JDK?什麼是JRE?
- Java語言有哪些特點
- 面向對象和麪向過程的區別
- 什麼是數據結構?
- Java的數據結構有哪些?
- 什麼是OOP?
- 類與對象的關係?
- Java中有幾種數據類型
Java集合/泛型
- ArrayList和linkedList的區別
- HashMap和HashTable的區別
- Collection包結構,與Collections的區別
- 泛型常用特點 (待補充)
- 說說List,Set,Map三者的區別
- Array與ArrayList有什麼不一樣?
- Map有什麼特點
- 集合內存放於 Java.util 包中, 主要有幾 種接口
- 什麼是list接口
- 說說ArrayList(數組)
Java異常
- Java中異常分爲哪兩種?
- 異常的處理機制有幾種?
- 如何自定義一個異常
- try catch fifinally,try裏有return,finally還執行麼?
- Excption與Error包結構
- Thow與thorws區別
- Error與Exception區別?
- error和exception有什麼區別
Java中的IO與NIO
- Java 中 IO 流?
- Java IO與 NIO的區別
- 常用io類有哪些
- 字節流與字符流的區別
- 阻塞 IO 模型
- 非阻塞 IO 模型
- 多路複用 IO 模型
- 信號驅動 IO 模型
- 異步 IO 模型
- JAVA NIO
Java反射
- 除了使用new創建對象之外,還可以用什麼方法創建對象?
- Java反射創建對象效率高還是通過new創建對象的效率高?
- java反射的作用
- 哪裏會用到反射機制?
- 反射的實現方式:
- 實現Java反射的類:
- 反射機制的優缺點:
- Java 反射 API
- 反射使用步驟(獲取 Class 對象、調用對象方法)
- 獲取 Class 對象有幾種方法
- 利用反射動態創建對象實例
Java序列化
- 什麼是java序列化,如何實現java序列化?
- 保存(持久化)對象及其狀態到內存或者磁盤
- 序列化對象以字節數組保持-靜態成員不保存
- 序列化用戶遠程對象傳輸
- Serializable 實現序列化
- writeObject 和 readObject 自定義序列化策略
- 序列化 ID
- 序列化並不保存靜態變量
- Transient 關鍵字阻止該變量被序列化到文件中
- 序列化(深 clone 一中實現)
多線程&併發
JAVA 併發知識庫
- Java中實現多線程有幾種方法
- 繼承 Thread 類
- 實現 Runnable 接口。
- ExecutorService、 Callable、 Future 有返回值線程
- 基於線程池的方式
- 4 種線程池
- 如何停止一個正在運行的線程
- notify()和notifyAll()有什麼區別?
- sleep()和wait() 有什麼區別?
- volatile 是什麼?可以保證有序性嗎?
JVM
- java中會存在內存泄漏嗎,請簡單描述。
- 64 位 JVM 中,int 的長度是多數?
- Serial 與 Parallel GC 之間的不同之處?
- 32 位和 64 位的 JVM,int 類型變量的長度是多數?
- Java 中 WeakReference 與 SoftReference 的區別?
- JVM 選項 -XX:+UseCompressedOops 有什麼作用?爲什麼要使用
- 怎樣通過 Java 程序來判斷 JVM 是 32 位 還是 64位?
- 32 位 JVM 和 64 位 JVM 的最大堆內存分別是多數?
- JRE、JDK、JVM 及 JIT 之間有什麼不同?
- 解釋 Java 堆空間及 GC?
Mysql
- 數據庫存儲引擎
- InnoDB(B+樹)
- TokuDB( Fractal Tree-節點帶數據)
- Memory
- 數據庫引擎有哪些
- InnoDB與MyISAM的區別
- 索引
- 常見索引原則有
- 數據庫的三範式是什麼
- 第一範式(1st NF - 列都是不可再分)
Redis
- 什麼是 Redis?
- Redis 與其他 key-value 存儲有什麼不同?
- Redis 的數據類型?
- 使用 Redis 有哪些好處?
- Redis 相比 Memcached 有哪些優勢?
- Memcache 與 Redis 的區別都有哪些?
- Redis 是單進程單線程的?
- 一個字符串類型的智能存儲最大容量是多少?
- Redis持久化機制
- 緩存雪崩、緩存穿透、緩存預熱、緩存更新、緩存降級等問題
Memcached
- Memcached 是什麼,有什麼作用?
- memcached 服務在企業集羣架構中有哪些應用場景?
- Memcached 服務分佈式集羣如何實現?
- Memcached 服務特點及工作原理是什麼?
- 簡述 Memcached 內存管理機制原理?
- memcached 是怎麼工作的?
- memcached 最大的優勢是什麼?
- memcached 和 MySQL 的 query
- memcached 和服務器的 local cache(比如 PHP 的 APC、mmap 文件等)相比,有什麼優缺點?
- memcached 的 cache 機制是怎樣的?
- memcached 如何實現冗餘機制?
MongoDB
- mongodb是什麼?
- mongodb有哪些特點?
- 你說的NoSQL數據庫是什麼意思?NoSQL與RDBMS直接有什麼區別?爲什麼要使用和不使用NoSQL數據庫?說一說NoSQL數據庫的幾個優點?
- NoSQL數據庫有哪些類型?
- MySQL與MongoDB之間最基本的差別是什麼?
- 你怎麼比較MongoDB、CouchDB及CouchBase?
- MongoDB成爲最好NoSQL數據庫的原因是什麼?
- journal回放在條目(entry)不完整時(比如恰巧有一箇中途故障了)會遇到問題嗎?
- 分析器在MongoDB中的作用是什麼?
- 名字空間(namespace)是什麼?
Spring
- 不同版本的 Spring Framework 有哪些主要功能?
- 什麼是 Spring Framework?
- 列舉 Spring Framework 的優點。
- Spring Framework 有哪些不同的功能?
- Spring Framework 中有多少個模塊,它們分別是什麼?
- 什麼是 Spring 配置文件?
- Spring 應用程序有哪些不同組件?
- 使用 Spring 有哪些方式?
- 什麼是 Spring IOC 容器?
- 什麼是依賴注入?
Spring Boot
- 什麼是 Spring Boot?
- 爲什麼要用SpringBoot
- Spring Boot 有哪些優點?
- Spring Boot 的核心註解是哪個?它主要由哪幾個註解組成的?
- 運行Spring Boot有哪幾種方式
- 如何理解 Spring Boot 中的 Starters?
- 如何在Spring Boot啓動的時候運行一些特定的代碼?
- Spring Boot 需要獨立的容器運行嗎?
- Spring Boot中的監視器是什麼?
- 如何使用Spring Boot實現異常處理?
Spring Cloud
- 什麼是 Spring Cloud?
- 使用 Spring Cloud 有什麼優勢?
- 服務註冊和發現是什麼意思?Spring Cloud 如何實現?
- 負載平衡的意義什麼?
- 什麼是 Hystrix?它如何實現容錯?
- 什麼是 Hystrix 斷路器?我們需要它嗎?
- 什麼是 Netflix Feign?它的優點是什麼?
- 什麼是 Spring Cloud Bus?我們需要它嗎?
- 什麼是微服務
- 什麼是服務熔斷?什麼是服務降級
RabbitMQ
- 什麼是 rabbitmq
- 爲什麼要使用 rabbitmq
- 使用 rabbitmq 的場景
- 如何確保消息正確地發送至 RabbitMQ? 如何確保消息接收方消費了消息?
- 如何避免消息重複投遞或重複消費?
- 消息基於什麼傳輸?
- 消息如何分發?
- 消息怎麼路由?
- 如何確保消息不丟失?
- 使用 RabbitMQ 有什麼好處?
Dubbo
- 爲什麼要用 Dubbo?
- Dubbo 的整體架構設計有哪些分層?
- 默認使用的是什麼通信框架,還有別的選擇嗎?
- 服務調用是阻塞的嗎?
- 一般使用什麼註冊中心?還有別的選擇嗎?
- 默認使用什麼序列化框架,你知道的還有哪些?
- 服務提供者能實現失效提出是什麼原理?
- 服務上線怎麼不影響舊版本?
- 如何解決服務調用鏈過長的問題?
- 說說核心的配置有哪些?
MyBatis
- 什麼是 Mybatis?
- Mybaits 的優點
- MyBatis 框架的缺點
- MyBatis 框架適用場合
- MyBatis 與 Hibernate 有哪些不同?
- #{}和${}的區別是什麼?
- 當實體類中的屬性名和表中的字段名不一樣 ,怎麼辦 ?
- 模糊查詢 like 語句該怎麼寫?
- 通常一個 Xml 映射文件,都會寫一個 Dao 接口與之對應,請問,這個 Dao 接口的工作原理是什麼?Dao 接口裏的方法,參數不同時,方法能重載嗎?
- 如何獲取自動生成的(主)鍵值?
ZooKeeper
- 什麼是Zookeeper?
- Zookeeper 如何保證了分佈式一致性特性?
- ZooKeeper 提供了什麼?
- Zookeeper 文件系統
- ZAB 協議?
- 四種類型的數據節點 Znode
- Zookeeper Watcher 機制 -- 數據變更通知
- 客戶端註冊 Watcher 實現
- 服務端處理 Watcher 實現
- 客戶端回調 Watcher
數據結構
- 棧(stack)
- 隊列(queue)
- 鏈表(Link)
- 散列表(Hash Table)
- 排序二叉樹
- 前綴樹
- 紅黑樹
- B-TREE
- 位圖
Elasticsearch
- elasticsearch 瞭解多少,說說你們公司 es 的集羣架構,索引數據大小,分片有多少,以及一些調優手段 。
- elasticsearch 的倒排索引是什麼
- elasticsearch 索引數據多了怎麼辦,如何調優,部署
- elasticsearch 是如何實現 master 選舉的
- 詳細描述一下 Elasticsearch 索引文檔的過程
- 詳細描述一下 Elasticsearch 搜索的過程?
- Elasticsearch 在部署時,對 Linux 的設置有哪些優化方法
- lucence 內部結構是什麼?
- Elasticsearch 是如何實現 Master 選舉的?
- Elasticsearch 中的節點(比如共 20 個),其中的 10 個選了一個 master,另外 10 個選了另一個 master,怎麼辦?
Kafka
- Kafka 是什麼
- partition 的數據文件(offset, MessageSize, data)
- 數據文件分段 segment(順序讀寫、分段命令、二分查找)
- 負載均衡(partition 會均衡分佈到不同 broker 上)
- 批量發送
- 壓縮(GZIP 或 Snappy)
- 消費者設計
- Consumer Group
- 如何獲取 topic 主題的列表
- 生產者和消費者的命令行是什麼?
微服務
- 微服務架構有哪些優勢?
- 微服務有哪些特點?
- 設計微服務的最佳時間是什麼?
- 微服務架構如何運作?
- 微服務架構的優缺點是什麼?
- 單片,SOA 和微服務架構有什麼區別?
- 在使用微服務架構時,您面臨哪些挑戰?
- SOA 和微服務架構之間的主要區別是什麼?
- 微服務有什麼特點?
Linux
- 絕對路徑用什麼符號表示?當前目錄、上層目錄用什麼表示?主目錄用什麼表示? 切換目錄用什麼命令?
- 怎麼查看當前進程?怎麼執行退出?怎麼查看當前路徑?
- 怎麼清屏?怎麼退出當前命令?怎麼執行睡眠?怎麼查看當
- Ls 命令執行什麼功能? 可以帶哪些參數,有什麼區別?
- 查看文件有哪些命令
- 列舉幾個常用的Linux命令
- 你平時是怎麼查看日誌的?
- 建立軟鏈接(快捷方式),以及硬鏈接的命令
- 目錄創建用什麼命令?創建文件用什麼命令?複製文件用什麼命令?
- 查看文件內容有哪些命令可以使用?
面試,難還是不難?最終結果好還是不好?取決於面試者的底蘊(氣場+技能)、心態和認知以及溝通技巧。而一些主流的大型互聯網公司面試(阿里巴巴、京東、美團、滴滴)更是需要你在面試時展現出自己的能力,從而獲得面試官的欣賞和肯定。
而程序員在應聘時更是需要經歷層層面試。俗話說,磨刀不誤砍柴工,做好面試前的準備工作可以幫助大家更好的應對面試官的問題以及面試中的突發情況。