原创 插入排序算法解析

前面說過最原始的複雜度爲 O(n2) 的冒泡和選擇排序,也跳躍到了複雜度爲  O(n log n) 的快速排序,現在又再看一個複雜度同樣爲 O(n2) 的插入排序。從排序名稱結合代碼我們理解了爲什麼叫做冒泡或是選擇,快速排序自認高名,那麼

原创 理解 Python 類的變量,方法與屬性

熟悉了傳統的 C++/Java 類定義的風格,來感受一下 Python 是如何定義類的。本篇是閱讀 《The Quick Python Book》第二版關於類定義的筆記,由原書內容進一步引申,不過是依照本人的思考順序來組織的。在理解 Py

原创 希爾(Shell) 排序 - 增強版插入排序算法

前面講過的幾種排序多是以排序邏輯來命名的,例如冒泡,選擇和插入排序,以及其他如歸併排序,當然還有覺得自己足夠牛 X 快速排序命名。而本文要學習的排序算法叫做希爾排序是以其設計者 Donlad Shell 命令的排序算法,該算法在 1959

原创 真正有些水準的排序算法 - 快速排序

冒泡和選擇排序的簡單粗暴也許在某些人眼裏都不能稱作算法,現在要進入一種更優雅的排序算法,快速排序。它使用分而治之(Divide and Conquer, D&G) 的策略,要應用到遞歸調用。快速排序敢說自己快速,也確實比選擇排序快很多很多

原创 兩種最基本的排序算法: 冒泡和選擇

因 COVID-19 漫延各自居家,也更有閒時,便揀起一本關於算法的書籍來研究。本不是科班出身,算法方面自然是自己的薄弱環節。平時用各種 SDK,只大概聽說了些算法,僅能就自己如何選擇哪種實現而作爲參考。 如今閱讀的是一本入門的書籍,名爲

原创 Kafka 集羣間數據鏡像實測

由於數據安全,網速等要求,許多公司都會建立多個數據中心,每個數據中心有獨立的 Kafka 集羣。爲保持不同中心間的數據同步,就有必要在 Kafka 集羣間進行數據鏡像。kafka-mirror-maker 命令或應用 Kafka Conn

原创 等待所有的 CompletableFuture 完成

現實中有這樣的用法,創建一批在線程池中運行的  CompletableFuture 實例,然後等待它們全部執行完再繼續後面的操作。比如說 AWS 的 Lambda, 單單提交任務到線程池,不等待所有任務全部完成便退出主線程的話,AWS 便

原创 啓用並測試 Kafka 的 SASL + ACL 認證授權

Kafka 默認情況下是沒有啓用安全機制,這讓能連接到 Broker 的客戶端可以爲所欲爲,自 Kafka 0.9.0.0 版本引入了安全配置,但是需要進行一些配置來開啓它。Kafka 安全主要包含三個方面:認證(authenticati

原创 Python 函數聲明先後順序的問題

在 Python 中如果把函數定義寫在調用的下方可能會出錯,例如下面的代碼 foo() def foo():     print("hello") 執行時會報出錯誤 NameError: name 'foo' is not defi

原创 Redis 中使用服務端 Lua 腳本

Redis 自 2.6 版本起加入了服務端的 Lua 腳本支持,即增添了 EVAL, EVALSHA, SCRIPT 相關命令。Lua 爲何物,Lua 是一個非常輕量級,強大,高效,可內嵌的腳本語言; 產自於巴西,源碼和二進制包都只有 2

原创 試手 RxJava 2.x 及對線程的初步理解

在進行數據流處理過程中,需要一個高效苗條的流處理組件,比如對輸入流能進行分組(窗口),能進行流量控制(Back Pressure - 背壓),這也就涉及到響應式編程,流處理框架。這方面如果直接基於 Akka actor 來構建 Akka

原创 開啓 Python 組件 Boto3 在 IDE 中的智能提示

在用 Python 編寫 AWS 服務時,要用到 Boto 3 組件,而像 boto3.client('s3') 獲得的對象只能被 IDE 識別爲一個 BaseClient, 具體包含什麼操作方法是在運行時由參數 s3 指示的基於 JSO

原创 AWS Python Lambda 使用 Layer

使用 Python 書寫 AWS Lambda 的一個好處就是能夠在控制檯中直接編輯源代碼,非常方便進行快速驗證測試 AWS 環境相關的。這只限於使用 AWS 爲 Python Lambda 運行時提供的默認組件(比如 boto3),尚若

原创 Java 與'嵌入式' PostgreSQL 數據庫的單元測試

在我們對數據庫 DAO 類進行單元測試時,通常不應該依賴於一個外部數據庫,所以會選用特定比較接近於真實數據庫類型的內存或嵌入式數據庫,如 HSQLDB(HyperSQL), H2, Derby 等。但總難免會用到特定數據庫的特性,這時候就

原创 轉換 Iterator 爲 Java 8 的 Stream

Java 中有關抽象的可遍歷的對象有 Iterator, Iterable 和 Java 8 的 Stream, Iterable 可簡單的用如下代碼轉換爲 Stream StreamSupport.stream(iterable.sp