當前位置:學問谷 >

職場範例 >面試 >

程序員面試題目

程序員面試題目

程序員面試相對而言專業性是十分的強的,下面程序員面試題目是小編想跟大家分享的,歡迎大家瀏覽。

程序員面試題目

1.是不是一個父類寫了一個virtual 函數,如果子類覆蓋它的函數不加virtual ,也能實現多態?

virtual修飾符會被隱形繼承的。private 也被集成,只事派生類沒有訪問權限而已。virtual可加可不加。子類的空間裏有父類的所有變量(static除外)。同一個函數只存在一個實體(inline除外)。子類覆蓋它的函數不加virtual ,也能實現多態。在子類的空間裏,有父類的私有變量。私有變量不能直接訪問。

--------------------------------------------------------------------------

2.輸入一個字符串,將其逆序後輸出。(使用C++,不建議用偽碼)

#include

using namespace std;

void main()

{

char a[50];memset(a,0,sizeof(a));

int i=0,j;

char t;

ine(a,50,' ');

for(i=0,j=strlen(a)-1;i<strlen(a) 2;i++,j--)<="" p="">

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

cout<<a<<endl;< p="">

}

//第二種

string str;

cin>>str;

ace;

cout<<str;< p="">

--------------------------------------------------------------------------

3.請簡單描述Windows內存管理的方法。

內存管理是操作系統中的重要部分,兩三句話恐怕誰也説不清楚吧~~

我先説個大概,希望能夠拋磚引玉吧

當程序運行時需要從內存中讀出這段程序的代碼。代碼的位置必須在物理內存中才能被運行,由於現在的操作系統中有非常多的程序運行着,內存中不能夠完全放下,所以引出了虛擬內存的概念。把哪些不常用的程序片斷就放入虛擬內存,當需要用到它的時候在load入主存(物理內存)中。這個就是內存管理所要做的事。內存管理還有另外一件事需要做:計算程序片段在主存中的物理位置,以便CPU調度。

內存管理有塊式管理,頁式管理,段式和段頁式管理。現在常用段頁式管理

塊式管理:把主存分為一大塊、一大塊的,當所需的`程序片斷不在主存時就分配一塊主存空間,把程 序片斷load入主存,就算所需的程序片度只有幾個字節也只能把這一塊分配給它。這樣會造成很大的浪費,平均浪費了50%的內存空間,但時易於管理。

頁式管理:把主存分為一頁一頁的,每一頁的空間要比一塊一塊的空間小很多,顯然這種方法的空間利用率要比塊式管理高很多。

段式管理:把主存分為一段一段的,每一段的空間又要比一頁一頁的空間小很多,這種方法在空間利用率上又比頁式管理高很多,但是也有另外一個缺點。一個程序片斷可能會被分為幾十段,這樣很多時間就會被浪費在計算每一段的物理地址上(計算機最耗時間的大家都知道是I/O吧)。

段頁式管理:結合了段式管理和頁式管理的優點。把主存分為若干頁,每一頁又分為若干段。好處就很明顯,不用我多説了吧。

各種內存管理都有它自己的方法來計算出程序片斷在主存中的物理地址,其實都很相似。

這只是一個大概而已,不足以説明內存管理的皮毛。無論哪一本操作系統書上都有詳細的講解

--------------------------------------------------------------------------

4.

#include "stdafx.h"

#define SQR(X) X*X

int main(int argc, char* argv[])

{

int a = 10;

int k = 2;

int m = 1;

a /= SQR(k+m)/SQR(k+m);

printf("%d ",a);

return 0;

}

這道題目的結果是什麼啊?

define 只是定義而已,在編擇時只是簡單代換X*X而已,並不經過算術法則的

a /= (k+m)*(k+m)/(k+m)*(k+m);

=>a /= (k+m)*1*(k+m);

=>a = a/9;

=>a = 1;

PS:經過本人驗證,雖然結果一樣,但是應該不是這樣運算的,應該是a/=k+m*k+m/k+m*k+m;

因為SQR(k+m)/SQR(k+m)的值是7,而不是9。

--------------------------------------------------------------------------

5.

const 符號常量;

(1)const char *p

(2)char const *p

(3)char * const p

説明上面三種描述的區別;

如果const位於星號的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;

如果const位於星號的右側,const就是修飾指針本身,即指針本身是常量。

(1)const char *p

一個指向char類型的const對象指針,p不是常量,我們可以修改p的值,使其指向不同的char,但是不能改變它指向非char對象,如:

const char *p;

char c1='a';

char c2='b';

p=&c1;//ok

p=&c2;//ok

*p=c1;//error

(2)char const *p

(3)char * const p

這兩個好象是一樣的,此時*p可以修改,而p不能修改。

(4)const char * const p

這種是地址及指向對象都不能修改。

--------------------------------------------------------------------------

6.下面是C語言中兩種if語句判斷方式。請問哪種寫法更好?為什麼?

int n;

if (n == 10) // 第一種判斷方式

if (10 == n) // 第二種判斷方式

如果少了個=號,編譯時就會報錯,減少了出錯的可能行,可以檢測出是否少了=

--------------------------------------------------------------------------

7.下面的代碼有什麼問題?

void DoSomeThing(...)

{

char* p;

...

p = malloc(1024); // 分配1K的空間

if (NULL == p)

return;

...

p = realloc(p, 2048); // 空間不夠,重新分配到2K

if (NULL == p)

return;

...

}

A:

p = malloc(1024); 應該寫成: p = (char *) malloc(1024);

沒有釋放p的空間,造成內存泄漏。

--------------------------------------------------------------------------

8.下面的代碼有什麼問題?並請給出正確的寫法。

void DoSomeThing(char* p)

{

char str[16];

int n;

assert(NULL != p);

sscanf(p, "%s%d", str, n);

if (0 == strcmp(str, "something"))

{

...

}

}

A:

sscanf(p, "%s%d", str, n); 這句該寫成: sscanf(p, "%s%d", str, &n);

--------------------------------------------------------------------------

9.下面代碼有什麼錯誤?

Void test1()

{

char string[10];

char *str1="0123456789";

strcpy(string, str1);

}

數組越界

--------------------------------------------------------------------------

10.下面代碼有什麼問題?

Void test2()

{

char string[10], str1[10];

for(i=0; i<10;i++)

{

str1[i] ='a';

}

strcpy(string, str1);

}

數組越界

標籤: 程序員 面試 題目
  • 文章版權屬於文章作者所有,轉載請註明 https://xuewengu.com/flzc/mianshi/oe2k0.html