簡單的計算機專業面試題選_第1頁
簡單的計算機專業面試題選_第2頁
簡單的計算機專業面試題選_第3頁
簡單的計算機專業面試題選_第4頁
簡單的計算機專業面試題選_第5頁
已閱讀5頁,還剩10頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、1 . 用預處理指令#define 聲明一個常數,用以表明1年中有多少秒(忽略閏年問題) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL2. 嵌入式系統中經常要用到無限循環,你怎么樣用C編寫死循環呢?while(1)或者for(;)3. 用變量a給出下面的定義a) 一個整型數(An integer) b)一個指向整型數的指針( A pointer to an integer) c)一個指向指針的的指針,它指向的指針是指向一個整型數( A pointer to a pointer to an intege)r d)一個有10個整型數的數組( An

2、array of 10 integers) e) 一個有10個指針的數組,該指針是指向一個整型數的。(An array of 10 pointers to integers) f) 一個指向有10個整型數數組的指針( A pointer to an array of 10 integers) g) 一個指向函數的指針,該函數有一個整型參數并返回一個整型數(A pointer to a function that takes an integer as an argument and returns an integer) h) 一個有10個指針的數組,該指針指向一個函數,該函數有一個整型參數并

3、返回一個整型數( An array of ten pointers to functions that take an integer argument and return an integer )答案是: a) int a; / An integer b) int *a; / A pointer to an integer c) int *a; / A pointer to a pointer to an integer d) int a10; / An array of 10 integers e) int *a10; / An array of 10 pointers to integ

4、ers f) int (*a)10; / A pointer to an array of 10 integers g) int (*a)(int); / A pointer to a function a that takes an integer argument and returns an integer h) int (*a10)(int); / An array of 10 pointers to functions that take an integer argument and return an integer 4.關鍵字static的作用是什么?這個簡單的問題很少有人能回

5、答完全。在C語言中,關鍵字static有三個明顯的作用:1)在函數體,一個被聲明為靜態的變量在這一函數被調用過程中維持其值不變。2) 在模塊內(但在函數體外),一個被聲明為靜態的變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問。它是一個本地的全局變量。3) 在模塊內,一個被聲明為靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的模塊的本地范圍內使用。大多數應試者能正確回答第一部分,一部分能正確回答第二部分,同是很少的人能懂得第三部分。這是一個應試者的嚴重的缺點,因為他顯然不懂得本地化數據和代碼范圍的好處和重要性。5. 關鍵字const有什么含意? 表示常量 不可

6、以修改的變量。const int a;int const a;const int *a;int * const a;int const * a const;前兩個的作用是一樣,a是一個常整型數。第三個意味著a是一個指向常整型數的指針(也就是,整型數是不可修改的,但指針可以)。第四個意思a是一個指向整型數的常指針(也就是說,指針指向的整型數是可以修改的,但指針是不可修改的)。最后一個意味著a是一個指向常整型數的常指針(也就是說,指針指向的整型數是不可修改的,同時指針也是不可修改的)。如果應試者能正確回答這些問題,那么他就給我留下了一個好印象。順帶提一句,也許你可能會問,即使不用關鍵字 const

7、,也還是能很容易寫出功能正確的程序,那么我為什么還要如此看重關鍵字const呢?我也如下的幾下理由:1) 關鍵字const的作用是為給讀你代碼的人傳達非常有用的信息,實際上,聲明一個參數為常量是為了告訴了用戶這個參數的應用目的。如果你曾花很多時間清理其它人留下的垃圾,你就會很快學會感謝這點多余的信息。(當然,懂得用const的程序員很少會留下的垃圾讓別人來清理的。)2) 通過給優化器一些附加的信息,使用關鍵字const也許能產生更緊湊的代碼。3) 合理地使用關鍵字const可以使編譯器很自然地保護那些不希望被改變的參數,防止其被無意的代碼修改。簡而言之,這樣可以減少bug的出現。6. 程序什么

8、時候應該使用線程,什么時候單線程效率高。答:1耗時的操作使用線程,提高應用程序響應。2并行操作時使用線程,如C/S架構的服務器端并發線程響應用戶的請求。3多CPU系統中,使用線程提高CPU利用率4改善程序結構。一個既長又復雜的進程可以考慮分為多個線程,成為幾個獨立或半獨立的運行部分,這樣的程序會利于理解和修改。其他情況都使用單線程。7. 一般數據庫若出現日志滿了,會出現什么情況,是否還能使用?答:只能執行查詢等讀操作,不能執行更改,備份等寫操作,原因是任何寫操作都要記錄日志。也就是說基本上處于不能使用的狀態。第三次握手:客戶端收到服務器的SYNACK包,向服務器發送確認包ACK(ack=k+1

9、),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。8.ICMP是什么協議,處于哪一層?答:Internet控制報文協議,處于網絡層(IP層)(ping命令基于這個協議)9.winsock建立連接的主要實現步驟?答:服務器端:socket()建立套接字,綁定(bind)并監聽(listen),用accept()等待客戶端連接??蛻舳耍簊ocket()建立套接字,連接(connect)服務器,連接上后使用send()和recv(),在套接字上寫讀數據,直至數據交換完畢,closesocket()關閉套接字。服務器端:accept()發現有客戶端連接,建立一個新的套接字,

