程式設計師面試題整理非演算法題

2021-03-04 05:57:38 字數 4000 閱讀 8012

int *ptr;

ptr = (int *)0x67a9;

*ptr = 0xaa66;

說明:這道題就是強制型別轉換的典型例子,無論在什麼平台位址長度和整型資料的長度是一樣的,即乙個整型資料可以強制轉換成位址指標型別,只要有意義即可。

template

void printlen(t (&c)[n])

int main(int argc, char *argv)

; printlen(p);

}這是一種非型別模板形參,在需要常量表示式的時候可使用非型別模板形參。如上例,當呼叫printlen函式時編譯器從陣列實參中讀取int n的值

#include

memcpy

原型:extern void *memcpy(void *dest, void *src, unsigned int count);

功能:由src所指記憶體區域複製count個位元組到dest所指記憶體區域。

說明:src和dest所指記憶體區域不能重疊,函式返回指向dest的指標。

memset

包含:extern void *memset(void *buffer, int c, int count);

功能:把buffer所指記憶體區域的前count個位元組設定成字元c。

說明:返回指向buffer的指標。

預設建構函式。

預設拷貝建構函式。

預設析構函式。

預設賦值運算子。

預設取址運算子。

預設取址運算子 const。

if(x>0.000001&&x<-0.000001)

tcp/ip協議

主要層次結構為: 應用層/傳輸層/網路層/資料鏈路層/物理層

arp (address resolution protocol)(位址解析協議)

ip位址由兩部分組成,網路號和主機號。不過是要和「子網掩碼」按位與上之後才能區分哪些是網路位哪些是主機位。

為變數分配位址和儲存空間的稱為定義,不分配位址的稱為宣告。乙個變數可以在多個地方宣告,但是只在乙個地方定義。加入extern修飾的是變數的宣告,說明此變數將在檔案以外或在檔案後面部分定義。

sizeof和strlen有以下區別:

sizeof是乙個操作符,strlen是庫函式。

sizeof的引數可以是資料的型別,也可以是變數,而strlen只能以結尾為『\0『的字串作引數。

編譯器在編譯時就計算出了sizeof的結果。而strlen函式必須在執行時才能計算出來。並且sizeof計算的是資料型別佔記憶體的大小,而strlen計算的是字串實際的長度。

陣列做sizeof的引數不退化,傳遞給strlen就退化為指標了。

malloc和new有以下不同:

(1)new、delete 是操作符,可以過載,只能在c++中使用。

(2)malloc、free是函式,可以覆蓋,c、c++中都可以使用。

(3)new 可以呼叫物件的建構函式,對應的delete呼叫相應的析構函式。

(4)malloc僅僅分配記憶體,free僅僅**記憶體,並不執行構造和析構函式

(5)new、delete返回的是某種資料型別指標,malloc、free返回的是void指標

volatile類似於大家所熟知的const也是乙個型別修飾符。volatile是給編譯器的指示來說明對它所修飾的物件不應該執行優化。volatile的作用就是用來進行多執行緒程式設計。

可以,因為指標和普通變數一樣,有時也有變化程式的不可控性。常見例:子中斷服務子程式修改乙個指向乙個buffer的指標時,必須用volatile來修飾這個指標

對於區域性變數改變其生存期,對於全域性變數改變其可見性

主要從兩個方面考慮:

(1)靜態儲存:

a. 函式體內static變數的作用範圍為該函式體,該內存在靜態資料區上分配且只被分配一次,下次再呼叫該函式時依然維持上一次的值。

b. 類中的static成員變數屬於整個類所有,對類的所有物件只有乙份拷貝

c. 在類中的static成員函式屬於整個類所擁有,這個函式不接受this指標,因而只能訪問類的static成員變數。

(2)控制名字可見性

a. 在模組內的static全域性變數可以被模組內的所有函式訪問,但是不能被模組外的其他函式訪問

b. 在模組內的static成員函式只可被這一模組內的其他函式呼叫,這個函式的使用範圍被限制在宣告它的模組內。

1) 引用必須被初始化,指標不必。

2) 引用初始化以後不能被改變,指標可以改變所指的物件。

3) 不存在指向空值的引用,但是存在指向空值的指標。

在特定時間內完成特定的任務,實時性與可靠性。

c、c++中記憶體分配方式可以分為三種:

(1)從靜態儲存區域分配:

