今年行情這麼差,到底如何進大廠?

從春節過後,我,一位雙非渣本的大三學生,便踏上了實習之旅,面試了不下三十場,雖然很菜,但是也相應地拿了一些 offer ,例如京東金融、人人車等五六家 offer

總結一下春招就是一個字:難。

沒學歷,技術還湊合,簡歷能過但是面試就有點困難。這期間收到了 N 個面試官的歧視,有些面試官感覺骨子裏瞧不起我們這些雙非的人。一下內容僅憑記憶回想起,還有一些必問的東西,總結在這裏,希望能幫到大家!

算法

這個真的就只能靠刷題,不敢說每家公司對於筆試的重視程度怎麼樣,反正筆試基本上是必須要過的一關

  • 隊列。

  • 數組。

  • 棧。

  • 鏈表。

  • 樹。

  • 散列表(哈希表)。

  • 堆。

  • 圖。

  • 無序樹:樹中任意節點的子結點之間沒有順序關係、這種樹稱爲無序樹、也稱爲自由樹。

  • 有序樹:樹中任意節點的子結點之間有順序關係、這種樹稱爲有序樹。

  • 二叉樹:每個節點最多含有兩個子樹的樹稱爲二叉樹。

  • 完全二叉樹。

  • 滿二叉樹。

  • 斜樹。

  • 平衡二叉樹。

  • 霍夫曼樹:帶權路徑最短的二叉樹稱爲哈夫曼樹或最優二叉樹。

  • 紅黑樹。

以及各種遍歷方式、按層打印、統計距離等等。

樹是基礎,基本的數據結構還包括圖、圖的遍歷方式。

DFS、BFS以及各種優缺點、貪心算法、回溯、以及建模等等等等,只能靠刷題來提升。

計算機網絡

  • GET/POST 區別。
  • UDP/TCP區別。
  • TCP 三次握手。以及衍生出來一些列的 TCP 的問題:什麼是 TIME-WAIT、爲什麼可以是三次揮手、爲什麼不能是兩次握手、流量控制、滑動窗口、Nagle 算法、糊塗窗口綜合症、擁塞控制、慢啓動、擁塞避免、快重傳、快恢復、長連接 VS 短連接、應用場景是什麼。
  • HTTP 1.0、1.1、2.0。
  • 說一下 HTTPS 的流程、SSL 是什麼、什麼是非對稱加密、對稱加密、RSA 具體實現。
  • OSI 七層模型是什麼、都有哪些協議、TCP/IP 四層是什麼。
  • DNS、ARP 協議原理。
  • 地址欄輸入 URL 發生了什麼。
  • WebSocket 是什麼。
  • 一些網絡安全問題、比如 DOS 攻擊如何解決、DNS 欺騙如何解決、ARP欺騙、SQL注入、XSS、CSRF、iframe 安全問題、本地存儲數據問題、第三方依賴的安全性問題。
  • HTTP 是不保存狀態的協議、那麼如何保存用戶狀態。
  • Cookie 的作用是什麼、和 Session 有什麼區別。
  • Session 的實現機制是什麼、分佈式環境下有什麼注意事項、如果註銷 Session、設置 Session 的時長如何操作、默認時長是多少。
  • HTTP 1.0 和 HTTP 1.1 的主要區別是什麼。
  • 各種協議與 HTTP 協議之間的關係。
  • Servlet、Filter 和 Listener 分別是什麼,用在什麼地方,JSP 頁面如何進行處理。
  • 請求轉發、URL 重定向和包含有什麼區別,如何實現。
  • 如何判斷遠程機器上某個端口是否開啓,項目中需要查看域名在本地的解析 IP ,如何操作。
  • Servlet 中,調用 JSP 展示元素和返回 String(即 api,一般是 json 數據)有什麼區別。
  • nginx + tomcat 模式下,服務器段如何獲取客戶端請求 IP 。
  • Servlet 的生命週期是什麼。
  • Servlet 是否是線程安全的。