10、自身重新開始等待連接。該新產生的套接字使用send()和recv()寫讀數據,直至數據交換完畢,closesocket()關閉套接字。10. IP組播有那些好處?答:Internet上產生的許多新的應用,特別是高帶寬的多媒體應用,帶來了帶寬的急劇消耗和網絡擁擠問題。組播是一種允許一個或多個發送者(組播源)發送單一的數據包到多個接收者(一次的,同時的)的網絡技術。組播可以大大的節省網絡帶寬,因為無論有多少個目標地址,在整個網絡的任何一條鏈路上只傳送單一的數據包。所以說組播技術的核心就是針對如何節約網絡資源的前提下保證服務質量。11.引用與指針有什么區別? 1) 引用必須被初始化,指針不必。 2)

11、 引用初始化以后不能被改變,指針可以改變所指的對象。3) 不存在指向空值的引用,但是存在指向空值的指針。12. 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狀態;13、局部變量能否和全局變量重名? 答:能,局部會屏蔽全局。要用全局變

12、量,需要使用:局部變量可以與全局變量同名,在函數內引用這個變量時,會用到同名的局部變量,而不會用到全局變量。對于有些編譯器而言,在同一個函數內可以定義多個同名的局部變量,比如在兩個循環體內都定義一個同名的局部變量,而那個局部變量的作用域就在那個循環體內。14、如何引用一個已經定義過的全局變量? 答:extern 可以用引用頭文件的方式,也可以用extern關鍵字,如果用引用頭文件方式來引用某個在頭文件中聲明的全局變理,假定你將那個變寫錯了,那么在編譯期間會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那么在編譯期間不會報錯,而在連接期間報錯。15.描述實時系統的基本特性 在特定時

13、間內完成特定的任務,實時性與可靠性。16.全局變量和局部變量在內存中是否有區別?如果有,是什么區別? 全局變量儲存在靜態數據庫,局部變量在堆棧。17.什么是平衡二叉樹? 左右子樹都是平衡二叉樹 且左右子樹的深度差值的絕對值不大于1。18.堆棧溢出一般是由什么原因導致的? 沒有回收垃圾資源。19.什么函數不能聲明為虛函數? constructor函數不能聲明為虛函數。20.冒泡排序算法的時間復雜度是什么? 時間復雜度是O(n2)。21.寫出float x 與“零值”比較的if語句。 if(x-0.000001)22.Internet采用哪種網絡協議?該協議的主要層次結構? Tcp/Ip協議 主要

14、層次結構為: 應用層/傳輸層/網絡層/數據鏈路層/物理層。23.Internet物理地址和IP地址轉換采用什么協議? ARP (Address Resolution Protocol)(地址解析協議)24.IP地址的編碼分為哪倆部分? IP地址由兩部分組成,網絡號和主機號。不過是要和“子網掩碼”按位與上之后才能區分哪些是網絡位哪些是主機位。25.用戶輸入M,N值,從1至N開始順序循環數數,每數到M輸出該數值,直至全部輸出。寫出C程序。 循環鏈表,用取余操作做26.不能做switch()的參數類型是: switch的參數不能為實型。27. 請寫出下列代碼的輸出內容include main()in

15、t a,b,c,d;a=10;b=a+;c=+a;d=10*a+;printf(b,c,d:%d,%d,%d,b,c,d);return 0; 答:10,12,12028. 寫出下列代碼的輸出內容includeint inc(int a)return(+a);int multi(int*a,int*b,int*c)return(*c=*a*b);typedef int(FUNC1)(int in);typedef int(FUNC2) (int*,int*,int*);void show(FUNC2 fun,int arg1, int*arg2)INCp=&inc;int temp =p(ar

16、g1);fun(&temp,&arg1, arg2);printf(%dn,*arg2);main()int a;show(multi,10,&a);return 0;*1.對于一個頻繁使用的短小函數,在C語言中應用什么實現,在C+中應用什么實現?答:c用宏定義,c+用inline2.直接鏈接兩個信令點的一組鏈路稱作什么?答:PPP點到點連接3.軟件測試都有那些種類?黑盒:針對系統功能的測試 白盒:測試函數功能,各函數接口4.確定模塊的功能和模塊的接口是在軟件設計的那個階段完成的?概要設計階段三.選擇題: 1.Ethternet鏈接到Internet用到以下那個協議? A.HDLC;B.ARP

