【Spring專場】「IOC容器」不看源碼就帶你認識核心流程以及運作原理-編程思維

這是史上最全面的Spring的核心流程以及運作原理的分析指南 🍃【Spring核心專題】「IOC容器篇」不看繁瑣的源碼就帶你浏覽Spring的核心流程以及運作原理 🍃【Spring核心專題】「AOP容器篇」不看繁瑣的源碼就帶你浏覽Spring的核心流程以及運作原理 🍃【Spring核心專題】「MVC容器篇」不看繁瑣的源碼就帶你浏覽Spring的核心流程以及運作原理 學好Spring技

☕【權限設計系列】「認證授權專題」微服務架構的登陸認證問題-編程思維

預備知識 本文讨論基于微服務架構下的身份認證和用戶授權的技術方案,最好先熟悉并理解以下幾個知識點: 微服務架構相關概念:服務注冊、服務發現、API 網關 身份認證和授權技術:SSO、CAS、OAuth2.0、JWT 以下幾個基礎概念: 認證 授權 鑒權 權限控制 前提背景 當企業的應用系統逐漸增多後,每個系統單獨管理各自的用戶數據容易行成信息孤島,分散的用戶管理模式阻礙了企業應用向平台化

☕【Java深層系列】「技術盲區」讓我們一起探索一下Netty(Java)底層的“零拷貝Zero-Copy”技術(上)-編程思維

Netty的零拷貝 Netty中的零拷貝與我們傳統理解的零拷貝不太一樣。 傳統的零拷貝指的是數據傳輸過程中,不需要CPU進行數據的拷貝。主要是數據在用戶空間與内核中間之間的拷貝。 傳統意義的零拷貝 Zero-Copy describes computer operations in which the CPU does not perform the task of copying data

☕【Java實戰系列】「技術盲區」Double與Float的坑與解決辦法以及BigDecimal的取而代之!-編程思維

探究背景 涉及諸如float或者double這兩種浮點型數據的處理時,偶爾總會有一些怪怪的現象,不知道大家注意過沒,舉幾個常見的栗子: 條件判斷超預期 System.out.println( 1f == 0.9999999f ); // 打印:false System.out.println( 1f == 0.99999999f ); // 打印:true 數據轉換超預期 float f

☕【Java深層系列】「技術盲區」讓我們一起完全吃透針對于時間和日期相關的API指南-編程思維

技術簡介 java中的日期處理一直是個問題,沒有很好的方式去處理,所以才有第三方框架的位置比如joda。文章主要對java日期處理的詳解,用1.8可以不用joda。 時間概念 首先我們對一些基本的概念做一些介紹,其中可以将GMT和UTC表示時刻大小等同。 UT時間 UT反應了地球自轉的平均速度。是通過觀測星星來測量的。 UTC UTC是用原子鐘時間做參考,但保持和UT1在0.9秒内的時間,也就是

🏆【JVM深層系列】「雲原生時代的Java虛拟機」針對于GraalVM的技術知識脈絡的重塑和探究-編程思維

GraalVM 背景 新、舊編程語言的興起躁動,說明必然有其需求動力所在,譬如互聯網之于JavaScript、人工智能之于Python,微服務風潮之于Golang等等。大家都清楚不太可能有哪門語言能在每一個領域都盡占優勢,Java已是距離這個目标最接近的選項,但若“天下第一”還要百尺竿頭更進一步的話,似乎就隻能忘掉Java語言本身,踏入無招勝有招的境界。 更進一步提升JVM上運行的程序的性能 通

☕【Java技術指南】「序列化系列」深入挖掘FST快速序列化壓縮内存的利器的特性和原理-編程思維

FST的概念和定義 FST序列化全稱是Fast Serialization Tool,它是對Java序列化的替換實現。既然前文中提到Java序列化的兩點嚴重不足,在FST中得到了較大的改善,FST的特征如下: JDK提供的序列化提升了10倍,體積也減少3-4倍多 支持堆外Maps,和堆外Maps的持久化 支持序列化為JSON FST序列化的使用 FST的使用有兩種方式,一種是快捷方式,另一種需要

虛拟機研究系列-「GC本質底層機制」SafePoint的深入分析和底層原理探究指南-編程思維

SafePoint前提介紹 在高度優化的現代JVM裡,Safepoint有幾種不同的用法。GC safepoint是最常見、大家聽說得最多的,但還有deoptimization safepoint也很重要。 在HotSpot VM裡,這兩種Safepoint目前實現在一起,但其實概念上它們倆沒有直接聯系,需要的數據不一樣。 無論是哪種SafePoint,最簡潔的定義是“A point in pr

【日志技術專題】「logback入門到精通」徹徹底底帶你學會logback框架的使用和原理(入門介紹篇)-編程思維

技術介紹 什麼是 logback? Logback為取代 log4j 而生。Logback 由 log4j 的創立者 Ceki Gülcü設計。以十多年設計工業級記錄系統的經驗為基礎,所創建的logback 比現有任何記錄系統(除了log4j2)更快、占用資源更少,有時差距非常大。 Logback提供獨特而實用的特性,比如,Marker、參數化記錄語句、條件化堆棧跟蹤和強大的事件過濾功能

☕【Java技術指南】「技術盲區」看看線程以及線程池的異常處理機制都有哪些?-編程思維

