本文首發於cartoon的博客
轉載請註明出處:https://cartoonyu.github.io/c...java
java
-
sleep與wait的區別git
-
做用對象github
- sleep是Thread類的靜態方法,做用於當前線程
- wait是Object類的成員方法,做用於對象自己
-
做用算法
- 調用sleep方法,線程進入休眠狀態
- 調用wait方法,線程進入阻塞狀態
-
鎖的釋放spring
- sleep不會釋放持有的鎖
- wait會釋放鎖
-
喚醒後端
- 天然喚醒或者顯式調用interrupt方法
- 調用notify或者notifyAll方法
-
調用api
- sleep不須要在同步代碼中調用
- wait須要在同步代碼中調用,不然拋出IllegalMonitorStateException
-
使用場景數組
- sleep做用於週期性任務的執行
- wait做用於互斥資源的使用
-
hashMap的擴容機制瀏覽器
-
相關成員屬性安全
-
HashMap是JAVA集合框架的一個存儲key-value對的實現類,有關於擴容機制的成員屬性主要有三個
- 默認值爲16的capicity
- 默認值爲0.75的loadFactory
- 默認值爲0的size
-
觸發時機
- 插入元素時
-
實現
-
JDK 1.7
- 傳入newCapicity參數
- 新建newCapicity長度的Entry數組
- 將原數組元素從新hash放入新數組
- 將原有數組引用指向新數組
-
JDK 1.8以後
- 若是節點的鏈表元素個數大於8時,原有的數組鏈表會轉換成數組紅黑樹的邏輯結構進行使用
-
若是當前size大於loadFactory*capicity的閾值,觸發擴容機制
- 新建一個newCap的int變量,大小爲2*oldCapicity
- 新建一個大小爲newCap的數組
- 原數組元素索引進行2次冪的計算放入新數組
- 將newCap賦值給原有的capicity
- 返回新數組
-
ReentantLock的瞭解
-
存在位置
- ReentantLock是JDK的一個顯式鎖的API,具體經過AQS隊列實現功能
-
鎖的種類
- ReentantLock是可重入的鎖,內部經過判斷state當前佔有線程進行重入的判斷
- ReentantLock能夠實現公平鎖以及非公平鎖,在構造對象時顯式傳入fair
-
同步機制
- ReentantLock是同步非阻塞式的,採用樂觀併發策略
- ReentantLock須要顯式控制鎖的獲取與釋放,並且能夠響應中斷
-
List實現類的比較
-
底層實現
- Arraylist爲數組
- LinkedList爲鏈表
-
線程安全
- ArrayList,LinkedList爲線程不安全
- Vector爲線程安全
-
實現時間
- ArrayList,LinkedList爲JDK1.2開始實現
- Vector爲JDK1.1開始實現
-
NIO的瞭解
- NIO是java中用於實現數據的輸入/輸出的API,是同步非阻塞式的
-
核心對象
- selector,選擇器,用於對channel的選擇
- channel,通道,用於鏈接java程序與對象的通道
- buffer,緩衝區,用於數據的暫時存放
-
工做步驟
- java程序與操做對象創建channel
- 數據放入buffer中
- selector輪詢channel,監控IO情況,控制輸入輸出
-
ConcurrentHashMap同步的實現(JDK1.7 1.8)
-
JDK1.7實現
- ConcurrentHashMap中數據存放在Segment(默認爲16個)中
- ConcurrentHashMap爲區域鎖,鎖定對象是Segment
- 在寫數據時,會通過計算得出使用的Segment,並檢查是否持有Segment的鎖
-
JDK1.8實現
- ConcurrentHashMap中數據存放在數組鏈表/紅黑樹中
- ConcurrentHashMap是行級鎖,鎖定對象是鏈表的頭結點或者紅黑樹的根結點
- 在寫數據,計算訪問的數據索引,檢查鎖,訪問鏈表或者紅黑樹
JVM
-
G1的工做流程
- 初始標記
- 併發標記
- 最終標記
- 篩選回收
-
CMS的工做流程
- 初始標記(stw現象)
- 併發標記
- 從新標記(stw現象)
- 併發清理
- 重置線程
Spring
-
spring bean的生命週期
- 對象被實例化
- Spring進行IOC的注入
-
可選
-
傳入對象
- 實現BeanNameAware接口,傳入bean的ID
- 實現ApplicationFactoryAware接口,傳入Spring工廠
- 實現ApplicationContextAware接口,傳入Spring上下文
-
初始化
- 實現BeanPostProcessor接口,對bean內容進行修改
- 使用
- 清理
網絡
-
輸入域名到返回頁面的過程
-
瀏覽器部分
- 利用DNS進行域名解析
- 檢查本地host文件
- 組裝http報文
- http報文通過OSI底層包裝發送請求
- http請求在第三次tcp握手上發送
-
傳輸
- 路由器根據IP進行選擇轉發到目標主機
- 目標主機
- 後端進行報文的拆解獲取真實請求
- 根據請求返回相應頁面
- 傳輸
- 路由器根據IP進行選擇轉發到目標主機
- 源主機
- 拆解報文,獲取實部數據
- 交給瀏覽器渲染頁面
算法
- 兩數之和(leetcode 1)