原创 Linux下c程序地址空間佈局

我們在學習C程序開發時經常會遇到一些概念:代碼段、數據段、BSS段(Block Started by Symbol) 、堆(heap)和棧(stack)。先看一張教材上的示意圖(來源,《UNIX環境高級編程》一書),顯示了進程地址空

原创 線程初識+六個函數

今天得知了參加的最後一場暑期實習生的招聘結果,我又被刷了,沮喪了幾天之後,有人告訴我那家公司不招c/c++方向的,還有半個月就放暑假了,是繼續看書學習,還是去實踐,很迷茫,真的感覺時間不夠用。 這篇用來記錄線程,幾個星期之前,我看過這篇,

原创 筆試分析之騰訊2013暑期實習

4月份的筆試,考得不好,經過暑期的磨礪,回頭再看那些題目,有些就豁然開朗了 1.關於類型轉換 1.32位機上根據下面的代碼,問哪些說法是正確的? signedchar a = 0xe0; unsignedint b = a; unsig

原创 effecitve c++之const

看過effective c++的人都知道,這本書窮盡c++語言之細節,我個人覺得雖然這本書寫的雖然很好,但是過分追求語言上的細節,是否讓人覺得c++這門語言本身就有很多弊病呢? 記得有一次面試官問我:const在c++中有哪些作用呢?這篇

原创 堆排序的實現

堆排序是利用了一種數據結構叫做二叉堆,二叉堆是這樣定義的: 二叉堆是一種特殊的堆,二叉堆是完全二元樹或者是近似完全二元樹,有最小堆和最大堆 特點: 1.父結點的鍵值總是大於或等於(小於或等於)任何一個子節點的鍵值。 2.每個結點的左子樹

原创 二叉樹的前序、中序、後序的實現(遞歸和非遞歸)

二叉樹的前序遍歷,中序遍歷,後序遍歷,層序遍歷一直是筆試面試中常考的內容,這次自己都把實現了 寫了一兩個小時,算是總結過了,以後用的時候拿出來,如果寫的不好的,希望大家指出來 #include <stdio.h> #include <st

原创 選擇排序的實現

選擇排序很簡單,基本思想如下: 從待排序的記錄序列中選擇關鍵碼最小(或最大)的記錄並將它與序列中的第一個記錄交換位置;然後從不包括第一個位置上的記錄序列中選擇關鍵碼最小(或最大)的記錄並將它與序列中的第二個記錄交換位置;如此重複,直到序列

原创 二分法查找的實現

二分法查找的前提是數據是有序的,時間複雜度是O(log2n) 沒有什麼難點,寫的太多了,直接上代碼: #include <stdio.h> int BSearch(int a[], int x, int low, int high)

原创 我讀Mongoose源碼----程序框架

Mongoose是一種WEB服務器,因爲最近在學習網絡編程,所以打算研究研究它的源碼,認真看了大部分,覺得學到的東西的確不少,拿出來分享一下,也和大家交流交流 至於什麼是WEB服務器,以及Mongoose作爲一種輕量級的WEB服務器,它

原创 fork()和vfork()函數

fork是一個很重要的函數,能否徹底理解父子進程的關係,取決於你對fork的理解的程度。 #include<unsitd.h> pid_t fork(void) 從書上我總結了三點: fork調用一次返回兩次,子進程返回0,父進程

原创 c++中一個類所佔用的空間

看到阿里的一道筆試題: #pragma pack(2) class A { int i; union U { char buff[13]; int i; }u; void foo() { } typedef c

原创 Unix 環境變量

Linux下處理環境變量常見的幾個操作: env:顯示當前所有的環境變量 set:顯示當前bash下用戶自定義的變量和環境變量 export:把自定義的變量轉換成環境變量 環境表: Unix下的每一個程序都會有一張環境表,其實我們可以

原创 歸併排序的實現

歸併排序的時間複雜度和快排還有堆排序是一樣的,歸併排序利用了分治的思想,它的核心就是將兩個有序的數組合並,那麼我們怎麼得到這兩個有序的數組呢,就是將這兩個數組再分爲小的數組,由小的數組合並而成,是不是有種遞歸的趕腳?對了,歸併就是,遞歸+

原创 二叉查找樹的實現

二叉查找樹是這樣定義的: 二叉查找樹(Binary Search Tree),或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;若它的右子樹不空,則右子樹上所有結點的值均大於它的

原创 深入探討c++中的引用

原文鏈接:http://www.programfan.com/article/2715.html#     摘要:介紹C++引用的基本概念,通過詳細的應用分析與說明,對引用進行全面、透徹地闡述。   關鍵詞:引用,const,多態,指針