17、;C.UDP;D.TCP;E.ID 2.屬于網絡層協議的是: A.TCP;B.IP;C.ICMP;D.X.25 3.Windows消息調度機制是: A.指令隊列;B.指令堆棧;C.消息隊列;D.消息堆棧; 4.unsigned short hash(unsigned short key) return (key)%256 請問hash(16),hash(256)的值分別是: A.1.16;B.8.32;C.4.16;D.1.32四.找錯題: 1.請問下面程序有什么錯誤? int a602501000,i,j,k; for(k=0;k=1000;k+) for(j=0;j250;j+) for(

18、i=0;i60;i+) aijk=0;把循環語句內外換一下 2.#define Max_CB 500 void LmiQueryCSmd(Struct MSgCB * pmsg) unsigned char ucCmdNum; . for(ucCmdNum=0;ucCmdNumMax_GT_Length) return GT_Length_ERROR; . 五.問答題: 1.IP Phone的原理是什么?IPV6 2.TCP/IP通信建立的過程怎樣,端口有什么作用?三次握手,確定是哪個應用程序使用該協議 3.1號信令和7號信令有什么區別,我國某前廣泛使用的是那一種? 4.列舉5種以上的電話新業

19、務?*1.進程和線程的差別。線程是指進程內的一個執行單元,也是進程內的可調度實體.與進程的區別:(1)調度:線程作為調度和分配的基本單位,進程作為擁有資源的基本單位(2)并發性:不僅進程之間可以并發執行,同一個進程的多個線程之間也可并發執行(3)擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬于進程的資源. (4)系統開銷:在創建或撤消進程時,由于系統都要為之分配和回收資源,導致系統的開銷明顯大于創建或撤消線程時的開銷。2Heap與stack的差別。Heap是堆,stack是棧。Stack的空間由操作系統自動分配/釋放,Heap上的空間手動分配/釋放。Stack空間有

20、限,Heap是很大的自由存儲區。C中的malloc函數分配的內存空間即在堆上,C+中對應的是new操作符。程序在編譯期對變量和函數分配內存都在棧上進行,且程序運行過程中函數調用時參數的傳遞也在棧上進行。3. 如果只想讓程序有一個實例運行,不能運行兩個。像winamp一樣,只能開一個窗口,怎樣實現?用內存映射或全局原子(互斥變量)、查找窗口句柄 FindWindow,互斥,寫標志到文件或注冊表,共享內存。4.存儲過程是什么?有什么用?有什么優點?就是一堆sql的集合,可以建立非常復雜的查詢,編譯運行,所以運行一次后,以后再運行速度比單獨執行SQL快很多5. 網絡編程中設計并發服務器,使用多進程與

21、多線程 ,請問有什么區別?1,進程:子進程是父進程的復制品。子進程獲得父進程數據空間、堆和棧的復制品。2,線程:相對與進程而言,線程是一個更加接近于執行體的概念,它可以與同進程的其他線程共享數據,但擁有自己的棧空間,擁有獨立的執行序列。兩者都可以提高程序的并發度,提高程序運行效率和響應時間。線程和進程在使用上各有優缺點:線程執行開銷小,但不利于資源管理和保護;而進程正相反。同時,線程適合于在SMP機器上運行,而進程則可以跨機器遷移。6Windows下的內存是如何管理的?7.用一個語句實現x是否為2的若干次冪的判斷:int i = 512;cout boolalpha (i & (i - 1)

22、? false : true) endl;8. 下面三個有什么區別?char * const p;char const * p;const char *p答:char * const p; /常量指針,p的值不可以修改char const * p;/指向常量的指針,指向的常量值不可以改const char *p; /和char const *p 一樣9. 一個32位的機器,該機器的指針是多少位指針是多少位只要看地址總線的位數就行了。80386以后的機子都是32的數據總線。所以指針的位數就是4個字節了。10. main() int a5=1,2,3,4,5; int *ptr=(int *)(&

23、a+1); printf(%d,%d,*(a+1),*(ptr-1);輸出:2,5*(a+1)就是a1,*(ptr-1)就是a4,執行結果是2,5&a+1不是首地址+1,系統會認為加一個a數組的偏移,是偏移了一個數組的大?。ū纠?個int)int *ptr=(int *)(&a+1); 則ptr實際是&(a5),也就是a+5原因如下:&a是數組指針,其類型為 int (*)5;而指針加1要根據指針類型加上一定的值,不同類型的指針+1之后增加的大小不同a是長度為5的int數組指針,所以要加 5*sizeof(int)所以ptr實際是a5但是ptr與(&a+1)類型是不一樣的(這點很重要)所以p