Java基礎

  • 描述一下值傳遞和引用傳遞的區別。

  • == 和 equals 區別是什麼、String 中的 equals 方法是如何重寫的、爲什麼要重寫 equals 方法、爲什麼要重寫 hashCode 方法。

  • String s1 = new String("abc")、String s2 = "abc"、s1 == s2 。語句1在內存中創建了幾個對象。

  • String 爲什麼是不可變的、jdk源碼中的 String 如何定義的、爲什麼這麼設計。

  • 請描述一下 static 關鍵字和 final 關鍵字的用法。

  • 接口和抽象類的區別是什麼。

  • 重載和重寫的區別。

  • 面向對象的三大特性,談談你對 xx 的理解。

  • 考察的是基本類型的轉換,及原碼反碼補碼的運算。

  • byte 的取值範圍是多少、怎麼計算出來的。

  • HashMap 相關、HashMap 和 Hashtable 的區別、HashMap 和 HashSet 區別、HashMap 底層實現、HashMap 的長度爲什麼是 2 的冪次方、HashMap 多線程操作導致死循環問題、HashMap 的線程安全實現有哪些、ConcurrentHashMap 的底層實現。

  • Integer 緩存池。

  • UTF-8 和 Unicode 的關係。

  • 項目爲 UTF-8 環境,char c = ‘中’,是否合法。

  • Arrays.asList 獲得的 List 使用時需要注意什麼。

  • Collection 和 Collections 區別。

  • 你知道 fail-fast 和 fail-safe 嗎。

  • ArrayList 和 LinkedList 和 Vector 的區別。

  • Set 和 List 區別、Set 如何保證元素不重複。

  • UTF-8 與 GBK 互轉、爲什麼會亂碼。

  • 重載和重寫的區別。

  • 爲什麼 Java 是解釋性語言。

  • ConcurrentHashMap 1.7和1.8的區別:整體結構;put()方法、get()方法、resize()方法、size()方法

  • 地址欄輸入 URL 發生了什麼。

  • 組合和聚合的區別。

  • 講一下 CMS 垃圾回收器。

  • JDK 動態代理和 GClib 動態代理、JDK 動態代理具體實現原理、CGLib 動態代理、兩者對比。

  • Threadlocal 內存泄漏問題。

  • StringBuilder 安全怎麼實現的、詳細描述怎麼擴容的。

MyBatis

  • Mybatis 執行流程。

  • Mybatis緩存。

  • Mybatis用到的設計模式。

Java鎖

  • 鎖類型

  • 悲觀鎖 VS 樂觀鎖

    悲觀鎖代表 Synchronized 關鍵字。

    Synchronized 關鍵字實現方法。

    樂觀鎖代表 CAS 操作。

    CAS 帶來的 ABA 問題。

    CAS 帶來的循環時間長開銷大問題。

    CAS 帶來的只能保證一個共享變量的原子操作問題。

    CAS 是如何保證原子操作的。

    AtomticXXX 實現的原理。

    volatile 關鍵字。

    內存可見性的原因。

    禁止指令重排序的原因。

    volatile 關鍵字不能保證原子操作的原因。

    關於 volatile 關鍵字的討論。

    happen-before 規則介紹。

  • 可重入鎖、 可中斷鎖、公平鎖、讀寫鎖

    談談對 AQS 的理解。

    可重入鎖。

    可中斷鎖。

    公平鎖。

    讀寫鎖。

  • 偏向鎖/輕量級鎖/重量級鎖 升級過程。

  • 補充

    自旋鎖。

    分段鎖。

    輕量級鎖就一定比重量級鎖快嗎。

Java多線程

  • 線程與進程的區別

    線程的狀態。

    Notify 和 wait 。

    Thread.sleep() 和 Thread.yield() 的異同。

    死鎖的概念。

    併發和並行的區別。

    線程安全三要素。

    如何實現線程安全。

    保證線程安全的機制。

    談談對對多線程的理解。

    run 和 Start 方法的區別。

  • 多線程

    創建線程的方法。

    線程池創建線程。

    ThreadPoolExecutor介紹。

    BlockingQueue。

    ArrayBlockingQueue。

    LinkedBlockingQueue。

    LinkedBlockingQueue 和 ArrayBlockingQueue 的主要區別。

    handler 拒絕策略。

    線程池五種狀態。

    深入理解 ThreadPoolExecutor。

    線程池中 ctl 屬性的作用是什麼。

    shutdownNow 和 shutdown 的區別。

    線程複用原理。

    靈魂拷問:你如何設置你的線程池參數。

    CountDownLatch 和 CyclicBarrier 區別。

  • 多線程間通信的幾種方式

    使用 volatile 關鍵字。

    鎖機制。

    final 關鍵詞。

    ThreadLocal 類。

    JUC 包中的相關 lock 類

