面試寶典總結

2021-04-25 07:25:06 字數 4786 閱讀 1663

1、全域性變數int i=1;如果在main函式裡使用 int i=i;會出現未定義錯誤。

2、區分&&(條件運算)和&(位與),||(條件運算)和|(位或運算)

3、x=x&(x-1),實際上求x轉化二進位制後1的個數

如果x=x&(x-1)==0,則x為2的n次方數

4、printf(「%d,%d」,*p,*(++p))計算時是從右到左入棧的,輸出的兩個結果相同

5、(x&y)+(x^y)>>1這個式子可以求(x+y)/2

6、((a+b)+abs(a-b))/2可以求a、b中較大的乙個

7、不用中間值交換a和b:a=a+b;b=a-b;a=a-b;

8、ifndef/define 可以防止重複定義

9、define seconds_per_year (24*60*60*365)ul

10、const int* a;與int const* a;相同,都是指向的內容不能更改

int* const a;指標本身不能更改,所以定義時必須初始化

11、int point::f()const

是point類中的乙個const成員函式,裡面不能對成員變數進行更改

注意與 const int f()

意義完全不同,這裡指返回值不能被修改

12、sizeof()計算指標和陣列的區別,如果是指標則大小為4,如果是陣列,大小為具體陣列大小的值

13、sizeof()只會計算棧中的分配大小,而像靜態變數則不會計算在內,乙個空類所佔的空間為1,多重繼承的空類還是1,虛擬繼承空類為4,因為含有虛指標。

14、陣列作為引數傳遞時,會退化為指標。

15、inline和巨集的區別:inline能夠執行引數檢測,要求**量不大,沒有執行迴圈

16、指標和引用的區別:引用指定的物件不能被改變,但其物件的內容可以改變。引用不能為空

17、char *str與char str的區別,*str的區域性不能修改,

18、訪問乙個指定的位址方法:int *p=(int*)ox8000;

19、main()函式沒有返回值時,預設返回0.

20、函式指標:void (*f)();

函式返回指標:void* f();

const 指標:int* const;

指向const的指標:const int*;

21、int*(*b)[10]與int*((*b)[10])表示一樣的含義:b是乙個指標,指向乙個一維陣列,陣列的元素是int*.

int(*f[10])();含義:f為乙個陣列,陣列的元素是函式指標,該指標指向的函式型別沒有引數且返回值為int的函式。

22、指標陣列(int*b[10])和陣列指標(int(*b)[10])

23、定義陣列int a[4]=;int *p=(int*)&a;&a表示指標由橫變豎

24、迷途指標產生:對指標進行delete操作後,會釋放它所指向的記憶體,並沒有把它設定為空。

25、標準函式malloc/free和運算子new/delete都是用於動態記憶體的分配和釋放,對於非內部資料型別而言,要用new,因為建立的時候自動執行建構函式。

26、物件導向設計的三原則:封裝、繼承、多型。黎克特制代換原則是繼承的基石,適用於基類的話也一定適用於子類。開閉原則:對**

的擴充套件是開放的,對修改是關閉的。virtual屬於多型,inte***ce屬於繼承,private屬於封裝(通過檔案封裝、通過namespace和package進行封裝)

27、c++預設產生的類成員有:建構函式、析構函式、拷貝函式和賦值函式

28、struct和class的唯一的區別:class中的變數預設是private,而struct預設是public

29、靜態成員如果設定為私有,可以通過公有靜態成員函式訪問。

30、初始化列表的初始化順序是根據成員變數的宣告順序來執行的,例如int i;int j;

則 base(int m):j(m),i(j){};先初始化i=j;再初始化j=i;

31、常量必須在建構函式初始化列表裡初始化。

32、派生類物件撤銷時,會依次上調其基類的析構函式(析構函式呼叫順序與建構函式相反),不管析構函式是否是虛函式。如果基類指標指向派生類物件時,此時撤銷基類指標,如果基類析構函式不是虛函式,將不會呼叫派生類的析構函式,如果派生類開闢了堆空間,將會得不到釋放,造成記憶體洩露,如果是虛函式的話,派生類的析構函式將會得到呼叫。這才是mfc將cobject::

cobject設為virtual的真正原因。

33、虛函式是一種虛呼叫機制,允許呼叫只知道介面而不知道其準確物件型別的函式,而建構函式必須知道其準確型別,所以不能為虛。

5、 將乙個實數轉化為c++實數儲存格式的步驟為:

(1)先將這個實數的絕對值化為二進位制格式,注意實數的整數部分和小數部分化為二進位制的方法是不同的。

(2)將這個二進位制格式實數的小數點左移或右移n位,直到小數點移動到第乙個有效數字的右邊。

(3)從小數點右邊第一位開始數出二十三位數字放入第22到第0位。

(4)如果實數是正的,則在第31位放入「0」,否則放入「1」。

(5)如果n 是左移得到的,說明指數是正的,第30位放入「1」。如果n是右移得到的或n=0,則第30位放入「0」。

