java知識樹


  1. https://blog.csdn.net/aitaozi11/article/details/79652943 (學習Java的9張思維導圖)

 

 

針對技術棧學習

java技術棧

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);
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

交換次數: 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. java單例模式
  1. 單例模式: 餓漢模式天生線程安全; 2. 在多線程中懶漢模式需要點操作來保證線程安全; 3. 使用場景: 對有限資源的使用, 比如打印機
1.4 正則表達式
1.5 java內存模型以及垃圾回收算法
  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. 運行時常量池: 存常量(編譯期已可知的常量)

Java虛擬機(JVM)你只要看這一篇就夠了!

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

2. web方面

2.1 SpringMVC的架構設計
  1. Spring MVC是如何逐步簡化Servlet的編程的
    備用

3贊, 太復雜, 看不懂

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

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

2.2 SpringAOP源碼
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次

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

3.1 ZooKeeper源碼
3.2 序列化和反序列化框架
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.大數據方向


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM