原创 技術如何學習

大量時間學習通用技術,少量時間學習公司中間件 理解原理架構方法,而不是記憶細枝末節,核心在於理解不在記憶,在於學習其思想 帶着問題去學習,一般問題是什麼(做了什麼,怎麼實現),爲什麼(爲什麼要這樣做,這樣做有什麼好處),舉例hba

原创 jvm問題排查

結合threaddump(jstack ),heapdump(jmap和jhat或mat ),gc日誌進行問題分析 cpu過高,top找出過高進程,top -Hp pid找出過高線程,jstack找出對應線程(nid,操作系統線程

原创 類路徑加載

Class:通過其ClassLoader加載,/絕對路徑,即去掉/可直接傳入ClassLoader加載,沒有/相對路徑,即相對此類的所在路徑進行加載,拼接後傳入ClassLoader ClassLoader:沒有/, 如xu/zh

原创 Netty-tips

NioEventLoop:1 select,2 處理select所得,3 處理任務(普通和定時,按ioRatio確定時間) read,accept和connect,write全部在這裏處理,不像mina按Processor,Con

原创 linux io

同步非阻塞io:數據未準備好則輪詢,準備好後需阻塞完成拷貝 io複用:兩段阻塞過程,select,poll,epoll 信號驅動io:很少用 aio:唯一的異步io,其餘都是同步io(需用戶主動發起阻塞的拷貝操作),內核拷貝完

原创 redis過期

超過maxmemory,觸發maxmemory_policy maxmemory_policy:6種 volatile-lru:從已設置過期時間的數據中挑選最近最少使用的數據淘汰; allkeys-lru:從數據集中挑選最近最少使

原创 雪崩 穿透 擊穿

緩存雪崩:同一時間大量key到過期時間失效,可在設置失效時間時加隨機數,如果直接修改數據庫,那麼一定會有不一致,通過失效時間去反覆刷新縮短不一致的時間, 爲了避免數據一直存在,一定要設置過期時間 如果通過程序修改數據,先刪除緩存再

原创 Git ignore實踐

不要修改.gitignore, 這會導致.gitignore需要add+commit,修改.git/info/exclude

原创 tair

https://www.jianshu.com/p/ccb17daed766

原创 kafka

kafka類似es,分區+副本,分區內有序,分段存儲,每段有index文件方便快速定位消息偏移, 根據所有副本的leo來決定hw

原创 redis,db,mq一致性

redis和db update: 刪除Redis --> 更新DB --> 下次查詢同步更新Redis。 刪除Redis失敗不會更新db 2、複雜情況:刪Redis成功,但在update未提交的情況下,進來一個查詢請求,將DB

原创 volatile

store,load: 硬件層的內存屏障,禁止兩側指令重排,store能寫回主存,load能更新緩存。 java組合的屏障: storestore(store):store1,storestore,store2,store2執行

原创 ReadWriteLock

讀鎖和寫鎖共用同一Sync(即AQS,可爲公平或非公平) 一個暫時的無鎖狀態可能是無線程來加鎖或者在解鎖和加鎖的過程中 公平:若已有線程等待,寫鎖和讀鎖請求都排隊等待 非公平:寫鎖永遠可以競爭(在解鎖和加鎖間隙時,即便前面有線程等

原创 jdk8

1 接口上可定義static和default方法,default方法可以被繼承和重寫,是一個instance method 2 函數式接口:只有一個抽象方法,FunctionalInterface註解僅做聲明和編譯檢查(多個抽象方

原创 ScheduledExecutorService

ScheduledExecutorService提供scheduleAtFixedRate(固定頻率,不會併發執行,一個拖了太久後面任務也會晚),scheduleWithFixedDelay(結束後等一定時間又開始),返回Sche