日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

一个会画图的工程师

發布時間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个会画图的工程师 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

發現小謝圖畫的很好,雖然有些也是他引用的,但是我覺得還是很好所以這里收集下。

?【RocketMQ源碼學習】2-Namesrv

3-Remoting模塊?

rocketmq-remoting 模塊是 RocketMQ 中負責網絡通信的模塊,被其他所有需要網絡通信的模塊依賴。它是基于 Netty 實現的,避免了網絡編程很多 tricky 的問題。

首先來看下 RocketMQ NettyServer 的 Reactor 線程模型,一個 Reactor 主線程負責監聽 TCP 連接請求,建立好連接后丟給 Reactor 線程池,它負責將建立好連接的 socket 注冊到 selector 上去(這里有兩種方式,NIO和Epoll,可配置),然后監聽真正的網絡數據。拿到網絡數據后,再丟給 Worker 線程池。
Worker 拿到網絡數據后,就交給 Pipeline,從 Head 到 Tail 一個個 Handler 的走下去,這些 Handler 是在創建 Server 的時候指定的。NettyEncoder 和 NettyDecoder 負責網絡數據和 RemotingCommand 之間的編解碼。NettyServerHandler 拿到解碼得到的 RemotingCommand 后,根據 RemotingCommand.type 來判斷是 request 還是 response,如果是 request, 就根據 RomotingCommand 的 code(code用來標識不同類型的請求) 去 processorTable 找到對應的 processor,然后封裝成 task 后,丟給對應的 processor 線程池, 如果是 response 就根據 RemotingCommand.opaque 去 responseTable 中拿到對應的 ResponseFuture,把結果 set 給它。

對于 Client,經過 Pipeline 的順序是從 Tail 到 Head。不管是 Server 和 Client,并不是每次數據流轉都得經過所有的 Handler,而是會根據 Context 中的一些信息去判斷。

整個數據流轉過程中還有很多hook, 比如處理 command 前,處理 command 后,發送數據前,發送數據后等。

?

【RocketMQ源碼學習】4-消息發送?

?Broker端,消息的處理和落地

【RocketMQ源碼學習】5-消息消費?

Pull 的過程比較簡單(因為應用代碼要去做比較多的事情),所以這里我主要來梳理一下 Push 方式的整個過程。

【RocketMQ源碼學習】6-消息存儲?

寫消息MappedFile Append Message

MappedFile 和物理文件是一一對應的,append的過程,消息的具體構成如圖所示,大部分字段都很好理解,這里重點關注下 queueOffset 和 physicaloffset. queueOffset 是指對應的 consumeQueue 中的 offset, physicaloffset 是指該消息的物理offset,即圖中的 wroteOffset, 它等于 fileFromOffset(當前mappedFile的物理offset) 加上 mappedFile 對應的 buffer 的 position(一個邏輯的offset).

ReputMessageService 也是一個單獨的線程,它負責構建 ConsumeQueue 和 Index。

ConsumeQueue的結構如圖:

Index File

Java Nio

作者jjenkov最后寫了一個nio demo?https://github.com/fdx321/java-nio-server. 過了一遍源碼,工作過程大致如圖:

【Tomcat學習筆記】2-整體架構

下面是Tomcat的整體架構

?

這個類圖是Tomcat最主要的一個結構:

?

Engine、Host、Context、Wrapper 四種 Container 都可以配置?Valve,即使不配置,每個 Container 代碼里都有默認的Valve(StandardEngineValve, StandardHostValve …)是處理請求的時候必須經過的。關于 Pipeline 和 Valve,就是一個水管中間有多個閥門,每個數據流過來都在閥門的地方被處理一下。 四個容器的Pipeline串起來,可以用張圖來描述一下:

?

【Tomcat學習筆記】3-組件聲明周期?

LifecycleState?這個枚舉類定義了生命周期的各個階段,這個狀態機是這樣子滴:

【Tomcat學習筆記】4-啟動流程分析

它們是如何一層一層完成初始化和啟動的

以StandardServer為例:

如下面的時序圖所示:

【Tomcat學習筆記】9-ClassLoader

Tomcat的三大ClassLoader

為什么 Tomcat 里要自定義 ClassLoader 呢,先來考慮一個問題:一個Tomcat 部署兩個應用,App1 和 App2, App1 里定義了一個 com.fdx.AAA 類,App2 也定義了一個 com.fdx.AAA 類,但是里面的實現是不一樣的,如果不自定義 ClassLoader,
而都用 AppClassLoader 來加載的話,你讓它加載哪一個呢,一個 ClassLoader 是不能加載兩個一樣的類的。所以,ClassLoader 最重要的一個功能就是 類隔離。

?

【Tomcat學習筆記】14-Cluster?

Tomcat Cluster 這塊代碼較多,代碼主要在 org.apache.catalina.ha 和 org.apache.catalina.tribes 兩個package. ha這個package主要做了兩件事,或者說Tomcat cluster 主要就做了這兩件事:集群間 Session 同步 和 集群War部署。tribes 則是Tomcat 集群通訊模塊。

Tomcat 做了個集群的功能,大部分功能主要是解決session在集群中的同步,然而在有點規模的互聯網公司都不怎么用它。

  1. 對于無狀態的應用,通過apache/ngnix 負載均衡到 各個 tomcat就可以了
  2. 對于有狀態的(session)應用,往往都自研分布式Session應用。分布式系統下用 Tomcat 的 session 會有很多限制。

Tomcat還做了個功能,監控集群中應用的變更,如果有一臺的War包發生了變化,會通知其他機器自動重新部署。這個功能,在有點規模的互聯網公司應該也不會用它,肯定用自研的運維系統, 可以支持更靈活的應用部署,方便和公司的運維體系打通。

?

?

?Java Volatile 學習筆記

圖片來源?http://mechanical-sympathy.blogspot.com

說明:他引用的這個作者在JVM方面有一定的研究,圖畫的不錯

https://mechanical-sympathy.blogspot.com/

?

終于搞清楚Java的日志了?

Java的日志框架很多,JUL, Log4J, Lobback, JCL, SLF4J等

先來看下slf4j官方的一張圖:

關于這么多框架如何搭配使用,這篇文章總結的不錯,slf4j、jcl、jul、log4j1、log4j2、logback大總結

?

?

Spring事務管理

所謂聲明式事務,就是通過配置的方式省去很多代碼,從而讓Spring來幫你管理事務。本質上就是配置一個Around方式的AOP,在執行方法之前,用TransactionInterceptor截取,然后調用PlatformTransactionManager的某個實現做一些事務開始前的事情,然后在方法執行后,調用PlatformTransactionManager的某個實現做commit或rollback. 如圖:

總結

以上是生活随笔為你收集整理的一个会画图的工程师的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。