原创 進程分析工具 pstack ptree strace

當進程卡住不動或者死鎖時,pstack可以把當前進程的代碼棧打出來,方便我們排查。 用法非常簡單,後面直接加進程號即可。如果是多線程的,則會打印每個線程的堆棧信息。 man pstack 可查看幫助 [root@localho

原创 我們身邊的人工智能

最近在看了幾節關於人工智能的公開課,之前還以爲人工智能是很遙遠的事情,但現在想了想,它早已來到了我們身邊。 從和人類行爲相似的計算機程序,比如會下國際象棋的深藍,到自己會學習的阿爾法狗。人工智能也在不斷地迭代。 它的應用領域也在漸

原创 右值引用-2移動語義,完美轉發

移動語義的例子 #include<iostream> #include<vector> using namespace std; #define pfunc \ cout << __FUNCTION__<<":"<<__LIN

原创 shell腳本中的各種括號

shell編程中的括號大致有五種,分別是 (), [], (()), [[]], {} 接下來簡單的介紹以下它們的用法: () 放置命令,格式$(cmd),如同`cmd` 。 解釋器遇到這種格式,會先執行命令,得到結果再輸

原创 右值引用-1基本概念

引用 通常所說的引用,也稱左值引用,某個變量的別名。最經典的一個應用就是作爲函數參數,地址拷貝代替值拷貝,提高性能。 其實用指針也能做到同樣的效率,不過就是不那麼“友好”。如下,他們的反彙編代碼都是一致的,它們本質上都是地址。

原创 C++11 概覽

C++11發佈都將近10年了!平時也經常用到,總結一下 小改進 for循環 for (int &a : arr) { cout << a << endl; } override和final 子類成員函數overr

原创 C++內存管理之智能指針

使用C++,最重要的一塊技能就是內存的分配和管理。這也是C/C++ 中陷阱最多的地方。說來慚愧,我曾經寫過一個獲取網卡信息的接口,有一個返回分支沒有調用free函數釋放資源,運行時間常了之後,進程佔用的內存越來越大。後來自己總結,

原创 CMake構建工程-cpp多目錄

最近接觸一個項目,只有一個源碼目錄,目錄裏面有好幾百的源碼文件。看到第一眼就有種想收拾收拾的感覺,把功能相似,業務相近的合到一個目錄中去。讓代碼目錄結構更清晰一些。 但我看是動手改的時候,複製源文件到新建目錄之後,include和

原创 在編譯時期,比較兩個類的大小

sizeof 在編譯時,可以知道類大小 兩個類比較之後,等到一個常數 用這個常數結合模板實現 #include<iostream> using namespace std; class A { int a; }; cl

原创 TCP如何進行擁塞控制

擁塞控制和流量控制不一樣,後者是端對端的問題,它則是一個全局的問題,涉及主機,路由器等等通信設備,還有些和降低傳輸性能有關的問題。 主要涉及三個算法 慢開始算法 如圖所示, 擁塞窗口cwnd在最開始時,值爲1,然後按照*2翻

原创 TCP如何進行流量控制

TCP中的流量控制和擁塞控制不同,它只解決端到端之間的問題。 往往是要通過降低發送端發送數據的速率,以便接收端能夠處理,而不造成擁塞。 在TCP的首部,有一個標識窗口大小的16位字段,這個字段越大,說明滑動窗口(緩衝區越大),網絡

原创 UDP首部格式

UDP首部格式 源端口號 目標端口號 包長度 校驗和 數據部分 源端口號 表示發送端端口號,長度16位,可選項,如果不需要返回數據數據,可以不設置。 目標端口號 表示接收端端口號,長度16位。 包長度 該字

原创 進程間通信 IPC 概述

Linux進程間通信,大致有五種 原始的信號和管道,還有共享內存,消息隊列和信號。 1. 管道 管道分爲兩種 pipe和fifo pipe可用有親緣關係的進程,比如父子進程,兄弟進程 fifo可用不同進程之間,不限於親緣關係 pi

原创 lambda 表達式

lambdas 就像是一個內聯函數,實際上編譯器會生成一個匿名的函數對象,或者說仿函數對象。 只要明確它是一個對象,重載了()操作符,接下來就很容易理解它的語法。 [函數對象參數] (操作符重載函數參數) mutable 或 ex