原创 把git當作一個小型最終一致性的 json 數據庫

這幾天寫了一些有趣的代碼: 規格設計 把git當作 json 數據庫。做法是這樣的: 創建一個git倉庫 爲每個最小粒度的數據創建一個獨立的json文件({table}.json) 客戶端通過 Python寫git操作代碼,實現幾個數據庫

原创 編寫乾淨清晰的 Python 代碼的一種通用模塊設計

編寫乾淨清晰的Python代碼的一種通用設計 在 python 和 shell 之間選擇 如果有Python環境,應該大部分時候都選擇使用 Python 來編寫系統。這是因爲: Python 更易於維護,適合模塊化設計(class, 多文

原创 工程中的構架

構架 在代碼編寫和工程設計中,構架的好壞往往決定着模塊代碼編寫和系統構建的不變性和靈活性。構架的好壞往往在根本層面上導致了實際開發中的效率和反碎片化問題。好的構架思維經常是會丟失的,被反覆重新發現的。因此我們有必要不斷收集好的構架設計,從中

原创 工程中的“面向對象”編程

工程中的“面向對象”編程 在工程處理中,工程師很容易寫出碎片的腳本代碼,例如處理服務器上的腳本: 假設了一些存在的環境變量、目錄結構、配置和數據 腳本基於這些假設開始做一堆中間處理,並最終得到一些輸出數據。 即使有了docker,有了k

原创 實用"函數式"編程範式

實用"函數式"編程範式 通常說函數式編程,可能就會提到 map / reduce, 或者函數編程語言,例如 lisp, Haskell 等。 我以前讀過一篇文章,具體鏈接找不到了,作者的觀點是函數式編程具體體現在通過函數編程可以直觀得看到邏

原创 軟件工程師的戲劇衝突點

軟件開發,基本的過程是三部分: 工具,流程,和人。開發中,每個角色需要關注兩個方向的問題,一個是向下的問題拆解(How),另一個是向上的問題定義(What)。這兩部分又都分別和另外一個綁定在一起: Why,爲什麼問題這樣解決,爲什麼問題是這

原创 覆蓋率測試工具的分層

許多軟件都有分層。C/C++代碼的覆蓋率工具亦如此。 最底層是GCC支持的編譯和收集兩個底層: 編譯選項:-g -fprofile-arcs -ftest-coverage 收集工具:gcov, gcov-tool 往上一層是覆蓋率報告

原创 理解算法(1): 最大值,最小值,和堆。

最近總想,算法好像沒有數學那樣直觀,例如方程可以解決一大類問題,我們遇到許多數學問題,只要將其轉成方程問題,剩下的就是解方程。算法好像不是那麼直觀,順着這個思路開始重新看算法問題。今天有一個收穫,也可能其他人早就知道。 int max=IN

原创 學習Linux基礎的一種思維鏈條

by @幻灰龍 && GPT3.5 PDF下載:學習Linux基礎的一種思維鏈條.pdf 介紹Linux 的目錄結構 Linux的目錄結構採用了樹形結構,主要包括以下核心目錄: /(根目錄):整個文件系統的起點,包含所有其他目錄和文件。

原创 認識 `<stdint.h>` (一)

<stdint.h>是C99的標準,在裏面定義了8,16,32,64位的有符號和無符號整數類型定義。 分別是: int8_t, int16_t, int32_t, int64_t; uint8_t, uint16_t, uint32_t,

原创 windows上的C++編譯環境

Windows 上的C++編程環境比Linux上的繁雜很多,有許多工具已經很老了,但是很多教材也還在用,很多學校的教學也還在用。另一方面,有更現代的選擇,但是需要一些必要的配置和對工具鏈組成的理解,本文將必要的環境都介紹一遍,讓新手能有一個

原创 如何查找鏈接庫的位置,編譯和執行時分別?

GCC 動態鏈接庫鏈接查找 https://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html It looks in the DT_RPATH section of

原创 如何證明一個靜態庫沒有使用 malloc

今天我還做了另外一個有趣的事情: 有一個客戶要求我們提供的一個 libxxx.a 文件不能使用 malloc 動態分配內存。研發排查了下代碼都沒有用到 malloc。 但是客戶說他們還是可以看到 malloc 符號,但是他們把malloc的

原创 如何解決庫鏈接出現符號重定義問題

下面是一組和GPT的對話,通過逐個排查,我們知道只有一種情況會導致符號重定義。以下假設在 CMake 配置環境。 Q:如果一個靜態庫a,鏈接了b,這個時候 c 鏈接了 a 和 b ,會導致 b 符號重複定義麼? A: 任何庫(靜態或動態)本

原创 如何排查C++鏈接庫之間鏈接順序問題

今天浪費了8個小時排查了一個 C++ 庫編譯後依賴的cuda符號找不到的問題。後面在湊巧的情況下在 鏈接庫的地方加了一個可能會用到的庫,結果就通過了。但是湊巧肯定是有更深刻的原因,再反覆驗證,實際上是這樣的: link(A) link(B)