浙江大華筆試_第1頁
浙江大華筆試_第2頁
浙江大華筆試_第3頁
浙江大華筆試_第4頁
浙江大華筆試_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、浙江大華筆試導(dǎo)讀:就愛閱讀網(wǎng)友為您分享以下“浙江大華筆試,資訊,希望對您有所幫助,感謝您對的支持!首地址距離下一行首地址的偏移量。圖像元素值為0-255, hist返回圖像直方圖。int ij; /直方圖數(shù)組清0 for(i=0;i256;i+) m_histArrayi=O; 每行像素所占字節(jié)數(shù) intlineByte=(m_imgWidthm_nBitCount/8+3)/44; 中 間變 量int temp; 統(tǒng)計(jì)灰度直方圖for (i=0 ;im_imgHeight ;i+) for(j=0 ;j m_imgWidth ;j+) temp=*(m_pImgData+ilineByte+

2、j); m_hist Array temp+;三、問答題1.為何會出現(xiàn)優(yōu)先級反轉(zhuǎn),如何解決?答:高優(yōu)先級任務(wù)需要等待低優(yōu)先級任務(wù)釋放資源,而低優(yōu) 先級任務(wù)又正在等待中等優(yōu)先級任務(wù)的現(xiàn)象叫做優(yōu)先級反 轉(zhuǎn)。兩種經(jīng)典的防止反轉(zhuǎn)的方法: 優(yōu)先級繼承策略(Priority inheritance):繼承現(xiàn)有被阻塞任務(wù) 的最高優(yōu)先級作為其優(yōu)先級,任務(wù)退出臨界區(qū),恢復(fù)初始優(yōu) 先級。優(yōu)先級天花板策略(Priority ceilings):優(yōu)先級天花板是指將 申請(占有)某資源的任務(wù)的優(yōu)先級提升到可能訪問該資源 的所有任務(wù)中最高優(yōu)先級任務(wù)的優(yōu)先級(這個(gè)優(yōu)先級稱為該 資源的優(yōu)先級天花板) 優(yōu)先級繼承策略對任務(wù)執(zhí)行

3、流程的影響相對較小,因?yàn)橹挥?當(dāng)高優(yōu)先級任務(wù)申請已被低優(yōu)先級任務(wù)占有的臨界資源這一事實(shí)發(fā)生時(shí),才抬升低優(yōu)先級任務(wù)的優(yōu)先級。而天花板策略是誰占有就直接升到最高。2. winsock建立連接的實(shí)現(xiàn)步驟。服務(wù)器端:socket()建立套接字,綁定bind()并監(jiān)聽listen。 用accept()等待客戶端連接.客戶端:socket()建立套接字,連接connect()服務(wù)器,連接上 后使用send()和recv(),在套接字上讀寫數(shù)據(jù),直至數(shù)據(jù)交 換完畢,closesocket()關(guān)閉套按字.服務(wù)器端:accept()發(fā)現(xiàn)有客戶端連接,建立一個(gè)新的套接字, 自身重新開始等待連接.該新產(chǎn)生的套接字使

4、用send()和recv()讀寫數(shù)據(jù),直至數(shù)據(jù)交換完畢,closesocket()關(guān)閉套接 字?jǐn)U展知識請問什么叫中斷源,中斷請求,中斷標(biāo)志字,中斷屏蔽字, 中斷響應(yīng),中斷服務(wù)程序,中斷嵌套?中斷:處理器一種工作狀態(tài)的描述,因?yàn)樘幚砥髋c很多外部 電路相連并負(fù)責(zé)處理外部電路送來的各種信息(處在協(xié)同工作狀態(tài)),如果遇有(外部電路送來)“急件”需要優(yōu)先處理, 處理器則須先停下“自己手頭的工作”先去處理“急件”,這種先停下“自己手頭的工作”去處理“急件”的過程,即為中斷源:即發(fā)出“急件”的地點(diǎn)(電路)。中斷請求:“緊急事件”須向處理器提出申請(發(fā)一個(gè)電脈沖信號),要求“中斷”,即要求處理器先停下“自己手