(6)如果n是左移得到的,則將n減去一然後化為二進位制,並在左邊加「0」

補足七位,放入第29到第23位。如果n是右移得到的或n=0,則將n化為二進位制後在左邊加「0」補足七位,再各位求反,再放入第29到第23位。

一。將23.56化為c++的float格式。

(1)將23.56化為二進位制後大約是「10111.1000111101011100001」。

(2)將小數點左移四位,得到「1.01111000111101011100001」。

(3)這已經有了二十四位有效數字,將最左邊一位「1」去掉,得到「0111

1000111101011100001」。將它放入第22到第0位。

(4)因為23.56是正數,因此在第31位放入「0」。

(5)由於我們把小數點左移,因此在第30位放入「1」。

(6)因為我們是把小數點左移4位,因此將4

減去1得3,化為二進位制,並補足七位得到0000011,放入第29到第23位。

完畢。如果把最左邊定為第31位,最右邊定為第0位,那麼在c++裡,float格式的2

3.56是這樣表示的:01000001101111000111101011100001。

相應地-23.56就是這樣表示的:11000001101111000111101011100001。

三。將實數1.0化為c++的float格式。

(1)將1.0化為二進位制後是1.00000000000000000000000。

(2)這時不用移動小數點了,這就是我們在轉化方法裡說的n=0的情況。

(3)將小數點右邊的二十三位有效數字***放入第22

到第0位。

(4)因為1.0是正的,所以在第31位里放入「0」。

(5)因為n=0,所以在第30位里放入「0」。

(6)因為n=0,所以將0補足七位得到0000000,各位求反得到1111111,放入第29到第23位。

完畢。所以實數1.0用c++的float格式表示是:0011111110000000000000000

0000000。其中最左邊一位是第31位,最右邊一位是第0位。

float a = 1.0f;

cout << sizeof(int) <

cout << sizeof(float) <

cout << (int)a << endl;//1

cout << &a << endl; /*取a的位址十六進製制0012ff7c*/

cout << (int)&a << endl;/*(int)&a:把a的位址強制轉換成十進位制的整型1245052*/

cout << (int&)a << endl;

/*(int&)a:將a的引用強制轉換為整型,意思是a所在的記憶體,本來定義的時候為float型別,並初始為1.0f,

但現在我要按int型別解釋這段記憶體(也就是說a所在的記憶體位址中的資料本來是按float型儲存表示的,你非要按int型來解釋不可)。

1.0f 在記憶體中的儲存為

0 011 1111 1 000 0000 0000 0000 0000 0000.

(int&)a 相當於

*(int*)&a

*(int*)(&a)

*((int*)&acout << boolalpha << ((int)a == (int&)a ) << endl;// 輸出false.因為1!=1065353216.

float b = 0.0f;

cout << (int)b << endl;//0

cout << &b << endl;/*取b的位址十六進製制0012ff78*/

cout << (int&)b << endl;//0

cout << boolalpha << ((int)b == (int&)b ) << endl;// 輸出true,因為0==0int&)a 不經過轉換, 直接得到a在記憶體單元(就是位址)的值

(int)a a在記憶體中的值轉換成int型別

float型別在記憶體中儲存的形式是 ,符號位指數尾數由754標準:階碼採用增碼(該數補碼的反符號),尾數採用原碼所以1.0f 在記憶體中的形式為

0011 1111 1000 0000 0000 0000 0000 0000

所以輸出的是 0x3f800000

0 在記憶體中的的儲存形式

0000 0000 0000 0000 0000 0000 0000 0000

*/return 0;}

俄語面試寶典

談談自己 1簡單談談你自己 2為什麼您認為自己能勝任這個職位?與其他候選者比較您的優勢在哪兒?3您的優勢是什麼?4您的弱勢是什麼?5您最大的成就是什麼?6您怎樣提高自己的職業技能?詢問家庭狀況 1請講講您的家庭狀況。2您結婚了嗎?問男士您結婚了嗎 問女士 3您家裡有幾口人?4您的生日?詢問愛好 1業...

完美面試寶典

完美的面試 內容提要 你當然不是傻瓜!你每天都能從容地完成工作,狡猾地逃過交通處罰,甚至當朋友們惹你心煩的時候,你也大膽地告訴他們,但一到求職面試,需要展示自己的時候,你就極度緊張,直咬指甲。不要再為此擔心!完全傻瓜指導系列 完美的面試 將為你提供簡單易行的專家建議,使你在最嚇人的面試中穩操勝券。你...

面試寶潔寶典面試技巧

寶潔公司人力部李經理告訴我們 人才是寶潔最寶貴的財富。重視人才並重視培養和發展人才,是寶潔公司為全世界同行所尊敬的主要原因之一。公司每年都要從全國一流大學招聘許多優秀的大學畢業生,在整個招聘過程中,我們特別留意應聘者以下幾種品質 優秀的合作精神,良好的表達交流能力,出色的分析能力 創造力和領導才能。...