原创 排序算法-堆排序

學習堆排序之前先了解下什麼是二叉堆:二叉堆是完全二叉樹或者是近似完全二叉樹。二叉堆滿足二個特性:1.父結點的鍵值總是大於或等於(小於或等於)任何一個

原创 單例下的序列化

我們知道單例模式可以有以下幾種方式: 餓漢方式懶漢方式雙重檢查加鎖懶漢方式內部類方式枚舉方式 但是我們也很容易想到,通過反射和序列化的形式很容易就破解這種單例模式,比如: [Serializable]     public class

原创 排序算法-快速排序

今天講下,效率比較高的快速排序: 總的來說,快速排序講究的是一種分而治之。先選取一個初始值,從左右兩邊逐一進行比較,直到起始的index>=end,一次比較結束,然後再在兩邊的集合裏面再做如上的比較,也就是我們常做的遞歸操作。例如:{49

原创 try catch對程序性能的影響

大家看到這樣的標題也許會在想,try catch肯定會影響性能的,但是其實並沒有很直接的證據表明trycatch會影響系統的性能,尤其是在託管的環境下,今天就用實際的代碼來證明下在不同情況下,代碼運行的時間指標。 .NET中的異常捕獲以及

原创 LocalDataStoreSlot VS CallContext

 LocalDataStoreSlot 表示線程槽,封裝內存槽以存儲本地數據(MSDN) .NET Framework 提供了兩個使用線程本地存儲區 (TLS) 的機制:線程相關的靜態字段和數據槽。 線程相關的靜態字段是用 Thr

原创 排序算法-選擇與插入排序

今天主要複習下選擇排序以及插入排序: 1.選擇排序:(百度百科的定義)每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。 選擇排序是不穩定的排序方法。個人的理解:選擇排序就是選擇最

原创 排序算法-冒泡

今天開始回顧下以前學習的東西了,首當其衝的就是幾種常見的算法了:冒泡排序,選擇排序,以及插入排序 冒泡排序 冒泡排序顧名思義,將比較之後的結果像泡泡一樣往上移動。首先舉個例子:{49,38,65,97,5},冒泡排序的步驟分爲如下: (1

原创 java程序員修煉之道(1)

  這些天看了《java程序員修煉之道》這本書,覺得還不錯,將自己的一些理解以及對本書中的重點歸納了下,希望對後來者有些幫助,後續會根據每天理解的內容,陸續地寫一些文章,望自己能夠每天都處在學習中。 第一章主要是介紹了java7的改進地方

原创 .net中的屬性

這篇文章主要是討論使用屬性的必要性 做任何事物的分析時,首先是要先給該事物一個定義,屬性:是一種可以像字段一樣訪問數據的方法,或者更精簡地說,屬性就是方法。 相比於字段來說,屬性有如下的優勢: 1.簡化代碼的編寫。當然了,有人說我只用命名

原创 里氏替換原則在現實中的應用

   我記得在之前xx大型的互聯網公司,該公司只能算是很僞的互聯網公司,以業務爲主,非技術指導的公司,所以裏面的寫業務的人員水平也是參差不齊,代碼在不停地重構,沒過多久又會發現代碼的維護難度在增加,然後又是重構,出現了惡性循環。每次來了新

原创 readonly與const

我們知道c#中有兩種常量的表達方式:readonly與const,但是這兩種方式有什麼不同呢?在實際的應用中如何去選擇使用 或者說這兩種方式可以用另外一種說法,大家更容易明白:運行時常量與編譯時常量。表面上的意思就是:readonly是在

原创 is 與 as

     我們知道C#是一種強類型的語言,這樣就可以保證在編譯的時候,發現類型不匹配的異常。這也說明了,我們應用程序在運行時不會去檢查類型的錯誤。但是,運行時檢查類型的錯誤有時候是不可避免的。在我們的程序中,經常會出現object 的參數

原创 ElasticSearch-6.3.2源碼解讀(1)-----部署源碼

今天決定走讀一遍elasticsearch的源碼,算是對這一類分佈式系統(分佈式的計算存儲架構都是差不多的)有一個深入的瞭解。 首先,獲取elasticsearch源碼 編譯調試代碼,大家可以看下這篇文章,講的很好,我是基本按照

原创 架構設計

軟件模塊:是一套一致而互相有緊密關連的軟件組織。它分別包含了程序和數據結構兩部分。現代軟件開發往往利用模塊作爲合成的單位。模塊的接口表達了由該模塊提供的功能和調用它時所需的元素。模塊是可能分開被編寫的單位。這使它們可再用和允許人員同時協作

原创 Resilience4j-----BulkHead

介紹 Bulkhead意指船舶中的隔艙板,它將船體分割爲多個船艙,在船部分受損時可避免沉船。框架中的Bulkhead通過信號量的方式隔離不同種類的調用,並進行流控,這樣可以避免某類調用異常危及系統整體。(注:不同於Hystrix,該框架不