今年行情這么差,到底如何進大廠?
從春節(jié)過后,我,一位雙非渣本的大三學(xué)生,便踏上了實習(xí)之旅,面試了不下三十場,雖然很菜,但是也相應(yīng)地拿了一些 offer ,例如京東金融、人人車等五六家 offer
總結(jié)一下春招就是一個字:難。
沒學(xué)歷,技術(shù)還湊合,簡歷能過但是面試就有點困難。這期間收到了 N 個面試官的歧視,有些面試官感覺骨子里瞧不起我們這些雙非的人。一下內(nèi)容僅憑記憶回想起,還有一些必問的東西,總結(jié)在這里,希望能幫到大家!
算法
這個真的就只能靠刷題,不敢說每家公司對于筆試的重視程度怎么樣,反正筆試基本上是必須要過的一關(guān)
隊列。
數(shù)組。
棧。
鏈表。
樹。
散列表(哈希表)。
堆。
圖。
無序樹:樹中任意節(jié)點的子結(jié)點之間沒有順序關(guān)系、這種樹稱為無序樹、也稱為自由樹。
有序樹:樹中任意節(jié)點的子結(jié)點之間有順序關(guān)系、這種樹稱為有序樹。
二叉樹:每個節(jié)點最多含有兩個子樹的樹稱為二叉樹。
完全二叉樹。
滿二叉樹。
斜樹。
平衡二叉樹。
霍夫曼樹:帶權(quán)路徑最短的二叉樹稱為哈夫曼樹或最優(yōu)二叉樹。
紅黑樹。
以及各種遍歷方式、按層打印、統(tǒng)計距離等等。
樹是基礎(chǔ),基本的數(shù)據(jù)結(jié)構(gòu)還包括圖、圖的遍歷方式。
DFS、BFS以及各種優(yōu)缺點、貪心算法、回溯、以及建模等等等等,只能靠刷題來提升。
計算機網(wǎng)絡(luò)
GET/POST 區(qū)別。
UDP/TCP區(qū)別。
TCP 三次握手。以及衍生出來一些列的 TCP 的問題:什么是 TIME-WAIT、為什么可以是三次揮手、為什么不能是兩次握手、流量控制、滑動窗口、Nagle 算法、糊涂窗口綜合癥、擁塞控制、慢啟動、擁塞避免、快重傳、快恢復(fù)、長連接 VS 短連接、應(yīng)用場景是什么。
HTTP 1.0、1.1、2.0。
說一下 HTTPS 的流程、SSL 是什么、什么是非對稱加密、對稱加密、RSA 具體實現(xiàn)。
OSI 七層模型是什么、都有哪些協(xié)議、TCP/IP 四層是什么。
DNS、ARP 協(xié)議原理。
地址欄輸入 URL 發(fā)生了什么。
WebSocket 是什么。
一些網(wǎng)絡(luò)安全問題、比如 DOS 攻擊如何解決、DNS 欺騙如何解決、ARP欺騙、SQL注入、XSS、CSRF、iframe 安全問題、本地存儲數(shù)據(jù)問題、第三方依賴的安全性問題。
HTTP 是不保存狀態(tài)的協(xié)議、那么如何保存用戶狀態(tài)。
Cookie 的作用是什么、和 Session 有什么區(qū)別。
Session 的實現(xiàn)機制是什么、分布式環(huán)境下有什么注意事項、如果注銷 Session、設(shè)置 Session 的時長如何操作、默認時長是多少。
HTTP 1.0 和 HTTP 1.1 的主要區(qū)別是什么。
各種協(xié)議與 HTTP 協(xié)議之間的關(guān)系。
Servlet、Filter 和 Listener 分別是什么,用在什么地方,JSP 頁面如何進行處理。
請求轉(zhuǎn)發(fā)、URL 重定向和包含有什么區(qū)別,如何實現(xiàn)。
如何判斷遠程機器上某個端口是否開啟,項目中需要查看域名在本地的解析 IP ,如何操作。
Servlet 中,調(diào)用 JSP 展示元素和返回 String(即 api,一般是 json 數(shù)據(jù))有什么區(qū)別。
nginx + tomcat 模式下,服務(wù)器段如何獲取客戶端請求 IP 。
Servlet 的生命周期是什么。
Servlet 是否是線程安全的。
Java基礎(chǔ)
描述一下值傳遞和引用傳遞的區(qū)別。
== 和 equals 區(qū)別是什么、String 中的 equals 方法是如何重寫的、為什么要重寫 equals 方法、為什么要重寫 hashCode 方法。
String s1 = new String(“abc”)、String s2 = “abc”、s1 == s2 。語句1在內(nèi)存中創(chuàng)建了幾個對象。
String 為什么是不可變的、jdk源碼中的 String 如何定義的、為什么這么設(shè)計。
請描述一下 static 關(guān)鍵字和 final 關(guān)鍵字的用法。
接口和抽象類的區(qū)別是什么。
重載和重寫的區(qū)別。
面向?qū)ο蟮娜筇匦裕務(wù)勀銓?xx 的理解。
考察的是基本類型的轉(zhuǎn)換,及原碼反碼補碼的運算。
byte 的取值范圍是多少、怎么計算出來的。
HashMap 相關(guān)、HashMap 和 Hashtable 的區(qū)別、HashMap 和 HashSet 區(qū)別、HashMap 底層實現(xiàn)、HashMap 的長度為什么是 2 的冪次方、HashMap 多線程操作導(dǎo)致死循環(huán)問題、HashMap 的線程安全實現(xiàn)有哪些、ConcurrentHashMap 的底層實現(xiàn)。
Integer 緩存池。
UTF-8 和 Unicode 的關(guān)系。
項目為 UTF-8 環(huán)境,char c = ‘中’,是否合法。
Arrays.asList 獲得的 List 使用時需要注意什么。
Collection 和 Collections 區(qū)別。
你知道 fail-fast 和 fail-safe 嗎。
ArrayList 和 LinkedList 和 Vector 的區(qū)別。
Set 和 List 區(qū)別、Set 如何保證元素不重復(fù)。
UTF-8 與 GBK 互轉(zhuǎn)、為什么會亂碼。
重載和重寫的區(qū)別。
為什么 Java 是解釋性語言。
ConcurrentHashMap 1.7和1.8的區(qū)別:整體結(jié)構(gòu);put()方法、get()方法、resize()方法、size()方法
地址欄輸入 URL 發(fā)生了什么。
組合和聚合的區(qū)別。
講一下 CMS 垃圾回收器。
JDK 動態(tài)代理和 GClib 動態(tài)代理、JDK 動態(tài)代理具體實現(xiàn)原理、CGLib 動態(tài)代理、兩者對比。
Threadlocal 內(nèi)存泄漏問題。
StringBuilder 安全怎么實現(xiàn)的、詳細描述怎么擴容的。
MyBatis
Mybatis 執(zhí)行流程。
Mybatis緩存。
Mybatis用到的設(shè)計模式。
Java鎖
鎖類型
悲觀鎖 VS 樂觀鎖
悲觀鎖代表 Synchronized 關(guān)鍵字。
Synchronized 關(guān)鍵字實現(xiàn)方法。
樂觀鎖代表 CAS 操作。
CAS 帶來的 ABA 問題。
CAS 帶來的循環(huán)時間長開銷大問題。
CAS 帶來的只能保證一個共享變量的原子操作問題。
CAS 是如何保證原子操作的。
AtomticXXX 實現(xiàn)的原理。
volatile 關(guān)鍵字。
內(nèi)存可見性的原因。
禁止指令重排序的原因。
volatile 關(guān)鍵字不能保證原子操作的原因。
關(guān)于 volatile 關(guān)鍵字的討論。
happen-before 規(guī)則介紹。
可重入鎖、 可中斷鎖、公平鎖、讀寫鎖
談?wù)剬?AQS 的理解。
可重入鎖。
可中斷鎖。
公平鎖。
讀寫鎖。
偏向鎖/輕量級鎖/重量級鎖 升級過程。
補充
自旋鎖。
分段鎖。
輕量級鎖就一定比重量級鎖快嗎。
Java多線程
線程與進程的區(qū)別
線程的狀態(tài)。
Notify 和 wait 。
Thread.sleep() 和 Thread.yield() 的異同。
死鎖的概念。
并發(fā)和并行的區(qū)別。
線程安全三要素。
如何實現(xiàn)線程安全。
保證線程安全的機制。
談?wù)剬Χ嗑€程的理解。
run 和 Start 方法的區(qū)別。
多線程
創(chuàng)建線程的方法。
線程池創(chuàng)建線程。
ThreadPoolExecutor介紹。
BlockingQueue。
ArrayBlockingQueue。
LinkedBlockingQueue。
LinkedBlockingQueue 和 ArrayBlockingQueue 的主要區(qū)別。
handler 拒絕策略。
線程池五種狀態(tài)。
深入理解 ThreadPoolExecutor。
線程池中 ctl 屬性的作用是什么。
shutdownNow 和 shutdown 的區(qū)別。
線程復(fù)用原理。
靈魂拷問:你如何設(shè)置你的線程池參數(shù)。
CountDownLatch 和 CyclicBarrier 區(qū)別。
多線程間通信的幾種方式
使用 volatile 關(guān)鍵字。
鎖機制。
final 關(guān)鍵詞。
ThreadLocal 類。
JUC 包中的相關(guān) lock 類
Jvm內(nèi)存模型
JVM內(nèi)存模型
程序計數(shù)器(記錄當前線程)。
Java棧(虛擬機棧)。
本地方法棧。
堆。
方法區(qū)。
直接內(nèi)存。
JVM 垃圾回收
垃圾判斷標準。
引用計數(shù)法。
可達性分析算法(根索法)。
垃圾回收算法
標記清除。
復(fù)制算法。
標記整理。
分代回收。
GC 垃圾回收器。
垃圾收集器
Serial 垃圾收集器(單線程、復(fù)制算法) (新生代)。
ParNew 垃圾收集器(Serial+多線程) (新生代)。
Parallel Scavenge 收集器(多線程復(fù)制算法、高效) (新生代)。
Serial Old 收集器(單線程標記整理算法 ) (老年代)。
Parallel Old 收集器(多線程標記整理算法)(老年代)。
CMS 收集器(多線程標記清除算法) (老年代)。
G1垃圾回收器。
目前 web 應(yīng)用中的垃圾收集器。
吞吐優(yōu)先與響應(yīng)優(yōu)先。
Minor GC 和 Full GC。
Full Gc 觸發(fā)條件。
對象內(nèi)存布局。
為什么新生代存在兩個 survivor 區(qū)。
一個對象真正不可用,要經(jīng)歷兩次標記過程。
MySQL
什么是數(shù)據(jù)庫事務(wù)、數(shù)據(jù)庫事務(wù)的四個特性是什么。
請分別舉例說明幻讀和不可重復(fù)讀、并描述一下它們之間的區(qū)別。
MySQL 的默認隔離級別是什么。
為什么要使用索引。
索引這么多優(yōu)點,為什么不對表中每個字段都創(chuàng)建索引呢。
索引是如何提升查詢速度的。
請說出你知道的索引失效的幾種情況。
什么是聚簇索引與非聚簇索引
MySQL 索引主要使用的數(shù)據(jù)結(jié)構(gòu)有哪些。
談?wù)?MyISAM 和 InnoDb 實現(xiàn) BTree 索引方式的區(qū)別。
什么是覆蓋索引、請舉例說明。
談?wù)勀銓ψ钭笄熬Y原則的理解。
MySQL 中 InnoDb 和 MyISAM 有什么區(qū)別。
談?wù)勅绾螌QL進行優(yōu)化。
如何用 explain 分析 SQL 執(zhí)行效率。
explain 顯示的字段具體解釋下。
請舉出可能形成數(shù)據(jù)庫死鎖的原因、如何能避免死鎖。
數(shù)據(jù)庫中的樂觀鎖和悲觀鎖有什么區(qū)別、各適用于什么場景。
請結(jié)合你的開發(fā)經(jīng)歷,談?wù)剶?shù)據(jù)庫中的樂觀鎖和悲觀鎖是具體如何被應(yīng)用的。
索引的本質(zhì)。
MySQL 存儲引擎。
MySQL 索引
數(shù)據(jù)結(jié)構(gòu),B-Tree 和 B+Tree。
帶有順序訪問指針的 B+Tree
索引的物理存儲。
與 B-Tree 相比,B+Tree 有什么不同。
為什么 B+Tree 更適合做文件索引。
為什么不用 AVL 樹或者紅黑樹做索引。
兩種引擎的索引存儲機制。
MyISAM 索引實現(xiàn)。
InnoDB 索引實現(xiàn)。
索引失效條件。
索引類型
哈希索引。
有序數(shù)組。
B+ 樹索引(InnoDB)。
聯(lián)合索引。
最左前綴原則。
覆蓋索引。
索引下推。
Spring
Spring bean 的生命周期
初始化容器。
Bean 屬性注入、更改以及初始化。
Bean 的使用。
關(guān)閉容器、銷毀 Bean。
Spring如何解決 bean 的循環(huán)依賴
容器循環(huán)依賴。
setter循環(huán)依賴。
構(gòu)造器循環(huán)依賴
Bean 的加載過程
BeanFactory 和 FactoryBean 的區(qū)別
Bean 注冊與使用
Spring 三級緩存如何解決循環(huán)依賴。
Spring事務(wù)、原理、傳播行為、失效條件。
AOP
IOC
SpringBoot 自動注入原理、stater原理、啟動流程。
Spring 事務(wù)管理原理。
分布式
Dubbo 支持哪些協(xié)議、每種協(xié)議的應(yīng)用場景、優(yōu)缺點。
Dubbo 超時時間怎樣設(shè)置。
Dubbo 有些哪些注冊中心。
Dubbo 集群的負載均衡有哪些策略。
Dubbo 的主要應(yīng)用場景。
Dubbo 的核心功能。
Dubbo 的核心組件。
Dubbo 服務(wù)注冊與發(fā)現(xiàn)的流程。
Dubbo 的服務(wù)調(diào)用流程。
Dubbo 支持哪些協(xié)議、每種協(xié)議的應(yīng)用場景、優(yōu)缺點。
Dubbo 的注冊中心集群掛掉,發(fā)布者和訂閱者之間還能通信么。
Dubbo與 Spring 的關(guān)系。
Dubbo 使用的是什么通信框架。
Dubbo 的集群容錯方案有哪些。
Dubbo 支持哪些序列化方式。
zookpeer
zookpeer 節(jié)點類型。
zookpeer 的作用。
zookpeer 的 watcher 機制。
zookpeer 如何實現(xiàn)分布式鎖。
zookpeer 選舉算法。
Paxos 算法。
Raft 算法。
ZAB 協(xié)議。
什么是分布式事務(wù)。
分布式事務(wù)解決方案。
了解 seata 嗎。
一致性哈希?
哈希槽、以及為什么是2^14。
SpringCloud組件?
什么是 Hystrix、它如何實現(xiàn)容錯。
什么是 RestTemplate。
什么是 Ribbn。
nacos/Eureka 的對比。
什么是 zuul。
什么是 Getway。
什么是 Config。
什么是微服務(wù)
什么是SOA。
SOA和微服務(wù)的區(qū)別。
為什么要用微服務(wù)。
使用微服務(wù)存在的問題以及解決辦法。
微服務(wù)之間如何通信。
微服務(wù)如何發(fā)現(xiàn)。
微服務(wù)掛了、如何解決。
重試機制、冪等性。
限流
熔斷、降級
Linux
linux 常用命令有哪些、分別舉例。
查詢 3306 端口占用情況的 linux 指令如何寫。
linux 中查看某個 java 進行的進程號 pid、如何操作呢。
進程通信方式。
進程、線程、協(xié)程。
進程調(diào)度算法。
Liunx下的 I/O 模型。
用戶態(tài)、內(nèi)核態(tài)。
如何減少內(nèi)核態(tài)到用戶態(tài)的拷貝(mmap)。
常用的命令。
查看日志。
如何復(fù)習(xí)
Java籠統(tǒng)一點來講,無非是:JUC、多線程、鎖、集合、基礎(chǔ)知識、框架、分布式。
一個知識體系一定要一塊學(xué),
比如 JUC,這個是一個很大的包,系統(tǒng)學(xué)習(xí)會比較消耗時間,但是收益也是比較不錯的,能夠吧一些細節(jié)的點都串聯(lián)起來,這樣記憶比較更深刻一些
比如 HashMap 可以揉碎了學(xué)習(xí),為什么0.75的負載因子,為什么要無符號右移16位?為什么是2的倍數(shù)?為什么是8而不是7、9?
**工具類的東西很容易被替代,**曾今的 SSH 現(xiàn)在的 Spring-Boot、Cloud,也許過幾年之后又是新花樣,但技術(shù)底層是差不多的原理,了解了底層,不僅有助于問題的排查,對于程序猿的整個晉升的道路而言,更是不錯的一種思維、學(xué)習(xí)方式。
忌諱東一榔頭,西一棒槌的學(xué)習(xí),那樣知識為了應(yīng)付面試,面試過了,很容易就會忘。
一般這樣的一個順序:
看源碼,摳細節(jié)
看博客、公眾號的相應(yīng)解釋
自己總結(jié)一遍,寫到自己的MD文件或者博客里
一周之后,或者幾天之后在復(fù)習(xí)一遍,(艾賓浩斯遺忘曲線)溫故而知新
刷題
刷題兩個好地方:
牛客,也是我推薦大家去的,所有題目免費,而且基本上都有大佬們討論
LeetCode,這個也可以,但是相應(yīng)地會收取一定的費用,VIP之類的
字節(jié)跳動對于算法十分鐘愛,幾乎每一面都會至少兩到算法題,所以,要想進字節(jié),至少倆月算法題刷起來。
不要扯什么算法不重要,程序猿搞不定算法就像廚子不會顛勺,司機不會掛擋。
TCP/IP 任務(wù)調(diào)度
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。