線程異常捕獲問題 Java異常在線程之間不是共享的,在線程中抛出的異常是線程自己的異常,主線程并不能捕獲到。也就是說你把線程執行的代碼看成另一個主函數。 上面A和B的運行是互相獨立的,雖然說你看到B所在代碼塊的函數内容在main中,但是main并不能捕獲到這個Runnable裡函數的異常,因為它不在同一個線程之中運行,B中抛出的異常如果你不在另一個線程捕獲的話,相當于就是沒有異常處理,無法捕獲。

☕【Java技術指南】「JPA編程專題」讓你不再對JPA技術中的“持久化型注解”感到陌生了!-編程思維

JPA的介紹分析 Java持久化API (JPA) 顯著簡化了Java Bean的持久性并提供了一個對象關系映射方法,該方法使您可以采用聲明方式定義如何通過一種标準的可移植方式,将Java 對象映射到關系數據庫表以及後續的一系列數據持久化行為。 JPA可以将任何普通的Java 對象 (POJO) 類指定為 JPA 實體。 JPA實體:一個應使用JPA實現程序的服務将其非臨時字段持久保存

☕【Java技術指南】「難點-核心-遺漏」Java線程狀态流轉及生命周期的技術指南(知識點串燒)!-編程思維

前提介紹 本章主要介紹相關線程聲明周期的轉換機制以及聲明周期的流轉關系以及相關AQS的實現和相關的基本原理,配合這相關官方文檔的中英文互譯的介紹。 線程狀态流轉及生命周期 當線程被創建并啟動以後,它既不是一啟動就進入了執行狀态,也不是一直處于執行狀态。在線程的生命周期中,它要經過新建(New)、就緒/可運行狀态(Runnable)、阻塞(Blocked)和等待(Wait)、時間等待(Tim

☕【JVM技術指南】「JVM總結筆記」Java虛拟機垃圾回收認知和調優的"思南(司南)"【上部】-編程思維

優化目标與策略(Ergonomics) 垃圾回收器、堆和運行時編譯器默認選擇 G1(Garbage First)收集器 GC線程的最大值受限于堆大小和可用的CPU資源 初始堆空間(Xms)為物理内存的1/64 最大堆空間(Xmx)為物理内存的1/4 分層編譯器,同時使用C1和C2 可以将 Java HotSpot VM 垃圾收集器配置為優先滿足兩個目标之一:最大暫停時間和應用吞吐量,如

🏆【JVM技術專區】「編譯技術專題」帶你徹底認識Java的編譯技術-編程思維

前提概要 Java的class字節碼并不是機器語言,要想讓機器能夠執行,還需要把字節碼翻譯成機器指令。這個過程是Java虛拟機做的,這個過程也叫編譯。是更深層次的編譯。 在編譯原理中,把源代碼翻譯成機器指令,一般要經過以下幾個重要步驟: 根據完成任務不同,可以将編譯器的組成部分劃分為前端(Front End)與後端(Back End)。 前端編譯主要指與源語言有關但與目标機無關的部分,包括詞

🏆【Java技術專區】「編譯器專題」徹底你明白什麼是JIT編譯器(Just In Time編譯器)-編程思維

前提概要 我們都知道開發語言整體分為兩類,一類是編譯型語言,一類是解釋型語言。那麼你知道二者有何區别嗎?編譯器和解釋器又有什麼區别? 這是為了兼顧啟動效率和運行效率兩個方面。Java程序最初是通過解釋器進行解釋運行的,當虛拟機返現某個方法或代碼塊的運行特别頻繁時,就會把這段代碼标記為熱點代碼,為了提供熱點代碼的運行效率,在運行時,虛拟機就會把這些代碼編譯成與本地平台相關的機器碼。并進行各

Java-技術專區-應用中使用ShutdownHook友好地清理現場-編程思維

  JDK在1.3之後提供了Java Runtime.addShutdownHook(Thread hook)方法,可以注冊一個JVM關閉的鈎子,這個鈎子可以在以下幾種場景被調用: 1)程序正常退出 2)使用System.exit() 3)終端使用Ctrl+C觸發的中斷 4)系統關閉 5)使用Kill pid命令幹掉進程 注:在使用kill -9 pid是不會JVM注冊的鈎子不會被調用。 在

☕【Java技術指南】「并發編程專題」Fork/Join框架基本使用和原理探究(原理及源碼篇)-編程思維

ForkJoin線程池框架回顧 ForkJoin框架其實就是一個線程池ExecutorService的實現,通過工作竊取(work-stealing)算法,獲取其他線程中未完成的任務來執行。 可以充分利用機器的多處理器優勢,利用空閑的線程去并行快速完成一個可拆分為小任務的大任務,類似于分治算法。 ForkJoin的目标,就是利用所有可用的處理能力來提高程序的響應和性能。本文将介紹Fo

Java技術開發專題系列之【Guava RateLimiter】針對于限流器的入門到精通(針對于源碼分析介紹)-編程思維

Guava包中限流實現分析 RateLimiter 之前的文章中已經介紹了常用的限流算法,而google在Java領域中使用Guava包中的限流工具進行服務限流。 回顧使用案例 Google開源工具包Guava提供了限流工具類RateLimiter,該類基于令牌桶算法實現流量限制,使用十分方便。 @Test public void testSample() { RateLimi