浙江大华笔试_第1页
浙江大华笔试_第2页
浙江大华笔试_第3页
浙江大华笔试_第4页
浙江大华笔试_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、浙江大华笔试导读:就爱阅读网友为您分享以下“浙江大华笔试,资讯,希望对您有所帮助,感谢您对的支持!首地址距离下一行首地址的偏移量。图像元素值为0-255, hist返回图像直方图。int ij; /直方图数组清0 for(i=0;i256;i+) m_histArrayi=O; 每行像素所占字节数 intlineByte=(m_imgWidthm_nBitCount/8+3)/44; 中 间变 量int temp; 统计灰度直方图for (i=0 ;im_imgHeight ;i+) for(j=0 ;j m_imgWidth ;j+) temp=*(m_pImgData+ilineByte+

2、j); m_hist Array temp+;三、问答题1.为何会出现优先级反转,如何解决?答:高优先级任务需要等待低优先级任务释放资源,而低优 先级任务又正在等待中等优先级任务的现象叫做优先级反 转。两种经典的防止反转的方法: 优先级继承策略(Priority inheritance):继承现有被阻塞任务 的最高优先级作为其优先级,任务退出临界区,恢复初始优 先级。优先级天花板策略(Priority ceilings):优先级天花板是指将 申请(占有)某资源的任务的优先级提升到可能访问该资源 的所有任务中最高优先级任务的优先级(这个优先级称为该 资源的优先级天花板) 优先级继承策略对任务执行

3、流程的影响相对较小,因为只有 当高优先级任务申请已被低优先级任务占有的临界资源这一事实发生时,才抬升低优先级任务的优先级。而天花板策略是谁占有就直接升到最高。2. winsock建立连接的实现步骤。服务器端:socket()建立套接字,绑定bind()并监听listen。 用accept()等待客户端连接.客户端:socket()建立套接字,连接connect()服务器,连接上 后使用send()和recv(),在套接字上读写数据,直至数据交 换完毕,closesocket()关闭套按字.服务器端:accept()发现有客户端连接,建立一个新的套接字, 自身重新开始等待连接.该新产生的套接字使

4、用send()和recv()读写数据,直至数据交换完毕,closesocket()关闭套接 字扩展知识请问什么叫中断源,中断请求,中断标志字,中断屏蔽字, 中断响应,中断服务程序,中断嵌套?中断:处理器一种工作状态的描述,因为处理器与很多外部 电路相连并负责处理外部电路送来的各种信息(处在协同工作状态),如果遇有(外部电路送来)“急件”需要优先处理, 处理器则须先停下“自己手头的工作”先去处理“急件”,这种先停下“自己手头的工作”去处理“急件”的过程,即为中断源:即发出“急件”的地点(电路)。中断请求:“紧急事件”须向处理器提出申请(发一个电脉冲信号),要求“中断”,即要求处理器先停下“自己手

5、头的工作”先去处理“我的急件”,这一“申请”过程,称中断请求。中断标志字:处理器内部有一个寄存器,该寄存器存放的“二 进制信息”是专门用来描述中断状态的(即:记载是否已经 发生了中断),这组“二进制信息,被称为中断标志字。中断 屏蔽字:是描述“中断屏蔽”状态的一组“二进制信息叫 中 断响应:处理器接受“中断请求,并“同意”中断的过程(这时 须把“当前现场”的状态信息压入堆栈),称中断响应。中断服务程序:处理器处理“急件”,可理解为是一种服务, 是通过执行事先编好的某个特定的程序来完成的,这种处理 “急件”的程序被称为中断服务程序O 中断嵌套:一个中断可以被另一个更急的“急件”所中断。也 就是处

6、理器正在执行着中断,又接受了更急的另一件“急 件”,这种“急件”“加塞”的过程被称为中断嵌套.参考 资料:有关计算机原理方面的资料 2. WinSock 编程 使用WinSock API的编程,应该了解TCP/IP的基础知识。虽然你可以直接使用WinSock API来写网络应用程序,但 是,要写出优秀的网络应用程序,还是必须对TCP/IP协议 有一些了解的。1. TCP/IP协议与WinSock网络编程接口的关系WinSock并不是一种网络协议,它只是一个网络编程接口, 也就是说,它不是协议,但是它可以访问很多种网络协议, 你可以把他当作一些协议的封装。现在的WinSock已经基 本上实现了与

7、协议无关。你可以使用WinSock来调用多种 协议的功能。那么,WinSock和TCP/IP协议到底是什么关 系呢?实际上,WinSock就是TCP/IP协议的一种封装,你 可以通过调用WinSock的接口函数来调用TCP/IP的各种功能.例如我想用TCP/IP协议发送数据,你就可以使用WinSock的接口函数Send()来调用TCP/IP的发送数据功 能,至于具体怎么发送数据,WinSock已经帮你封装好了 这种功能。2、TCP/IP协议介绍TCP/IP协议包含的范围非常的广,他是一种四层协议,包 含了各种硬件、软件需求的定义。TCP/IP协议确切的说法 应该是 TCP/UDP/IP 协议。

