面試的書籍主要是參考《王道程式設計師求職寶典》這本書來複習的,這本書列出了很多零散的知識點,還是蠻值得一看的。
標準庫提供的字串處理函式:
1. strlen(s)
2. strcmp(s1,s2)
3. strcat(s1,s2)
4. strcpy(s1,s2)
5. strncat(s1,s2,n)
6. strncpy(s1,s2,n)
傳遞給這些標準庫例程的指標必須具有非零值,並且指向以null結束的字元陣列,其中的一些標準庫函式會修改傳遞給它的字串。這些函式將假定它們所修改的字串具有足夠大的空間接收本函式新生成的字元,程式設計師必須確保目標字串必須足夠大。
void * memcpy(void * desc,const void * str,size_t n)
從源src指向的目標位址的起始位置開始拷貝n個位元組到目標desc所指向的記憶體位址的起始位置中,函式返回指向desc的指標。
strcpy和memcpy的區別:
1. 複製的內容不同,strcpy只能用於複製字串,memcpy可以複製任意內容。
2. 複製的方法不同,strcpy不需要指定長度,它遇到被複製字元的串結束符』\0』才結束,memcpy根據第3個引數來決定。
3. 用途不同,複製字串時用strcpy,複製其他型別時用memcpy。
void * memset(void * s,int ch,size_t n)
將s中前n個位元組用ch替換並返回s。
字串轉換為整數需要考慮的三個問題:
1. +-號問題
2. 字元是否有效的問題
3. 整數是否溢位的問題
在乙個字串中找到第乙個只出現一次的字元:
1. 使用乙個hash表(記錄下每個字元出現的次數)
2. 兩次遍歷
判斷乙個字串中所有字元是否相同:
hash表
為了節省空間,可以使用bitmap
作位運算(異或)
自定義str的函式時需要特別注意三點:
char陣列移除字元就是要將整個陣列移動,使用兩個指標。printf函式資料型別大小大於佔位符時會出現問題如:
printf(「%d」,long long)
「%d」只會定址四個位元組,但是long long 型別的資料會有8個位元組入棧。
printf列印long long時需要特別注意。
enum 列舉型別名
[變數名列表];
花括號內的內容成為列舉表,其中的每一項稱為列舉變數。
sizeof是單目運算子,它的計算發生在編譯時刻。c99標準規定,函式,不能確定型別的表示式以及位域成員不能被計算sizeof值。sizeof可以對乙個函式呼叫求值,其結果是函式返回型別的大小,函式不會被呼叫,注意是函式呼叫,不是函式。
#pragma pack(n)
列舉只是定義了乙個常量集合,裡面沒有元素。列舉型別是當做int型別儲存,故而列舉型別的sizeof為4。
sizeof求字元陣列時千萬不要忘記最後的』\0』。
異或運算子有乙個性質:兩個相同的數異或結果為0,0與任意數異或的結果為該數。
異或和按位或的應用:
1. 交換兩個數
2. 不用算術運算子實現加法
3. 求平均值
移位運算子優先順序比算術運算子低,所以要特別注意加上括號。
在c++中,有符號數與無符號數轉換時,記憶體中的內容並沒有改變。只是對內容中相同的資料解釋不通而已。
new和delete是c++中的運算子:
1. 首先呼叫operator new的標準庫函式
2. 呼叫建構函式
malloc和new的異同點:
相同點:
都可以用於申請動態記憶體和釋放記憶體。
不同點:
1. malloc與free是c/c++語言的標準庫函式,new/delete是c++中的運算子。
2. new自動計算需要分配的空間,而malloc需要手工計算位元組數。
3. new是型別安全的,malloc不是。
4. new呼叫operator new 分配足夠的空間,並呼叫相關物件的建構函式,而malloc不能呼叫建構函式。
5. malloc/free需要庫檔案支援,new/delete則不需要。
區域性變數和全域性變數重名時會覆蓋掉全域性變數,若要使用全域性變數需要使用::或extern。
使用malloc需要注意3點:
1. 強制型別轉換
2. 非空判斷
3. free釋放掉記憶體
inline說明對於編譯器來說只是乙個建議,編譯器可以選擇忽略。
在c++程式中呼叫被c編譯器編譯後的函式,需要加上extern 「c」,c++運營是一種物件導向的程式語言,為了支援過載機制,在編譯生成的彙編碼中,要對函式的名字進行一些處理,比如加上函式的返回值型別等資訊。而在c語言中只是簡單的函式名字而已,不會加入其它資訊。也就是說,c和c++語言對產生的函式的名字的處理是不一樣的。這樣在鏈結階段若是按照c++的函式命名規則去查詢c編譯器編譯的函式,就會出現鏈結錯誤。
沒有預設建構函式的類型別成員,以及const型別的成員變數和引用型別的成員變數,都必須在建構函式初始化列表中進行初始化。
有一種特別常見的情況需要類定義自己的複製控制成員:類具有指標成員。
成員函式的隱藏:
1. 兩個函式引數相同,但基類函式不是虛函式。
2. 兩個函式引數不同,無論基類函式是否是虛函式。
定義型別轉換函式,需要注意一下幾點:
1. 轉換函式必須是成員函式,不能是友元函式。
2. 轉換函式不能指向返回型別,但是再函式體內必須用return語句以傳值方式返回乙個目標型別的變數。
3. 轉換函式不能有引數。
reinterpret_cast:顯示強制轉換,用()實現。
const_cast:轉換表示式的const性質。
static_cast:編譯器隱式執行的任何型別轉換都可由static_cast顯示完成,僅當型別之間可由隱式轉換時(除類層次之間的下行轉換以外),static_cast的轉換才是合法的。
dynamic_cast:必須是指標,類的引用或者void *,dynamic_cast設計執行時型別檢查,dynamic_\cast主要用於類層次間的上行和下行轉換。
海量資料處理,top k問題的通用解決方法:
1. 分治 –>使用hash進行對映
2. 堆排序
3. 快排中的分割思想
4. 點陣圖bitmap
必須要root許可權才能開啟的埠為小於1024的埠。
應用不支援一般意義的賦值運算,因此沒有引用型別的容器。
容易元素型別必須滿足以下兩個約束:
1. 元素型別必須支援賦值運算
2. 元素型別物件必須可以複製
源**刪除是刪除死**,死**是指永遠不會被執行到的**。
單例模式:
1. 靜態成員變數(指標)
2. 靜態區域性變數 返回引用,注意拷貝,賦值要為private。
3. 靜態區域性變數,返回指標
4. 考慮執行緒安全,異常安全,使用雙重鎖,靜態成員變數(指標)
Spark書籍筆記
1 mapreduce 程式設計模型表達能力弱,只有map和reduce map shuffle reduce 難以實現複雜的資料操作 處理流程固定,難以實現迭代式計算 資料基於磁碟進行傳遞,效率較低 2 spark 抽象出rdd的資料結構,dag圖組合資料處理操作,表達能力強 靈活的資料結構和依賴...
計算機面試書籍
語言語法 以 c c 為例 指標 陣列 函式指標,操作符運算順序,const 常指標與指向常量指標 static 四大用法,字串 字元陣列 位元組對齊 sizeof 秒殺書籍 c primer 物件導向。構造與析構順序 多型 過載 覆蓋 c 物件模型等。秒殺書籍 深入理解 c 物件模型 資料結構。棧...
c 方向筆面試推薦書籍
c 方向推薦書籍 mfc 深入淺出mfc,window程式設計,mfc六大 這個問得很少,基本上不用看。先看c 再看stl,最後看設計模式。stl stl原始碼剖析。這個問得有點多,主要把各種容器的底層實現機制以及優缺點掌握清楚,這個問題經常問。另外,大資料處理經常用到 hash set,hash ...