內存在程式編譯時就已經分配好,這塊內存在程式的整個執行期間都存在。速度快、不容易出錯,因為有系統會善後。例如全域性變數,static變數等。

(2)在棧上分配:

在執行函式時,函式內區域性變數的儲存單元都在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。

(3)從堆上分配:

即動態記憶體分配。程式在執行的時候用malloc或new申請任意大小的記憶體,程式設計師自己負責在何時用free或delete釋放記憶體。動態記憶體的生存期由程式設計師決定,使用非常靈活。

如果在堆上分配了空間,就有責任**它,否則執行的程式會出現記憶體洩漏,另外頻繁地分配和釋放不同大小的堆空間將會產生堆內碎塊。

乙個c、c++程式編譯時記憶體分為5大儲存區:堆區、棧區、全域性區、文字常量區、程式**區

拷貝建構函式和賦值運算子過載有以下兩個不同之處:

(1)拷貝建構函式生成新的類物件,而賦值運算子不能。

(2)由於拷貝建構函式是直接構造乙個新的類物件,所以在初始化這個物件之前不用檢驗源物件是否和新建物件相同。而賦值運算子則需要這個操作,另外賦值運算中如果原來的物件中有記憶體分配要先把記憶體釋放掉

注意:當有類中有指標型別的成員變數時,一定要重寫拷貝建構函式和賦值運算子,不要使用預設的。

(1)建構函式private

此時我們可以通過static成員函式獲得該類的例項(我們只能得到位於堆上的例項)

class finalclass1

static void deleteinstance( finalclass1* pinstance)

private :

finalclass1() {}

~finalclass1() {}

};(2)

想法:實現乙個和一般類除了不能被繼承之外其他用法都一樣的類

template class makefinal

~makefinal() {}

};class finalclass2 : virtual public makefinal

~finalclass2() {}

};此時finalclass2就不能再被繼承了,由於類 finalclass2 是從類 makefinal 虛繼承過來的,在呼叫 try 的建構函式的時候,會直接跳過 finalclass2 而直接呼叫 makefinal 的建構函式。(虛繼承的乙個特徵就是虛基類的建構函式由最終子類負責構造)非常遺憾的是, try 不是 makefinal 的友元,因此不能呼叫其私有的建構函式。

基於上面的分析,試圖從 finalclass2 繼承的類,一旦例項化,都會導致編譯錯誤,因此是 finalclass2 不能被繼承。這就滿足了我們設計要求。

很好的題目,借這個題目學習虛函式。

解題思路就是:雖然不能通過物件呼叫這個虛函式,但是因為虛函式會在子類的那段記憶體中儲存虛函式表的入口位址,拿到虛函式的位址就可以轉換成函式指標來呼叫他。

下面主要解釋這一行**:

pfun = ( fun )*( ( int* ) * ( int* )( &b ) + i );

(1)在子類記憶體空間中最開始(就是子類物件的位址&b)的地方存了乙個指向虛函式表的指標(這裡的最開始的說法應該是大多數編譯器的做法),為了獲得這個指向虛函式表的指標,需要做這個操作*(int*)&b,解釋:物件b的位址強制轉換成乙個int指標(因為位址都是整型數),然後再解引用該指標獲得虛表的指標值。

程式設計師面試題2019

4.讓自己接觸更優秀的程式設計師。隨著 cs 崗位的快速增長,應對 檸檬市場 的當前解決辦法就是技術面試。但是同樣也有其他的方式來反映被面試者的資訊。例如,對熱點話題 部落格 技術的知識可以反映出對重要問題的意識。類似地,對恐怖故事採用幽默的 書寫方式,可以反映出經驗和處理新問題的能力。幸運的是,編...

程式設計師筆試面試題

計算機 筆試面試題整理 面試本帖最後由 locust j 於 2009 8 5 13 45 編輯推薦 附件名稱 筆試面試題整理.txt 附件大小 14kb 附件備註 附件內容已貼出 現在的公司招聘,都要筆試面試.如果你不是那種程式設計功底非常深厚的人,又不好好準備一番,在筆試面試中往往會處於被動局面...

PHP程式設計師面試題

目錄一 快取技術 必做 3 二 有關ajax的快取問題 必做 3 三 linux計畫任務的sh編寫 必做 3 四 軟體開發流程 3 五 mvc設計模式 3 六 有關css的知識問題 4 七 oop 開發與編碼風格 必做 4 八 實戰表單驗證 必做 4 在大規模資料訪問時,為有效降低資料庫儲存壓力,多...