java知識樹教程

  1. 學習Java的9張思維導圖
  2. 各類技術棧總覽

針對技術棧學習

java技術棧-1.0
java技術棧-2.0

1. java基礎

1.1 算法
  1. 圖解排序算法(一)之3種簡單排序(選擇、冒泡、直接插入)

0贊, 時間複雜度均爲O(n^2)

  1. 冒泡排序, 需要空間n + 1,; 時間複雜度比較比較需要(n + 1) * n/2; 交換最少爲0, 最大爲(n + 1) * n/2;
  2. 選擇排序, 需要空間n + 1; 比較次數: 太難算了, 是count這個數
public static void main(String[] args) {
            int count = 0;
            int n = 1;
            for (int i = 0; i < n; i++ ){
                for(int j = n; j > i; j--){
                    count++;
                }
            }
            System.out.println(count);
        }

交換次數: n - 1
3. 直接插入排序: 比較最多: (n + 1) * n/2;
交換最多: (n + 1) * n/2;

  1. 106贊 (圖解算法—希爾排序)

希爾排序: 希爾排序是插入排序的變種, 邏輯間隔分組排序, 時間複雜度比較難算, 有一種分組(1, 5, 19, 41,
…)的時間複雜度爲O(n^1.3); 大大的有進步, 了不起

  1. 理論基礎 —— 排序 —— 直接選擇排序

9贊 , 直接選擇排序: 比選擇排序還是要好一點的, 是在未排序的數組中比較, 但是時間複雜度仍然是O(n^2)

  1. 菜鳥, 快速排序

講的不好, 看不懂

快速排序——詳細且簡單易懂的講解

1贊, 圖看懂一些

快速排序—(面試碰到過好幾次)

46贊 , 還是上一篇1讚的寫的好一些

快速排序: 時間複雜度爲O(n * log(n)), 取基準數來不斷分割數組的一種排序(分治法的思想)

  1. 五分鐘弄懂有點難度的排序:堆排序

20贊, 堆排序利用完全二叉樹的數據結構來排序, 分爲大頂堆和小頂堆; 時間複雜度爲O(n * log(n))

  1. [圖解] 歸併排序

42贊, 歸併排序; 時間複雜度O(n * log(n)), 空間複雜度: O(n); 爲穩定的排序法

2贊, 基數排序, 把數拆分成個位, 十位, 百位… 從個位到頂級位依次比較, 是一種穩定的排序算法, 時間複雜度爲: O (nlog®m),其中r爲所採取的基數,而m爲堆數; 這裏對基數和堆數的定義不明, 先放着


32贊, 比較好懂; 二叉查找樹: 根節點比左葉子要大, 比右葉子要小; 查詢的時間複雜度: O(log(n)), 極端不平衡的狀態下時間複雜度爲O(n); 中序遍歷: 不懂

191贊, 中序遍歷: 左節點 -> 根節點-> 右節點的遍歷

  1. 紅黑樹特性:
    1.1. 根節點爲黑色
    1.2. 節點有兩種可能顏色, 黑色; 紅色;
    1.3. 一個紅黑樹中, 任意根節點到葉子節點的路徑上黑節點的數量相等
    1.4. 根節點爲nil時爲黑色
    1.5. 紅色節點的兩個子節點必然爲黑色
  2. 應用場景: TreeSet,TreeMap
  3. 時間複雜度: O(log(n))
1.2 基本
  1. 對於JVM中方法區,永久代,元空間以及字符串常量池的遷移和string.intern方法

2贊, 沒用, 實在是他孃的看不懂

  1. Java技術——你真的瞭解String類的intern()方法嗎

106贊

1.3 設計模式
1.3.1 創建型模式

設計模式

2019-10-16: 將七種原則用於技術分享

  1. java單例模式
  1. 單例模式: 餓漢模式天生線程安全; 2. 在多線程中懶漢模式需要點操作來保證線程安全; 3. 使用場景: 對有限資源的使用, 比如打印機

單例模式的三種實現 以及各自的優缺點