5、頭的工作”先去處理“我的急件”,這一“申請”過程,稱中斷請求。中斷標(biāo)志字:處理器內(nèi)部有一個(gè)寄存器,該寄存器存放的“二 進(jìn)制信息”是專門用來描述中斷狀態(tài)的(即:記載是否已經(jīng) 發(fā)生了中斷),這組“二進(jìn)制信息,被稱為中斷標(biāo)志字。中斷 屏蔽字:是描述“中斷屏蔽”狀態(tài)的一組“二進(jìn)制信息叫 中 斷響應(yīng):處理器接受“中斷請求,并“同意”中斷的過程(這時(shí) 須把“當(dāng)前現(xiàn)場”的狀態(tài)信息壓入堆棧),稱中斷響應(yīng)。中斷服務(wù)程序:處理器處理“急件”,可理解為是一種服務(wù), 是通過執(zhí)行事先編好的某個(gè)特定的程序來完成的,這種處理 “急件”的程序被稱為中斷服務(wù)程序O 中斷嵌套:一個(gè)中斷可以被另一個(gè)更急的“急件”所中斷。也 就是處

6、理器正在執(zhí)行著中斷,又接受了更急的另一件“急 件”,這種“急件”“加塞”的過程被稱為中斷嵌套.參考 資料:有關(guān)計(jì)算機(jī)原理方面的資料 2. WinSock 編程 使用WinSock API的編程,應(yīng)該了解TCP/IP的基礎(chǔ)知識。雖然你可以直接使用WinSock API來寫網(wǎng)絡(luò)應(yīng)用程序,但 是,要寫出優(yōu)秀的網(wǎng)絡(luò)應(yīng)用程序,還是必須對TCP/IP協(xié)議 有一些了解的。1. TCP/IP協(xié)議與WinSock網(wǎng)絡(luò)編程接口的關(guān)系WinSock并不是一種網(wǎng)絡(luò)協(xié)議,它只是一個(gè)網(wǎng)絡(luò)編程接口, 也就是說,它不是協(xié)議,但是它可以訪問很多種網(wǎng)絡(luò)協(xié)議, 你可以把他當(dāng)作一些協(xié)議的封裝。現(xiàn)在的WinSock已經(jīng)基 本上實(shí)現(xiàn)了與

7、協(xié)議無關(guān)。你可以使用WinSock來調(diào)用多種 協(xié)議的功能。那么,WinSock和TCP/IP協(xié)議到底是什么關(guān) 系呢?實(shí)際上,WinSock就是TCP/IP協(xié)議的一種封裝,你 可以通過調(diào)用WinSock的接口函數(shù)來調(diào)用TCP/IP的各種功能.例如我想用TCP/IP協(xié)議發(fā)送數(shù)據(jù),你就可以使用WinSock的接口函數(shù)Send()來調(diào)用TCP/IP的發(fā)送數(shù)據(jù)功 能,至于具體怎么發(fā)送數(shù)據(jù),WinSock已經(jīng)幫你封裝好了 這種功能。2、TCP/IP協(xié)議介紹TCP/IP協(xié)議包含的范圍非常的廣,他是一種四層協(xié)議,包 含了各種硬件、軟件需求的定義。TCP/IP協(xié)議確切的說法 應(yīng)該是 TCP/UDP/IP 協(xié)議。

8、UDP 協(xié)議(User Datagram Protocol用戶數(shù)據(jù)報(bào)協(xié)議),是一種保護(hù)消息邊界的,不保 障可靠數(shù)據(jù)的傳輸。TCP協(xié)議(Transmission ControlProtocol傳輸控制協(xié)議),是一種流傳輸?shù)膮f(xié)議。他提供可 靠的、有序的、雙向的、面向連接的傳輸。保護(hù)消息邊界,就是指傳輸協(xié)議把數(shù)據(jù)當(dāng)作一條獨(dú)立的消息 在網(wǎng)上傳輸,接收端只能接收獨(dú)立的消息。也就是說存在保 護(hù)消息邊界,接收端一次只能接收發(fā)送端發(fā)出的一個(gè)數(shù)據(jù) 包。而面向流則是指無保護(hù)消息保護(hù)邊界的,如果發(fā)送端連 續(xù)發(fā)送數(shù)據(jù),接收端有可能在一次接收動作中,會接收兩個(gè) 或者更多的數(shù)據(jù)包。舉例來說,假如,我們連續(xù)發(fā)送三個(gè)數(shù)據(jù)包,