8、UDP 协议(User Datagram Protocol用户数据报协议),是一种保护消息边界的,不保 障可靠数据的传输。TCP协议(Transmission ControlProtocol传输控制协议),是一种流传输的协议。他提供可 靠的、有序的、双向的、面向连接的传输。保护消息边界,就是指传输协议把数据当作一条独立的消息 在网上传输,接收端只能接收独立的消息。也就是说存在保 护消息边界,接收端一次只能接收发送端发出的一个数据 包。而面向流则是指无保护消息保护边界的,如果发送端连 续发送数据,接收端有可能在一次接收动作中,会接收两个 或者更多的数据包。举例来说,假如,我们连续发送三个数据包,

9、大小分别是2k、 4k、8k,这三个数据包都已经到达了接收端的网络堆栈中, 如果使用UDP协议,不管我们使用多大的接收缓冲区去接 收数据,我们必须有三次接收动作,才能够把所有的数据包 接收完。而使用TCP协议,我们只要把接收的缓冲区大小 设置在14k以上,我们就能够一次把所有的数据包接收下 来,只需要有一次接收动作。这就是因为UDP协议的保护消息边界使得每一个消息都是 独立的。而流传输,却把数据当作一串数据流,它不认为数 据是一个一个的消息。所以有很多人在使用TCP协议通讯 的时候,并不清楚TCP是基于流的传输,当连续发送数据 的时候,他们时常会认识TCP会丢包。其实不然,因为当 他们使用的缓

10、冲区足够大时,他们有可能会一次接收到两个 甚至更 多的数据包,而很多人往往会忽视这一点,只解析检查了第 一个数据包,而已经接收的其他据包却被忽略了。3. WinSock编程简单流程WinSock编程分为服务器端和客户端两部分,TCP服务器 端的大体流程如下:对于任何基于WinSock的编程首先必须要初始化WinSockDLL 库。int WSAStarup( WORDw VersionRequested,LP W SAD ATAlpWsAData ) wVersionRequested是我们要求使用的WinSock的版本。 调用这个接口函数可以初始化WinSock ,然后必须创建一 个套接字(

11、Socket) oSOCKET Socket(int af9int type,int protocol);套接字可以说 是WinSock通讯的核心。WinSock通讯的所有数据传输, 都是通过套接字来完成的,套接字包含了两个信息,一个是 IP地址,一个是Port端口号,使用这两个信息,就可以确 定网络中的任何一个通讯节点。当调用了 SocketO接口函数创建了一个套接字后,必须把套 接字与你需要进行通讯的地址建立联系,可以通过绑定函数 来实现这种联系。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字段必须把它设为AFJNET,这是告诉 WinSock使用的是IP地址族。sin_prot就是要用来通讯的 端口号osin_addr就是要用来通讯的IP地址信息。在这里, 必须还得提一下有关,大头(big-endian)9小头 (little-endian),。因为各种不同的计算机处理数据时的方法是 不一样的,Intel X86处理

13、器上是用,小头,形式来表示多字 节的编号,就是把低字节放在前面,把高字节放在后面,而 互联网标准却正好相反,所以,必须把主机字节转换成网络 字节的顺序。WinSock API提供了几个函数。把主机字节 转化成网络字节的函数;u_long htonl(u_long hostlong); u_short htons(u_short hostshort);把网络字节转化成主机字节的函数;u_long ntohl(uong netlong); u_short ntohs(u_short netshort);这样,设置IP地址和port端口时,就必须把主机字节转化 成网络字节后,才能用Bind()函数来

14、绑定套接字和地址。当 绑定完成之后,服务器端必须建立一个监听的队列来接收客 户端的连接请求。int listen(SOCKET s,int backlog);这个函数可以把套接字转成监听模式。如果客户端有了连接请求,我们还必须使int accept(SOCKET s,struct sockaddr FAR来 addrjnt FAR* addrlen);来接受客户端的请求。现在基本上已经完成了一个服务器的建立,而客户端的建立 的流程则是初始化WinSock ,然后创建Socket套接字,再 使用 int connect(SOCKET s,const struct sockaddr FAR* na

15、me9int namelen);来连接服务端。F面是一个最简单的创建服务器端和客户端的例子:服务器端的创建: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 );客户端的创建: 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);当服务器端和客户端建立连接以后,无论是客户端,还是服 务器端都可以使用int send( SOCKET s,const char FAR索 buf,int

18、 Ien9int flags); int recv( SOCKET s,char FAR* buf,int lenjnt flags);函数 来接收和发送数据,因为,TCP连接是双向的。当要关闭通讯连结的时候,任何一方都可以调用int shutdown(SOCKET s,int how);来关闭套接字的指定功能, 再调用 int closeSocket(SOCKET s);来关闭套接字句柄,这样一个通讯过程就算完成了。注意:上面的代码没有任何检査函数返回值,如果你作网络编程就一定要检查任何一个WinSock API函数的调用结果,因为很多时候函数调用并不一定成功。上面介绍的函数,返回值类型是i

