原创 算法導論第九章:中位數和順序統計學

在一個有n個元素組成的集合中,第i個順序統計量是該集合中第i小的元素。中位數是出現在i=(n+1)/2處(下中位)或i=(n+1)/2+1處(上中位)。   9.1最小值和最大值 在一個有n個元素的集合中,要做多少次比較才能確定其最小元素

原创 算法導論十一章:散列表

實現字典的一種有效的數據結構爲散列表,在最壞的情況下,在散列表中查找一個元素的時間與在鏈表中查找一個元素的時間相同,爲Θ(n)。在實踐中,散列技術的效率是很高的,在一些合理的假設下,在散列表中查找一個元素的期望時間爲O(1)。散列表是普通

原创 Spring基礎六:基於註解配置—bean聲明

從這一章開始,我們逐步拋棄xml格式的配置,講述如何使用java註解和java代碼來配置bean,這一部分分成了三個章節。這一章,講述如何使用註解在java類上定義bean;下一章,講述如何通過註解配置bean之間的依賴,第三章講

原创 《Java併發編程實踐》一(1):爲什麼使用多線程

《Java Concurrency in Practice》是java併發編程領域的經典書籍,本人認爲是最好的;本系列文章算是該書2006版本(雖然有一定年頭,但內容一點不過時)的讀書筆記。 本書第一部分只有一章,介紹多線程的一些

原创 《Java併發編程實踐》五(3):原子變量和非阻塞同步

java併發庫(java.util.concurrent)提供了很多(相比鎖)性能更優越的同步設施,比如ConcurrentLinkedQueue。本章的主題,是研究此類併發裝置的性能祕密:原子變量和非阻塞同步。 鎖的性能劣勢 對

原创 Spring基礎十:@Value屬性值注入

@Autowire可以用來注入bean依賴,@Value則用於注入屬性值。本章介紹@Value的使用方法,屬性值來源以及屬性值類型轉換的原理。 回顧PropertySourcesPlaceholderConfigurer 在介紹B

原创 詳解Spring MVC之一:DispatcherServlet

前言 讓我們開啓Spring知識一個新的系列文章,詳解Spring Web MVC。同樣,這個系列的文章是對Spring官方文檔的一個翻譯、整理、重組,以及小幅度的補充。原文檔的地址在這裏。 Spring MVC是符合servle

原创 Spring基礎一:容器和Bean

前言 這個系列的文章,以Spring5.*的官方文檔爲藍本,經過翻譯、整理和簡化而成,沒有添加任何其他來源的內容。因此,內容的正確性是有保證的;不好的地方是,由於本人功力有限,翻譯整理後的文字流暢性不是很好。另一方面,Spring

原创 《Java併發編程實踐》五(4):java內存模型(終結篇)

到此爲止,我們基本已經覆蓋了java併發編程涉及的所有技術主題,包括安全發佈、同步機制。這些技術之所以這樣設計,都與Java內存模型(Java Memory Model, JMM)有關。我們編程時不會直接與java內存模型打交道,

原创 Spring基礎十二:Resource

JDK自帶的java.nt.URL類可以通過路徑來訪問各類資源,不同的url前綴指向不同類型的資源,比如文件系統或web資源。不過這個類的功能有所不足,缺少訪問classPath或ServletContext下資源的能力,並且缺少

原创 Spring基礎七:基於註解配置—依賴注入

Bean的依賴注入可以全部通過註解來完成。Spring定義了很多註解,同時也不斷添加對JSR註解的支持,比如@PostConstrut和@PreDestroy是JSR-330定義的註解。Spring的理念是強調框架的非侵入性,即期

原创 《Java併發編程實踐》五(1):顯示鎖

本書最後一部分:“併發高級主題“,其內容如下: 第13章:顯式鎖ReentrantLock; 第14章:構建自定義同步器; 第15章:非阻塞同步器; 第16章:java內存模型 ReentrantLock java 5之前,j

原创 《Java併發編程實踐》四(2):併發性能和可伸縮性

使用多線程的主要動機就是提升系統的性能和響應性,充分利用硬件和其他資源的處理能力。 這一章介紹分析、監控和改善並統發系性能的技術。不過,多線程系統極其複雜,提升性能的技術往往會增加安全和活性風險;如果使用不當,改善性能的嘗試,往往

原创 《Java併發編程實踐》四(1):死鎖

第10~12章是本書第三部分,介紹多線程模式下的性能問題: 第10章:死鎖,主要介紹死鎖引起的線程活性失敗; 第11章:併發性能和可伸縮性,介紹多線程角度如何分析程序的性能; 第12章:測試,如何對多線程程序進行測試,此章跳過。

原创 《Java併發編程實踐》二(5):線程安全組件

這是第二部分最後一章,介紹java提供的線程安全組件;需要注意的是,由於本書比較老,只涵蓋Java 1.6的併發組件,內容並不過時,但完整性有所欠缺。 第4章介紹了編寫線程安全類的幾種途徑,其中“委託線程安全”策略基於現有的線程安