原创 排序:六. 堆排序(利用堆結構(二叉完全樹)的彈出/下沉操作排序)

平均情況、最好情況和最壞情況的時間複雜度都爲O(nlog2n),即線性對數複雜度,不穩定的排序算法。 堆結構在 數據結構:二叉完全樹(堆) 一文中進行了分析,接下來用代碼來實現其幾個關鍵操作:彈出、插入、取頂、上浮、下沉 堆操作實現

原创 四. 數據類型:其它類型 + 文件

空對象 None 布爾 bool:True、False True本質爲 1(等且只等於),False本質爲0(等且只等於)。 True + 4 -> 5 False – 3 -> -3 注意: bool(3) -> True bool

原创 五. 語句與語法:語句

輸入輸出 s = input() 接收輸入,接收爲str型 input(‘提示’) 先輸出提示信息 print(‘=’ * 20) 輸出20次 = print(n,b,v,sep=’ - ’) 用-分隔n,b,v並輸出 print(1

原创 三. 數據類型:集合類型 + 映射類型

集合類型 set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重複,而且是無序的,這點和 dict 的 key很像。 set存儲的元素和dict的key類似,必須是不變對象 藉助list創建set,重複元素會被合

原创 六. 語句與語法:函數 + 列表生成式

函數 在Python中,定義一個函數要使用 def 語句,依次寫出函數名、括號、括號中的參數和冒號:,然後,在縮進塊中編寫函數體,函數的返回值用 return 語句返回。 如果沒有return語句,函數執行完畢後也會返回結果,只是結果

原创 數據結構:二叉完全樹(堆)

參考文章 堆常用來實現優先隊列。 用數組保存數據,而不是鏈表。 在隊列中,操作系統調度程序反覆提取隊列中第一個作業並運行,因爲實際情況中某些時間較短的任務將等待很長時間才能結束,或者某些不短小,但具有重要性的作業,同樣應當具有優先權。

原创 二. 數據類型:序列類型

分爲可變和不可變序列。 序列通用操作(以列表爲例) 生成序列 list(‘abcd’) -> [‘a’,’b’,’c’,’d’] list(range(5)) -> [0,1,2,3,4] 判斷元素是否包含 a = [1,2,3,4,

原创 排序:三. 插入排序(將元素比較插入到前面的位置)

參考文章 時間複雜度O(n2),最好情況O(n),最壞情況O(n2),穩定。(同冒泡) 是一種簡單直觀的排序算法。適用於量級小於千,或者若已知輸入元素大致上按照順序排列。 插入排序不適合對於數據量比較大的排序應用。 工作原理:通過

原创 排序:一. 冒泡排序 (前往後所有未排序的元素相鄰比較)

系列文章共實現了六種排序算法: 冒泡排序 直接選擇排序 插入排序 歸併排序 快速排序 堆排序 定義了 Sortable 接口,每種排序方法實現該接口,在 sort 方法中實現排序。 public interface Sortabl

原创 排序:四. 歸併排序(合併兩個已經排好序的數組)

是創建在歸併操作上的一種有效的排序算法。 平均、最好和最壞時間複雜度都爲O(nlog2n)線性對數。是穩定的。 該算法是採用分治法(Divide and Conquer)的一個非常典型的應用,且各層分治遞歸可以同時進行。 歸併操作(m

原创 排序:二. 直接選擇排序(選擇剩下的元素裏最大(小)放到最後(前))

時間複雜度O(n2),最好情況O(n2),最壞情況O(n2),不穩定。 選擇排序(Selection sort)是一種簡單直觀的排序算法。元素交換次數少,比較佔多數。 工作原理如下 首先在未排序序列中找到最小(大)元素,存放到排序序列

原创 解析配置文件自動裝配 DataSource + AbstractRoutingDataSource + AOP 實現動態數據源 - 補充:兼顧事務回滾以及分佈式事務的情況

前兩篇文章已經介紹了動態數據源的具體實現過程,在經過一段時間的使用後,發現了兩個比較嚴重的問題,在這裏進行補充說明。 事務執行失敗時沒有切回默認數據源 @Transactional 註解的方法意味着使用數據庫事務執行方法中的 sql

原创 使用 zebra 對數據庫表進行水平拆分

zebra 是美團點評開發的數據庫訪問層中間件,代碼維護在 GitHub:Meituan-Dianping/Zebra Zebra是一個基於JDBC API協議上開發出的高可用、高性能的數據庫訪問層解決方案,是美團點評內部使用的數據

原创 MyBatis 緩存 - 下:二級緩存

通過上篇文章我們已經知道,MyBatis 一級緩存的最大共享範圍爲 SqlSession,即一次會話中,而且有可能會因爲緩存沒更新而導致髒讀問題。如果需要在多個 SqlSession 中共享緩存,那麼就需要開啓二級緩存。 SqlSes

原创 Spring MVC 根據 controller 層方法入參和返回值動態生成日誌 - 下 :藉助 SpEL 或自定義的方式解析日誌表達式

上一篇文章已經就如何獲取到 controller 層方法的參數和返回值進行了詳細分析,並且封裝了 HandlerMethodPostProcessor 接口以便使用,接下來就實現業務需求:根據 controller 層方法的入參和返回