- 校長(cháng)面試題目及答案 推薦度:
- 教師招聘結構化面試題目答案 推薦度:
- 相關(guān)推薦
Windows面試題
問(wèn)MainFrm,CDocument和CView類(lèi)之間的關(guān)系,
MainFrm為框架類(lèi),包含應用程序外框所包含部分。CView為視圖類(lèi),用于顯示數據的空白區域窗口。
CDocument為文檔類(lèi)。
MFC提供了文檔/視類(lèi)結構,采用數據本身和顯示分離的機制。其中文檔類(lèi)CDocument用于數據的存儲和加載,視類(lèi)CView用于數據的顯示與修改。
Dialog和ModuelDialog不同用法
1)類(lèi)型不同
MoudleDialog 模態(tài)對話(huà)框,屬于壟斷對話(huà)框,例如打開(kāi)對話(huà)框,點(diǎn)擊打開(kāi)后不能再執行其他操作,會(huì )發(fā)出“嘟嘟嘟”的聲音;
非模態(tài)對話(huà)框,屬于非壟斷對話(huà)框,利用查找對話(huà)框,點(diǎn)擊查找同時(shí)可以執行其他操作;
即:非模態(tài)不壟斷;模態(tài)壟斷。
2)用法不同
CDialog::Create :to create amodelessdialog box
CDialog::DoModal :Call thismember function to invoke the modal dialog box andreturn the dialog-box resultwhen done
windows消息系統由哪幾部分構成?
答:由一下3部分組成:
1.消息隊列:操作系統負責為進(jìn)程維護一個(gè)消息隊列,程序運行時(shí)不斷從該消息隊列中獲取消息、處理消息;
2.消息循環(huán):應用程序通過(guò)消息循環(huán)不斷獲取消息、處理消息。
3.消息處理:消息循環(huán)負責將消息派發(fā)到相關(guān)的窗口上使用關(guān)聯(lián)的窗口過(guò)程函數進(jìn)行處理。
什么時(shí)候必須重寫(xiě)拷貝構造函數?
答:當構造函數涉及到動(dòng)態(tài)存儲分配空間時(shí),要自己寫(xiě)拷貝構造函數,并且要深拷貝。
什么是消息映射?
答:消息映射就是讓程序員指定MFC類(lèi)(有消息處理能力的類(lèi))處理某個(gè)消息。然后由程序員完成對該處理函數的編寫(xiě),以實(shí)現消息處理功能。
如何定義和實(shí)現一個(gè)類(lèi)的成員函數為回調函數?
答:
所謂的回調函數,就是預先在系統的對函數進(jìn)行注冊,讓系統知道這個(gè)函數的存在,以后,當某個(gè)事件發(fā)生時(shí),再調用這個(gè)函數對事件進(jìn)行響應。
定義一個(gè)類(lèi)的成員函數時(shí)在該函數前加CALLBACK即將其定義為回調函數,函數的實(shí)現和普通成員函數沒(méi)有區別
MFC為何使用消息映射表而不用虛函數?
這個(gè)問(wèn)題是windows開(kāi)發(fā)面試中最經(jīng)常問(wèn)到得問(wèn)題,也是很有深度的一個(gè)問(wèn)題。
有兩個(gè)帖子對該問(wèn)題討論的比較深刻:
http://topic.csdn.net/u/20090822/16/4cf5d189-0e5e-41ff-9ba3-c7eaf2f6da74.html
http://topic.csdn.net/u/20090316/22/8b067591-6a17-4970-b224-41ab589294b3.html
說(shuō)法一:
虛函數實(shí)現占用內存較大
侯捷在《深入淺出MFC》中說(shuō)微軟使用消息映射機制而不用虛函數,是因為虛函數空間代價(jià)的原因。在當前MFC2.0版本發(fā)布的時(shí)候是92年,pc的內存才幾M。一個(gè)類(lèi)的虛表的大小就是虛函數的個(gè)數*一個(gè)指針的大小。
假設windows的通用消息有200個(gè),那么CWnd類(lèi)的虛表就有 200*4個(gè)byte = 800byte,CWnd類(lèi)的所有派生類(lèi)均copy了一份CWnd的虛表vtable,然后自己的虛函數往后加CWnd類(lèi)的虛表的后頭。
。ㄖ劣谟腥苏f(shuō)CWnd類(lèi)的派生類(lèi)能共享CWnd的虛表,這個(gè)說(shuō)法不靠譜。因為派生類(lèi)自己的虛函數值加在基類(lèi)的虛函數表項的最后的。如果CWnd派生了CWndChildA 和 CWndChildB,且兩個(gè)孩子均有自己的虛函數,那么都往CWnd類(lèi)的后面加,豈不是沖突了?)。
也就是系統內所有的CWnd類(lèi)的派生類(lèi)都要承受 800byte的代價(jià)。假設有100個(gè)類(lèi)派生自CWnd 那么代價(jià)就是800*100byte 也就是 80K。這在當時(shí)內存很緊張的情況下,已經(jīng)是一種巨大的內存消耗了!這里需要注意一點(diǎn):vtable是和類(lèi)綁定在一起的,而不是和類(lèi)對象(也叫類(lèi)的實(shí)例)綁定在一起的,類(lèi)的實(shí)例僅增加一個(gè)指向該向類(lèi)的vtable的指針而已。也就是說(shuō),如果你有100個(gè)CWnd派生類(lèi),哪怕你生成了100000個(gè)派生類(lèi)的實(shí)例,vtable占用的內存也是80K。
看來(lái)在當時(shí)的環(huán)境看來(lái),MFC沒(méi)有采用虛函數,內存的.確是一個(gè)考慮。
但是放在現在看,這點(diǎn)內存消耗確實(shí)微不足道的!也就是說(shuō),如果現在重新設計MFC的消息機制,如果不采用虛函數,并非因為虛函數的空間浪費問(wèn)題。結論:這個(gè)說(shuō)法靠譜。
說(shuō)法二:
消息映射機制效率比虛函數效率高。
因為那么多消息ID,如果找到其對應的消息處理函數,switch是不可少的。ǹ梢詇ash?哦哦,的確可能,不過(guò)mfc里面可沒(méi)這么做?mfc里面怎么做的我也不清楚)
MFC中采用的是消息映射的機制,而沒(méi)有用虛函數的機制,因為消息有很多,如果用虛函數機制,需要給每個(gè)消息定義一個(gè)虛函數,在分派消息時(shí),程序需要逐一判斷是哪一個(gè)消息,找到合適的分支后再調用相應的虛函數;而通常情況下,應用程序不需要響應太多的消息,消息映射方式只需要判斷程序想要響應的這些消息即可,所以開(kāi)銷(xiāo)小。
也就是說(shuō),MFC采用了消息映射而沒(méi)有采用虛函數,是從對消息的響應機制來(lái)考慮的。消息映射,就可以?xún)H實(shí)現自己感興趣的消息,這樣switch時(shí)就可以快一點(diǎn)。
不過(guò)話(huà)又說(shuō)回來(lái),對一個(gè)非自己感興趣的系統消息來(lái)了以后,就需要遍歷消息網(wǎng),層層的向基類(lèi)查找直到找到對應的消息處理函數!這本身也很浪費時(shí)間!也許這種情況比較少見(jiàn)吧,否則的話(huà),消息映射的消息響應時(shí)間并不比虛函數來(lái)的快!因為虛函數最多只需一次遍歷,而且,如果可以采用hash技術(shù),更快!
如果說(shuō),大多數消息都是系統的消息,那么消息映射的迭代查找消息函數的方式并不比虛函數的switch來(lái)的快!
PS:這里有一篇對比消息映射機制和虛函數機制效率的簡(jiǎn)單模擬實(shí)驗
http://blog.csdn.net/hjsunj/archive/2008/01/10/2034314.aspx結論,該說(shuō)法不靠譜!
說(shuō)法三:
為了未來(lái)的可擴展性。兼容新的系統級的消息。
我不是很清楚MS設計消息映射的初衷,但是感覺(jué)它著(zhù)眼點(diǎn)更側重于增加新消息很容易,而不是節省內存。
如果我們使用虛函數機制實(shí)現,恐怕對于每個(gè)可能的消息我們都必須在基類(lèi)中定義一個(gè)虛函數,而其首要的困難就是你無(wú)法猜測未來(lái)會(huì )出現什么消息,也無(wú)法確定需要定義什么樣函數原型的虛函數。而使用消息映射,解決這個(gè)問(wèn)題則相對容易,因為這將由未來(lái)的程序設計者決定他們的消息該如何處理。
對于系統的新增消息,消息映射支持起來(lái)較方便。虛函數想要支持就需要改動(dòng)基類(lèi)添加虛函數。
對于自定義的消息,無(wú)論消息映射和虛函數都可以很好的支持。
那么虛函數方式如何支持自定義消息?
自定義消息是不需要加到基類(lèi)的;(lèi)可以加個(gè)虛函數,OnMessage(xxx), 然后有自定義消息的類(lèi)實(shí)現之,用switch轉換成相應虛函數調用,不是自己的消息再傳給基類(lèi)。
結論:這個(gè)說(shuō)法靠譜。
sendMessage與postMessage區別?
不同點(diǎn):sendMessage發(fā)送完畢以后需要等待處理完才返回;而postMessage發(fā)送消息后立即返回。
Do not post the WM_QUIT message usingPostMessage; use thePostQuitMessage function.
postMessage將消息放置到消息隊列中,不等待線(xiàn)程處理消息就立即返回。
sendMessage發(fā)送指定的消息到窗口,并會(huì )調用窗口過(guò)程,直到窗口過(guò)程處理完畢后才返回。
TCP的重發(fā)機制是怎么實(shí)現的?
1.滑動(dòng)窗口機制,確立收發(fā)的邊界,能讓發(fā)送方知道已經(jīng)發(fā)送了多少(已確認)、尚未確認的字節數、尚待發(fā)送的字節數;讓接收方知道(已經(jīng)確認收到的字節數)。
2.選擇重傳,用于對傳輸出錯的序列進(jìn)行重傳。
TCP和UDP的區別?
1)TCP面向連接(三次握手機制),通信前需要先建立連接;UDP面向無(wú)連接,通信前不需要建立連接;
2)TCP保障可靠傳輸(按序、無(wú)差錯、不丟失、不重復);UDP不保障可靠傳輸,使用最大努力交付;
3)TCP面向字節流的傳輸,UDP面向數據報的傳輸。
TCP為什么不是兩次連接?而是三次握手?
如果A與B兩個(gè)進(jìn)程通信,如果僅是兩次連接。可能出現的一種情況就是:A發(fā)送完請報文以后,由于網(wǎng)絡(luò )情況不好,出現了網(wǎng)絡(luò )擁塞,即B延時(shí)很長(cháng)時(shí)間后收到報文,即此時(shí)A將此報文認定為失效的報文。B收到報文后,會(huì )向A發(fā)起連接。此時(shí)兩次握手完畢,B會(huì )認為已經(jīng)建立了連接可以通信,B會(huì )一直等到A發(fā)送的連接請求,而A對失效的報文回復自然不會(huì )處理。依次會(huì )陷入B忙等的僵局,造成資源的浪費。
connect方法會(huì )阻塞,請問(wèn)有什么方法可以避免其長(cháng)時(shí)間阻塞?
可以考慮采用異步傳輸機制,同步傳輸與異步傳輸的主要區別在于同步傳輸中,如果調用recvfrom后會(huì )一致阻塞運行,從而導致調用線(xiàn)程暫停運行;異步傳輸機制則不然,會(huì )立即返回。
網(wǎng)絡(luò )編程中設計并發(fā)服務(wù)器,使用多進(jìn)程與多線(xiàn)程,請問(wèn)有什么區別?
答案一:
1,進(jìn)程:子進(jìn)程是父進(jìn)程的復制品。子進(jìn)程獲得父進(jìn)程數據空間、堆和棧的復制品。
2,線(xiàn)程:相對與進(jìn)程而言,線(xiàn)程是一個(gè)更加接近與執行體的概念,它可以與同進(jìn)程的其他線(xiàn)程共享數據,但擁有自己的?臻g,擁有獨立的執行序列。兩者都可以提高程序的并發(fā)度,提高程序運行效率和響應時(shí)間。
線(xiàn)程和進(jìn)程在使用上各有優(yōu)缺點(diǎn):線(xiàn)程執行開(kāi)銷(xiāo)小,但不利于資源管理和保護;而進(jìn)程正相反。同時(shí),線(xiàn)程適合于在SMP機器上運行,而進(jìn)程則可以跨機器遷移。
答案二:
根本區別就一點(diǎn):用多進(jìn)程每個(gè)進(jìn)程有自己的地址空間(address space),線(xiàn)程則共享地址空間。所有其它區別都是由此而來(lái)的:
1。速度:線(xiàn)程產(chǎn)生的速度快,線(xiàn)程間的通訊快、切換快等,因為他們在同一個(gè)地址空間內。
2。資源利用率:線(xiàn)程的資源利用率比較好也是因為他們在同一個(gè)地址空間內。
3。同步問(wèn)題:線(xiàn)程使用公共變量/內存時(shí)需要使用同步機制還是因為他們在同一個(gè)地址空間內。等等
Windows編程的知識點(diǎn),如消息機制,一個(gè)自定義消息如何實(shí)現。
自定義消息共分為3步驟:
1) 自定義消息:#defineWM_MYMSGWM_USER+1
2) 在頭文件中聲明函數:afx_msg voidonMyMsg();
3) 在消息映射中添加對應關(guān)系:
//BEGIN_MESSAGE_MAP(CDefMsgDemoDlg,CDialog)//END_MESSAGE_MAP()
ON_MESSAGE(WM_MYMSG,onMyMsg)
4)定義函數void onMyMsg();
核心即:函數原型、關(guān)聯(lián)消息與消息響應函數的宏、函數實(shí)現。
SNMP協(xié)議
簡(jiǎn)單網(wǎng)絡(luò )管理協(xié)議——應用層協(xié)議.
包括5種數據包:Get-Request;Get-Next-Request;Set-Request, Get-Response; Trap;
RAW套接字
廣泛應用于高級網(wǎng)絡(luò )編程,如SNIFFER、拒絕服務(wù)、IP欺騙都是通過(guò)原始套接字實(shí)現的。
窗口創(chuàng )建的步驟:
1)設計窗口類(lèi)(填充結構體)à2)注冊窗口類(lèi)RegisterClassà3)創(chuàng )建窗口;4)顯示ShowWindow&更新窗口UpdateWindowà4)循環(huán)獲取消息GetMessage(){翻譯(轉換)TranslateMessage消息、處理消息DispathMessage(將消息交付給窗口過(guò)程進(jìn)行處理)}。
當觸發(fā)按鈕以后發(fā)生了什么?
1)比如點(diǎn)擊鼠標左鍵后,操作系統首先會(huì )感知到該事件;2)操作系統將事件其轉化為消息;3)操作系統將消息投遞到對應程序(線(xiàn)程)的消息隊列中;4)應用程序(線(xiàn)程)從消息隊列中通過(guò)GetMessage獲取消息,并通過(guò)DispathMessge將消息交付給操作系統;5)操作系統通過(guò)設計窗口類(lèi)時(shí)指定的窗口過(guò)程對對消息進(jìn)行處理。
你平時(shí)是如何調試程序的?(引申)當一個(gè)程序在自己機器上運行正常,但是在其他機器上程序運行崩潰,如何查找原因?
斷點(diǎn)調試:
值:查看變量(Variables)、表達式、內存(Memory)、寄存器(Register)的值。
進(jìn)程控制:VC允許被中斷的程序繼續運行、單步運行和運行到指定光標處,分別對應快捷鍵F5、F10/F11和CTRL+F10。
其他調試手段:系統提供一系列特殊的函數或者宏來(lái)處理Debug版本相關(guān)的信息TRACE、ASSERT、VERIFy。Ctrl+B打開(kāi)斷點(diǎn)設置。
運行崩潰,如何查找原因? [提示后],可以通過(guò)打印語(yǔ)句來(lái)發(fā)現錯誤!
線(xiàn)程、窗口、消息隊列三者之間的關(guān)系?
MSDN上如是說(shuō):
Thethread to which the message is posted musthave created a message queue,or elsethe call to PostThreadMessagefails.
并提供了如下兩種解決方法:
CallPostThreadMessage.If it fails, call theSleep function and call PostThreadMessageagain. Repeat untilPostThreadMessage succeeds.
【面試官】說(shuō):一個(gè)線(xiàn)程對應一個(gè)或多個(gè)窗口(創(chuàng )建的關(guān)系),同時(shí)一個(gè)線(xiàn)程對應了一個(gè)消息隊列。
【總結如下】:
1.在MFC程序框架里面,CWinThread專(zhuān)門(mén)負責線(xiàn)程創(chuàng )建的,它可以創(chuàng )建用戶(hù)界面線(xiàn)程,及工作者線(xiàn)程。其中用戶(hù)界面線(xiàn)程是包含消息隊列的,而工作者線(xiàn)程是不包含消息隊列的。即【一句話(huà)】:用戶(hù)界面線(xiàn)程對應一個(gè)消息隊列。
2.CWinThread類(lèi)和CWnd類(lèi)都派生自CCmdTarget,而CDialog對話(huà)框類(lèi)、視圖類(lèi)CView都派生自CWnd。
【深入淺出MFC里一句話(huà)】:不是每一個(gè)窗口都產(chǎn)生一個(gè)線(xiàn)程(因為要付出昂貴的線(xiàn)程切換代價(jià))。即,深入理解之:一個(gè)線(xiàn)程可以對應多個(gè)窗口。主線(xiàn)程可以創(chuàng )建出其所要的全部窗口。
【結論】一個(gè)UI線(xiàn)程就1組消息隊列集合,一個(gè)線(xiàn)程可以創(chuàng )建多個(gè)窗口。
OSI7層模型是什么?每層有哪些協(xié)議?
應用層FTP、Telnet、SMTP、HTTP、RIP、NFS、DNS表示層示例:加密,ASCII等會(huì )話(huà)層示例:RPC,SQL等傳輸層示例:TCP,UDP,SPX
網(wǎng)絡(luò )層示例:IP協(xié)議、ICMP協(xié)議、ARP協(xié)議、RARP協(xié)議數據鏈路層示例:ATM,FDDI等物理層示例:Rj45,802.3等
請寫(xiě)出下列服務(wù)使用的默認端口POP3、SMTP、FTP、MSN、DNS、SQL
端口:21服務(wù):FTP
端口:22服務(wù):SSH端口:23服務(wù):Telnet端口:25服務(wù):SMTP端口:80服務(wù):HTTP
端口:110服務(wù):PostOfficeProtocol-Version3(pop3)端口:569服務(wù):MembershipMSN端口1433和1434服務(wù):SQL
DNS協(xié)議運行在UDP之上,使用端口號53
【W(wǎng)indows面試題】相關(guān)文章:
《windows畫(huà)筆》說(shuō)課稿02-17
初識Windows9811-26
認識Windows 98窗口11-26
文員的面試題03-25
公選的面試題06-22
小升初面試題07-30