原创 類加載過程示例

文章目錄1、準備試驗用代碼2、引用常量不會引發類加載3、引用父類的成員變量或是靜態方法會執行初始化4、使用new關鍵字實例化對象,會初始化類,並觸發對象的一系列初始化動作5、ClassLoader.loadClass6、Class

原创 文字編碼總結

文字編碼總結〇、引(“聯通事件”)一、字符編碼的發展1-1、第一階段:ASCII碼1-2、第二階段:ANSI編碼(本地化編碼)1-3、第三階段:unicode(國際化編碼)二、unicode 與 utf2-1、utf的產生2-2、

原创 使用JSON定義數據接口的一種錯誤姿勢

翻代碼的時候,無意中看到有小夥伴爲前端定義接口的時候,使用JSON的姿勢不太正確。 方便起見,把問題簡化一下:java要向前端傳送一個List,List中的每個對象有兩個字段:標的物名稱和標的價格。 這個有問題的數據接口是這樣定義

原创 序列化版本號(serialVersionUID)是做什麼用的

文章目錄1、爲什麼要序列化2、序列化版本號的用處3、如何設定版本號4、自己試驗序列化、反序列化5、IDEA中如何自動生成serialVersionUID6、Transient 關鍵字7、序列化的對象範圍 1、爲什麼要序列化 一些場

原创 排查一次莫名其妙的StackOverflow

文章目錄一、現象二、臨時解決三、原因追查3.1、什麼情況下會發生StackOverflowError?3.2、一個錯誤的調查方向3.3、光看不跑3.4、折騰半天快被氣死四、總結(重要!)總結1總結2五、附錄——如何利用toStri

原创 Redis 與 MySQL 的數據同步

※ 好歹趕上了20世紀20年代的第一天發第一篇文章~ 文章目錄一、大前提1-1、場景1-2、是否強一致1-3、套路永不過時二、數據強一致的應對三、套路一:Cache Aside3-1、Cache Aside3-2、CPU緩存的 W

原创 如何中斷forEach的執行

答案:無解。 可以說forEach就不是一個正經的循環,不是設計來可以被中斷的。 尤其是steam中的forEach,steam這玩意是可以並行運行的,真支持break了,很多不可預料的問題都有可能發生。 1、NG:break和c

原创 單例的實現方法總結

文章目錄單例的實現方法總結一、最經典的餓漢模式實現方式優點缺點二、懶漢模式實現方法優點缺點三、雙重檢查方法四、靜態內部類方法優點五、枚舉類首先對於Singleton5編譯好的class進行反編譯枚舉如何保證線程安全解決反序列化問題

原创 Redis 緩存擊穿

文章目錄1、緩存擊穿的概念以及原因2、預防緩存擊穿的思路3、解決方案一:互斥鎖 (mutex key)3-1、具體做法3-2、風險4、解決方案二:只做邏輯過期5、一個小的處理技巧 1、緩存擊穿的概念以及原因 給緩存中的數據添加過期

原创 JVM類加載總結

文章目錄JVM類加載總結1、概述2、類加載流程2-1、加載(Loading)2-2、驗證(Verification)2-3、準備(Preparation)2-4、解析(Resolution)2-5、初始化(Initializati

原创 Thread的.start()與.run()的區別

文章目錄Thread的.start()與.run()的區別start()run()試驗1試驗2 Thread的.start()與.run()的區別 start() start()方法啓動線程,真正實現了多線程運行,無需等待方法體代

原创 【轉載】HTTPS報文抓包

HTTPS簡單來說,就是使用SSL對HTTP報文進行加密傳輸。 SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS)是爲網絡通信提供安全及數據完整

原创 java線程池的拒絕策略

文章目錄一、爲什麼要自定義線程池二、如何自定義線程池三、線程池的拒絕策略3-0、所有拒絕策略都實現了接口 RejectedExecutionHandler3-1、AbortPolicy3-2、CallerRunsPolicy3-3

原创 Redis 中 bgsave 方式持久化的細節問題

文章目錄1.RDB的基本概念2.RDB的觸發方式2-1、配置文件2-2、手工觸發2-3、其他觸發方式3.bgsave的工作流程3-1、什麼是cow3-2、Redis面臨的問題3-3、Redis的cow 因爲有小夥伴問Redis的b

原创 dubbo調用時遇到“inconsistent stack height -1”錯誤的解決方法

坑。坑!坑!! 一個非常簡單的dubbo方法,調用時返回如下錯誤信息: java.lang.RuntimeException: [source error] getPropertyValue (Ljava/lang/Object;