java技術棧
- 針對技術棧學習
- 1. java基礎
- 2. web方面
- 2.1 SpringMVC的架構設計
- 2.1.1 servlet開發存在的問題
- 2.1.2 SpringMVC爲解決上述問題開發的幾大組件及接口
- 2.1.3 DispatcherServlet、容器、組件三者之間的關係
- 2.1.4 敘述SpringMVC對請求的整體處理流程
- 2.1.5 SpringBoot
- 2.2 SpringAOP源碼
- 2.3 Spring事務體系源碼以及分佈式事務Jotm Atomikos源碼實現
- 2.4 數據庫隔離級別
- 2.5 數據庫
- 2.6 ORM框架: mybatis、Hibernate
- 2.7 SpringSecurity、shiro、SSO(單點登錄)
- 2.8 日誌
- 2.9 datasource
- 2.10 HTTPS的實現原理
- 2.11 網絡基礎
- 3. 分佈式、java中間件、web服務器等方面
- 3.1 ZooKeeper源碼
- 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的設計原理
- 4.大數據方向
針對技術棧學習
1. java基礎
1.1 算法
0贊, 時間複雜度均爲O(n^2)
- 冒泡排序, 需要空間n + 1,; 時間複雜度比較比較需要(n + 1) * n/2; 交換最少爲0, 最大爲(n + 1) * n/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;
- 106贊 (圖解算法—希爾排序)
希爾排序: 希爾排序是插入排序的變種, 邏輯間隔分組排序, 時間複雜度比較難算, 有一種分組(1, 5, 19, 41,
…)的時間複雜度爲O(n^1.3); 大大的有進步, 了不起
9贊 , 直接選擇排序: 比選擇排序還是要好一點的, 是在未排序的數組中比較, 但是時間複雜度仍然是O(n^2)
講的不好, 看不懂
1贊, 圖看懂一些
46贊 , 還是上一篇1讚的寫的好一些
快速排序: 時間複雜度爲O(n * log(n)), 取基準數來不斷分割數組的一種排序(分治法的思想)
20贊, 堆排序利用完全二叉樹的數據結構來排序, 分爲大頂堆和小頂堆; 時間複雜度爲O(n * log(n))
42贊, 歸併排序; 時間複雜度O(n * log(n)), 空間複雜度: O(n); 爲穩定的排序法
2贊, 基數排序, 把數拆分成個位, 十位, 百位… 從個位到頂級位依次比較, 是一種穩定的排序算法, 時間複雜度爲: O (nlog®m),其中r爲所採取的基數,而m爲堆數; 這裏對基數和堆數的定義不明, 先放着
32贊, 比較好懂; 二叉查找樹: 根節點比左葉子要大, 比右葉子要小; 查詢的時間複雜度: O(log(n)), 極端不平衡的狀態下時間複雜度爲O(n); 中序遍歷: 不懂
191贊, 中序遍歷: 左節點 -> 根節點-> 右節點的遍歷
- 紅黑樹特性:
1.1. 根節點爲黑色
1.2. 節點有兩種可能顏色, 黑色; 紅色;
1.3. 一個紅黑樹中, 任意根節點到葉子節點的路徑上黑節點的數量相等
1.4. 根節點爲nil時爲黑色
1.5. 紅色節點的兩個子節點必然爲黑色- 應用場景: TreeSet,TreeMap
- 時間複雜度: O(log(n))
1.2 基本
2贊, 沒用, 實在是他孃的看不懂
106贊
1.3 設計模式
1.3.1 創建型模式
2019-10-16: 將七種原則用於技術分享
- 單例模式: 餓漢模式天生線程安全; 2. 在多線程中懶漢模式需要點操作來保證線程安全; 3. 使用場景: 對有限資源的使用, 比如打印機
登記式模式是最好的
- 原型模式
- 工廠方法模式
- 抽象工廠模式
- 建造者模式
1.3.2 結構型模式
1.3.3 行爲型模式
定義: 多個對象間存在一對多的依賴關係, 當一個對象的狀態發生改變時, 所有依賴於它的對象都得到通知並被自動更新
1.4 正則表達式
1.5 java內存模型以及垃圾回收算法
1.5.1 虛擬機加載機制
65贊, 有點複雜, java虛擬機分爲
111贊, 太長了, 喫不消看; 前面部分講的跟樓上是一樣的
38贊, 說的挺好
- 類加載過程
1.1 加載: 將類的class文件讀入到內存
1.2 鏈接: 1. 驗證; 2. **準備: **: 爲類的靜態變量分配內存,並設置默認初始值; 3. 解析: 符號引用替換成直接引用
1.3 初始化: 執行用戶定義的程序代碼- 類加載時機
列舉幾個: 1. 創建一個對象時, 2. 調用一個類的靜態變量 3. 調用一個靜態方法; 4. 反射調用方法; 5. 子類加載時對調用父類加載- 類加載器:
沒用- 類加載機制:
4.1 全盤負責
4.2 雙親委託: java核心api中定義類型不會被隨意替換
4.3 緩存機制: 更改了class之後需要重啓jvm的原因
1.5.2 虛擬機內存區域
突然放上來的兩幅圖, 看不懂
java內存區域: Jvm 運行時將數據在內存分區域存儲
內存模型: JVM 在計算機內存(RAM)中的工作方式
41贊
java的虛擬機爲hot spot
android的虛擬機是dalvik, 他需要的編譯文件(dex文件)可以從class文件轉化而來
Java虛擬機規範定義
HotSpot實現
- Java虛擬機棧和本地方法棧合二爲一
- 元數據區取代了本地方法區, 且元數據區不在java虛擬機中, 而是在本地方法區中
- 運行時常量池由方法區移到了堆中
1.5.3 垃圾回收
這裏是引用
這裏是引用
內存溢出是存了大於數據類型數據大小的數據
內存泄漏是, 沒有及時回收內存
2. web方面
2.1 SpringMVC的架構設計
2.1.1 servlet開發存在的問題
映射問題、參數獲取問題、格式化轉換問題、返回值處理問題、視圖渲染問題
3贊, 太複雜, 看不懂
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 日誌
log4j, log4j2, jul, logback 都是日誌的具體實現, 而common-logging(動態)和slf4j(靜態)則是作爲門面來使用
16年的文章, 日誌可記錄在控制檯, 文件, 數據庫, 也可配置日誌記錄級別, 定時記錄日誌.
2.9 datasource
3贊, 每次請求連接數據庫耗時大約爲140ms, 而使用連接池耗時大約10-20ms
2.10 HTTPS的實現原理
拜阮一峯大神, 用於加密通訊;
1.針對問題 = > 解決方法:
__1.1. 竊聽 => 加密傳播
__1.2. 篡改 => 校驗機制
__1.3. 冒充 => 身份證書
2. 握手增加到4次
64贊
精髓是: 非對稱加密加密對稱加密
2.11 網絡基礎
7贊, 比喻打的賊有意思
3. 分佈式、java中間件、web服務器等方面
3.1 ZooKeeper源碼
Zookeeper:
- 是一個分佈式框架, 是Apache Hadoop的一個子項目, 主要用來解決分佈式應用中經常遇到的一些數據管理問題, 如 統一命名服務, 狀態同步服務, 集羣管理, 分佈式應用的配置管理
- zookeeper=文件系統+監聽通知機制
- 比較簡單的分佈式應用配置管理: 監聽到了然後改唄
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的設計原理
17贊, 看不懂, 沒用
0贊, tomcat7默認使用bio, 默認併發150個線程; tomcat8之後默認使用nio, 基於緩衝區的io;
當併發超過250個時應考慮集羣; apr是異步非阻塞, nio是同步非阻塞, bio是同步阻塞
2贊, 看不懂
對上文一坨文字的解釋, 做了一個圖來表示, servlet作爲最內層被包裝的對象; 其他沒看懂, 估計是做了層層處理