原创 從Spring源碼角度分析bug

結合源碼分析 Spring 容器與 SpringMVC 容器之間的關係 問題 問題描述:項目中發現,自定義切面註解在 Controller 層正常工作,在 Service 層卻無法正常工作。爲了便於分析,去掉代碼中的業務邏輯,只留下場景。

原创 Netty起源

BIO的缺點: public static void main(String[] args) throws FileNotFoundException { try { ServerSocket server =

原创 消息中間件:Kafka基礎

目錄 1、Kafka的作用 2、Kafka高吞吐量、高可用的原因 3、名詞解釋 4、Kafka存儲結構 5、面試點: 1、Kafka的作用 應用解耦:屏蔽實現細節、異步通信,升級、擴容互不影響 流量消峯:生產速率>消息速率、消息積壓能力、

原创 A plan

一個關於byte數組的解析: 因爲是String類型 圖形a對應的的十進制是97,二進制是0110 0001 圖形1對應的的十進制是49,二進制是0011 0001 圖形2對應的的十進制是50,二進制是0011 0010 圖形3對應的的

原创 分佈式緩存中間件:Redis

Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key-value存儲的不足,在部 分場合可以對關係數據庫起到很好的補充作用。它提供了Python,Ruby,Erlang,PHP

原创 Netty、Kafka中的零拷貝技術到底有多牛

零拷貝,從字面意思理解就是數據不需要來回的拷貝,大大提升了系統的性能。我們也經常在 Java NIO,Netty,Kafka,RocketMQ 等框架中聽到零拷貝,它經常作爲其提升性能的一大亮點;下面從 I/O 的幾個概念開始,進而再分析

原创 溫習設計模式

OO基礎: 抽象 封裝 多態 繼承   OO設計特性: 可複用 可擴充 可維護 設計原則: 封裝變化:把會變化的部分取出並“封裝”起來,好讓其他部分不會受到影響(找出應用中可能需要變化之處,把它們獨立出來,不要和那些不需要變化的代碼混在一

原创 使用阿里雲aliyun-oss-java-sdk的 getObject方法返回的輸入流未主動釋放 導致http連接泄漏的線上問題排查

項目功能:基於netty的數據傳輸服務,接收客戶端數據,存在本地磁盤;定時任務,定時處理本地的文件,並上傳到阿里雲OSS線上問題:運維監控發現過去半個小時都沒有記錄寫入到DB(因爲我們每上傳到OSS一次會DB記一條記錄)問題排查過程: 1

原创 一文搞懂Netty中Handler的執行順序

看了很多講解Netty中InboundHandler、OutboundHandler執行順序的文章,很少有一篇能完全講的全的、對的、沒有歧義的,在此根據所學、親自驗證得出的結論給大家 舉例:netty服務端是這個添加順序 ch.pipe

原创 Spring Cloud 微服務實戰

服務治理:Spring Cloud Euraka 第一步,搭建服務註冊中心(如果用zk作爲註冊中心,類似安裝配置啓動zk) 註冊中心,我們部署兩套,避免單點(小集羣) /** * @EnableEurekaServer註解啓動一個

原创 mysql的in和not in的用法(特別注意not in結果集中不能有null)

mysql的not in的用法(特別注意not in結果集中不能有null,如果not in結果集中有Null,則查詢結果直接爲Null) select * from user where name not in ('科比', '喬丹'

原创 Spring全家桶 ~ 你應該知道的知識點

InitializingBean接口 package org.springframework.beans.factory; public interface InitializingBean { void afterProperti

原创 Java8 Lambda 表達式、Stream

爲什麼要學習Java8?我想根據我做項目的親身體會來說下: 性能問題:項目中涉及到矩陣等相關數學計算的過程中(20萬條測試數據),jdk8:4秒,jdk7:40+秒 跳槽後,接手新公司的項目,發現大量使用Java8的新特性,導致我花費更多

原创 Java 逃逸分析

什麼是逃逸分析? 逃逸分析的基本行爲就是分析對象動態作用域:當一個對象在方法中被定義後,它可能被外部方法所引用,例如作爲調用參數傳遞到其他地方中,稱爲方法逃逸。 例如以下代碼: public static StringBuffer cr

原创 如何設計一個分佈式定時任務系統

以前在美團有crane可用,現在得自己考慮以下兩種場景了: 1、定時任務指定集羣中的一臺機器執行 2、如何修改cron參數,且修改永久有效 當然直接用quartz來實現肯定最棒,但設計的配置太多,小公司沒那個需求; 關於第1個,我開始選擇