原创 模擬實現 list

鏈表前面我已經寫過了,不過寫的是單鏈表,而C++庫中的list是雙鏈表,那麼,我們就來模擬實現一下雙鏈表,這樣對於庫中的list也會有更加深刻的瞭解。 那麼首先我們先來了解一下雙鏈表的結構,雙鏈表無非就是比單鏈表多了一條鏈,單鏈表

原创 智能指針:auto_ptr 和 scoped_ptr

很多人都說:C++比Java難,難就難在指針,指針很難學,但是不可否認,通過指針,我們確實將很多問題解決了,不過爲什麼要引入智能指針呢? 首先這裏先聲明一點:智能指針並不是指針,它的本質是個類,不過,它的功能是自動管理指針所指向的

原创 模擬實現~殭屍進程和孤兒進程

殭屍進程 首先說一下,什麼是殭屍進程呢? 當進程退出並且父進程(使用wait()系統調用)沒有讀取到子進程退出的返回代碼時就會產生殭屍進程。殭屍進程會以終止狀態保持在進程表中,並且會一直在等待父進程讀取退出狀態代碼。 那麼接下來我

原创 crond和crontab調研

crontab是一個命令,常見於Unix和類Unix的操作系統之中,用於設置週期性被執行的指令。該命令從標準輸入設備讀取指令,並將其存放於“crontab”文件中,以供之後讀取和執行。 而crond是crontab的守護進程。 1、定時任

原创 哈希表

數據結構我們瞭解好幾個了,其中寫的最多的就是順序表和鏈表,在這個階段,還模擬實現了庫中的vector和list,隨後我們又瞭解了隊列和棧這些都是線性的數據結構,所以想要查找一個元素的話,這些的時間複雜度都是O(N)。 除了線性結構還有樹形

原创 進程間通信——消息隊列

上一次我們看的管道是單向通信,如果你想用管道進行雙向通信,可以創建兩個管道。下面我們再來看一個可以雙向通信的——消息隊列(msgqueue) 消息隊列提供了一種從一個進程向另一個進程發送一個有類型數據塊的方法。 創建消息隊列用的函數是:

原创 線程同步與互斥及死鎖問題

線程我們之前已經總結過了,就是進程的一個執行分支。既然是一個執行分支,那麼我們就可以定義兩個線程,在定義一個全局變量,初始值置爲0,讓這兩個線程,同時對這個全局變量進行++處理,1000次,100000次,100000000次,之後,你會

原创 【牛客】最小的k個數

使用topK的方法,如果不想寫堆的話,瞭解幾個庫裏的堆的函數 std::make_heap將[start, end)範圍進行堆排序,默認使用less, 即最大元素放在第一個。 std::pop_heap將front(即第一個最大元素)移

原创 線程

線程:是進程的執行分支。線程是子進程內部運行的,這裏的內部說的是,初始進程創建的地址空間。但是Linux下並沒有真正意義上的線程,只有進程模擬的線程,因爲Linux並沒有給線程一個專門的結構體,而且,CPU也不需要區分進程和縣城,他只需執

原创 【牛客】順時針打印矩陣

輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16,15,14,13,9,5

原创 Linux軟鏈接和硬鏈接

硬鏈接與軟鏈接是 Linux 文件系統中的一個重要概念,其涉及文件系統中的索引節點 (index node 又稱 inode),而索引節點對象是 Linux 虛擬文件系統 (VFS) 的四個基本概念之一 所以,再說軟硬鏈接之前我們先從in

原创 進程間通信——管道

我們都知道,進程的運行具有獨立性,那麼如果想讓進程之間通信,該如何實現呢?今天我們就來看幾種進程間通信(IPC)。 說到進程間的通信,它的本質就讓不同的進程看到同一塊資源,這也是進程間通信的前提。 一、管道 進程間通信最基本的機制:管道–

原创 B樹的實現

二叉搜索樹我們已經瞭解了很多種形式了,有AVLTree、紅黑樹等,不過,這都是在二叉搜索樹的基礎上加了些東西(平衡因子、顏色),其本質還是二叉搜索樹。現在我們遇到一個問題:要是要查找的數據量很大的時候,還用這個,那麼樹的深度將會很深,那麼

原创 端口號調研、URG和PSH、及TCP的計時器

端口號 端口號是用來標識目的主機當中的唯一網絡進程,因此IP地址+端口號=》套接字;套接字可以確定唯一的一個進程。 Tcp/Ip協議中引入一種叫做“套接字”的應用程序軟件,有了這樣一種技術,一臺電腦就可以與任意一臺具有套接字的電腦通信。

原创 進程間通信——信號量

在說信號量之前我們再來複習一下幾個概念: 1、把兩個或多個執行流所能訪問的同一塊內存資源叫做臨界資源 2、把訪問臨界資源的代碼叫做臨界區 3、在任意時刻只有一個執行流可以訪問臨界區,這種現象叫做互斥 4、一件事,要麼做了,要麼沒有做,這叫