Jvm內存模型

  • JVM內存模型

    程序計數器(記錄當前線程)。

    Java棧(虛擬機棧)。

    本地方法棧。

    堆。

    方法區。

    直接內存。

  • JVM 垃圾回收

    垃圾判斷標準。

    引用計數法。

    可達性分析算法(根索法)。

  • 垃圾回收算法

    標記清除。

    複製算法。

    標記整理。

    分代回收。

    GC 垃圾回收器。

  • 垃圾收集器

    Serial 垃圾收集器(單線程、複製算法) (新生代)。

    ParNew 垃圾收集器(Serial+多線程) (新生代)。

    Parallel Scavenge 收集器(多線程複製算法、高效) (新生代)。

    Serial Old 收集器(單線程標記整理算法 ) (老年代)。

    Parallel Old 收集器(多線程標記整理算法)(老年代)。

    CMS 收集器(多線程標記清除算法) (老年代)。

    G1垃圾回收器。

  • 目前 web 應用中的垃圾收集器。

  • 吞吐優先與響應優先。

  • Minor GC 和 Full GC。

  • Full Gc 觸發條件。

  • 對象內存佈局。

  • 爲什麼新生代存在兩個 survivor 區。

  • 一個對象真正不可用,要經歷兩次標記過程。

MySQL

  • 什麼是數據庫事務、數據庫事務的四個特性是什麼。

  • 請分別舉例說明幻讀和不可重複讀、並描述一下它們之間的區別。

  • MySQL 的默認隔離級別是什麼。

  • 爲什麼要使用索引。

  • 索引這麼多優點,爲什麼不對錶中每個字段都創建索引呢。

  • 索引是如何提升查詢速度的。

  • 請說出你知道的索引失效的幾種情況。

  • 什麼是聚簇索引與非聚簇索引

  • MySQL 索引主要使用的數據結構有哪些。

  • 談談 MyISAM 和 InnoDb 實現 BTree 索引方式的區別。

  • 什麼是覆蓋索引、請舉例說明。

  • 談談你對最左前綴原則的理解。

  • MySQL 中 InnoDb 和 MyISAM 有什麼區別。

  • 談談如何對SQL進行優化。

  • 如何用 explain 分析 SQL 執行效率。

  • explain 顯示的字段具體解釋下。

  • 請舉出可能形成數據庫死鎖的原因、如何能避免死鎖。

  • 數據庫中的樂觀鎖和悲觀鎖有什麼區別、各適用於什麼場景。

  • 請結合你的開發經歷,談談數據庫中的樂觀鎖和悲觀鎖是具體如何被應用的。

  • 索引的本質。

  • MySQL 存儲引擎。

  • MySQL 索引

    數據結構,B-Tree 和 B+Tree。

    帶有順序訪問指針的 B+Tree

    索引的物理存儲。

    與 B-Tree 相比,B+Tree 有什麼不同。

    爲什麼 B+Tree 更適合做文件索引。

    爲什麼不用 AVL 樹或者紅黑樹做索引。

    兩種引擎的索引存儲機制。

    MyISAM 索引實現。

    InnoDB 索引實現。

    索引失效條件。

    索引類型

    哈希索引。

    有序數組。

    B+ 樹索引(InnoDB)。

    聯合索引。

    最左前綴原則。

    覆蓋索引。

    索引下推。

Spring

  • Spring bean 的生命週期

    初始化容器。

    Bean 屬性注入、更改以及初始化。

    Bean 的使用。

    關閉容器、銷燬 Bean。

  • Spring如何解決 bean 的循環依賴

    容器循環依賴。

    setter循環依賴。

    構造器循環依賴

  • Bean 的加載過程

  • BeanFactory 和 FactoryBean 的區別

  • Bean 註冊與使用

  • Spring 三級緩存如何解決循環依賴。

  • Spring事務、原理、傳播行爲、失效條件。

  • AOP

  • IOC

  • SpringBoot 自動注入原理、stater原理、啓動流程。

  • Spring 事務管理原理。