9、大小分別是2k、 4k、8k,這三個(gè)數(shù)據(jù)包都已經(jīng)到達(dá)了接收端的網(wǎng)絡(luò)堆棧中, 如果使用UDP協(xié)議,不管我們使用多大的接收緩沖區(qū)去接 收數(shù)據(jù),我們必須有三次接收動作,才能夠把所有的數(shù)據(jù)包 接收完。而使用TCP協(xié)議,我們只要把接收的緩沖區(qū)大小 設(shè)置在14k以上,我們就能夠一次把所有的數(shù)據(jù)包接收下 來,只需要有一次接收動作。這就是因?yàn)閁DP協(xié)議的保護(hù)消息邊界使得每一個(gè)消息都是 獨(dú)立的。而流傳輸,卻把數(shù)據(jù)當(dāng)作一串?dāng)?shù)據(jù)流,它不認(rèn)為數(shù) 據(jù)是一個(gè)一個(gè)的消息。所以有很多人在使用TCP協(xié)議通訊 的時(shí)候,并不清楚TCP是基于流的傳輸,當(dāng)連續(xù)發(fā)送數(shù)據(jù) 的時(shí)候,他們時(shí)常會認(rèn)識TCP會丟包。其實(shí)不然,因?yàn)楫?dāng) 他們使用的緩

10、沖區(qū)足夠大時(shí),他們有可能會一次接收到兩個(gè) 甚至更 多的數(shù)據(jù)包,而很多人往往會忽視這一點(diǎn),只解析檢查了第 一個(gè)數(shù)據(jù)包,而已經(jīng)接收的其他據(jù)包卻被忽略了。3. WinSock編程簡單流程WinSock編程分為服務(wù)器端和客戶端兩部分,TCP服務(wù)器 端的大體流程如下:對于任何基于WinSock的編程首先必須要初始化WinSockDLL 庫。int WSAStarup( WORDw VersionRequested,LP W SAD ATAlpWsAData ) wVersionRequested是我們要求使用的WinSock的版本。 調(diào)用這個(gè)接口函數(shù)可以初始化WinSock ,然后必須創(chuàng)建一 個(gè)套接字(

11、Socket) oSOCKET Socket(int af9int type,int protocol);套接字可以說 是WinSock通訊的核心。WinSock通訊的所有數(shù)據(jù)傳輸, 都是通過套接字來完成的,套接字包含了兩個(gè)信息,一個(gè)是 IP地址,一個(gè)是Port端口號,使用這兩個(gè)信息,就可以確 定網(wǎng)絡(luò)中的任何一個(gè)通訊節(jié)點(diǎn)。當(dāng)調(diào)用了 SocketO接口函數(shù)創(chuàng)建了一個(gè)套接字后,必須把套 接字與你需要進(jìn)行通訊的地址建立聯(lián)系,可以通過綁定函數(shù) 來實(shí)現(xiàn)這種聯(lián)系。int bind(SOCKET s,const struct sockaddr FAR* name,int namelen) ; struct

12、sockaddr_in short sin_family ; u_short sin_prot; struct in_addr sin_addr ; char sin_sero8 ; 就包含了需要建立連接的本地的地址,包括地址族、IP和 口信息。sin_family字段必須把它設(shè)為AFJNET,這是告訴 WinSock使用的是IP地址族。sin_prot就是要用來通訊的 端口號osin_addr就是要用來通訊的IP地址信息。在這里, 必須還得提一下有關(guān),大頭(big-endian)9小頭 (little-endian),。因?yàn)楦鞣N不同的計(jì)算機(jī)處理數(shù)據(jù)時(shí)的方法是 不一樣的,Intel X86處理

13、器上是用,小頭,形式來表示多字 節(jié)的編號,就是把低字節(jié)放在前面,把高字節(jié)放在后面,而 互聯(lián)網(wǎng)標(biāo)準(zhǔn)卻正好相反,所以,必須把主機(jī)字節(jié)轉(zhuǎn)換成網(wǎng)絡(luò) 字節(jié)的順序。WinSock API提供了幾個(gè)函數(shù)。把主機(jī)字節(jié) 轉(zhuǎn)化成網(wǎng)絡(luò)字節(jié)的函數(shù);u_long htonl(u_long hostlong); u_short htons(u_short hostshort);把網(wǎng)絡(luò)字節(jié)轉(zhuǎn)化成主機(jī)字節(jié)的函數(shù);u_long ntohl(uong netlong); u_short ntohs(u_short netshort);這樣,設(shè)置IP地址和port端口時(shí),就必須把主機(jī)字節(jié)轉(zhuǎn)化 成網(wǎng)絡(luò)字節(jié)后,才能用Bind()函數(shù)來

