ISAM編程大賽答案_第1頁
ISAM編程大賽答案_第2頁
ISAM編程大賽答案_第3頁
已閱讀5頁,還剩11頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、評分標準:單選題/填空題:答對滿分 答錯。分多選題:答對滿分 答錯0分少選I分38題:答岀沒有定義拷貝構造函數和沒有重載賦值運算符導致內存泄漏4分答岀沒有定義拷貝構造函數導致內存泄漏2分答出沒有重載賦值運算符導致內存泄漏2分答岀內存泄漏1分39題:答岀信號量保護粒度過小4分答出信號量的問題 1分40題:答對一個給一分41題:8個錯誤,答對一個給 2分,答對5個或5個以上給10分跡是NOTE:以上主觀題(38 - 41)給岀的評分標準只是一個依據,在實際答題過程中,答案的表述是否清楚,字 否清晰都有可能影響得分,我們盡量做到按標準給分。1. 請問以下代碼片段的執行結果(C) (2分)void m

2、a in (void )int a =,b:3 ;iprintfJ(printf% da/b)(printf“ da%b )(printf“ da&,b)b)(printf“ d(printf“ da=b)(printfFd,=p;)(A) 2 1 33 03(B) 2 2 33 71(02134 03(D) 2 2 74 13NOTE: %為求余運算符?!睘楫惢蜻\算符2. 在ISAM的errjrinf錯誤處理機制中,以下哪種錯誤級別將導致板子重新啟動?(A ) (2 分)(A)NON-RECOVERABLE(B)RECOVERABLE(C)N0TIFY-0NLYNOTE:參見文檔3H

3、H-03154-8002-DSZZA3. 請問下面代碼片斷的輸岀結果是什么(D ) (2分)void mai n ( void )char *str = "aaa%sjj%d ”;printf ( str );(A) aaa%sjj%d(B) aaajjd (0 空字符串(D) 結 果無定義,可能導致程序崩潰NOTE: 如要輸出包含格式字符 %的字符串推薦使用如下方式 : printf( "%s", str )4 嵌入式系統總是要對變量或寄存器進行位操作?,F給定一個整型變量 a, 需要寫兩個宏,分別用來設置、. 清除整數 a 的某一位,在以上兩個操作中需要保持其它

4、位不變,請問以下哪種寫法是可移植性最好的: ( (2 分 )(A)Sdefine SET_BIT3(a)(a 10x4)ttdefine CLEAR_BIT3(a)(a&OxFFFB)(B)Sdefine SET_BIT3(a)(a) 10x4)ttdefine CLEAR_BIT3(a)(a)&(0x4)(C)Sdefine SET_BIT3(a)(a) &0x4)ttdefine CLEAR_BIT3(a)(a)&OxFFFB)(D)Sdefine SET_BIT3(a)(a) 10x4)#define CLEAR_BIT3(a)(a)&OxF5.