分佈式

  • Dubbo 支持哪些協議、每種協議的應用場景、優缺點。

  • Dubbo 超時時間怎樣設置。

  • Dubbo 有些哪些註冊中心。

  • Dubbo 集羣的負載均衡有哪些策略。

  • Dubbo 的主要應用場景。

  • Dubbo 的核心功能。

  • Dubbo 的核心組件。

  • Dubbo 服務註冊與發現的流程。

  • Dubbo 的服務調用流程。

  • Dubbo 支持哪些協議、每種協議的應用場景、優缺點。

  • Dubbo 的註冊中心集羣掛掉,發佈者和訂閱者之間還能通信麼。

  • Dubbo與 Spring 的關係。

  • Dubbo 使用的是什麼通信框架。

  • Dubbo 的集羣容錯方案有哪些。

  • Dubbo 支持哪些序列化方式。

zookpeer

  • zookpeer 節點類型。

  • zookpeer 的作用。

  • zookpeer 的 watcher 機制。

  • zookpeer 如何實現分佈式鎖。

  • zookpeer 選舉算法。

  • Paxos 算法。

  • Raft 算法。

  • ZAB 協議。

  • 什麼是分佈式事務。

    分佈式事務解決方案。

    瞭解 seata 嗎。

    一致性哈希?

    哈希槽、以及爲什麼是2^14。

  • SpringCloud組件?

  • 什麼是 Hystrix、它如何實現容錯。

  • 什麼是 RestTemplate。

  • 什麼是 Ribbn。

  • nacos/Eureka 的對比。

  • 什麼是 zuul。

  • 什麼是 Getway。

  • 什麼是 Config。

  • 什麼是微服務

    什麼是SOA。

    SOA和微服務的區別。

  • 爲什麼要用微服務。

  • 使用微服務存在的問題以及解決辦法。

  • 微服務之間如何通信。

  • 微服務如何發現。

  • 微服務掛了、如何解決。

  • 重試機制、冪等性。

    限流

    熔斷、降級

Linux

  • linux 常用命令有哪些、分別舉例。

  • 查詢 3306 端口占用情況的 linux 指令如何寫。

  • linux 中查看某個 java 進行的進程號 pid、如何操作呢。

  • 進程通信方式。

  • 進程、線程、協程。

  • 進程調度算法。

  • Liunx下的 I/O 模型。

  • 用戶態、內核態。

  • 如何減少內核態到用戶態的拷貝(mmap)。

  • 常用的命令。

  • 查看日誌。

如何複習

Java籠統一點來講,無非是:JUC、多線程、鎖、集合、基礎知識、框架、分佈式。

一個知識體系一定要一塊學,

比如 JUC,這個是一個很大的包,系統學習會比較消耗時間,但是收益也是比較不錯的,能夠吧一些細節的點都串聯起來,這樣記憶比較更深刻一些

比如 HashMap 可以揉碎了學習,爲什麼0.75的負載因子,爲什麼要無符號右移16位?爲什麼是2的倍數?爲什麼是8而不是7、9?

工具類的東西很容易被替代,曾今的 SSH 現在的 Spring-Boot、Cloud,也許過幾年之後又是新花樣,但技術底層是差不多的原理,瞭解了底層,不僅有助於問題的排查,對於程序猿的整個晉升的道路而言,更是不錯的一種思維、學習方式。

忌諱東一榔頭,西一棒槌的學習,那樣知識爲了應付面試,面試過了,很容易就會忘。

一般這樣的一個順序:

  • 看源碼,摳細節

  • 看博客、公衆號的相應解釋

  • 自己總結一遍,寫到自己的MD文件或者博客裏

  • 一週之後,或者幾天之後在複習一遍,(艾賓浩斯遺忘曲線)溫故而知新

刷題

刷題兩個好地方:

  • 牛客,也是我推薦大家去的,所有題目免費,而且基本上都有大佬們討論

  • LeetCode,這個也可以,但是相應地會收取一定的費用,VIP之類的

字節跳動對於算法十分鐘愛,幾乎每一面都會至少兩到算法題,所以,要想進字節,至少倆月算法題刷起來。

不要扯什麼算法不重要,程序猿搞不定算法就像廚子不會顛勺,司機不會掛擋。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章