




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
注:笔试题整理到第50页,面试题整理到第2页的第6题笔试题部分:选择题:1. 在网络字节序中,所谓”小端”(little endian)说法正确的是_B_A. 高字节数据存放在低地址处,低字节数据存放在高地址处 B. 低字节位数据存放在内存低地址处, 高字节位数据存放在内存高地址处C. 和编译器相关 D. 上述答案都不正确2. C语言中,系统自动打开的文件是( D )A.二进制文件 B.随机文件C.非缓冲文件 D.设备文件3. TCP使用_B_进行流量控制。A. 3次握手法B. 窗口控制机制C. 自动重发机制D. 端口机制4. TCP/IP层IP协议的服务是_C_A. 可靠服务 B. 有确认的服务 C. 无连接数据报 D. 以上都不对5. 对于一个没有设置任何套接口选项的阻塞套接口,调用recv接收对方的数据,对方发送数据前突然断电,下列哪种情况将会发生_A_A. recv永远不会返回B. recv立刻返回-1C. recv立刻返回0D. recv在等待很长一段时间后返回-16. 下列哪些关于套接口选项函数的说法是正确的_C_A. SO_DONTLINGER选项是让TCP套接口不对数据进行缓存,调用send函数后立刻将数据发送出去;B.调用SO_RCVBUF和SO_SNDBUF调整TCP窗口的大小;C. SO_REUSEADDR选项允许套接口绑定在一个已经在使用的地址上;D. SO_MAX_MSG_SIZE选项获取每次调用TCP套接口send时,所能发送的最大字节数;问答题:1. fork、vfork的区别:vfork用于创建一个新进程,而该进程的目的是exec一个新程序。vfork与fork一样都创建一个子进程,但他并不把父进程地址空间完全复制到子进程中,因为子进程通常都会调用exec或(_exit),于是也就不会访问该地址空间。vfork与fork的另一个区别是vfork保证子进程先运行,在它调用exec或_exit之后父进程才可能被调度运行。vfork使用如下例:#include #include #include #include int globvar=6;/*external variable in initialized data */intmain(void)int var; /* automatic variable on the stack */pid_t pid;var = 88;printf(before vforkn); /* we dont flush stdio */if (pid = vfork() 0)perror(vfork error);else if(pid = 0) /* child */globvar+; /* modify parents variables */var+;_exit(0); /* child terminates */* parent continues here */printf(pid = %ld, glob = %d, var = %dn, (long)getpid(), globvar,var);exit(0);2. Excel协议族有哪些,举例函数原型extern char *environ;int execl(const char *path, const char *arg, .);int execlp(const char *file, const char *arg, .);int execle(const char *path, const char *arg, ., char * const envp);int execv(const char *path, char *const argv);int execvp(const char *file, char *const argv);int execvpe(const char *file, char *const argv, char *const envp);3. 创建线程、进程的函数是什么fork、vfork、pthread_create4. 线程间临界资源怎么保护? 条件变量的使用互斥锁、信号量条件变量是线程中的东西,就是等待某一条件的发生,和信号一样。具体的用法可参见百度百科文章:/view/4025952.htm?fr=aladdin5. 编译有线程的文件要加什么参数-lpthread6. 线程与进程的区别线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源(3)线程是处理器调度的基本单位,但进程不是.(4)二者均可并发执行.7. 多进程和多线程的区别,分别在什么情景下用?根据实际情况来判断,哪个更加合适就是哪个好对比维度多进程多线程总结数据共享、同步数据共享复杂,需要用IPC;数据是分开的,同步简单因为共享进程数据,数据共享简单,但也是因为这个原因导致同步复杂各有优势内存、CPU占用内存多,切换复杂,CPU利用率低占用内存少,切换简单,CPU利用率高线程占优创建销毁、切换创建销毁、切换复杂,速度慢创建销毁、切换简单,速度很快线程占优编程、调试编程简单,调试简单编程复杂,调试复杂进程占优可靠性进程间不会互相影响一个线程挂掉将导致整个进程挂掉进程占优分布式适应于多核、多机分布式;如果一台机器不够,扩展到多台机器比较简单适应于多核分布式进程占优1)需要频繁创建销毁的优先用线程原因请看上面的对比。这种原则最常见的应用就是Web服务器了,来一个连接建立一个线程,断了就销毁线程,要是用进程,创建和销毁的代价是很难承受的2)需要进行大量计算的优先使用线程所谓大量计算,当然就是要耗费很多CPU,切换频繁了,这种情况下线程是最合适的。这种原则最常见的是图像处理、算法处理。3)强相关的处理用线程,弱相关的处理用进程什么叫强相关、弱相关?理论上很难定义,给个简单的例子就明白了。一般的Server需要完成如下任务:消息收发、消息处理。“消息收发”和“消息处理”就是弱相关的任务,而“消息处理”里面可能又分为“消息解码”、“业务处理”,这两个任务相对来说相关性就要强多了。因此“消息收发”和“消息处理”可以分进程设计,“消息解码”、“业务处理”可以分线程设计。当然这种划分方式不是一成不变的,也可以根据实际情况进行调整。4)可能要扩展到多机分布的用进程,多核分布的用线程原因请看上面对比。5)都满足需求的情况下,用你最熟悉、最拿手的方式至于“数据共享、同步”、“编程、调试”、“可靠性”这几个维度的所谓的“复杂、简单”应该怎么取舍,我只能说:没有明确的选择方法。但我可以告诉你一个选择原则:如果多进程和多线程都能够满足要求,那么选择你最熟悉、最拿手的那个。需要提醒的是:虽然我给了这么多的选择原则,但实际应用中基本上都是“进程+线程”的结合方式,千万不要真的陷入一种非此即彼的误区。说出线程和进程的定义,为什么用多线程不用多进程?答:线程和进程的定义可以参见PPT相关部分,用多线程而不使用多进程多半都是因为利用了线程比进程具有的优势,比如:数据共享简单、创建销毁速度快,占用的资源少等优点。8. 创建信号量函数原型typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);9. 互斥的实现方法:互斥锁和信号量10. 二进制信号量与互斥信号量的区别?有什么作用?1. 互斥量用于线程的互斥,信号量用于线程的同步。这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源以上区别是主要想记住的。note:信号量可以用来实现互斥量的功能2. 互斥量值只能为0/1,信号量值可以为非负整数。也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量是,也可以完成一个资源的互斥访问。3.互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到。11. 产生死锁的必要条件是什么?解决死锁有几种方法?答:产生死锁的必要条件:互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。环路等待条件:在发生死锁时,必然存在一个进程-资源的环形链。解决死锁的基本方法:预防死锁:资源一次性分配:(破坏请求和保持条件)可剥夺资源:即当某进程新的资源未满足时,释放已占有的资源(破坏不可剥夺条件)资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)避免死锁:预防死锁的几种策略,会严重地损害系统性能。因此在避免死锁时,要施加较弱的限制,从而获得 较满意的系统性能。由于在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。其中最具有代表性的避免死锁算法是银行家算法。检测死锁:首先为每个进程和每个资源指定一个唯一的号码;然后建立资源分配表和进程等待表,例如:解除死锁:当发现有进程死锁后,便应立即把它从死锁状态中解脱出来,常采用的方法有:剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态;撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态.消除为止;所谓代价是指优先级、运行代价、进程的重要性和价值等。12. 解释可重入:若一个程序或子程序可以“安全的被并行执行(Parallel computing)”,则称其为可重入(reentrant或re-entrant)的。即当该子程序正在运行时,可以再次进入并执行它(并行执行时,个别的执行结果,都符合设计时的预期)。若一个函数是可重入的,则该函数:l 不能含有静态(全局)非常量数据。l 不能返回静态(全局)非常量数据的地址。l 只能处理由调用者提供的数据。l 不能依赖于单实例模式资源的锁。l 不能调用(call)不可重入的函数(有呼叫(call)到的函数需满足前述条件)。多“用户/对象/进程优先级”以及多进程,一般会使得对可重入代码的控制变得复杂。同时,IO代码通常不是可重入的,因为他们依赖于像磁盘这样共享的、单独的(类似编程中的静态(Static)、全域(Global)资源。例子:在以下的C语言代码中,函数f和函数g都不是可重入的。int g_var = 1;int f() g_var = g_var + 2; return g_var;int g() return f() + 2;以上代码中,f使用了全局变量g_var,所以,如果两个线程同时执行它并访问g_var,则返回的结果取决于执行的时间。因此,f不可重入。而g调用了f,所以它也不可重入。稍作修改后,两个函数都是可重入的:int f(int i) return i + 2;int g(int i) return f(i) + 2;13. 怎么实现一个线程阻塞另一个线程?答:利用同步互斥机制,或者想办法使另一个线程内的阻塞函数资源暂时不可获得,也会导致其阻塞。14. HTTP403是什么意思?HTTP302是什么意思?答:HTTP403(禁止访问)发生原因:是因为配置domain域时 进行了自定义配置,或对原有的domain域进行过扩展现有的配置,并配置了应用程序的安全性所在在启动doamin域后,输入http:/localhost:7001/console就会报http 403 禁止访问解决方案:对原有的domain域进行过扩展现有的配置,并取消对应用程序的安全性配置HTTP302错误表示被请求的资源暂时转移(Movedtemporatily),然后会给出一个转移后的URL,而浏览器在处理服务器返回的302错误时,原则上会重新建立一个TCP连接,然后再取重定向后的URL的页面;但是如果页面存在于缓存中,则不重新获取。15. 假如子网掩码维45 有多少个ip可用答:256-245-2=9个16. 判断 是A、B、C类 那种网络ip地址 答:C类C类IP以110开头,从到5517. ISO模型每层分别是什么?集线器、交换机、路由器的工作原理?集线器工作在第一层(即物理层),它没有智能处理能力,对它来说,数据只是电流而已,当一个端口的电流传到集线器中时,它只是简单地将电流传送到其他端口,至于其他端口连接的计算机接收不接收这些数据,它就不管了。 交换机工作在第二层(即数据链路层),它要比集线器智能一些,对它来说,网络上的数据就是MAC地址的集合,它能分辨出帧中的源MAC地址和目的MAC地址,因此可以在任意两个端口间建立联系,但是交换机并不懂得IP地址,它只知道MAC地址。 路由器工作在第三层(即网络层),它比交换机还要“聪明”一些,它能理解数据中的IP地址,如果它接收到一个数据包,就检查其中的IP地址,如果目标地址是本地网络的就不理会,如果是其他网络的,就将数据包转发出本地网络。集线器(Hub): 在OSI模型中属于数据链路层,集线器最大的特点就是采用共享型模式,就是指在有一个端口在向另一个端口发送数据时,其他端口就处于“等待”状态。为什么会“等待”呢?举个例子来说,其实在单位时间内A向B发送数据包时,A是发送给B、C、D三个端口的(该现象即紧接下文介绍的IP广播),但是只有B接收,其他的端口在第一单位时间判断不是自己需要的数据后将不会再去接收A发送来的数据。直到A再次发送IP广播,在A再次发送IP广播之前的单位时间内,C,D是闲置的,或者CD之间可以传输数据。如图1,我们可以理解为集线器内部只有一条通道(即公共通道),然后在公共通道下方就连接着所有端口。交换机:基于MAC(网卡的硬件地址)识别,能完成封装转发数据包功能的网络设备。交换机可以“学习”MAC地址,并把其存放在内部地址表中,能过在数据帧的始发者和目标接收者之间建立临时的交换路径,使数据帧直接同源地址到达目的地址。路由器(Router): 工作在OSI第三层(网络层)上、肯有连接不同类型网络的能力并能够选择数据传送路径的网络设备。路由器能连接不同类型的网络 我们常见的集线器和交换机一般都是用于连接以太网的,但是如果将两种网络类型连接起来,比如以太网与ATM网,集线器和交换机就派不上用场了。 路由器能够连接不同类型的局域网和广域网,如以太网、ATM网、FDDI网、令牌环网等。路由器具有路径选择能力在互联网中,从一个节点到另一个节点,可能有许多路径,路由器可以选择通畅快捷的近路,会大大提高通信速度,减轻网络系统通信负荷,节约网络系统资源,这是集线器和二层交换机所根本不具备的性能。18. IP 通过什么协议转成域名和MAC地址答:通过DNS协议转换成域名。DNS 是域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。通过ARP(地址转换协议)协议转换成MAC地址,反过来MAC到IP地址的转换是RARP(逆地址转换协议)19. 域名解析的过程和步骤?答:见下图和分析1、在浏览器中输入域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址()给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找域服务器,重复上面的动作,进行查询,直至找到主机。6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。 从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。面试题部分:1. Socket通信流程答:socket通信分为两种一种为tcp通信模型,一种为udp通信模型,两种通信模型分别为:Tcp通信模型:Tcp服务器端accept( ):接受客户端的连接请求listen( ):被动监听,等待客户端连接bind( ):绑定协议、端口号和IPsocket( ):创建通信套接字recv( )/send( ):利用已建立连接的套接字收发消息close( ):关闭连接套接字Tcp客户端socket( ):创建通信套接字bind( ):绑定协议、端口号和IP (可选)connect( )向服务器发起连接请求recv( )/send( ):利用已建立连接的套接字收发消息close( ):关闭连接套接字UDP通信模型:2. TCP和UDP的区别:1.面向链接:TCP面向链接,面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须通过三次握手先建立一个TCP连接。在一个TCP中仅有两方彼此通信,多播和广播不能用于TCP。UDP是不可靠的传输,传输前不需要建立链接,可以应用多播和广播实现一对多的通信。2.可靠性:TCP提供端到端的流量控制,对收到的数据进行确认,采用超时重发,对失序的数据进行重新排序等机制保证数据通信的可靠性。而UDP是一种不可靠的服务,接收方可能不能收到发送方的数据报。3.TCP是一种流模式的协议,UDP是一种数据报模式的协议。进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。TCP应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系。TCP会有粘包和半包的现象。4.效率上:速度上,一般TCP速度慢,传输过程中需要对数据进行确认,超时重发,还要对数据进行排序。UDP没有这些机制所以速度快。数据比例,TCP头至少20个字节,UDP头8个字节,相对效率高。组装效率上:TCP头至少20个字节,UDP头8个字节,系统组装上TCP相对慢。5.用途上:用于TCP可靠性,http,ftp使用。而由于UDP速度快,视频,在线游戏多用UDP,保证实时性3. 网络七层协议OSI的7层从上到下分别是 7应用层 6表示层 5会话层 4传输层 3网络层 2数据链路层 1物理层4. 简述模拟qq根据自己当时做作业时的要求做回答5. C/S架构中,当服务器给客服端发送数据时,客服端离开,服务器怎么判断?答:先要分清客户端是正常退出还是异常退出;如果是正常退出,那服务器向一个已关闭的套接字对端发消息,将会收到内核产生的SIGPIPE信号,进程收到该信号的默认操作是退出该进程,用户可捕获该信号做进一步处理。如果是客户端异常退出,则可以使用心跳机制来检测对端是否异常退出6. 说说TCP三次握手?发送的是什么内容?TCP报头内容?第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的syn(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据TCP协议头最少20个字节,包括以下的区域TCP源端口(Source Port):16位的源端口其中包含初始化通信的端口。源端口和源IP地址的作用是标示报问的返回地址。TCP目的端口(Destination port):16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。TCP序列号(序列码,Sequence Number):32位TCP应答号(Acknowledgment Number):32位的序列号由接收端计算机使用,重组分
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 果蔬酵素发酵饮品创新创业项目商业计划书
- 海带养殖基地创新创业项目商业计划书
- 2025年高中地理会考试卷及答案
- 家禽养殖循环经济模式创新创业项目商业计划书
- 废气治理服务创新创业项目商业计划书
- 2025年食用冰醋酸项目立项申请报告
- 电子废弃物处理工国庆节后复工安全考核试卷含答案
- 锯床工中秋节后复工安全考核试卷含答案
- 蜂媒授粉员国庆节后复工安全考核试卷含答案
- 还呗贷款合同(标准版)
- GB/T 31155-2014太阳能资源等级总辐射
- 工程施工停工令模板
- 2023年蒸汽管路设计
- 耳部解剖及急慢性中耳炎课件
- 工程项目投资与融资讲义 课件
- 食品质量安全抽检数据分析模型优质资料
- 承插型盘扣式钢管进场验收记录表
- 军事训练教学法模板课件
- 物流设施与设备ppt课件(完整版)
- 交通运输安全管理整套教学课件
- 安检员X射线机培训-共86页课件
评论
0/150
提交评论