登記式模式是最好的

  1. 原型模式
  2. 工廠方法模式
  3. 抽象工廠模式
  4. 建造者模式
1.3.2 結構型模式
1.3.3 行爲型模式
  1. 觀察者模式(Observer模式)詳解

定義: 多個對象間存在一對多的依賴關係, 當一個對象的狀態發生改變時, 所有依賴於它的對象都得到通知並被自動更新

1.4 正則表達式
1.5 java內存模型以及垃圾回收算法
1.5.1 虛擬機加載機制
  1. JVM——Java虛擬機架構

65贊, 有點複雜, java虛擬機分爲

  1. 類加載器: 將.class文件加載到java執行時數據區, 類加載機制, 使用雙親委派模型
  2. 執行引擎: 執行字節碼, 或執行本地方法
  3. 執行時數據區: 分爲:
    3.1. 只屬於當前線程的私有區
    __3.1.1. pc計數器: 存當前線程跑到哪兒了
    __3.1.2. jvm棧: 局部變量表, 方法出口
    __3.1.3. 本地方法棧: 爲Native方法服務
    3.2. jvm共享的公有區
    __3.2.1. 堆: 存實例對象
    __3.2.2. 方法區: 存.class(編譯後的代碼), 類信息
    ____3.2.2.1. 運行時常量池: 存常量(編譯期已可知的常量)
  1. Java虛擬機(JVM)你只要看這一篇就夠了!

111贊, 太長了, 喫不消看; 前面部分講的跟樓上是一樣的

  1. jvm之java類加載機制和類加載器(ClassLoader)的詳解
    在這裏插入圖片描述

38贊, 說的挺好

  1. 類加載過程
    1.1 加載: 將類的class文件讀入到內存
    1.2 鏈接: 1. 驗證; 2. **準備: **: 爲類的靜態變量分配內存,並設置默認初始值; 3. 解析: 符號引用替換成直接引用
    1.3 初始化: 執行用戶定義的程序代碼
  2. 類加載時機
    列舉幾個: 1. 創建一個對象時, 2. 調用一個類的靜態變量 3. 調用一個靜態方法; 4. 反射調用方法; 5. 子類加載時對調用父類加載
  3. 類加載器:
    沒用
  4. 類加載機制:
    4.1 全盤負責
    4.2 雙親委託: java核心api中定義類型不會被隨意替換
    4.3 緩存機制: 更改了class之後需要重啓jvm的原因
1.5.2 虛擬機內存區域
  1. Java內存區域(運行時數據區域)和內存模型(JMM)

突然放上來的兩幅圖, 看不懂
java內存區域: Jvm 運行時將數據在內存分區域存儲
內存模型: JVM 在計算機內存(RAM)中的工作方式

  1. Java內存模型原理,你真的理解嗎?

41贊

  1. Java虛擬機詳解(一)------簡介

java的虛擬機爲hot spot
android的虛擬機是dalvik, 他需要的編譯文件(dex文件)可以從class文件轉化而來

  1. Java虛擬機詳解(二)------運行時內存結構

Java虛擬機規範定義
HotSpot實現

  1. Java虛擬機棧和本地方法棧合二爲一
  2. 元數據區取代了本地方法區, 且元數據區不在java虛擬機中, 而是在本地方法區中
  3. 運行時常量池由方法區移到了堆中
1.5.3 垃圾回收
  1. 五分鐘瞭解JAVA垃圾回收

這裏是引用

  1. Java垃圾回收

這裏是引用

  1. 內存溢出和內存泄漏的區別

內存溢出是存了大於數據類型數據大小的數據
內存泄漏是, 沒有及時回收內存

2. web方面

2.1 SpringMVC的架構設計
2.1.1 servlet開發存在的問題

映射問題、參數獲取問題、格式化轉換問題、返回值處理問題、視圖渲染問題

  1. Spring MVC是如何逐步簡化Servlet的編程的

3贊, 太複雜, 看不懂

  1. JavaWeb開發模式的發展歷程