19、nt的话,如果函数调用失败的话,返回的都是SOCKET_ERRORo4. WinSock编程的模型上面介绍的仅仅是最简单的WinSock通讯的方法,而实际 中很多网络通讯的却很多难以解决的意外情况。例如,WinSock提供了两种套接字模式:锁定和非锁定。当使用锁定套接字的时候,使用的很多函数,例如accpet、 send、recv等等,如果没有数据需要处理,这些函数都不 会 返回,也就是说,你的应用程序会阻塞在那些函数的调用处。而如果使用非阻塞模式,调用这些函数,不管你有没有数据 到达,他都会返回。所以有可能我们在非阻塞模式里,调用 这些函数大部分的情况下会返回失败,所以就需要我们来处 理很多

20、的意外出错。这显然不是我们想要看到的情况。我们可以采用WinSock 的通讯模型来避免这些情况的发生。WinSock提供了五种套接字I/O模型来解决这些问题。他们 分别是select(选择),WSAAsyncSelect(异步选择), WSAEventSelect (事件选择,overlapped(重叠), completion port(完成端口)。这里详细介绍一下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);函数来检查你要调用的Socket套接字是否已经有了需要处理的数据。select包含三个Socket队列,分别代表:readfds ,检查可读性,writefds ,检查可写性,exceptfds , 例外数据。timeout是select函数的返回时间。例如,想要检査一个套接字是否有数据需要接收,我们可以 把套接字句柄加入可读性检查队列中,然后调用select ,如 果,该套接字没有数据需要接收,select函数会把该套接字MB从可读性检查队列中删除掉,所以我们只要检査该套接

22、字句 柄是否还存在于可读性队列中,就可以知道到底有没有数据 需要接收了。WinSock提供了 一些宏用来操作套接字队列fd_seto11FD_CLR( s卢set)从队列set删除句柄s。FD_ISSET( s,祟set)检查句柄s是否存在与队列set中。FD_SET( s卢set )把句柄s添加到队列set中。FD_ZERO(水set )把set队列初始化成空队列。WSAAsyncSelect(异步选择)模型:WSAASyncSelect 模型 就是把一个窗口和套接字句柄建立起连接,套接字的网络事件发生时时候,就会把某个消息发送到窗口,然后可以在窗口的消息响应函数中处理数据的接收和发送。WS

23、AAsyncSelect( SOCKET s, HWND hWnd,unsigned intwMsg Jong lEvent);这个函数可以把套接字句柄和窗口建立起连接,wMsg是我们必须自定义的一个消息。lEvent就是制定的网络事件。包括FD_READ,FD_WRITE,FD_ACCEPT,FD_CONNECT,FD_CLOSE。 几个事件。例如,需要接收 FD_READ , FD_WRITE,FD_CLOSE 的网 络事件。可以调用WSAAsyncSelect( s , hWnd , WM_SOCKET,FD_READ IFD_WRITE I FD_CLOSE );这样,当有 FD_RE

24、AD , FD_WRITE 或者 FD_CLOSE网络事件时,窗口 hWnd将会收到 WM_SOCKET消息,消息参数的IParam标志了是什么事件发生,MFC的CSocket 类,就是使用这个模型。12浙江大华浙大2010年校园招聘笔试试题简答题:1. 软件开发的生命周期和模式 答:无论是瀑布开发模式还是螺旋开发模式软件开发的周 期大约都是问题的定义及规划 需求分析软件设计程序编码软件测试运行维护 如果是迭代方法开发 那么软件的生命周期应该分为开端(inception )、评价(elabration )、构建(construction )和产品化(transaction). 2.多进程和多线程的优缺点多线程的优点:无需跨进程边界; 程序逻辑和控制方式简单;所有线程可以直接共享内存和变量等;线程方式消耗的总资源比进程方式少;多线程缺点: 每个线程与主程序共用地址空间,受限于2GB地址空间; 线程之间的同步和加锁控制比较麻烦;一个线程的崩溃可 能影响到整个程序的稳定性;线程能够提高的总性能有限,而且线程多了之后,线程本身 的调度也是一个麻烦事儿,需要消耗较多的CPU多进程优 点: 每个进程互相独立,不影响主程序的稳定性,子进程崩溃没 关系;通过增加CPU ,就可以容易扩充性能;可以尽量减少线程加

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论