校園招聘筆試題(B卷)

 
前言:前幾天和人力資源部的去合肥招人,出了筆試題目,筆試、面試和最終籤協議全程把關,錄取了幾個,結果還算滿意。
下面是第二天在合肥工業大學的筆試題目:
1 、論述 C 語言中含參數的宏與函數的區別和優缺點( 6 分)
點評:題目不難,但完全回答對的人其實並不多。
答案:
宏:不進行參數正確性檢查,只進行簡單的替換工作,佔用了大量的空間。
函數:進行參數正確性的效驗,佔用了大量的時間。
2 C C++ 的結構體有什麼區別? C++ 中的類與結構體有什麼區別?( 10 分)
第二個問題出得比較多,第一個出得不多。幾十份卷子回答對的沒幾個,讓我感到很失望。
答案:
C++ 中的結構體能夠定義方法,繼承和重載, C 語言中的不可以。
②結構體中的成員缺省是 public 的,而類中的成員缺省是 private 的,這是 C++ 中唯一的區別
3 、以下 C 程序, j 的最終結果是多少?( 6 分)
int i=1;
int j;
j=(++i)+(++i) +(i++)+(i++)+(++i);
點評:是 moto 曾經出過的題目,其實不難,一般 C 語言學得不差的都知道。但有一點要注意的是,其實標準答案並不對,因爲 C 語言中並沒有規定這種運算的先後順序,所以不同編譯器的答案不同, VC6.0 VC.NET BC5.1 、和 GCC 答案不盡相同,而所謂的標準答案卻和這幾個編譯器的結果都不同,反倒和 C# JAVA 的結果相同,因爲這兩個編譯器嚴格規定了這種運算的先後順序。我本以爲沒有人會回答“和編譯器相關”,但讓我意外的是居然有人就這樣回答的,我如獲至寶,但最終他的綜合能力並不咋喋,還是沒招進來。
4 Heap Stack 有什麼差別?( 8 分)
點評:很多人把 Heap 回答成 List 的特性了,什麼先進先出,莫名其妙。
答案:
Heap 在程序中是用 malloc 函數分配的,需要手動清除。 Stack 是由程序自動分配、自動清除的。
5 、詳細說明 TCP 建立連接的三次握手過程。( 10 分)
點評:大致的過程 90 %的人都知道,但真正把第一次握手發送的內容回答對的寥寥無幾。
6 、請寫出下面 C 語言程序的輸出( 7 分)
int Calc(int iValue)
{
  static int iSum,iCount;
  iSum += iValue;
  iCount ++ ;
  return iSum/iCount;
}
int main()
{
  int iInput=Calc(Calc(3));
  printf("Calc(Calc(3))=%d",iInput);
  return 0;
}
點評:題目不難,也是網新出過的, 70 %的人回答對了,是 3
7 、一個數列 [-1,2,7,28,_ ,126 …… ] 請問 28 126 中間那個數是什麼?爲什麼?( 8 分)
點評:這是道不難的小學數學運算題,但錯的人很多,唉,沒幾個數學學好的。
答案:
63
規律是 n^3-1( n 爲偶數 0 2 4)
n^3+1( n 爲奇數 1 3 5)
8 、在操作系統中,什麼是死鎖?如何解決死鎖?( 8 分)
點評:對死鎖的解釋答全的不多,解決死鎖策略就更沒多少人回答對了,操作系統課學好的人還是少啊!
答案:
是兩個或多個進程無止境地等候着永遠不會成立的條件的一種系統狀態
在兩個或多個併發進程中,如果每個過程持有某中資源而又都等待着別的進程釋放它或他們現在白吃的資源,否則就不能向前推進。
死鎖產生原因:⒈系統資源不足⒉進程推進順序非法
產生死鎖的 4 個必要條件:
①互斥條件②不剝奪條件③部分分配④環路條件
解決死鎖策略:
⒈採用靜態分配方法來預防死鎖(靜態預防)
⒉採用有控分配方法來避免死鎖(動態避免)
⒊當死鎖發生時檢測出死鎖並設法修復
9 、進程和線程的區別是什麼?各有什麼優點?( 10 分)
點評:搞不清進程和線程的大有人在,而回答全的就更只有 10 %。
10 SQL 試題( 12 分)
表名: test
class
name
score
1
a
75
1
b
91
1
c
54
2
d
66
2
e
75
2
f
39
2
g
42
3
h
23
3
i
98
3
j
85
其中 class name char 類型, score integer 類型。
用一條 SQL 語句查詢顯示每個班級分數最高的人的班級,名字和分數
點評:這題相當難,我也不指望有人能做出來,主要是看回答的時候 SQL 語句如何寫的,根據情況酌情給分。答案我就不說了,明年再出。
 
 

drop table test

create table test
(class char(2) not null,
 name  char(10) not null,
 score int
)


insert into test values('1','a','75');
insert into test values('1','b','91');
insert into test values('1','c','54');
insert into test values('2','d','66');
insert into test values('2','e','75');
insert into test values('2','f','39');
insert into test values('2','g','42');
insert into test values('3','h','23');
insert into test values('3','i','98');
insert into test values('3','j','85');

 

select * from test where class ='1'  and score in (
select max(score) from test where class ='1' ) 
union
select * from test where class ='2'  and score in (
select max(score) from test where class ='2' )  
union
select * from test where class ='3'  and score in (
select max(score) from test where class ='3' ) 

 
 
 
 
 
11 、如何用兩個棧實現一個隊列的功能?要求給出算法和思路,可以用文字描述。( 15 分)
點評:數據結構學得還可以的人應該都沒問題,但真正回答對的還不到 1/3
答案:
2 個棧爲 A,B, 一開始均爲空 .
入隊 :
將新元素 push 入棧 A;
出隊 :
(1) 判斷棧 B 是否爲空;
(2) 如果不爲空,則將棧 A 中所有元素依次 pop 出並 push 到棧 B
(3) 將棧 B 的棧頂元素 pop 出;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章