原创 Linux環境下段錯誤產生原因及調試方法

一、段錯誤是什麼?     段錯誤指訪問的內存超出了系統給這個程序設定的內存空間,例如訪問了不存在的內存地址,訪問了系統保護的內存地址,訪問了只讀的內存地址等 二、一一舉例說明 訪問不存在的內存地址 #include<stdio.h>

原创 malloc、kmalloc、vmalloc函數的區別

malloc()返回的頁在進程的虛擬地址空間內是連續的,但在物理地址空間內不一定連續 kmalloc()確保分配的內存區域在物理空間上是連續的(自然在虛擬地址空間上也是連續的) vmalloc()只確保分配的頁(內存區域)在虛擬地址空間內

原创 信號量以及信號量和自旋鎖的區別

  Linux中的信號量是一種睡眠鎖。如果有一個任務試圖獲得一個不可用(已經被佔用)的信號量時,信號量會將其推進一個等待隊列,然後讓其睡眠。這時處理器能重獲自由,從而去執行其他代碼。當持有的信號量可用(被釋放)後,處於等待隊列中的那個任務

原创 秋招面經總結(持續更新中)

大華:(一面8月12,二面8月15) 一面:(25分鐘) 1、自我介紹 2、博客都是關於哪些技術的 3、fork源碼的剖析(只是簡單的剖析嗎?有沒有將其替換掉使用) 4、select、poll、epoll的區別 5、raw_socket的

原创 leetcode—— 不同路徑I II

/* 一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記爲“Start” )。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記爲“Finish”)。 問總共有多少條不同的路徑? */ 思路:

原创 醜數

題目:我們把只包含因子 2、3、5的數稱爲是醜數,求按從小到大的順序的第n個醜數。 看不懂的可以私聊我,雖然是書上的代碼和思路,但還是以自己弄懂爲主 int Min(int number1, int number2, int numbe

原创 如何實現一個類定義的對象不能進行拷貝構造和賦值呢

  可以實現一個基類,把這個基類的拷貝構造和operator=賦值函數私有化,那麼任何這個基類繼承的派生類,都不能拷貝和operator=了 還有一種辦法:把這個類的拷貝構造和operator=賦值函數私有化,這樣做完全可以,但是對於每一

原创 堆排序

  堆排序分爲兩步:建初始堆和交換堆頂元素和末尾元素並重建堆( 排序)  時間複雜度爲O(n) + O(nlgn)即等於O(nlgn) 一、建堆:時間複雜度:O(n)  堆我們正好可以用一個數組來存儲,那麼它將有如下的關係: i 表示第

原创 如何實現一個不可以被繼承的類

   由於派生類對象的構造,要先構造基類部分,而且派生類可以繼承基類的private成員,但是卻不能訪問,因此可以把基類的構造函數實現成private私有的構造函數,那麼任何一個派生類在繼承這個基類的時候,都會由於無法調用基類的私有構造函

原创 set的底層實現實現爲什麼不用哈希表而使用紅黑樹

1、set中元素是經過排序的,紅黑樹也是有序的,哈希是無序的 2、如果只是單純的查找元素的話,那麼肯定要選哈希表了,因爲哈希表在的最好查找時間複雜度爲O(1),並且如果用到set中那麼查找時間複雜度的一直是O(1),因爲set中是不允許有

原创 在數組中查找丟失的一個數據

最簡單的算法:開闢一個數組,然後遍歷原數組,讀到哪個數就給新開闢的那個數組對應位置寫成true,遍歷完之後再對對新開的數組遍歷一遍找到爲false的那個位置,它對應的下標就是丟失的數據 時間複雜度:O(n)空間複雜度O(n+1) int

原创 Linux中線程安全問題

一、線程安全的介紹      在目前的計算機科學中,線程是操作系統調度的最小單元,進程是資源分配的最小單元。在大多數操作系統中,一個進程可以同時派生出多個線程。這些線程獨立執行,共享進程的資源。在單處理器系統中,多線程通過分時複用技術,處

原创 qsort函數和bsearch函數

頭文件<stdlib.h> 一、qsort()是用來排序的,原型如下: void qsort(void *base, size_t num, size_t size, int(*compare)(const void*,const vo

原创 int *const p和const int *p區別

const int *p; 上面這條語句中,const修飾的是p指向的內存的值不能被修改,但是p本身是可以修改的 int *const p; 上面這條語句中,const修飾的是p本身是常量,不能被修改,但是p指向的內存是可以被修改的