原创 顯式函數與隱式函數

顯式函數:顯式函數只通過自己的參數和返回值來和外界做數據交換,不會去讀取或者修改函數的外部狀態,簡單的來說,就是函數的方法體中不會修改任何外部的變量。 隱式函數:隱式函數則與顯式函數相反,它除了參數和返回值外,還會讀取甚至可能修改

原创 並行流水線瞭解下

思路分享 現在有兩個變量i,j,要計算(i+j)*i/2的結果值,首先可以發現這計算的每步都依賴着上一步的結果,比如得先加再乘,最後再做除法,貌似不能拆分成並行,這很正常,因爲計算的步驟之間強耦合。不過如果是成千上萬的i,j變

原创 怎麼做並行搜索

對於有序數據,一般使用二分查找法就能夠極大的提高搜索效率。不過如果數據是無序的,那麼二分查找法就派不上用場了,做法是可以先給數據排序再用二分查找法,這裏簡單分享下另一種思路-並行搜索。 直接上代碼demo import jav

原创 數據通信格式使用XML好不好?

不好,在大規模,高併發的通信過程中,XML中冗餘的標記會影響性能,所以建議用JSON代替XML。

原创 搜索oracle數據庫數據,怎麼讓null值排最前或最後

Null值會被默認爲最大值 示例代碼: 使用nulls first/nulls last select * from a order by id asc nulls first —null值排最前面 select * from a

原创 爲什麼函數式編程更易於並行

函數式編程demo: public static void main(String[] args) { List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7

原创 任何被java.lang.Object實現的方法,都不能視爲抽象方法

首先要了解函數式接口只能有一個抽象方法這個概念,那麼就可以編寫函數式接口來證明任何被java.lang.Object實現的方法,都不能視爲抽象方法的觀點。 代碼demo: 可以發現,函數式接口的註解@FunctionalInte

原创 使用ForkJoinPool計算從0加到100的值

代碼demo如下: import java.util.concurrent.ForkJoinPool; import java.util.concurrent.RecursiveTask; public class TestFo

原创 什麼是不變模式

多線程對同一個對象進行操作時,爲了保證對象數據的一致性和準確性,需要做相應的同步,來保證原子性,有序性以及可見性。不過這是因爲被訪問的對象是可變的,所以才需要各種手段去保證線程安全,試想下,如果對象一開始就是不可變的,那麼是不是就

原创 單例模式即使沒有調用方法,對象也是可能被實例化的

一般的單例模式,都會把類的構造方法私有化以及構造出一個靜態對象,然後提供一個公有的獲取對象的方法,返回這個對象實例。 以下是最簡單的一種單例模式demo: public class ASingleton { privat

原创 爲什麼說跳錶是隨機算法?

demo: public static void main(String[] args) { ConcurrentSkipListMap<Integer, Integer> concurrentSkipListMap =

原创 死鎖是否會佔用CPU?

不會,死鎖對CPU的佔用率爲0

原创 二十八.添加分組校驗以及自定義校驗規則

一.爲校驗添加分組屬性 首先可以確認一點,每個服務都是需要校驗數據準確性的,同時每份數據也都是要區分新增還是修改操作,那麼可以把這共有的邏輯給抽到webshop-common項目下,如下: 以上截圖的3個類都是接口,不需要實現,

原创 瞭解下AtomicReference與AtomicStampedReference

以下模擬一個情景,一家商鋪要做一個活動,對那些賬戶餘額小於10的用戶,充值20元禮金,促進消費。 使用AtomicReference來實現這個邏輯的demo: import java.util.concurrent.TimeU

原创 瞭解一下局部性原理

時間局部性:如果程序中的某條指令開始執行,則不久之後該指令可能會再次被執行;如果某數據被訪問,則不久之後該數據可能再次被訪問。 空間局部性:一旦程序訪問了某個存儲單元,則不久之後,其附近的存儲單元也會被訪問。