14、綁定套接字和地址。當(dāng) 綁定完成之后,服務(wù)器端必須建立一個(gè)監(jiān)聽的隊(duì)列來接收客 戶端的連接請求。int listen(SOCKET s,int backlog);這個(gè)函數(shù)可以把套接字轉(zhuǎn)成監(jiān)聽模式。如果客戶端有了連接請求,我們還必須使int accept(SOCKET s,struct sockaddr FAR來 addrjnt FAR* addrlen);來接受客戶端的請求?,F(xiàn)在基本上已經(jīng)完成了一個(gè)服務(wù)器的建立,而客戶端的建立 的流程則是初始化WinSock ,然后創(chuàng)建Socket套接字,再 使用 int connect(SOCKET s,const struct sockaddr FAR* na

15、me9int namelen);來連接服務(wù)端。F面是一個(gè)最簡單的創(chuàng)建服務(wù)器端和客戶端的例子:服務(wù)器端的創(chuàng)建:WSADATA wsd; SOCKET sListen; SOCKET sclient; UINT port = 800; int iAddrSize;struct sockaddr_in local,client; WSAStartup( 0x11,sListen&wsd );=Socket ( AF_INET , SOCK_STREAMIPPOTO_IP);local.sin_family = AF_INET;local.sin_addr = htonl( INADDR_ANY );

16、 local.sin_port = htons( port);bind( sListen , (struct sockaddr*)&local,sizeof( local ); listen( sListen , 5 );sClient = accept( sListen,(struct sockaddr*)&client, &iAddrSize );客戶端的創(chuàng)建: WSADATA wsd; SOCKET sClient; UINT port = 800;char szlp = “127.0.0.1”; int iAddrSize;struct sockaddr_in server; WSAS

17、tartup( 0x11, &wsd );sClient = Socket(AF_INET , SOCK_STREAM ,IPPOTOJP);serversin_family= AF_INET; servensin_addr =inet_addr( szlp ); servereSin_port = htons( port);connect( sClient, (structsockaddr*)&server,sizeof( server);當(dāng)服務(wù)器端和客戶端建立連接以后,無論是客戶端,還是服 務(wù)器端都可以使用int send( SOCKET s,const char FAR索 buf,int

18、 Ien9int flags); int recv( SOCKET s,char FAR* buf,int lenjnt flags);函數(shù) 來接收和發(fā)送數(shù)據(jù),因?yàn)?,TCP連接是雙向的。當(dāng)要關(guān)閉通訊連結(jié)的時(shí)候,任何一方都可以調(diào)用int shutdown(SOCKET s,int how);來關(guān)閉套接字的指定功能, 再調(diào)用 int closeSocket(SOCKET s);來關(guān)閉套接字句柄,這樣一個(gè)通訊過程就算完成了。注意:上面的代碼沒有任何檢査函數(shù)返回值,如果你作網(wǎng)絡(luò)編程就一定要檢查任何一個(gè)WinSock API函數(shù)的調(diào)用結(jié)果,因?yàn)楹芏鄷r(shí)候函數(shù)調(diào)用并不一定成功。上面介紹的函數(shù),返回值類型是i

19、nt的話,如果函數(shù)調(diào)用失敗的話,返回的都是SOCKET_ERRORo4. WinSock編程的模型上面介紹的僅僅是最簡單的WinSock通訊的方法,而實(shí)際 中很多網(wǎng)絡(luò)通訊的卻很多難以解決的意外情況。例如,WinSock提供了兩種套接字模式:鎖定和非鎖定。當(dāng)使用鎖定套接字的時(shí)候,使用的很多函數(shù),例如accpet、 send、recv等等,如果沒有數(shù)據(jù)需要處理,這些函數(shù)都不 會 返回,也就是說,你的應(yīng)用程序會阻塞在那些函數(shù)的調(diào)用處。而如果使用非阻塞模式,調(diào)用這些函數(shù),不管你有沒有數(shù)據(jù) 到達(dá),他都會返回。所以有可能我們在非阻塞模式里,調(diào)用 這些函數(shù)大部分的情況下會返回失敗,所以就需要我們來處 理很多

