www.oingaieng.cn-国产成人精品免费视频大全,中文字幕无码不卡免费视频 ,777精品久无码人妻蜜桃,国产一级A毛久久久久一级A看免费视频

    Windows面試題

    時(shí)間:2021-06-09 12:06:36 試題 我要投稿

    Windows面試題

      問(wèn)MainFrm,CDocument和CView類(lèi)之間的關(guān)系,

    Windows面試題

      MainFrm為框架類(lèi),包含應(yīng)用程序外框所包含部分。CView為視圖類(lèi),用于顯示數(shù)據(jù)的空白區(qū)域窗口。

      CDocument為文檔類(lèi)。

      MFC提供了文檔/視類(lèi)結(jié)構(gòu),采用數(shù)據(jù)本身和顯示分離的機(jī)制。其中文檔類(lèi)CDocument用于數(shù)據(jù)的存儲(chǔ)和加載,視類(lèi)CView用于數(shù)據(jù)的顯示與修改。

      Dialog和ModuelDialog不同用法

      1)類(lèi)型不同

      MoudleDialog 模態(tài)對(duì)話框,屬于壟斷對(duì)話框,例如打開(kāi)對(duì)話框,點(diǎn)擊打開(kāi)后不能再執(zhí)行其他操作,會(huì)發(fā)出“嘟嘟嘟”的聲音;

      非模態(tài)對(duì)話框,屬于非壟斷對(duì)話框,利用查找對(duì)話框,點(diǎn)擊查找同時(shí)可以執(zhí)行其他操作;

      即:非模態(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消息系統(tǒng)由哪幾部分構(gòu)成?

      答:由一下3部分組成:

      1.消息隊(duì)列:操作系統(tǒng)負(fù)責(zé)為進(jìn)程維護(hù)一個(gè)消息隊(duì)列,程序運(yùn)行時(shí)不斷從該消息隊(duì)列中獲取消息、處理消息;

      2.消息循環(huán):應(yīng)用程序通過(guò)消息循環(huán)不斷獲取消息、處理消息。

      3.消息處理:消息循環(huán)負(fù)責(zé)將消息派發(fā)到相關(guān)的窗口上使用關(guān)聯(lián)的窗口過(guò)程函數(shù)進(jìn)行處理。

      什么時(shí)候必須重寫(xiě)拷貝構(gòu)造函數(shù)?

      答:當(dāng)構(gòu)造函數(shù)涉及到動(dòng)態(tài)存儲(chǔ)分配空間時(shí),要自己寫(xiě)拷貝構(gòu)造函數(shù),并且要深拷貝。

      什么是消息映射?

      答:消息映射就是讓程序員指定MFC類(lèi)(有消息處理能力的類(lèi))處理某個(gè)消息。然后由程序員完成對(duì)該處理函數(shù)的編寫(xiě),以實(shí)現(xiàn)消息處理功能。

      如何定義和實(shí)現(xiàn)一個(gè)類(lèi)的成員函數(shù)為回調(diào)函數(shù)?

      答:

      所謂的回調(diào)函數(shù),就是預(yù)先在系統(tǒng)的對(duì)函數(shù)進(jìn)行注冊(cè),讓系統(tǒng)知道這個(gè)函數(shù)的存在,以后,當(dāng)某個(gè)事件發(fā)生時(shí),再調(diào)用這個(gè)函數(shù)對(duì)事件進(jìn)行響應(yīng)。

      定義一個(gè)類(lèi)的成員函數(shù)時(shí)在該函數(shù)前加CALLBACK即將其定義為回調(diào)函數(shù),函數(shù)的實(shí)現(xiàn)和普通成員函數(shù)沒(méi)有區(qū)別

      MFC為何使用消息映射表而不用虛函數(shù)?

      這個(gè)問(wèn)題是windows開(kāi)發(fā)面試中最經(jīng)常問(wèn)到得問(wèn)題,也是很有深度的一個(gè)問(wèn)題。

      有兩個(gè)帖子對(duì)該問(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ù)實(shí)現(xiàn)占用內(nèi)存較大

      侯捷在《深入淺出MFC》中說(shuō)微軟使用消息映射機(jī)制而不用虛函數(shù),是因?yàn)樘摵瘮?shù)空間代價(jià)的原因。在當(dāng)前MFC2.0版本發(fā)布的時(shí)候是92年,pc的內(nèi)存才幾M。一個(gè)類(lèi)的虛表的大小就是虛函數(shù)的個(gè)數(shù)*一個(gè)指針的大小。

      假設(shè)windows的通用消息有200個(gè),那么CWnd類(lèi)的虛表就有 200*4個(gè)byte = 800byte,CWnd類(lèi)的所有派生類(lèi)均copy了一份CWnd的虛表vtable,然后自己的虛函數(shù)往后加CWnd類(lèi)的虛表的后頭。

      (至于有人說(shuō)CWnd類(lèi)的派生類(lèi)能共享CWnd的虛表,這個(gè)說(shuō)法不靠譜。因?yàn)榕缮?lèi)自己的虛函數(shù)值加在基類(lèi)的虛函數(shù)表項(xiàng)的最后的。如果CWnd派生了CWndChildA 和 CWndChildB,且兩個(gè)孩子均有自己的虛函數(shù),那么都往CWnd類(lèi)的后面加,豈不是沖突了?)。

      也就是系統(tǒng)內(nèi)所有的CWnd類(lèi)的派生類(lèi)都要承受 800byte的代價(jià)。假設(shè)有100個(gè)類(lèi)派生自CWnd 那么代價(jià)就是800*100byte 也就是 80K。這在當(dāng)時(shí)內(nèi)存很緊張的情況下,已經(jīng)是一種巨大的內(nèi)存消耗了!這里需要注意一點(diǎn):vtable是和類(lèi)綁定在一起的,而不是和類(lèi)對(duì)象(也叫類(lèi)的實(shí)例)綁定在一起的,類(lèi)的實(shí)例僅增加一個(gè)指向該向類(lèi)的vtable的指針而已。也就是說(shuō),如果你有100個(gè)CWnd派生類(lèi),哪怕你生成了100000個(gè)派生類(lèi)的實(shí)例,vtable占用的內(nèi)存也是80K。

      看來(lái)在當(dāng)時(shí)的環(huán)境看來(lái),MFC沒(méi)有采用虛函數(shù),內(nèi)存的.確是一個(gè)考慮。

      但是放在現(xiàn)在看,這點(diǎn)內(nèi)存消耗確實(shí)微不足道的!也就是說(shuō),如果現(xiàn)在重新設(shè)計(jì)MFC的消息機(jī)制,如果不采用虛函數(shù),并非因?yàn)樘摵瘮?shù)的空間浪費(fèi)問(wèn)題。結(jié)論:這個(gè)說(shuō)法靠譜。

      說(shuō)法二:

      消息映射機(jī)制效率比虛函數(shù)效率高。

      因?yàn)槟敲炊嘞D,如果找到其對(duì)應(yīng)的消息處理函數(shù),switch是不可少的!(可以hash?哦哦,的確可能,不過(guò)mfc里面可沒(méi)這么做?mfc里面怎么做的我也不清楚)

      MFC中采用的是消息映射的機(jī)制,而沒(méi)有用虛函數(shù)的機(jī)制,因?yàn)橄⒂泻芏啵绻锰摵瘮?shù)機(jī)制,需要給每個(gè)消息定義一個(gè)虛函數(shù),在分派消息時(shí),程序需要逐一判斷是哪一個(gè)消息,找到合適的分支后再調(diào)用相應(yīng)的虛函數(shù);而通常情況下,應(yīng)用程序不需要響應(yīng)太多的消息,消息映射方式只需要判斷程序想要響應(yīng)的這些消息即可,所以開(kāi)銷(xiāo)小。

      也就是說(shuō),MFC采用了消息映射而沒(méi)有采用虛函數(shù),是從對(duì)消息的響應(yīng)機(jī)制來(lái)考慮的。消息映射,就可以?xún)H實(shí)現(xiàn)自己感興趣的消息,這樣switch時(shí)就可以快一點(diǎn)。

      不過(guò)話又說(shuō)回來(lái),對(duì)一個(gè)非自己感興趣的系統(tǒng)消息來(lái)了以后,就需要遍歷消息網(wǎng),層層的向基類(lèi)查找直到找到對(duì)應(yīng)的消息處理函數(shù)!這本身也很浪費(fèi)時(shí)間!也許這種情況比較少見(jiàn)吧,否則的話,消息映射的消息響應(yīng)時(shí)間并不比虛函數(shù)來(lái)的快!因?yàn)樘摵瘮?shù)最多只需一次遍歷,而且,如果可以采用hash技術(shù),更快!

      如果說(shuō),大多數(shù)消息都是系統(tǒng)的消息,那么消息映射的迭代查找消息函數(shù)的方式并不比虛函數(shù)的switch來(lái)的快!

      PS:這里有一篇對(duì)比消息映射機(jī)制和虛函數(shù)機(jī)制效率的簡(jiǎn)單模擬實(shí)驗(yàn)

      http://blog.csdn.net/hjsunj/archive/2008/01/10/2034314.aspx結(jié)論,該說(shuō)法不靠譜!

      說(shuō)法三:

      為了未來(lái)的可擴(kuò)展性。兼容新的系統(tǒng)級(jí)的消息。

      我不是很清楚MS設(shè)計(jì)消息映射的初衷,但是感覺(jué)它著眼點(diǎn)更側(cè)重于增加新消息很容易,而不是節(jié)省內(nèi)存。

      如果我們使用虛函數(shù)機(jī)制實(shí)現(xiàn),恐怕對(duì)于每個(gè)可能的消息我們都必須在基類(lèi)中定義一個(gè)虛函數(shù),而其首要的困難就是你無(wú)法猜測(cè)未來(lái)會(huì)出現(xiàn)什么消息,也無(wú)法確定需要定義什么樣函數(shù)原型的虛函數(shù)。而使用消息映射,解決這個(gè)問(wèn)題則相對(duì)容易,因?yàn)檫@將由未來(lái)的程序設(shè)計(jì)者決定他們的消息該如何處理。

      對(duì)于系統(tǒng)的新增消息,消息映射支持起來(lái)較方便。虛函數(shù)想要支持就需要改動(dòng)基類(lèi)添加虛函數(shù)。

      對(duì)于自定義的消息,無(wú)論消息映射和虛函數(shù)都可以很好的支持。

      那么虛函數(shù)方式如何支持自定義消息?

      自定義消息是不需要加到基類(lèi)的。基類(lèi)可以加個(gè)虛函數(shù),OnMessage(xxx), 然后有自定義消息的類(lèi)實(shí)現(xiàn)之,用switch轉(zhuǎn)換成相應(yīng)虛函數(shù)調(diào)用,不是自己的消息再傳給基類(lèi)。

      結(jié)論:這個(gè)說(shuō)法靠譜。

      sendMessage與postMessage區(qū)別?

      不同點(diǎn):sendMessage發(fā)送完畢以后需要等待處理完才返回;而postMessage發(fā)送消息后立即返回。

      Do not post the WM_QUIT message usingPostMessage; use thePostQuitMessage function.

      postMessage將消息放置到消息隊(duì)列中,不等待線程處理消息就立即返回。

      sendMessage發(fā)送指定的消息到窗口,并會(huì)調(diào)用窗口過(guò)程,直到窗口過(guò)程處理完畢后才返回。

      TCP的重發(fā)機(jī)制是怎么實(shí)現(xiàn)的?

      1.滑動(dòng)窗口機(jī)制,確立收發(fā)的邊界,能讓發(fā)送方知道已經(jīng)發(fā)送了多少(已確認(rèn))、尚未確認(rèn)的字節(jié)數(shù)、尚待發(fā)送的字節(jié)數(shù);讓接收方知道(已經(jīng)確認(rèn)收到的字節(jié)數(shù))。

      2.選擇重傳,用于對(duì)傳輸出錯(cuò)的序列進(jìn)行重傳。

      TCP和UDP的區(qū)別?

      1)TCP面向連接(三次握手機(jī)制),通信前需要先建立連接;UDP面向無(wú)連接,通信前不需要建立連接;

      2)TCP保障可靠傳輸(按序、無(wú)差錯(cuò)、不丟失、不重復(fù));UDP不保障可靠傳輸,使用最大努力交付;

      3)TCP面向字節(jié)流的傳輸,UDP面向數(shù)據(jù)報(bào)的傳輸。

      TCP為什么不是兩次連接?而是三次握手?

      如果A與B兩個(gè)進(jìn)程通信,如果僅是兩次連接。可能出現(xiàn)的一種情況就是:A發(fā)送完請(qǐng)報(bào)文以后,由于網(wǎng)絡(luò)情況不好,出現(xiàn)了網(wǎng)絡(luò)擁塞,即B延時(shí)很長(zhǎng)時(shí)間后收到報(bào)文,即此時(shí)A將此報(bào)文認(rèn)定為失效的報(bào)文。B收到報(bào)文后,會(huì)向A發(fā)起連接。此時(shí)兩次握手完畢,B會(huì)認(rèn)為已經(jīng)建立了連接可以通信,B會(huì)一直等到A發(fā)送的連接請(qǐng)求,而A對(duì)失效的報(bào)文回復(fù)自然不會(huì)處理。依次會(huì)陷入B忙等的僵局,造成資源的浪費(fèi)。

      connect方法會(huì)阻塞,請(qǐng)問(wèn)有什么方法可以避免其長(zhǎng)時(shí)間阻塞?

      可以考慮采用異步傳輸機(jī)制,同步傳輸與異步傳輸?shù)闹饕獏^(qū)別在于同步傳輸中,如果調(diào)用recvfrom后會(huì)一致阻塞運(yùn)行,從而導(dǎo)致調(diào)用線程暫停運(yùn)行;異步傳輸機(jī)制則不然,會(huì)立即返回。

      網(wǎng)絡(luò)編程中設(shè)計(jì)并發(fā)服務(wù)器,使用多進(jìn)程與多線程,請(qǐng)問(wèn)有什么區(qū)別?

      答案一:

      1,進(jìn)程:子進(jìn)程是父進(jìn)程的復(fù)制品。子進(jìn)程獲得父進(jìn)程數(shù)據(jù)空間、堆和棧的復(fù)制品。

      2,線程:相對(duì)與進(jìn)程而言,線程是一個(gè)更加接近與執(zhí)行體的概念,它可以與同進(jìn)程的其他線程共享數(shù)據(jù),但擁有自己的棧空間,擁有獨(dú)立的執(zhí)行序列。兩者都可以提高程序的并發(fā)度,提高程序運(yùn)行效率和響應(yīng)時(shí)間。

      線程和進(jìn)程在使用上各有優(yōu)缺點(diǎn):線程執(zhí)行開(kāi)銷(xiāo)小,但不利于資源管理和保護(hù);而進(jìn)程正相反。同時(shí),線程適合于在SMP機(jī)器上運(yùn)行,而進(jìn)程則可以跨機(jī)器遷移。

      答案二:

      根本區(qū)別就一點(diǎn):用多進(jìn)程每個(gè)進(jìn)程有自己的地址空間(address space),線程則共享地址空間。所有其它區(qū)別都是由此而來(lái)的:

      1。速度:線程產(chǎn)生的速度快,線程間的通訊快、切換快等,因?yàn)樗麄冊(cè)谕粋(gè)地址空間內(nèi)。

      2。資源利用率:線程的資源利用率比較好也是因?yàn)樗麄冊(cè)谕粋(gè)地址空間內(nèi)。

      3。同步問(wèn)題:線程使用公共變量/內(nèi)存時(shí)需要使用同步機(jī)制還是因?yàn)樗麄冊(cè)谕粋(gè)地址空間內(nèi)。等等

      Windows編程的知識(shí)點(diǎn),如消息機(jī)制,一個(gè)自定義消息如何實(shí)現(xiàn)。

      自定義消息共分為3步驟:

      1) 自定義消息:#defineWM_MYMSGWM_USER+1

      2) 在頭文件中聲明函數(shù):afx_msg voidonMyMsg();

      3) 在消息映射中添加對(duì)應(yīng)關(guān)系:

      //BEGIN_MESSAGE_MAP(CDefMsgDemoDlg,CDialog)//END_MESSAGE_MAP()

      ON_MESSAGE(WM_MYMSG,onMyMsg)

      4)定義函數(shù)void onMyMsg();

      核心即:函數(shù)原型、關(guān)聯(lián)消息與消息響應(yīng)函數(shù)的宏、函數(shù)實(shí)現(xiàn)。

      SNMP協(xié)議

      簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議——應(yīng)用層協(xié)議.

      包括5種數(shù)據(jù)包:Get-Request;Get-Next-Request;Set-Request, Get-Response; Trap;

      RAW套接字

      廣泛應(yīng)用于高級(jí)網(wǎng)絡(luò)編程,如SNIFFER、拒絕服務(wù)、IP欺騙都是通過(guò)原始套接字實(shí)現(xiàn)的。

      窗口創(chuàng)建的步驟:

      1)設(shè)計(jì)窗口類(lèi)(填充結(jié)構(gòu)體)à2)注冊(cè)窗口類(lèi)RegisterClassà3)創(chuàng)建窗口;4)顯示ShowWindow&更新窗口UpdateWindowà4)循環(huán)獲取消息GetMessage(){翻譯(轉(zhuǎn)換)TranslateMessage消息、處理消息DispathMessage(將消息交付給窗口過(guò)程進(jìn)行處理)}。

      當(dāng)觸發(fā)按鈕以后發(fā)生了什么?

      1)比如點(diǎn)擊鼠標(biāo)左鍵后,操作系統(tǒng)首先會(huì)感知到該事件;2)操作系統(tǒng)將事件其轉(zhuǎn)化為消息;3)操作系統(tǒng)將消息投遞到對(duì)應(yīng)程序(線程)的消息隊(duì)列中;4)應(yīng)用程序(線程)從消息隊(duì)列中通過(guò)GetMessage獲取消息,并通過(guò)DispathMessge將消息交付給操作系統(tǒng);5)操作系統(tǒng)通過(guò)設(shè)計(jì)窗口類(lèi)時(shí)指定的窗口過(guò)程對(duì)對(duì)消息進(jìn)行處理。

      你平時(shí)是如何調(diào)試程序的?(引申)當(dāng)一個(gè)程序在自己機(jī)器上運(yùn)行正常,但是在其他機(jī)器上程序運(yùn)行崩潰,如何查找原因?

      斷點(diǎn)調(diào)試:

      值:查看變量(Variables)、表達(dá)式、內(nèi)存(Memory)、寄存器(Register)的值。

      進(jìn)程控制:VC允許被中斷的程序繼續(xù)運(yùn)行、單步運(yùn)行和運(yùn)行到指定光標(biāo)處,分別對(duì)應(yīng)快捷鍵F5、F10/F11和CTRL+F10。

      其他調(diào)試手段:系統(tǒng)提供一系列特殊的函數(shù)或者宏來(lái)處理Debug版本相關(guān)的信息TRACE、ASSERT、VERIFy。Ctrl+B打開(kāi)斷點(diǎn)設(shè)置。

      運(yùn)行崩潰,如何查找原因? [提示后],可以通過(guò)打印語(yǔ)句來(lái)發(fā)現(xiàn)錯(cuò)誤!

      線程、窗口、消息隊(duì)列三者之間的關(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è)線程對(duì)應(yīng)一個(gè)或多個(gè)窗口(創(chuàng)建的關(guān)系),同時(shí)一個(gè)線程對(duì)應(yīng)了一個(gè)消息隊(duì)列。

      【總結(jié)如下】:

      1.在MFC程序框架里面,CWinThread專(zhuān)門(mén)負(fù)責(zé)線程創(chuàng)建的,它可以創(chuàng)建用戶(hù)界面線程,及工作者線程。其中用戶(hù)界面線程是包含消息隊(duì)列的,而工作者線程是不包含消息隊(duì)列的。即【一句話】:用戶(hù)界面線程對(duì)應(yīng)一個(gè)消息隊(duì)列。

      2.CWinThread類(lèi)和CWnd類(lèi)都派生自CCmdTarget,而CDialog對(duì)話框類(lèi)、視圖類(lèi)CView都派生自CWnd。

      【深入淺出MFC里一句話】:不是每一個(gè)窗口都產(chǎn)生一個(gè)線程(因?yàn)橐冻霭嘿F的線程切換代價(jià))。即,深入理解之:一個(gè)線程可以對(duì)應(yīng)多個(gè)窗口。主線程可以創(chuàng)建出其所要的全部窗口。

      【結(jié)論】一個(gè)UI線程就1組消息隊(duì)列集合,一個(gè)線程可以創(chuàng)建多個(gè)窗口。

      OSI7層模型是什么?每層有哪些協(xié)議?

      應(yīng)用層FTP、Telnet、SMTP、HTTP、RIP、NFS、DNS表示層示例:加密,ASCII等會(huì)話層示例:RPC,SQL等傳輸層示例:TCP,UDP,SPX

      網(wǎng)絡(luò)層示例:IP協(xié)議、ICMP協(xié)議、ARP協(xié)議、RARP協(xié)議數(shù)據(jù)鏈路層示例:ATM,F(xiàn)DDI等物理層示例:Rj45,802.3等

      請(qǐng)寫(xiě)出下列服務(wù)使用的默認(rèn)端口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é)議運(yùn)行在UDP之上,使用端口號(hào)53

    【W(wǎng)indows面試題】相關(guān)文章:

    《windows畫(huà)筆》說(shuō)課稿02-17

    windows畫(huà)筆的說(shuō)課稿09-08

    windows畫(huà)筆的說(shuō)課稿11-27

    初識(shí)Windows9811-26

    認(rèn)識(shí)Windows 98窗口11-26

    文員的面試題03-25

    公選的面試題06-22

    小升初面試題07-30

    《初識(shí)Windows xp》優(yōu)秀教案06-29

    乱人伦人成品精国产在线| 免费国产人成18在线观看| 日本不卡一区| 国产亚洲欧美日韩三区电影| 亚洲∧v久久久无码精品| 无码精品一区二区三区东京热| 无码专区国产精品亚洲| 亚洲精品国产肉丝袜久久| 亚洲精品国产黑色丝袜美腿| 密桃亚洲乱码国产乱码精品精|