原创 對象深copy

最近使用 Map 及 HashMap 的 putAll() 進行對象copy的時候,發現如果value是個對象的時候,還是淺copy,於是乎就上網搜了搜如何深copy,下面是方法之一: public static Object dee

原创 時間複雜度 log n

預先知道算法的複雜度是一回事,瞭解其後的原理是另一件事情。 不管你是計算機科班出身還是想有效解決最優化問題,如果想要用自己的知識解決實際問題,你都必須理解時間複雜度。 先從簡單直觀的 O(1) 和 O(n) 複雜度說起。O(1) 表示

原创 如何實現靠譜的分佈式鎖?(附SharkLock的設計選擇)

分佈式鎖,是用來控制分佈式系統中互斥訪問共享資源的一種手段,從而避免並行導致的結果不可控。基本的實現原理和單進程鎖是一致的,通過一個共享標識來確定唯一性,對共享標識進行修改時能夠保證原子性和和對鎖服務調用方的可見性。由於分佈式環境需要

原创 redis 之 安裝redis

安裝VM及Red hat 7.4:Red Hat Enterprise Linux Server 7.4 安裝方法 本文參考自:RedHat 7 安裝redis3.2 一、配置Yum源 0.什麼是yum源?yum的工作原理? 說到

原创 Spring - 註解解析器

Spring中使用了大量自定義的註解,如果通過我們自定義的註解解析器獲取這些註解的值可能達不到預想的效果,必須使用Spring的AnnotationUtils類提供的方法來獲取才能正確解析。 一、自定義註解解析器解析Spring中的@A

原创 Java多線程 - 對象及變量的併發訪問

1. synchronized同步方法 多個線程調用synchronized聲明的方法一定是排隊執行的。而且只有共享資源的讀寫訪問才需要同步化,如果不是共享資源,那根本沒有同步的必要。 (1)髒讀 多線程調用同一個實例對象的同一個方

原创 Java多線程 - 停止線程

停止線程看起來非常簡單,但是必須要做好防範措施,以便達到預期效果。 停止一個線程可以使用Thread.stop()方法,但是最好不要用它,雖然它確實可以停止一個線程,但是最好不要用它,因爲它是不安全的,而且已經被棄用作廢的,將來Java

原创 Java多線程 - 暫停線程

暫停線程意味着此線程還可以恢復運行,Java多線程中,可以使用suspend()方法暫停線程,使用resume()方法使線程恢復運行。 1.suspend()和resume()的使用 下面例子中使用了suspend和resume對線程進

原创 Java多線程 - Thread類中的幾個方法

1. 實例變量與線程安全 自定義線程類中的實例變量針對其他線程有共享與不共享之分,這在多個線程之間交互時是一個很重要的技術點。 不共享數據的情況:每個線程都有各自的實例變量,多個線程交互時不影響各自的實例變量值,不存在線程安全問題。

原创 樂觀鎖與悲觀鎖

數據庫管理系統(DBMS)中的併發控制的任務是確保在多個事務同時存取數據庫中同一數據時不破壞事務的隔離性和統一性以及數據庫的統一性。 樂觀併發控制(樂觀鎖)和悲觀併發控制(悲觀鎖)是併發控制主要採用的技術手段。 無論是悲觀鎖還是樂觀鎖,都

原创 華爲筆試題 之 計算數據最多的類型(有效類型)有多少個數據

一、題目 對一個數據a進行分類,分類方法爲:此數據a(四個字節大小)的四個字節相加 % 一個給定的值,如果得到的結果小於一個給定的值c,則此結果即爲數據a的類型;如果得到的結果大於或者等於c,則此結果無效即爲數據a的類型無效。 比如一個數

原创 java定時任務接口ScheduledExecutorService

1. ScheduledExecutorService 設計思想 ScheduledExecutorService 是基於線程池設計的定時任務類,每個調度任務都會分配到線程池中的一個線程去執行,也就是說,任務是併發執行,互不影響。 需要

原创 Java多線程 - 線程的創建

在學習多線程前,需要知道爲啥要用多線程,多線程的優點是什麼? 使用多任務操作系統(windows,ios)等,都可以最大限度的利用CPU空閒時間來出來其他任務,比如一邊讓操作系統處理打印機正在打印的數據,一邊使用Word編輯文檔。而CP

原创 華爲筆試題 之 簡易壓縮算法

一、題目 有一種簡易壓縮算法:針對由全部小寫字母組成的字符串,將其中連續超過兩個相同字目的部分壓縮成連續個數加該字母,其他部分保持原樣不變。 例如,字符串:aaabccccd 經過壓縮成爲字符串:3ab4cd。請您編寫一個unZip函數,