20、的意外出錯。這顯然不是我們想要看到的情況。我們可以采用WinSock 的通訊模型來避免這些情況的發(fā)生。WinSock提供了五種套接字I/O模型來解決這些問題。他們 分別是select(選擇),WSAAsyncSelect(異步選擇), WSAEventSelect (事件選擇,overlapped(重疊), completion port(完成端口)。這里詳細(xì)介紹一下select , WSAASyncSelect兩種模型。 Select模型是最常見的I/O模型。使用 int select( int nfds , fd_set FAR* readfds , fd_set FAR* writefd

21、s,fd_set FAR* exceptfds,const struct timeval FAR * timeout);函數(shù)來檢查你要調(diào)用的Socket套接字是否已經(jīng)有了需要處理的數(shù)據(jù)。select包含三個(gè)Socket隊(duì)列,分別代表:readfds ,檢查可讀性,writefds ,檢查可寫性,exceptfds , 例外數(shù)據(jù)。timeout是select函數(shù)的返回時(shí)間。例如,想要檢査一個(gè)套接字是否有數(shù)據(jù)需要接收,我們可以 把套接字句柄加入可讀性檢查隊(duì)列中,然后調(diào)用select ,如 果,該套接字沒有數(shù)據(jù)需要接收,select函數(shù)會把該套接字MB從可讀性檢查隊(duì)列中刪除掉,所以我們只要檢査該套接

22、字句 柄是否還存在于可讀性隊(duì)列中,就可以知道到底有沒有數(shù)據(jù) 需要接收了。WinSock提供了 一些宏用來操作套接字隊(duì)列fd_seto11FD_CLR( s盧set)從隊(duì)列set刪除句柄s。FD_ISSET( s,祟set)檢查句柄s是否存在與隊(duì)列set中。FD_SET( s盧set )把句柄s添加到隊(duì)列set中。FD_ZERO(水set )把set隊(duì)列初始化成空隊(duì)列。WSAAsyncSelect(異步選擇)模型:WSAASyncSelect 模型 就是把一個(gè)窗口和套接字句柄建立起連接,套接字的網(wǎng)絡(luò)事件發(fā)生時(shí)時(shí)候,就會把某個(gè)消息發(fā)送到窗口,然后可以在窗口的消息響應(yīng)函數(shù)中處理數(shù)據(jù)的接收和發(fā)送。WS

23、AAsyncSelect( SOCKET s, HWND hWnd,unsigned intwMsg Jong lEvent);這個(gè)函數(shù)可以把套接字句柄和窗口建立起連接,wMsg是我們必須自定義的一個(gè)消息。lEvent就是制定的網(wǎng)絡(luò)事件。包括FD_READ,FD_WRITE,F(xiàn)D_ACCEPT,FD_CONNECT,F(xiàn)D_CLOSE。 幾個(gè)事件。例如,需要接收 FD_READ , FD_WRITE,F(xiàn)D_CLOSE 的網(wǎng) 絡(luò)事件??梢哉{(diào)用WSAAsyncSelect( s , hWnd , WM_SOCKET,F(xiàn)D_READ IFD_WRITE I FD_CLOSE );這樣,當(dāng)有 FD_RE

24、AD , FD_WRITE 或者 FD_CLOSE網(wǎng)絡(luò)事件時(shí),窗口 hWnd將會收到 WM_SOCKET消息,消息參數(shù)的IParam標(biāo)志了是什么事件發(fā)生,MFC的CSocket 類,就是使用這個(gè)模型。12浙江大華浙大2010年校園招聘筆試試題簡答題:1. 軟件開發(fā)的生命周期和模式 答:無論是瀑布開發(fā)模式還是螺旋開發(fā)模式軟件開發(fā)的周 期大約都是問題的定義及規(guī)劃 需求分析軟件設(shè)計(jì)程序編碼軟件測試運(yùn)行維護(hù) 如果是迭代方法開發(fā) 那么軟件的生命周期應(yīng)該分為開端(inception )、評價(jià)(elabration )、構(gòu)建(construction )和產(chǎn)品化(transaction). 2.多進(jìn)程和多線程的優(yōu)缺點(diǎn)多線程的優(yōu)點(diǎn):無需跨進(jìn)程邊界; 程序邏輯和控制方式簡單;所有線程可以直接共享內(nèi)存和變量等;線程方式消耗的總資源比進(jìn)程方式少;多線程缺點(diǎn): 每個(gè)線程與主程序共用地址空間,受限于2GB地址空間; 線程之間的同步和加鎖控制比較麻煩;一個(gè)線程的崩潰可 能影響到整個(gè)程序的穩(wěn)定性;線程能夠提高的總性能有限,而且線程多了之后,線程本身 的調(diào)度也是一個(gè)麻煩事兒,需要消耗較多的CPU多進(jìn)程優(yōu) 點(diǎn): 每個(gè)進(jìn)程互相獨(dú)立,不影響主程序的穩(wěn)定性,子進(jìn)程崩潰沒 關(guān)系;通過增加CPU ,就可以容易擴(kuò)充性能;可以盡量減少線程加

溫馨提示

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

評論

0/150

提交評論