經典面試題

2021-05-22 19:06:46 字數 4596 閱讀 8365

1. 以下三條輸出語句分別輸出什麼?

char str1 = "abc";

char str2 = "abc";

const char str3 = "abc";

const char str4 = "abc";

const char* str5 = "abc";

const char* str6 = "abc";

cout << boolalpha << ( str1==str2 ) << endl; // 輸出什麼?

cout << boolalpha << ( str3==str4 ) << endl; // 輸出什麼?

cout << boolalpha << ( str5==str6 ) << endl; // 輸出什麼?

2. 以下**中的兩個sizeof用法有問題嗎?

void uppercase( char str ) // 將str 中的小寫字母轉換成大寫字母

for( size_t i=0; iif( 'a'<=str[i] && str[i]<='z' )

str[i] -= ('a'-'a' );

char str = "abcde";

cout << "str字元長度為: " << sizeof(str)/sizeof(str[0]) << endl;

uppercase( str );

cout << str << endl;

3. 非c++內建型別a和b,在哪幾種情況下b能隱式轉化為a?

4. 以下**有什麼問題?

struct test

test( int ) {}

test() {}

void fun() {}

void main( void )

test a(1);

a.fun();

test b();

b.fun();

5. 以下**有什麼問題?

cout << (true?1:"0") << endl;

6. 以下**能夠編譯通過嗎,為什麼?

unsigned int const size1 = 2;

char str1[ size1 ];

unsigned int temp = 0;

cin >> temp;

unsigned int const size2 = temp;

char str2[ size2 ];

7. 以下反向遍歷array陣列的方法有什麼錯誤?

vector array;

array.push_back( 1 );

array.push_back( 2 );

array.push_back( 3 );

for( vector::size_type i=array.size()-1; i>=0; --i ) // 反向遍歷array陣列

cout << array[i] << endl;

8. 以下**中的輸出語句輸出嗎,為什麼?

struct cls

int m_i;

cls( int i ) : m_i(i) {}

cls()

cls(0);

cls obj;

cout << obj.m_i << endl;

9. c++中的空類,預設產生哪些類成員函式?

10. 以下兩條輸出語句分別輸出什麼?

float a = 1.0f;

cout << (int)a << endl;

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

cout << boolalpha << ( (int)a == (int&)a ) << endl; // 輸出什麼?

float b = 0.0f;

cout << (int)b << endl;

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

cout << boolalpha << ( (int)b == (int&)b ) << endl; // 輸出什麼?

11. 以下**有什麼問題?

typedef vector intarray;

intarray array;

array.push_back( 1 );

array.push_back( 2 );

array.push_back( 2 );

array.push_back( 3 );

// 刪除array陣列中所有的2

for( intarray::iterator itor=array.begin(); itor!=array.end(); ++itor )

if( 2 == *itor ) array.erase( itor );

12. 寫乙個函式,完成記憶體之間的拷貝。[考慮問題是否全面]

答案:1. 答:分別輸出false,false,true。str1和str2都是字元陣列,每個都有其自己的儲存區,它們的值則是各儲存區首位址,不等;str3和str4同上,只是按const語義,它們所指向的資料區不能修改。str5和str6並非陣列而是字元指標,並不分配儲存區,其後的「abc」以常量形式存於靜態資料區,而它們自己僅是指向該區首位址的指標,相等。

2. 答:函式內的sizeof有問題。根據語法,sizeof如用於陣列,只能測出靜態陣列的大小,無法檢測動態分配的或外部陣列大小。函式外的str是乙個靜態定義的陣列,因此其大小為,函式內的str實際只是乙個指向字串的指標,沒有任何額外的與陣列相關的資訊,因此sizeof作用於上只將其當指標看,乙個指標為個位元組,因此返回。

3. 答:

a. class b : public a // b公有繼承自a,可以是間接繼承的

b. class b // b實現了隱式轉化為a的轉化

c. class a // a實現了non-explicit的引數為b(可以有其他帶預設值的引數)建構函式

d. a& operator= ( const a& ); // 賦值操作,雖不是正宗的隱式型別轉換,但也勉強算乙個

4. 答:變數b定義出錯。按預設建構函式定義物件,不需要加括號。

5. 答:三元表示式「?:」問號後面的兩個運算元必須為同一型別。

6. 答:str2定義出錯,size2非編譯器期間常量,而陣列定義要求長度必須為編譯期常量。

7. 答:首先陣列定義有誤,應加上型別引數:vectorarray。其次vector::size_type被定義為unsigned int,即無符號數,這樣做為迴圈變數的i為時再減就會變成最大的整數,導致迴圈失去控制。

8. 答:不能。在預設建構函式內部再呼叫帶參的建構函式屬使用者行為而非編譯器行為,亦即僅執行函式呼叫,而不會執行其後的初始化表示式。只有在生成物件時,初始化表示式才會隨相應的建構函式一起呼叫。

9. 答:

class empty

public:

empty();                // 預設建構函式

empty( const empty& );  // 拷貝建構函式

~empty();               // 析構函式

empty& operator=( const empty& );  // 賦值運算子

empty* operator&();                // 取址運算子

const empty* operator&() const;    // 取址運算子const

10. 答:分別輸出false和true。注意轉換的應用。(int)a實際上是以浮點數a為引數構造了乙個整型數,該整數的值是,(int&)a則是告訴編譯器將a當作整數看(並沒有做任何實質上的轉換)。因為以整數形式存放和以浮點形式存放其記憶體資料是不一樣的,因此兩者不等。對b的兩種轉換意義同上,但是的整數形式和浮點形式其記憶體資料是一樣的,因此在這種特殊情形下,兩者相等(僅僅在數值意義上)。

注意,程式的輸出會顯示(int&)a=1065353216,這個值是怎麼來的呢?前面已經說了,以浮點數形式存放在記憶體中,按ieee754規定,其內容為x0000803f(已考慮位元組反序)。這也就是a這個變數所佔據的記憶體單元的值。當(int&)a出現時,它相當於告訴它的上下文:「把這塊位址當做整數看待!不要管它原來是什麼。」這樣,內容x0000803f按整數解釋,其值正好就是(十進位制數)。

通過檢視彙編**可以證實「(int)a相當於重新構造了乙個值等於a的整型數」之說,而(int&)的作用則僅僅是表達了乙個型別資訊,意義在於為cout《及==選擇正確的過載版本。

11. 答:同樣有缺少型別引數的問題。另外,每次呼叫「array.erase(itor);」,被刪除元素之後的內容會自動往前移,導致迭代漏項,應在刪除一項後使itor--,使之從已經前移的下乙個元素起繼續遍歷。

12. 答:

void* mymemcpy( void *dest, const void *src, size_t count )

char* pdest = static_cast( dest );

const char* psrc = static_cast( src );

if( pdest>psrc && pdestfor( size_t i=count-1; i!=-1; --i )

pdest[i] = psrc[i];

else

for( size_t i=0; ipdest[i] = psrc[i];

return dest;

經典面試題

我的老同學現在富得流油。他開創了乙個軟體公司,開發了一系列軟體,生意越做越大。今天他來到這個城市後馬上打 給我。是我啊!聽出來了嗎?是這樣的,我到這兒的大學招畢業生,要在這兒呆上五天,咱哥們趁這個時間好好聚一聚。我做東!既然他要做東,我理所當然順水推舟。人家是老闆,不吃白不吃!我來到他下榻的賓館,看...

經典面試題

分兩個情況 perfork模式 worker模式 前者程序模式 後者執行緒模式 故檢視方法也有區別 oldboy.log 參考 分析 此類問題是運維工作中最常見的問題。可以演變成分析日誌,檢視tcp各個狀態連線數,檢視單ip連線數排名等等 第一類 過濾網域名稱方法 方法很多 這裡給出六種為例。還可以...

經典面試題

一 請你自我介紹一下 思路 1 這是面試的必考題目。2 介紹內容要與個人簡歷相一致。3 表述方式上盡量口語化。4 要切中要害,不談無關 無用的內容。5 條理要清晰,層次要分明。6 事先最好以文字的形式寫好背熟。二 你為什麼選擇我們公司?思路 1 面試官試圖從中了解你求職的動機 願望以及對此項工作的態...