最近在找新的工作,在找工作中遇到很多面試題,大多數讓我很難堪,再次讓我認識到自己的知識的匱乏,上份工作是以應屆生的身份,所有當時進專案組也沒有很多要求,進入專案組後自己還算好學(自己以為),之前也沒有相關的經驗,自己很自信(其實都是盲目的),在上份工作中遇到幾個願意帶我的老員工對我幫助很大(也間接的造成自己很自大),上份工作主要使用c++,經常使用stl(覺得自己掌握的很熟練,面試官問我map和list的區別是什麼的等等。。。一臉懵逼!!),幸好我還算幸運找到乙份工作,下面是我總結的遇到的面試題:
1.位元組對齊問題(幾乎每家公司的面試題都會有),以下是我從網上抄的題還有位元組對齊的一些概念。
首先乙個重要的概念是為什麼要位元組對齊?(先要弄明白這個之前我是一點都不知道,有些時候都是蒙的不知道為啥是這個值)
(1)位元組對齊的根本原因是cpu訪問資料的效率問題,對於32位機器,4位元組對齊就可以提高訪問效率,如果double型是8位元組超出了4位元組邊界儲存,cpu就會讀取兩次,效率會變低,在vc中預設是4位元組對齊的,gnu gcc 也是預設4位元組對齊。
(1)結構體變數的首位址能被其最寬基本型別成員的大小所整除。
(2)結構體每個成員相對於結構體首位址的偏移量都是改成員大小的整數倍(如果不是的話編譯器就會在成員間填充位元組使之對齊)。
(3)結構體的總大小為結構體最寬基本型別成員大小的整數倍。(如果不是的話編譯器會在最後乙個成員後面填充位元組)。
struct test
;
綜上sizeof(test)=24;
如果是聯合呢?看下面乙個例子
typedef union
;
我們知道聯合的大小是其最寬基本型別成員的大小,這裡顯然是陣列最寬為20位元組,那這個聯合的大小是20嗎?顯然不是的,因為聯合的大小除了是最寬基本型別的大小還應該是所有基本型別成員大小的倍數,所有需要在填充4個位元組,因此這個聯合的大小就是24。
聯合還可以作為結構體的成員,這些題網上很多大家可以自己查詢一下。
這個部落格大家也可以看一下對你面試肯定有幫助。
2.static全域性變數和普通全域性變數的區別?static區域性變數和普通區域性變數的區別?static函式和普通函式的區別?
(1)他們的區別在於作用域的不同,static全域性變數的作用域只限於宣告它的那個檔案中,不加static修飾的全域性變數通過extern在其他檔案中也可以使用,它們的儲存方式都是靜態儲存,
(2)static區域性變數只初始化一次,下一次使用的值依賴上一次的值,static區域性變數在程式結束時才被銷毀,區域性變數在在其作用域結束後就會被釋放。
void fun()
void main()
(3)static函式在記憶體中只有乙份,普通函式在每個被呼叫中維持乙份拷貝
3.c++的靜態成員變數和靜態成員函式(會讓你講講為什麼用靜態的,在**初始化)
大家可以仔細看一下這篇文章(裡面有錯誤,仔細找找看呦!!)
大家記住靜態只有乙份,不管有多少個物件,靜態成員變數和函式只用乙份(普通的成員變數每個物件都會有乙份並且大家互不影響),只要靜態成員變數的值改變就會在所有物件中進行體現,
class test
;
int test::b=1;//初始化靜態成員變數,在class的外部不會增加class的大小,不能加static
int test::fun()
test::test()
void main()
c c 面試總結(2)
4.深拷貝和淺拷貝 1 什麼時候會用到拷貝函式 乙個物件以值傳遞的方式傳入函式 就是作為入參 乙個物件以值傳遞的方式從函式返回 就是作為返回值 乙個物件需要通過另外乙個物件進行初始化 2 是否應該自定義拷貝函式 如果不自己定義拷貝函式,那麼編譯器會自動生成乙個預設的拷貝函式,這個拷貝函式就會完成物件...
c c 面試覆盤(1)
前幾天參加了乙個c c 的面試,對當時的一些問題做一些回顧 1.c 中struct和class的區別 可以從兩方面回答 a.預設的繼承訪問許可權,struct是public的,class是private b.struct作為資料結構的實現體,struct的資料訪問控制許可權是public 而clas...
面試總結 1
1.1 鍊錶翻轉和多路歸併 1.1 兩個棧實現乙個佇列,兩個佇列實現乙個棧 1.2 兩個字串之間的距離的衡量 1.3 最長回文子串 1.4 二叉樹的後序遍歷迭代形式 1.5 二叉樹的映象 1.6 huffman的編碼 1.7 無序陣列找第k大數 2 b 樹和紅黑樹的區別 3 排序的總結 4 概率和排...