5贊, 1. 純servlet -> 2. 純jsp -> 3. jsp + javaBean -> 4. jsp + javaBean + servlet (也就是MVC模式);

2.1.2 SpringMVC爲解決上述問題開發的幾大組件及接口

HandlerMapping、HandlerAdapter、HandlerMethodArgumentResolver、HttpMessageConverter、Converter、GenericConverter、HandlerMethodReturnValueHandler、ViewResolver、MultipartResolver

2.1.3 DispatcherServlet、容器、組件三者之間的關係
2.1.4 敘述SpringMVC對請求的整體處理流程
2.1.5 SpringBoot
2.2 SpringAOP源碼
2.2.1. AOP的實現分類

編譯期、字節碼加載前、字節碼加載後三種時機來實現AOP

2.3 Spring事務體系源碼以及分佈式事務Jotm Atomikos源碼實現
2.4 數據庫隔離級別
2.5 數據庫
2.6 ORM框架: mybatis、Hibernate
2.7 SpringSecurity、shiro、SSO(單點登錄)
2.8 日誌
  1. 10分鐘搞定–混亂的 Java 日誌體系

log4j, log4j2, jul, logback 都是日誌的具體實現, 而common-logging(動態)和slf4j(靜態)則是作爲門面來使用

  1. JAVA - 優雅的記錄日誌(log4j實戰篇)

16年的文章, 日誌可記錄在控制檯, 文件, 數據庫, 也可配置日誌記錄級別, 定時記錄日誌.

2.9 datasource
  1. C3P0連接池使用教程

3贊, 每次請求連接數據庫耗時大約爲140ms, 而使用連接池耗時大約10-20ms

2.10 HTTPS的實現原理
  1. SSL/TLS協議運行機制的概述

拜阮一峯大神, 用於加密通訊;
1.針對問題 = > 解決方法:
__1.1. 竊聽 => 加密傳播
__1.2. 篡改 => 校驗機制
__1.3. 冒充 => 身份證書
2. 握手增加到4次

  1. Https原理及流程

64贊
精髓是: 非對稱加密加密對稱加密

2.11 網絡基礎
  1. 爲什麼有了MAC地址還要有IP地址(簡單易懂)

7贊, 比喻打的賊有意思

3. 分佈式、java中間件、web服務器等方面

3.1 ZooKeeper源碼
  1. Zookeeper入門看這篇就夠了

Zookeeper:

  1. 是一個分佈式框架, 是Apache Hadoop的一個子項目, 主要用來解決分佈式應用中經常遇到的一些數據管理問題, 如 統一命名服務, 狀態同步服務, 集羣管理, 分佈式應用的配置管理
  2. zookeeper=文件系統+監聽通知機制
  3. 比較簡單的分佈式應用配置管理: 監聽到了然後改唄
3.2 序列化和反序列化框架
3.3 RPC框架dubbo源碼
3.4 NIO模塊以及對應的Netty和Mina、thrift源碼
3.5 消息隊列kafka、RocketMQ、Notify、Hermes
3.6 數據庫的分庫分表mycat
3.7 NoSql數據庫mongodb
3.8 KV鍵值系統memcached redis
3.9 web服務器tomcat、ngnix的設計原理
  1. Tomcat整體架構淺析

17贊, 看不懂, 沒用

  1. 一個Tomcat最多支持多少用戶的併發?

0贊, tomcat7默認使用bio, 默認併發150個線程; tomcat8之後默認使用nio, 基於緩衝區的io;
當併發超過250個時應考慮集羣; apr是異步非阻塞, nio是同步非阻塞, bio是同步阻塞

  1. 分析http請求從瀏覽器到tomcat全過程

2贊, 看不懂

  1. Tomcat處理HTTP請求原理

對上文一坨文字的解釋, 做了一個圖來表示, servlet作爲最內層被包裝的對象; 其他沒看懂, 估計是做了層層處理

4.大數據方向

4.1 Hadoop
4.2 MapReduce
4.3 HDFS
4.4 YARN、Mesos 資源調度
4.5 oozie
4.6 Hive
4.7 Hbase
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章