原创 遠程執行命令傳輸文件 paramiko ssh sshpass nc

在持續集成任務中,有時候需要在不同的平臺上進行自動化測試,完成後獲取測試結果。這時就需要先將測試包發送到目標平臺,然後傳輸一些測試命令到目標平臺完成測試任務。本文主要總結一些遠程執行命令的方式。 paramiko paramiko

原创 tmux關機永久保存會話

tmux是linux終端的一款利器,它可以和服務器建立會話,之後就算本機網絡斷開或者關機,在會話中運行的程序仍然可以繼續執行。 tmux的使用方法可以參見這篇**博文** 下面想說的是怎麼保存本地的會話。 在日常開發中,我們可能需

原创 gitlab-ci 持續集成配置(一)註冊runner

gitlab-ci 本文主要介紹gitlab-ci相關的基本配置。 ci 其實就是Continuous Integration的意思,即持續集成。它可以實現,當我們每次提交代碼到gitlab服務器的時候,可以觸發相關聯的runne

原创 鏈接的接口——符號(一)鏈接錯誤:symbol lookup error: xxx, undefined symbol: xxx

問題 在ubuntu16電腦上運行編譯好的qt demo出報錯 錯誤信息如下: ./abc_product: symbol lookup error: ./abc_prodcut: undefined symbol: Module

原创 c++11設計模式 工廠模式 泛型抽象

當程序中許多的類需要使用共同的接口時,可以考慮工廠模式。傳統的抽象工廠實現先定義用於創建不同產品的接口, 但將實際的創建工作留給了派生的具體工廠類。 每個工廠類型都對應派生出的不同產品。本文的工廠模式可以實現不同抽象工廠的異類集合

原创 gitlab-ci 持續集成配置(二)yml配置

按照之前的步驟註冊好之後,我們就需要開始配置ci流程了。 gitlab-runner具體執行的功能和執行順序,是按照項目根目錄中.gitlab-ci.yml文件的內容進行的。配置好這個文件的內容才能實現持續集成。 一般來講主要包括

原创 c++11設計模式 觀察者模式 任意參數註冊 不繼承

當對象間存在一對多的依賴關係時,當一個對象被修改時,則會自動通知所有依賴於它的對象。這種情況就可以使用觀察者模式。本文的觀察者模式消除了傳統的觀察者模式中觀察者和主題的需要繼承的強耦合關係,可以註冊任意參數的函數,靈活性更高。 #

原创 c++11設計模式 對象池模式 可變參數構造 自動析構

當程序中需要用到一定數量的對象,且創建對象開銷比較大時可以考慮使用對象池模式。和線程池類型,需要預先創建一定數量的對象,上層使用時可以從池子中獲取創建好的對象。本文的對象池模式實現可變參數構造對象,使用完成之後自動析構。 #inc

原创 c++11設計模式 單例模式 線程安全 泛型單例

本文主要總結幾種單例實現的方式,實現單例時需要主要考慮線程安全。再者可以考慮泛型單例模式的實現,可以傳入不同個數的參數和不同類型的參數來構造單例。 雙重校驗加鎖 爲了線程安全都會考慮到上鎖。同時爲了提高效率一般會使用雙重校驗加鎖的

原创 stl的比較器:自定義數據排序方式,set忽略大小寫

stl自定義的比較器主要用於實現容器中元素的比較。比較器的定義的方式主要有下面三種: 1.普通函數 對vector數值進行降序排序 sort默認是升序的,這裏通過cmp函數改成降序排序。如果將cmp的返回值改成a<b就還是升序。

原创 c++智能指針實現(二)shared_ptr unique_ptr的實現

下面是對shared_ptr 和 unique_ptr這兩種類的簡單實現。 shared_ptr template<typename T> struct DefaultDeleter { void operator()(T

原创 gdb基本使用及多線程調試

在linux環境下進行c++開發調試的時候,不可避免需要用到gdb,它可以控制程序的啓動暫停、添加斷點、打印堆棧,能夠幫助我們儘快的發現問題、定位錯誤,是一把利器。本文打算總結一下gdb的簡單使用。 添加編譯參數 要使用gdb調試

原创 c++智能指針實現(一)c++11中的智能指針

智能指針是可以保存指向動態分配內存的對象指針的類,它可以確保在自身週期結束的時候自動的銷燬動態分配內存的對象,因此它可以有效的防止內存泄露。c++11中提供了三種智能指針,std::weak_ptr、std::shared_ptr

原创 c++線程池實現(四)線程池實現

前面已經說到了同步隊列的實現,下面來看線程池的實現。 #ifndef INCLUDE_THREADPOOL__ #define INCLUDE_THREADPOOL__ #include <list> #include <thr

原创 c++線程池實現(三)同步隊列實現

前面設計同步隊列的代碼,下面詳細說說實現。 Push void Push(T&& task) { std::unique_lock<std::mutex> lock{mutex_}; not_full_variab