原创 知識點六:隔離級別,表鎖,行鎖,死鎖,更新丟失,索引

Mysql 隔離級別 讀未提交,讀已提交,可重複讀:事務過程中看到的數據和事務啓動時看到的數據是一致的;串行化:讀會加讀鎖,寫會加寫鎖,讀寫鎖,寫寫鎖衝突時,後一個事務需要前一個事務執行完; 隔離級別的實現: 讀未提

原创 知識點二:Redis 的 key 規範,雪崩,擊穿,穿透,布隆過濾器,分佈式鎖,隊列,持久化,同步,內存淘汰

Redis 的 key 的設置規範 redis 的 key 要求全大寫,命令規範是 系統前綴 : 業務標識,其中系統前綴爲,領域縮寫_系統簡稱_子系統名,業務標識爲,下劃線分隔的業務特徵字符串,要求在保證可讀性的前提下,key

原创 知識點四:四層和七層負載均衡,循環依賴,輪詢和心跳,項目安全,dubbo,灰度發佈,Get和Post

四層負載均衡和七層負載均衡 四層負載均衡,是指基於 ip + port 的負載均衡,實現有 LVS,F5; 七層負載均衡,是基於 url 的負載均衡,通過域名來路由到後面真實的服務器 ip,實現有 Nginx; spr

原创 Springboot基礎課五:集成 Prometheus 和 Grafana

集成 Prometheus prometheus 是一款第三方的監控組件,提供了更直觀和方便的監控需求,原理是,定時對應用的 /actuator/metrics 發起信息採集,進行展示和分析; 首先需要引入 microme

原创 Spring基礎課九:事務管理下

spring 事務源碼 DataSourceTransactionManager.DataSourceTransactionObject 中的 Connection,第一次是從數據源獲取的,並會綁定到了 Transaction

原创 Mysql基礎課九:語句操作分析下

深入 Mysql 查詢 Mysql 客戶端對於查詢,有兩種策略,一種是,查一行處理一行,另一種是無論處理邏輯,會將查詢結果都緩存在本地,通常建議,非大查詢的場景,都使用第二種,但大查詢場景,要考慮內存是否能緩存太多; 大查

原创 Java 基礎課七:網絡通信協議

DNS 和 CDN DNS,域名解析系統,將域名解析爲 IP; 域名解析,首先會在瀏覽器緩存中查找,然後在操作系統緩存查找, jvm 也會緩存 dns 結果 如果都沒找到,會到 LDNS 服務器查找,LDNS 是電腦上網配

原创 Java 基礎課八:Java 使用 http 通信

Java 使用 Http Java 使用 HttpURLConnection,HttpClient,RestTemplate,和 Feign 等,進行 http 通信; URLEncoder和URLDecoder,用於字符

原创 Mysql 基礎課二:存儲引擎和使用

存儲引擎 存儲引擎是表級屬性,在創建表時指定; MyISAM ,不支持事務,外鍵,沒有行鎖,優點是訪問速度快,適合於多 select,insert into 操作的弱事務性的應用中,單個MyISAM表實際上由.frm(表定

原创 Spring基礎課三:bean 的生命週期管理

bean的創建 bean 的創建有三種方式,xml,javaConfig 和自動掃描; bean 的作用域,有 Singleton,Prototype,Session,Request,默認是 Singleton; 如果

原创 ORM 框架:springJPA

SpringJPA Spring JPA 封裝了統一的持久化接口,底層實現上仍是 hibernate,openJpa 等 ORM 框架; JPA 維護一個持久化上下文 Persistence Context,負責管理實體的

原创 Mysql基礎課七:語句操作分析上

count(*) count(*) 在不同 Mysql 引擎中,實現不一樣,如,MyISAM 引擎是將表的總行數存在了磁盤上,查詢就直接返回;而 InnoDB 引擎,是需要將數據一行行從引擎中讀出來,然後累積計數的;所以 In

原创 Mysql 基礎課十一:分庫分表

需求 因爲數據庫單表容量超過 1000 萬,性能會變差,並且單節點 Mysql 實例支持的併發也有限,所以需要對數據進行切分,有分庫和分表的手段; 分庫,將併發訪問高的表,單獨放在一個庫中,這樣提高了併發性能,但無法解決單表

原创 RabbitMQ基礎課二:Java 使用

創建連接 Java 客戶端使用 com.rabbitmq.client 作爲頂級包名,關鍵的類和接口,有 Channel,Connection,ConnectionFactory 和 Consumer 等; 建立連接和創建

原创 Java 基礎課十:線程池

線程池的構造 ThreadPoolExecutor 線程池,構造方法 new ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveT