C/C++面經總結
1.用#define宣告一個常數,表明1年中有多少秒(忽略閏年問題)?
答案:#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
要點:
A.沒有以分號結束;
B.懂得前處理器將為你計算常數表示式的值。即60 * 60 * 24 * 365而不是31536000.
C.考慮到了16位機將會溢位,巧妙運用了UL。
2.寫一個“標準”巨集MIN,這個巨集輸入兩個引數並返回較小的一個?
答案:#define MIN(A,B) ((A) <= (B) ? (A) : (B))
要點:
A.引數用括號括起來;
B.考察能否合理運用條件運算子;
3.Heap與Stack的差別?
答案:Heap是堆,Stack是棧。
Stack的空間由系統自動分配/釋放,Heap上的空間手動分配/釋放。
Stack空間有限,Heap是很大的自由儲存區,malloc函式分配的記憶體空間即在堆上。
網上經典例子:
int a = 0; //全域性初始化區
char *p1;//全域性未初始化區
void main(void)
{
int b; //棧
char s[] = "abc"; //棧
char *p2; //棧
char *p3 = "123456"; //123456\0在常量區,p3在棧上
static int c =0; //全域性(靜態)初始化區
p1 = (char *)malloc(10); //堆
p2 = (char *)malloc(20); //堆
}
4.用變數a給出下面的定義
A.一個整型數?
答案:int a;
B.一個指向整型數的指標?
答案:int *a;
C.一個指向指標的的指標,它指向的指標是指向一個整型數?
答案:int **a;
D.一個有10個整型數的陣列?
答案:int a[10];
E.一個有10個指標的陣列,該指標是指向一個整型數的?
答案:int *a[10];
F.一個指向有10個整型數陣列的指標?
答案:int (*a)[10];
G.一個指向函式的指標,該函式有一個整型引數並返回一個整型數?
答案:int (*a)(int);
H.一個有10個指標的陣列,該指標指向一個函式,該函式有一個整型引數並返回一個整型數?
答案:int (*a[10])(int);
5.關鍵字static的作用是什麼?
A.在函式體,一個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變;
B.在模組內(但在函式體外),一個被宣告為靜態的變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問。它是一個本地的局變數;
C.在模組內,一個被宣告為靜態的函式只可被這一模組內的其它函式呼叫。那就是,這個函式被限制在宣告它的模組的本地範圍內使用;
6.關鍵字const有什麼含意?
答案:const意味著"只讀"。
如果回答"const意味著常數",面試官會覺得你只是一個業餘的人。
7.下面的宣告都是什麼意思?
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
答案:
A.前兩個的作用是一樣,a是一個常整型數;
B.第三個意味著a是一個指向常整型數的指標(也就是,整型數是不可修改的,但指標可以);
C.第四個意思a是一個指向整型 數的常指標(也就是說,指標指向的整型數是可以修改的,但指標是不可修改的);
D.最後一個意味著a是一個指向常整型數的常指標(也就是說,指標指向的整型數 是不可修改的,同時指標也是不可修改的)。
8.關鍵字volatile有什麼含意?
答案:一個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用儲存在暫存器裡的備份。
9.const, volatile區別
(1)const含義是“請做為常量使用”,而並非“放心吧,那肯定是個常量”,是不可修改的只讀變數。
volatile的含義是“請不要做自以為是的優化,這個值可能變掉的”,而並非“你可以修改這個值”。
(2)const只在編譯期有用,在執行期無用
const在編譯期保證在C的“原始碼”裡面,沒有對其修飾的變數進行修改的地方(如有則報錯,編譯不通過),而執行期該變數的值是否被改變則不受const的限制。
volatile在編譯期和執行期都有用
在編譯期告訴編譯器:請不要做自以為是的優化,這個變數的值可能會變掉;
在執行期:每次用到該變數的值,都直接從記憶體中取該變數的值。
(3)const, volatile同時修飾一個變數
合法性
“volatile”的含義並非是“non-const”,volatile 和 const 不構成反義詞,所以可以放一起修飾一個變數。
同時修飾一個變數的含義
表示一個變數在程式編譯期不能被修改且不能被優化;在程式執行期,變數值可修改,但每次用到該變數的值都要從記憶體中讀取,以防止意外錯誤。
10.sizeof和strlen的區別?
答案:sizeof是運算子,在編譯時即計算好了; 而strlen是函式,要在執行時才能計算。
11.在某工程中,要求設定一絕對地址為0x67a9的整型變數的值為0xaa66。編譯器是一個純粹的ANSI編譯器。寫程式碼去完成這一任務?
答案:
int *p;
p = (int*)0x67a9;
*p = 0xaa66;
12.給定一個整型變數a,寫兩段程式碼,第一個設定a的bit 3,第二個清除a 的bit 3。在以上兩個操作中,要保持其它位不變?
答案:
#define BIT3 (0x1 << 3)
static int a;
void set_bit3(void)
{
a |= BIT3;
}
void clear_bit3(void)
{
a &= ~BIT3;
}
13.下面函式錯誤嗎?
int square(volatile int *ptr)
{
return *ptr * *ptr;
}
答案:錯誤;
正確寫法:
long square(volatile int *ptr)
{
int a;
a = *ptr;
return a * a;
}
14 空指標和懸垂指標的區別
答:空指標是指被賦值為NULL的指標;delete指向動態分配物件的指標將會產生懸垂指標。
(1)空指標可以被多次delete,而懸垂指標再次刪除時程式會變得非常不穩定。
(2)使用空指標和懸垂指標都是非法的,而且有可能造成程式崩潰,如果指標是空指標,儘管同樣是崩潰,但和懸垂指標相比是一種可預料的崩潰。
15 虛擬函式如何實現多型
答:基類的指標指向子類的物件,子類物件重寫了基類中的虛擬函式,那麼在用基類指標操作該函式時就會根據其指向物件的型別(基類還是子類)分別呼叫不同的函式。
這是通過虛擬函式表實現的。只要類定義中含有虛擬函式宣告,那麼編譯器就會為該類建立對應的虛擬函式表,按照虛擬函式宣告順序將函式入口地址儲存在虛擬函式表中,這個表不佔用物件記憶體,但是編譯器會為物件分配一個指向虛擬函式表地址的指標vptr,在物件中佔有一個指標大小的記憶體。子類重寫的虛擬函式的地址直接替換了父類虛擬函式在虛擬函式表中的位置,而子類中獨有的虛擬函式在其虛擬函式表中會依次排在從父類繼承的虛擬函式後面。
在實際呼叫函式時,編譯器先檢查該函式是否為虛擬函式,如果是,則在物件的虛擬函式表中找到函式入口地址進行呼叫。對於在子類總重寫的虛擬函式,這樣就實現了多型。
16 C++虛基類的作用、用法和意義
如果一個派生類有多個直接基類,而這些直接基類又有一個共同的基類,則在最終的派生類中會保留該間接共同基類資料成員的多份同名成員。這種現象是人們不希望出現的。C++提供虛基類(virtual base class )的方法,使得在繼承間接共同基類時只保留一份成員。虛基類並不是在宣告基類時宣告的,而是在宣告派生類時,指定繼承方式時宣告的。因為一個基類可以在生成一個派生類時作為虛基類,而在生成另一個派生類時不作為虛基類。
17 分別簡單介紹一下c++中的 虛擬函式 純虛擬函式 虛基類
虛擬函式 ,純虛擬函式, 虛基類,它們都和virtual有關,這三個帶有虛字的定義容易使人混淆,下面先從作用上來解釋這三個定義的區別:
1.虛擬函式是用於多型中virtual修飾父類函式,確保父類指標呼叫子類物件時,執行子類函式的。
2.純虛擬函式是用來定義介面的,也就是基類中定義一個純虛擬函式,基類不用實現,讓子類來實現。
3.虛基類是用來在多繼承中,如果父類繼承自同一個父類,就只例項化一個父類(說的有點繞,就是隻例項化一個爺爺的意思。
18 解構函式什麼情況下要定義為虛擬函式
答:解構函式的作用與建構函式正好相反,是在物件的生命期結束時,釋放系統為物件所分配的空間,即要撤消一個物件。
用物件指標來呼叫一個函式,有以下兩種情況:
1.如果是虛擬函式,會呼叫派生類中的版本。(在有派生類的情況下)
2.如果是非虛擬函式,會呼叫指標所指型別的實現版本。
解構函式也會遵循以上兩種情況,因為解構函式也是函式嘛,不要把它看得太特殊。 當物件出了作用域或是我們刪除物件指標,解構函式就會被呼叫。
1.當派生類物件出了作用域,派生類的解構函式會先呼叫,然後再呼叫它父類的解構函式, 這樣能保證分配給物件的記憶體得到正確釋放。
2.但是,如果我們刪除一個指向派生類物件的基類指標,而基類解構函式又是非虛的話, 那麼就會先呼叫基類的解構函式(上面第2種情況),派生類的解構函式得不到呼叫,造成記憶體洩露。
相關推薦
C++開發 面經 總結
秋招差不多結束了,總結一下自己在西安秋招的辛酸經歷。 面經主要是和C++開發相關的,有總結的不好的地方還請大佬輕拍。 問題主要分為以下幾個方面: 【C++基礎】C++的記憶體分配方式,程式碼段、資料段、堆疊段。static、virtual、volatile等關鍵字的一些
C/C++面經總結
1.用#define宣告一個常數,表明1年中有多少秒(忽略閏年問題)? 答案:#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 要點: A.沒有以分號結束; B.懂得前處理器將為你計算常數表示式的值。即60 * 60 *
百度軟件開發實習生c++方向面經(一面)
awk 程序 模板 其他 好的 情況 面經 一點 enter 百度2017實習生軟件開發(cpp方向) 首先說一下崗位。分為軟件開發,開發測試,前端,機器學習數據挖掘,移動開發,據我觀察,報的人數來看,軟件開發最多,移動開發和開發測試較少。百度前臺還準備了吃的
華為校招 C++崗面經(筆試+一面+二面+Offer)
前言 我報的是華為IT應用軟體工程師,方向是C++研發崗,參加的合肥站的面試。總的來講華為校招是我參加所有校招裡面服務最好的,HR很貼心,業務很專業。 應聘經過 筆試 華為校招軟開崗是3道程式設計題(用的牛客網的考試系統),我運氣比較好,遇到的三道題都很水,PAT
阿里c++一面面經
1 多型,虛擬函式與虛擬函式表 2 智慧指標的作用及實現 3 sizeof,不能使用sizeof的情況下判斷系統的位數? 4 三次握手,四次揮手,中間的等待 5 空class的大小,包含int和虛擬函式的大小 6 連結串列是否有環,O(1)時間複雜度刪除指
實習面經-微策略c++研發面經
微策略是3月中旬進行內推的。時間:3月中旬-3月底,從投遞簡歷到拿到offer共半個月投遞方式:內推面試方式:線上測評+2輪技術面+1輪群面線上測評:題目全是英文,包括邏輯題,程式設計題,還有審美題。都比較簡單,只要讀懂英文就不會很難。一面:時間:1個小時首先問簡歷上的專案,
面經總結:數據庫
cit 關系 表現 不同的 定時 atomic 用戶 錯誤 事務 事務的四個特性? 四大特性是:ACID 原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)+介紹四個特性概念; 原子性:整個事務中
面經總結:計算機網絡
根據 mac 面經 網頁解析 syn 握手 第一次 域名 回復 TCP三次握手 (1.過程;2.幾個常見問題) 第一次:客戶端給服務器發送syn包x;SYN_SENT 第二次:服務器接收到syn包,返回一個syn包y 和 一個ack包x+1; SYN_RECV 第三次:
面經總結:J2SE
如果 向上轉型 必須 浮點型 interrupt mage lean 方式 8bit 面向對象的特性? (1.特性;2.優點) 封裝、繼承、多態; 封裝:封裝隱藏了類的內部實現機制,可以在不影響使用的情況下改變類的內部結構,同時也保護了數據。對外界而已它的內
面經總結:框架
客戶 責任 view 如果 單引號 name 捕獲 覆蓋 面向對象 Spring核心功能? 核心功能是IoC反轉控制和AOP面向切面編程; AOP(Aspect-OrientedProgramming,面向方面編程),可以說是OOP(Object-Oriente
面經總結:多線程
計算 選擇 new 好的 共享資源 keepal join 關於 刷新 多線程的實現? 三種方法:1.繼承Thread類;2.實現Runnable接口;3.使用Executor創建線程池; 多線程的的同步/線程安全的方式? (1)同步方法:synch
【備戰春招/秋招系列】美團面經總結基礎篇 (附詳解答案)
該文已加入開源文件:JavaGuide(一份涵蓋大部分Java程式設計師所需要掌握的核心知識)。地址:github.com/Snailclimb/…. 【強烈推薦!非廣告!】阿里雲雙11褥羊毛活動:m.aliyun.com/act/team111… 差不多一折,不過僅限阿里雲新人購買,不是新人的朋
【備戰春招/秋招系列】美團Java面經總結進階篇 (附詳解答案)
一 訊息佇列MQ的套路 1.1 介紹一下訊息佇列MQ的應用場景/使用訊息佇列的好處 ①.通過非同步處理提高系統性能 ②.降低系統耦合性 1.2 那麼使用訊息佇列會帶來什麼問題?考慮過這個問題嗎? 1.3 介紹
網路安全、Web安全、滲透測試之筆經面經總結(二)
轉載地址:https://www.cnblogs.com/christychang/p/6593163.html 這篇文章涉及的知識點有如下幾方面: 1.SSL Strip(SSp)攻擊到底是什麼? 2.中間人攻擊——ARP欺騙的原理、實戰及防禦 3會話劫持原理 4.CC攻擊 5.
網路安全、Web安全、滲透測試之筆經面經總結(一)
轉載地址:https://www.cnblogs.com/christychang/p/6041012.html 本篇文章總結涉及以下幾個方面: 對稱加密非對稱加密? 什麼是同源策略? cookie存在哪裡?可以開啟嗎 xss如何盜取cookie? tcp、udp的區別及tcp三次
【備戰春招/秋招系列】美團Java面經總結終結篇 (附詳解答案)
該文已加入開源專案:JavaGuide(一份涵蓋大部分Java程式設計師所需要掌握的核心知識的文件類專案,Star 數接近 14 k)。地址:github.com/Snailclimb/…. 系列文章: 【備戰春招/秋招系列1】程式設計師的簡歷就該這樣寫 【備戰春招/秋招系列2】初出茅
一個JAVA渣渣的校招成長記,附BAT美團網易等20家面經總結
歡迎關注我的微信公眾號:“Java面試通關手冊”(堅持原創,分享美文,分享各種Java學習資源,面試題,以及企業級Java實戰專案回覆關鍵字免費領取): 今天分享一篇牛客網上的一個同學分享的校招,這位同學面試了很多公司,也總結了很多面試題目,面試題目大多都
2017年秋招各大公司後臺崗面經總結-1
今日頭條-頭條後臺崗三面面經 面經 可能沒有記全 一面: 1.自我介紹,專案 2.網路模型以及各層協議,TCP擁塞控制 3.IO複用以及select,poll,epoll區別 4.指標和引用區別 5.資料庫索引有哪些,他們的資料結構 6.複
Java工程師名廠校招面經總結
java葵花寶典堅持更新java綜合性知識,自助領取海量java資料自我介紹我本身本科階段和碩士
Java面經總結
執行緒安全 1.什麼是不安全? 1.1 不同執行緒,對同一資源的訪問或修改。 1.2 原子性 JVM規範定義了執行緒對主存的操作指令:read,load,use,assign,store,write 1.3 可見性---------------