24、rt-1只會減去sizeof(int*)a,&a的地址是一樣的,但意思不一樣,a是數組首地址,也就是a0的地址,&a是對象(數組)首地址,a+1是數組下一元素的地址,即a1,&a+1是下一個對象的地址,即a5。11. 交換兩個變量的值,不使用第三個變量。即a=3,b=5,交換之后a=5,b=3;a = a + b;b = a - b;a = a - b; /第一種方法a = ab;b = ab;a = ab; / 第二種.a=b=a=b; /第三種,后兩種只能用于字符和整型12. c和c+中的struct有什么不同?c和c+中struct的主要區別是c中的struct不可以含有成員函數,而c+

25、中的struct可以。c+中struct和class的主要區別在于默認的存取權限不同,struct默認為public,而class默認為private13.舉幾種進程的同步機制,并比較其優缺點。 原子操作 信號量機制、 自旋鎖、 管程,會合,分布式系統14.進程之間通信的途徑:共享存儲系統、消息傳遞系統、管道(以文件系統為基礎)15.進程死鎖的原因:資源競爭及進程推進順序非法16.死鎖的4個必要條件:互斥、請求保持、不可剝奪、環路17.死鎖的處理:鴕鳥策略、預防策略、避免策略、檢測與解除死鎖18. 操作系統中進程調度策略有哪幾種?FCFS(先來先服務),優先級,時間片輪轉,多級反饋19. 數組

26、和鏈表的區別數組:數據順序存儲,固定大小;鏈表:數據可以隨機存儲,大小可動態改變20. ISO的七層模型是什么?tcp/udp是屬于哪一層?tcp/udp有何優缺點?應用層、表示層、會話層、運輸層、網絡層、物理鏈路層、物理層、tcp /udp屬于運輸層TCP 服務提供了數據流傳輸、可靠性、有效流控制、全雙工操作和多路復用技術等。與 TCP 不同, UDP 并不提供對 IP 協議的可靠機制、流控制以及錯誤恢復功能等。由于 UDP 比較簡單, UDP 頭包含很少的字節,比 TCP 負載消耗少。tcp: 提供穩定的傳輸服務,有流量控制,缺點是包頭大,冗余性不好。udp: 不提供穩定的服務,包頭小,開

27、銷小。面試題: 線程與進程的區別和聯系? 線程是否具有相同的堆棧? dll是否有獨立的堆棧?(1)進程是死的,只是一些資源的集合,真正的程序執行都是線程來完成的,程序啟動的時候操作系統就幫你創建了一個主線程。(2)每個線程有自己的堆棧。(3)DLL中有沒有獨立的堆棧,這個問題不好回答,或者說這個問題本身是否有問題。因為DLL中的代碼是被某些線程所執行,只有線程擁有堆棧,如果DLL中的代碼是EXE中的線程所調用,那么這個時候是不是說這個DLL沒有自己獨立的堆棧?如果DLL中的代碼是由DLL自己創建的線程所執行,那么是不是說DLL有獨立的堆棧?以上講的是堆棧,如果對于堆來說,每個DLL有自己的堆,

28、所以如果是從DLL中動態分配的內存,最好是從DLL中刪除,如果你從DLL中分配內存,然后在EXE中,或者另外一個DLL中刪除,愛人者,人恒愛之;敬人者,人恒敬之;寬以濟猛,猛以濟寬,政是以和。將軍額上能跑馬,宰相肚里能撐船。最高貴的復仇是寬容。有時寬容引起的道德震動比懲罰更強烈。君子賢而能容罷,知而能容愚,博而能容淺,粹而能容雜。寬容就是忘卻,人人都有痛苦,都有傷疤,動輒去揭,便添新創,舊痕新傷難愈合,忘記昨日的是非,忘記別人先前對自己的指責和謾罵,時間是良好的止痛劑,學會忘卻,生活才有陽光,才有歡樂。不要輕易放棄感情,誰都會心疼;不要沖動下做決定,會后悔一生。也許只一句分手,就再也不見;也許

29、只一次主動,就能挽回遺憾。世界上沒有不爭吵的感情,只有不肯包容的心靈;生活中沒有不會生氣的人,只有不知原諒的心。感情不是游戲,誰也傷不起;人心不是鋼鐵,誰也疼不起。好緣分,憑的就是真心真意;真感情,要的就是不離不棄。愛你的人,舍不得傷你;傷你的人,并不愛你。你在別人心里重不重要,自己可以感覺到。所謂華麗的轉身,都有旁人看不懂的情深。人在旅途,肯陪你一程的人很多,能陪你一生的人卻很少。誰在默默的等待,誰又從未走遠,誰能為你一直都在?這世上,別指望人人都對你好,對你好的人一輩子也不會遇到幾個。人心只有一顆,能放在心上的人畢竟不多;感情就那么一塊,心里一直裝著你其實是難得。動了真情,情才會最難割;付出真心,心才會最難舍。你在誰面前最蠢,

溫馨提示

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

評論

0/150

提交評論