原创 Java鎖機制之自動檔 - synchronized

引子說起Java中的併發,有一個永恆的話題就是鎖機制。而提及Java中的鎖,我們一般認爲有兩種形式通過synchronized關鍵字的實現通過Lock接口的實現網上關於兩種方式的對比已經比較詳盡,從使用角度來看synchronized關鍵字

原创 一張圖帶你看透BigDecimal(上)

對於Java開發人員來說,只要日常工作中涉及到算術運算,那必然會跟BigDecimal這個類打交道。也許我們可以記住一些使用的注意事項,如使用String的構造函數而不是double的構造函數來避免精度問題。但是對於一個5000行的龐然大物

原创 一張圖帶你看透BigDecimal(下)

在上半部分(一張圖帶你看透BigDecimal(上))我們對於BigDecimal的基本屬性和構造函數有了清晰的認識,在已經知道如何構造一個BigDecimal的基礎上我們再來看看如何更好的使用這個類吧。算術運算作爲一個數值類型,算術運算是

原创 基於Netty的數採邊緣實現

背景介紹在設備數據採集方面,我們已經探索出一套成熟的做法即在設備側部署一個邊緣程序,通過定時拉取的機制到工控機如PLC的指定位置獲取數據。但是對於機器人來說,不同型號的機器人控制設備都有自己不同程度的封裝,我們需要嚴格按照機器人設備的數據開

原创 一個Slash引發的ClassNotFound血案

背景介紹公司開發了一款Web應用,開發架構基於Spring Boot,通過jar包的方式發佈到服務器並通過命令行運行在內置的Tomcat上。上線將近一年,一切都是那麼的風平浪靜,然而一切的平靜被上週的一次現場算法回訪打破。我們的數據分析人員

原创 爲什麼Java中的String是不可變的

原文出處:https://www.programcreek.com/2013/04/why-string-is-immutable-in-java/ 在Java中String類是不可變的,簡單來說,一個不可變的類就意味着他的實例是不可修改的

原创 統計二進制1個數的代碼解讀

爲了適應邊緣計算的需求決定投入學習Go語言的浪潮,用了10年的java突然要去接受一個風格完全不一樣的語言感覺真是太刺激了。 最近在看《Go語言聖經》的時候看到裏面的一個計算二進制中1的個數的程序popcount,覺得挺有意思就拿出來分享一

原创 一次性能事故的處理和總結

前情前幾天做了一個工況統計的功能,查詢最近7天的數據然後分析數據的分佈。最終的效果是這樣的:從一開始接到這個需求就感覺哪裏有點不對勁,上線一週後終於迎來了一次爆發:頁面響應慢、多次查詢後服務不可用。分析從線上環境拉取日誌後發現兩個異常表現²

原创 基於Spring Cloud Gateway的路由實踐

基本介紹 Spring Cloud Gateway(下文以SCG代替), 顧名思義這是由Spring 官方出品的一款網關產品,是Spring Cloud的子項目。 This project provides a library for b

原创 你可能不會注意的Timestamp

提起java裏面的時間戳,相信很多人都用過。不就是java.sql.Timestamp類,兩個構造器,13個方法,這也許屬於java中最簡單的基礎類了。俗話說淹死的都是會游泳的,同樣在開發中讓我們栽跟頭的往往都是耳熟能詳的一些類庫。引子首先

原创 基於jsplumb的流程圖展示

背景需求目前系統中對於工藝流程的展示是純粹的瀑布式流程,如圖所示:導致的問題是1)沒有辦法展示覆雜的工藝關聯 2)在展現上比較簡陋不符合客戶的審美。基於以上問題,決定基於jsplumb開發用於複雜工藝流程展示的控件,預計效果圖如下:技術介紹

原创 賬戶登錄唯一性方案

某日小明得知iPlan推出了個人資源庫功能,興致勃勃的申請了賬號想嚐個鮮。可是小明是個不愛吃獨食的好同學,於是他把自己的賬戶分享給了好機油小智。花了一份錢實際得到了兩個賬戶,小明暗暗爲自己的智商點了個贊。蜜月期總是充滿驚喜的,剛打開資源庫,

原创 Spring Boot下的Redis緩存實戰

最近在做的一個系統涉及到基礎數據的頻繁調用,大量的網絡開銷和數據讀寫給系統帶來了極大的性能壓力,我們決定引入緩存機制來緩解系統壓力。什麼是緩存提起緩存機制,大概10個程序員總有5種不同的解釋吧(姑且認爲只有一半的程序員是通過複製粘貼來學習知

原创 搜索前置服務架構

目前在系統中涉及到搜索的解決方案都是通過數據庫自帶特性解決,如通過mysql5.7自帶的全文檢索功能實現資源的搜索。這樣實現的好處是方便,無需額外開發和維護成本。但是隨着業務的發展和數據的增加,性能和可擴展方面很容易出現瓶頸。結合本次方案庫