1. 首頁
  2. 筆試

中興筆試+面試題目(1)

中興筆試+面試題目(1)

1>某人在某個市場某個商家買了某臺電腦,請用你熟悉的計算機語言表達出裡面的關係.

其中有商家類,買家類,商品類。還要有買方法,賣方法。

2>一個完整的單例模式

3>曹操南下攻打劉備,劉備派關羽守錦州,關羽派張飛去守城門。劉備又派諸葛亮去向孫權求援。孫權派兵攻打曹操!

請畫出UML圖

2006年12月中興在我們學校的筆試,最後的大題

(其實這些大公司的筆試不難,也不就是如此,只要學一下資料結構就可以搞定!)

排序及查詢方法

#include

#include

#define N 11

int search(int array[],int n,int k)

{int i;

i=n-1;

array[0]=k;

while(array!=k) i--;

return(i);

}

int halfsearch(int array[],int n,int k)

{int i,j,mid;

i=1;j=n;

while(i<=j)

{mid=(i+j)/2;

if(k==array[mid]) return(mid);

else if(k

else i=mid+1;

}

return(0);

}

void mpsort(int array[])

{int i,j,a;

a=0;

for(i=1;ifor(j=i+1;jif(array>array[j])

{a=array;

array=array[j];

array[j]=a;}

}

void sort(int array[])

{int i,j;

for(i=2;i{array[0]=array;

j=i-1;

while(array[0]{array[j+1]=array[j--];

array[j+1]=array[0];

}

}

}

void creat(int array[])

{int i;

printf("enter the array:\n");

for(i=1;iscanf("%d",&array);

}

void print(int array[])

{int i;

printf("The numbers after sort is:\n");

for(i=1;iprintf("%d ",array);

printf("\n");

}

main()

{int a[11],i,x,chang;

aga:

printf("\nchang:1: use watching method finding\n 2:use half method finding\n 3: use directness intsert method sort\n 4:use bubble up method sort\n 5:exit\n");

scanf("%d",&chang);

switch (chang)

{case 1:

{creat(a);

printf("please int the search number:\n");

scanf("%d",&x);

printf("The number station is:%d\n",search(a,N,x));

goto aga;

}

case 2:

{ creat(a);

sort(a);

print(a);

printf("please int the search number:\n");

scanf("%d",&x);

printf("The number station is:%d\n",halfsearch(a,N,x));

goto aga;

}

case 3:

{creat(a);

sort(a);

print(a);

goto aga;

}

case 4:

{creat(a);

mpsort(a);

print(a);

goto aga;

}

case 5:{ printf("exit!\n");break;}

default:{printf("Error!\n"); goto aga;}

}

}

二、線性連結串列的儲存實現

struct LNODE{

ElemType data;

struct LNODE *next;

};

typedef struct LNODE LNode;

typedef struct LNODE * LinkList;

1初始化操作

Status Init_L(LinkList L){

if (L=(LinkList *)malloc(sizeof(LNode)))

{L->next=NULL;return 1;}

else return 0;

}

2插入操作

Status ListInsert_L(LinkList &L,int i,ElemType e){

p=L,j=0;

while(p&&jnext;++j;}

if(!p||j>i-1) return ERROR;

s=(LinkList)malloc(sizeof(LNode));

s->data=e;s->next=p->next;

p->next=s;

return OK;

}//ListInsert_L

3刪除操作

Status ListDelete_L(LinkList &L,int i,ElemType &e){

p=L,j=0;

while(p&&jnext;++j;}

if(!p->next||j>i-1) return ERROR;

q=p->next;p->next=q->next;

e=q->data;free(q);

return OK;

}//ListDelete_L

4取某序號元素的操作

Status GetElem_L(LinkList &L,int i,ElemType &e){

p=L->next,j=1;

while(p&&jnext;++j;}

if(!p||j>i) return ERROR;

e=p->data;

return OK;

}//GetElem_L

5歸併兩個單鏈表的演算法

void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){

//已知單鏈線性表La和Lb的元素按值非遞減排列

//歸併後得到新的單鏈線性表Lc,元素也按值非遞減排列

pa=La->next;pb=Lb->next;

Lc=pc=La;

while(pa&&pb){

if(pa->data<=pb->data){

pc->next=pa;pc=pa;pa=pa->next;

}else{pc->next=pb;pc=pb;pb=pb->next;}

}

pc->next=pa?pa:pb;

free(Lb);

}//MergeList_L

頭指標與頭結點的區別:

頭指標只相當於結點的指標域,頭結點即整個線性連結串列的第一個結點,它的資料域可以放資料元素,也可以放線性表的長度等附加資訊,也可以不儲存任何資訊。

第一部分 資料結構和演算法

1. 假設執行語句S的時間為O(1),則執行下列程式短的時間為()

for(i=1;i<=n;i++)

for(j=I;j<=n;j++)

S;

A. O(n) B. O(n2) C. O(n*i) D. O(n+1)

2. 二位陣列A[10…20,5…10]採用行序為主序方式儲存,每個資料元素佔4個儲存單元,且A[10][5]的儲存地址是1000,則A[18][9]的地址是()

A. 1208 B. 1212 C. 1368 D. 1364

3. 設棧最大長度為3,入棧序列為1,2,3,4,5,6,則不可能得出棧序列是() A. 1,2,3,4,5,6 B. 2,1,3,4,5,6 C. 3,4,2,1,5,6 D. 4,3,2,1,5,6 4. 設有98個已排序列元素,採用二分法查

似乎不難,可我還沒找到。

頭幾天參加了中興的筆試,做的不好,勉強是個合格,就這麼黃了。

依稀記得幾道題,公共題50分,C++和JAVA二選一50分。 其實一直就在用C,一看沒有C心裡還霍霍的,我當然選的C++。

我做的C卷:

公共題:

1、資料庫中 XXX 和XXX操作可恢復資料庫。undo redo 吧?

2、資料庫的核心是XX。

3、標頭檔案中<> 和“”的區別?

4、定義一個宏,輸入兩個引數,輸出積。

3、簡述電路交換和分組交換的區別及優缺點。

4、

C++

都記不太清了,過去快2個星期了!

大約4個選擇題,一個6分。陣列的操作,在記憶體中的分配(注意下標從0開始),大題:

1、18分的題:

char *GetMemory(void)

{

char p[] = "hello world";

return p;

}

void Test(void)

{

char *str = NULL;

str = GetMemory();

printf(str);

}

請問執行Test 函式會有什麼樣的結果?

答:可能是亂碼。

因為GetMemory 返回的是指向“棧記憶體”

的指標,該指標的地址不是 NULL,但其原

現的內容已經被清除,新內容不可知。

還有一個比較簡單,不寫了。

2、解構函式什麼時候執行,實現什麼功能?

7、全域性變數和區域性變數的區別。

仔細看看林銳的《高質量程式指南》基本不會有大問題。可惜啊,大意了...鄙視中

1.對資料庫的一張表進行操作,同時要對另一張表進行操作,如何實現??

答案:將操作多個表的操作放入到事務中進行處理

2.TCp/Ip 建立連線的'過程?(3-way shake)

答案: 在TCp/Ip協議中,TCp協議提供可靠的連線服務,採用三次握手建立一個連線。

第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;

第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也傳送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;

第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器傳送確認包ACK(ack=k+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。

3.ICMp是什麼協議,處於哪一層?

答案:Internet控制報文協議,處於網路層(Ip層)

4.觸發器怎麼工作的?

答案:觸發器主要是透過事件進行觸發而被執行的,當對某一表進行諸如UpDATE、 INSERT、 DELETE 這些操作時,資料庫就會自動執行觸發器所定義的SQL 語句,從而確保對資料的處理必須符合由這些SQL 語句所定義的規則。

5.winsock建立連線的主要實現步驟?

答案:伺服器端:socker()建立套接字,繫結(bind)並監聽(listen),用accept()等待客戶端連線。客戶端:socker()建立套接字,連線(connect)伺服器,連線上後使用send()和recv(),在套接字上寫讀資料,直至資料交換完畢,closesocket()關閉套接字。

伺服器端:accept()發現有客戶端連線,建立一個新的套接字,自身重新開始等待連線。該新產生的套接字使用send()和recv()寫讀資料,直至資料交換完畢,closesocket()關閉套接字。

6.動態連線庫的兩種方式?

答案:呼叫一個DLL中的函式有兩種方法:

1.載入時動態連結(load-time dynamic linking),模組非常明確呼叫某個匯出函式,使得他們就像本地函式一樣。這需要連結時連結那些函式所在DLL的匯入庫,匯入庫向系統提供了載入DLL時所需的資訊及DLL函式定位。

2.執行時動態連結(run-time dynamic linking),執行時可以透過LoadLibrary或LoadLibraryEx函式載入DLL。DLL載入後,模組可以透過呼叫GetprocAddress獲