5、在以下接口類型中,按照ISAM軟件策略,只有哪種類型被允許存儲數據庫?( B )(2分)(A) Iflndex(B) Logical Index(C) Linear Index(D) HwReferenceNOTE: 參見文檔 3HH-03154-1193-DSZZA 6. 在下面兩種不同代碼實現中,請確定誰負責給存儲對象分配內存?( D ) (2 分) 代碼實現 1:d_Extent<BellPerson> persons:Bool res = persons. newObject(&per): if (!res) (. :代碼實現 2:(d_Extent BellPer

6、son> persons;d_Ref<BellPerson> per = persons. newObject(): if (!per) (. ;(A) 數據存儲子系統,數據存儲子系統(B) 應用程序,應用程序(0 數據存儲子系統,應用程序(D) 應用程序,數據存儲子系統NOTE : 參見文檔 3HH-03154-1110-DSZZAB ) (2分)7. 在ISAM系統中,請問在以下的內存區間中,哪個被分配的內存是不允許被釋放的?((A)OS heap(B)Semi(C)Pool(D)DynamicNOTE: 參見文檔 3HH-03154-1000-DSZZA8. 請問以下代

7、碼片段的執行結果 ( C ) (2 分) void main( void )int flag 二 1, trigger = 1 , i = 0 ;if ( trigger >= 0 )for (i=0;i<2;i+)if ( flag < 0 ) ( printf ( "flag ” ); return i ;elseprintf ( "trigger " );printf ( "end n");(A) end end(B) end(C) trigger trigger end(D) trigger endNOTE: 將上段代

8、碼加上大括號和縮進后 , 該段代碼如下 void main ( void ) int flag = 1, trigger - 1 , i = 0 ;if ( trigger >= 0 ) (for (1=0; i<2;i+) if ( flag < 0 ) ( printf (“flag "); return i ;else (printf ( trigger ) ; /end else /end for /end if pri ntf ( "e nd nA ); 所以, 不正確的括號和縮進的使用極易引起程序的理解錯誤。 推薦在任何情況下都使用大括號擴起

9、if, for, while 等語句的程序塊及正確的縮進9. 在ISAM系統中,如果使用malloc分配內存,請問該內存從哪個區域劃分?( A )(2分)(A) OS heap(B) OS stack(C) User heap(D) User stackNOTE: J 參見文檔 3HH-03154-1000-DSZZA10. 請問以下代碼片段的執行結果 (D ) (2 分)void main ()char szTemp12;strcpy( szTemp, "hello,world!”);n”, szTe mp );(A) hello, world!(B) 一串亂碼(C) 空字符串(D

10、) 結果無定義NOTE: C/C+ 語言中字符串的存儲默認是以字符 O結尾的strcpy 函數不會對存儲字符串的字符數組邊界進行檢查。 推薦使用 strncpy 函數進行字符串 copy 操作11. 請問C+中定義的short, int, long類型的變量分別占據了幾個字節的存儲空間?( D ) (2分)(A) 2, 4, 4(B) 4, 4, 4(C) 2, 4, 8(D) 不確定NOTE: C+ 語言是與平臺無關的。語言本身并沒有定義 short, int, long 等基本數據類型的長度。具體的長 度依賴于編 譯器的實現。所以我們在程序代碼中不推薦使用 short, int, long

11、 等基本數據類型來定義變量。而 使用 <generic/basic_ types. h> 中定義的 u_int6, intl6, in t32 等類型參見 Alcatel Coding Rule 3EB-000940001ASAAA12. 請問下列代碼片斷的執行結果 (D ) (2 分) void foo ( char * p ) std: cout ? sizeof(p);void goo ( char p)sizeof(p); std:cout << sizeof (p);void main ()char p20 = 0;std:cout << size

12、of(p);foo (p);goo (p);hoo (p);(A) 4 4 4 4(B) 4 4 4 20(C) 20 4 4 20(D) 20 4 4 4NOTE: J 數組名與指向數組首元素的指針在語言概念上是不一樣的。數組名是一個值 , 而指向數組首元素的指 針是一個指 針變量。這種關系類似于 int i = 3 中,3和 i 的關系.當把一個數組名作為一個參數傳入函數時 , 數組名將被賦值給該函數的指針形式參數 , 在函數體中只會對該 指針形式參 數進行操作。所以 foo, goo, hoo 函數體中 sizeof 運算符計算的都是指針形式參數所占用空間的大小 =4o13. 嵌入式實時

13、操作系統中的任務調度通常采用的算法是 ( D ) (2 分)(A) 響應比高者優先(B) 短作業優先(C) 時間片輪轉(D) 基于優先權的搶占調度14. 填空題 # define SQUARE (X) X*X如果a=b=2,那么SQUARE(a+b的值是(8 )(2 分)NOTE : J 2 + 2*2 + 2 = 815. ISAM 板級重啟級別可分為: Power-On, Code Reset, Warm Reset, Hot Reload 和 Hot Reseto 對于 Hot Reset, 以下哪個步驟需要執行? ( D ) (2 分)(A) 自檢(B) 硬件初始化(C) 軟件包(0S

14、W)加載(D) 軟件包(OSW)執行NOTE: 參見 ISAM SW Architecture 文檔16. 一個正在運行的任務對某個信號量s執行了 p操作,若p操作后s的值(A ),則該任務可繼續運行(2 分)(A)大于或者等于零(B)必須大于零(C)只要不等于零(D)小于或者等于零17. 請問下段程序的執行結果: ( A )Tableclasspublic:Table( ) cout << "table。 " ; ) Table () cout << "table()" ; ;class Table tbl ; void mai

15、n ()cout ? "mainO(A)table () main () table()(B)main () table () table()(C)table () table() main ()(D)不確定NOTE: C+ 語言中定義全局對象的構造函數在 main () 入口函數之前實現 , 析構函數在 main () 函數結束后實 現。命名空間 全局對象在第一次進入命名空間時調用。在 ISAM 平臺中 , 全局對象的初始化在 C+ 運行庫初始化時調用 (Init Phase 4), 所以要避免在 ISAM SW 中使 用全局對象 , 如 果無法避免 , 將其定義成某個命名空間內的

16、全局對象18. 32bit 寬的數在內存中的存放如下:0x00000x120x00010x340x00020x560x00030x78若CPI字節序為big-e ndia n,則讀岀結果為(A )(2 分)(A) 0x12345678(B) 0x56781234(C) 0x78563412(D) 0x87654321 NOTE: big-endian 高位低地址 ,littleendian 低位低地址19. 請問下列代碼片斷的執行結果 ( A ) (2 分) class Shape(public :static Shape * getlnstance();? Shape。 ( cout <

17、;<“ shea()p" ; private:Shape() ( cout << "shape 。 " ; );Shape:Shape * gelnstance()(static Shape shape ; return &shape ;Shape *plShape:getlnstance();Shape *p2 二 Shape:getlnstance();(A) shape () shape ()(B) shape () shape () shape() shape()(C) shape () shape () Ashape ()(D)

18、 不確定NOTE: J 這道題目有點小問題 ,正確題目如上。函數體內靜態變量只在第一次進入函數體時調用其構造函數。20. 閱讀下面代碼 (假定 char 的長度為 1 字節, long 的長度為 4 字節 )(2 分) ftinclude <iostream. h> ftpragma pack(2) typedef struct testl (char a;long b; TESTI;ftpragma pack ()typedef struct test2char c;long d; TEST2;void main(void)(TEST2 test2;cout ? sizeof (

19、TESTI) ? endl;cout ? sizeof (TEST2) ? endl;以上代碼的輸出結果是 (C )(A)5 5(B)5 8(C)6 8(D)8 8NOTE: J Apragma pack (2) "pragma pack()編譯器選項。指定將結構內成員變量按2字節對齊.如果不使用該選項 , 結構成員將默認按 4 字節對齊21. 按照ISAM軟件設計策略,應用子系統對每一個SNMP報文的處理應該在哪個任務空間完成?( D ) (2分)(A) 系統內核(B) 傳輸層協議 UDP(C) SNMP agent(D) SNMP mapper22. 下面的代碼輸出是什么 ( A

20、 ) (2 分 ) void foo(void)(unsigned int a = 6;int b =-20;(a+b >6)? puts ( zz>6 /) : puts ( /z<6 z);(A) > 6(B) < 6(0 輸出結果不確定將把 int 類型NOTE: J C/C+ 將只能對相同類型的數據對象進行運算操作。當int 與 unsigned int 類型的數據進行計算時對象隱式轉換成 unsigned int 類型再進行操作23. 請選擇我們推薦的無符號整數所有位都為 1 的推薦寫法 (請考慮代碼的可讀性和系統的移植性 )( C ) (2 分 )un

21、signed int zero = 0;/*1' s complement of zero */(A) unsigned int compzero = OxFFFFFFFF(B) UINT32 compzero = OxFFFFFFFF(C) unsigned int compzero 二 0(D) unsigned int compzero =-124. 請選擇以下代碼片斷的輸出結果 (C ) (2 分)char *ptr;if (ptr二 (char *)malloc(0) = NULL)puts ( zGot a null pointer");elseputs ( zG

22、ot a valid pointer");(A)Got a null pointer(B)零地址訪問異常(C)Got a valid pointer(D)輸出結果不確定NOTE: 參見 C+ 編程規范。 Malloc (0) 將返回一個合法指針25. 以下函數名或變量名中,哪一個符合良好命名規則? ( A ) (2 分 )(A) getCurrentColor ()(B) RePort ()(C) SesDhcpRelayPrtclsRemoveContextEntryBySession()(D) biaoZhiNOTE: 參見 C+ 編程規范26. 多選題在ISAM系統中,以下哪些

23、情況,允許重新啟動系統?( BCD ) (3分)(A) SNTP僉測到系統時間的不一致(B) 在子系統初始化過程中,檢測到嚴重錯誤(C) ATM交叉連接表被破壞NOTE: 參見文檔 3HH-03154-8002-DSZZA27. 以下哪個代碼片斷是好的風格( D ) (2 分)(A) int i = 0;/lots of codefor( ; i < MaxVai; i+ )(B) for ( i=0; i < 100; i+ )(if ()i = 101;(C) for ( i=0; i<MaxRecords; i+ )if ( Entryi 二 二 TestValue )

24、(break;if( i< MaxRecords )return(TRUE);elsereturn(FALSE);(D) bool Found 二 FALSE;for ( i=0; i<MaxRecords; i+ )if( Entryi= TestValue )Found 二 TRUE;break;return Found;28. 請問以下指針定義中,哪個指針指向的對象可以修改( A ) (2 分)(A) char * const cp ;(B) char const * pc ;(C) const char * pc2 ;NOTE: char * con st cp ;一個指向

25、字符的 const 指針char const * pc 二 const char * pc2 ; 一個指向 const char 的指針29. 按照ISAM內存分配策略,哪種內存分配接口是策略所推薦的?( D )(3分)(A) malloc/free(B) xm_malloc/xm_dealloc(C) xm_getmem/xm_retmem(D) 重載運算符new/deleteNOTE:參見文檔3HH-03154-1000-DSZZA30. 多選題下面有三段程序 Testi, Test2 和Test3,請問哪一個在指針使用方面存在問題(A B ) (3 分)Testi:void GetMem

26、ory( char *p )p = (char *) malloc( 100 );void Test ( void )char *str 二 NULL;GetMemory(str);strcpy( str, "hello world");printf( sn ,str);return;Test2:char AGetMemory( void )(char p=” hello world ”;return p;void Test ( void )(char *str = NULL;str 二 GetMemory();printf( sn ,str);return;Test3:v

27、oid GetMemory( char *p, int num )(*p 二(char *) malloc( num );void Test ( void )(char *str = NULL;GetMemory(& str, 100);if ( str != NULL )strcpy(str, "hello world"); printf ( z%s n , str); free (str) return;(A) Testi ;(B) Test2(C) Test3 ;(D) 以上都不是31. 閱讀下面程序main ()(int a5 二1,2, 3,4, 5;in

28、t *ptr = (int*)(&a+l);printf ( /zn” , *(a+l), *(ptrT); 這段程序的輸出結果是: (C ) (3 分)(A) 2 2(B) 2 1(C) 2 5分)(D) 以上均不是32. 多選題 下列函數哪些可以在中斷服務程序中調用?( D E F G ) (3(A) printf(B) malloc(C) free(D) intLock(E) taskPrioitySet(F) taskldVerify(G) semGive(H) msgQReceiveNOTE: 在中斷服務函數中禁止調用可能引起阻塞操作的函數33. 請問下段程序的執行結果 (C

29、 ) (4 分) class Table(public:Table( ) cout << "table 。 " ; Table ()( cout ? "table()" ; ;void main ()(Table *tl 二 new Table2; delete tl ;(A) table () "table ()(B) table () table () Atable ()table()(C) table () table () Atable ()(D) 不確定NOTE:應該使用delete 口運算符來刪除對象數組3 分)34.

30、在ELF目標文件格式中,.text 節包含(A ) ,? bss節包含(C ) , .data 節包含(B )( A)程序代碼( B)已初始化數據( 0 未初始化數據( D) 局部變量35. 多選題 請指出下面代碼片斷的問題 (A B ) (4 分) void DoSomeThing (.)(char* p;p = (char*)malloc (1024) ;/ 分配 IK 的空間if (NULL = p) return;p = realloc (p, 2048) ; / 空間不夠,重新分配到 2Kif (NULL = p) return;(A) 內存泄漏(B) realloc 不推薦使用(0

31、 野指針(D) 內存碎片NOTE: realloc 不推薦使用。參見 C+ 編程規范當 realloc 失敗后應當釋放前面 malloc 成功申請的內存 , 否則會引起內存泄漏36. 請問下列代碼片斷的執行結果 ( C ) (4 分 ) class Shape( public:Shape( ) cout << "shape 。 " ; Shape() ( cout ? "shape()" ; );class Circle: public Shape(Public:Circle() ( cout << "circle。 &

32、quot; ; ACircle() ( cout ? " 'circle ()" ; )void main ()Shape * p = new Circle (); delete p ;(A) shape () circle () 'circle () shape() (B) circle () shape () shape() 'circle ()(C) shape () circle () shape()(D) 不確定正確的調用到NOTE: 子類和父類的析構函數必須申明成虛函數 ,才能在 delete 一個指向子類的父類指針時 ,使用多態機制 子

33、類析構函數 .所以我們推薦把所有對象的析構函數都申明成虛函數。參見Alcatel Coding Rule 3EB-00094-0001-ASAAA.正確代碼如下class Shapepublic:Shape ( ) cout ? "shape ()” ;Virtual 'Shape () cout ? "shape () " ; );class Circle: public Shape(Public:Circle () ( cout ? "circle () " ; Virtual ACircle() ( cout ? "ci

34、rcle() " ; ;void main ()Shape * p = new Circle (); delete p ;37. 多選題 某個任務從阻塞狀態進人就緒狀態可能是由于 (A C ) (4 分) (A) 強加給該任務延遲時間超時(B)該任務執行了P操作(0當前任務執行了 V操作(D) 該任務的時間片用完38. 簡答題 ) 請找出以下代碼片斷的錯誤 (4 分 )Class Table(char * p ;size_t sz ;Public:Table( size_t s = 15 ) p = new char sz = s ; Table () delete p ; void

35、 f () (Table tl ;Table t2 二 tlTable t3 ; t3 = t2 ;NOTE:Table t2 = tl; 將調用 Table 的拷貝構造函數。 Table 必須實現自己的拷貝構造函數以實現對象的 deep copy. 否則編譯器將自動 調用 Table 的默認拷貝構造函數,將 tl 逐位 copy 到七 2。這樣會導致 t2 與 tl 的成員 p 指向同一塊內存區。這樣在退出 f 0 函 數的時候導致程序異常T3 = t2將調用Table對象的賦值運算操作。Table必須重載運算符=以實現對象的deep copy.否則編譯 器將調用默認的對象 copy動作,將

36、t2逐位copy至lj tl。這樣會導致t2與1:3的成員p指向同一塊內存區。 這樣在退岀f 0函數的時候導致程序 異常正確代碼如下 :class Tablechar * p ; size_ t sz ;public:Table & opera tor - ( Table & tbl );Table ( size_ t s = 15 );Table ( Table &tbl );? Table ();;Table:Table ( Table &tbl )(p = new char 15 ; sz = 15 ;Table: Table (size_ t s)p -

37、 new char sz = s ;Table: ATable ()delete p ;)Table & Table: opera tor = ( Table & tbl )(p = new char 15 ;sz = 15 ;return *this ;39. 簡答題在 FR ANTmsl7167中,ISAM在隨機大流量報文的情況下將重啟LT板,經過幾個月的問題定義,發現是ARP莫塊的問題。該子系統中會有ARP Aging Timer Task和ARP FSM Task修改ARP Table.下面 給岀部分問題代碼的偽碼片斷。請review該段代碼,并找岀該段代碼導致LT板重

38、啟的原因是什么?(4分)T_ARPEntry * ipnmArpEntryCreate (IpAddress ipAddri, char *hwAddrP_i, .)TARPEntry *pae 二 NULL;pae 二 ipnmArpEntryGet( ipAddr_i );if (pae = NULL) / entry not existedpae 二 arptable_cre(13LinearIndex_i, ipAddr_i, ,);else / entry already existedxsm_p(ipnmSema, SM_WAIT, OL);/* update the aready

39、 existed ARP entry. */xsm_v(ipnmSema, SM_WAIT, OL);return pae;NOTE:信號量保護粒度過小,必須保證在update ARP entry的時候pae指向的entry也是合法的。正確寫法:T_ARPE ntry * ipnm ArpE ntryCreate (IpAddress ipAddr_i, char *hwAddrP_i, )T ARPEntry *pae = NULL;xsm_p (ipnmSema, SM_ WAIT, OL);pae = ipnmArpEn tryGe t ( ipAddr i );if (pae = NULL) / entry not existed(pae - arp table_ ere (13LinearIndex_i, ipAddr_i,);else / entry already existed/* update the aready existed ARP entry. */xsm_ v (ipnmSema, SM_ WAIT, OL); return pae;40. 填空題請用C/C+語言給岀以下變量的定義:(6分)一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論