招聘面试_校园招聘笔试面试题及部分答案_第1页
招聘面试_校园招聘笔试面试题及部分答案_第2页
招聘面试_校园招聘笔试面试题及部分答案_第3页
招聘面试_校园招聘笔试面试题及部分答案_第4页
招聘面试_校园招聘笔试面试题及部分答案_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

笔试面试题汇总一、 笔试题1、 给你一个二叉树的前序序列和中序序列,求其后续序列?(淘宝)先看三个公式:PreOrder(T)=T的根节点+PreOrder(T的左子树)+PreOrder(T的右子树);InOrder(T)= InOrder(T的左子树)+T的根节点+ InOrder(T的右子树);PostOrder(T)= PostOrder(T的左子树)+ PostOrder(T的右子树)+T的根节点。根据以上的三给公式就可以很容易解决一下两个问题:前序+中序 后序;中序+后序 前序。当然也可把树画出来,再求他的各种序列。2、 Cache替换算法命中率最高是?(淘宝)这个组成原理就有讲到了,可以找组成原理的书看下,把各种替换算法在理解下,在书上的P98-P99讲得很详细。3、 给一个顺序表,然后再给你一个码值,求在二分查找改码值的比较次数?(淘宝)自己去做二分的查找的过程,我们知道二分查找是log(n)的,一次比较次数大于log(n)肯定是错的。具体可以看下数据结构的书,P17-P18讲的很详细。4、 编译程序中安排中间代码生成的目的是?(淘宝)把与机器相关的工作集中到目标代码生成阶段,难度和工作量下降。便于移直和维护。利于优化。5、 假设在n进制下,17*456=8206成立,n是多少?(淘宝)从上面的等式中可以看到8,则进制可定大于8,因此可以从9进制开始枚举,直至满足等式,就可以了。(建议:先都转换成十进制,在实现乘法运算)6、 要从一亿会员中抽出100万会员,考虑到公平性、相对分散、相对随机,不能重复,抽取速度要快。有一个random函数,能产生0-9的随机数。请写出你能想到的抽取方法?并写明步骤。(淘宝)用random函数产生两个数x1、x2,那么会员号mod 100 等于x1x2的话,该会与就被选中。这样每个会员的中奖概率是1/100。7、 Malloc和new的区别?8、 +、-、sizeof(字符串、结构体)(融通)9、 字符串函数的实现(strlen、strcpy等)(网龙、亿联网络)10、 字符串 以单词逆序11、 CSTRING类的一些基本函数的实现12、 DEBUG 和RELESE 两种调试的区别13、 CONST的用法我只要一听到被面试者说:const意味着常数,我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着只读就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)如果应试者能正确回答这个问题,我将问他一个附加的问题:下面的声明都是什么意思?const int a;int const a;const int *a;int * const a;int const * a const;前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字 const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:1) 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)2) 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。3) 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。14、 虚基类 抽象基类的用法答:在派生类继承基类时,加上一个virtual关键词则为虚拟基类继承,如: classderive:virtual public base ; 虚基类主要解决在多重继承时,基类可能被多次继承,虚基类主要提供一个基类给派生类,如: classB ; classD1:public B ; classD2:public B ; classC:public D1,public D2 ; 这里C在D1,D2上继承,但有两个基类,造成混乱。因而使用虚基类,即: classB ; classD1:virtual public B ; classD2:virtualpublicB ; classC:public D1,public D215、 Java线程中的sleep,yeild,notify的作用和区别sleep:让线程睡眠yeild:暂停当前正在执行的线程对象,并执行其他线程notify:唤醒线程16、 面向对象的特征有哪些方面 封装、继承、多态17、 ServletConfig对象与ServletContext对象的作用和区别servlet config对象可以使用一个或多个标签为servlet配置一些初始化参数,servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。18、 编程:链表的反转、两个排好序链表结合成一个有序链表19、 写一个程序实现字符串反转。(新大陆)20、 多态性意味着一个操作在不同的类中可以有不同的实现方式。(淘宝)21、 二分搜索算法具体可以看下数据结构的书,P17-P18讲的很详细。22、 树:节点个数与树高的计算这个可以用深搜和广搜实现,节点个数没遇到一个还没标记的节点就加1并标记该节点。把根节点记为1,然后对于还没标记的节点就等于他父亲的值+1,这过程中出现的最大值就是树高。对于树的一些定义数据结构书上有P138-P139。23、 操作系统:内存的大小端,生产者、消费者问题1-2.生产者消费者问题: 生产者与消费者问题可以被描述为:一个有限缓冲区和两类线程,它们是生产者和消费者,生产者把产品放入缓冲区,相反消费者便是从缓冲区中拿走产品。生产者在缓冲区满时必须等待,直到缓冲区有空间才继续生产。消费者在缓冲区空时必须等待,直到缓冲区中有产品才能继续读取。P,V操作来解决进程同步与进程通信的问题。 信号量是最早出现的用来解决进程同步与互斥问题的机制,包括一个称为信号量的变量及对它进行的两个原语操作。信号量为一个整数,我们设这个信号量为:sem。很显然,我们规定在sem大于等于零的时候代表可供并发进程使用的资源实体数,sem小于零的时候,表示正在等待使用临界区的进程的个数。根据这个原则,在给信号量附初值的时候,我们显然就要设初值大于零。 p操作和v操作是不可中断的程序段,称为原语。P,V原语中P是荷兰语的Passeren,相当于英文的pass, V是荷兰语的Verhoog,相当于英文中的incremnet。 P原语操作的动作是:(1)sem减1;(2)若sem减1后仍大于或等于零,则进程继续执行;(3) 若sem减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。 V原语操作的动作是:(1)sem加1;(2)若相加结果大于零,则进程继续执行;(3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。 需要提醒大家一点就是P,V操作对于每一个进程来说,都只能进行一次。而且必须成对使用。且在P,V愿语执行期间不允许有中断的发生。24、 软件工程的类图类图(Class diagram)是最常用的UML图,显示出类、接口以及它们之间的静态结构和关系;它用于描述系统的结构化设计。类(Class) 一般包含3个组成部分。第一个是类名;第二个是属性(attributes);第三个是该类提供的方法。类与类间关系常见的关系有:继承(Generalization),关联关系(Association),聚合关系(Aggregation),组合关系(Composition),依赖关系(Dependency)。 其中,聚合关系(Aggregation),组合关系(Composition)属于关联关系(Association)。 详见软件工程教材。25、 C语言:c语言的关键字、运算符的优先级与结合性、宏、指针的理解、typedef等3-1.c语言的关键字关键字是由C语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应与关键字相同。c语言关键字共32个:1、 数据类型关键字(12个):(1). char :声明字符型变量或函数(2). double :声明双精度变量或函数(3). enum :声明枚举类型(4). float:声明浮点型变量或函数(5). int: 声明整型变量或函数(6). long :声明长整型变量或函数(7). short :声明短整型变量或函数(8). signed:声明有符号类型变量或函数(9). struct:声明结构体变量或函数(10). union:声明联合数据类型(11). unsigned:声明无符号类型变量或函数(12). void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)2、 控制语句关键字(12个):A.循环语句(1). for: 一种循环语句(可意会不可言传)(2). do : 循环语句的循环体(3). while :循环语句的循环条件(4). break:跳出当前循环(5). continue:结束当前循环,开始下一轮循环B.条件语句(1).if: 条件语句(2).else :条件语句否定分支(与 if 连用)(3).goto:无条件跳转语句C.开关语句(1).switch :用于开关语句(2).case:开关语句分支(3).default:开关语句中的“其他”分支D.return :子程序返回语句(可以带参数,也看不带参数)3、 存储类型关键字(4个):(1).auto :声明自动变量 一般不使用(2).extern:声明变量是在其他文件正声明(也可以看做是引用变量)(3).register:声明积存器变量(4). static :声明静态变量4、 其它关键字(4个):(1).const :声明只读变量(2).sizeof:计算数据类型长度(3).typedef:用以给数据类型取别名(当然还有其他作用)(4).volatile:说明变量在程序执行中可被隐含地改变3-2.运算符的优先级与结合性、宏、指针的理解、typedef等注:谭浩强那本书附录很详细。c语言运算符1级优先级 左结合() 圆括号 下标运算符- 指向结构体成员运算符. 结构体成员运算符2级优先级 右结合! 逻辑非运算符 按位取反运算符+ 前缀增量运算符- 前缀增量运算符+ 正号运算符- 负号运算符(类型) 类型转换运算符* 指针运算符& 地址与运算符sizeof 长度运算符3级优先级 左结合* 乘法运算符/ 除法运算符% 取余运算符4级优先级 左结合+ 加法运算符- 减法运算符5级优先级 左结合 右移运算符6级优先级 左结合、= 关系运算符7级优先级 左结合= 等于运算符!= 不等于运算符8级优先级 左结合& 按位与运算符9级优先级 左结合 按位异或运算符10级优先级 左结合| 按位或运算符11级优先级 左结合& 逻辑与运算符12级优先级 左结合| 逻辑或运算符13级优先级 右结合? : 条件运算符14级优先级 右结合= += -= *= /= %= &= = |= = 全为赋值运算符15级优先级 左结合, 逗号运算符26、 网络:就osi模型OSI七层模型介绍 OSI是一个开放性的通行系统互连参考模型,他是一个定义的非常好的协议规范。OSI模型有7层结构,每层都可以有几个子层。OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 其中高层,既7、6、5、4层定义了应用程序的功能,下面3层,既3、2、1层主要面向通过网络的端到端的数据流。下面我给大家介绍一下这7层的功能: 1) 应用层:与其他计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层。示例:telnet,HTTP,FTP,WWW,NFS,SMTP等。 2) 表示层:这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASII格式,发送方将把文本从发送方的字符集转换成标准的ASII后发送数据。在接收方将标准的ASII转换成接收方计算机的字符集。示例:加密,ASII等。 3) 会话层:他定义了如何开始、控制和结束一个会话,包括对多个双向小时的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。4) 传输层:这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP,SPX。5) 网络层:这层对端到端的包传输进行定义,他定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。示例:IP,IPX等。6) 数据链路层:他定义了在单个链路上如何传输数据。这些协议与被讨论的歌种介质有关。示例:ATM,FDDI等。7) 物理层:OSI的物理层规范是有关传输介质的特性标准,这些规范通常也参考了其他组织制定的标准。连接头、针、针的使用、电流、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。示例:Rj45,802.3等。27、 在一个工程中,如果一个文件向要引用其他文件中定义的一个变量或者函数,请问需要添加什么关键字?答:extern。28、 volatile:说明变量在程序执行中可被隐含地改变29、void func(void)static int i = 0;i+;printf(%dn, i);void main()func();func();请问输出是:12(关键考察static关键字)30、 指针的应用方面,数组应用,链表应用。31、 一些简单的字符串处理函数,排序函数(冒泡,快排等)。32、 智力游戏:你面前有一对黑白棋,同色给你足够多的黑白棋(以防不够用)。你每次从这一堆黑(B)白(W)棋中随机抽取出2颗棋子,如果同色(BB,WW),则向这一堆中放入一颗黑棋,否则(RW)放入一颗白棋。最后只剩下一颗。请问,最终状态和初始状态有和关系?解:由于当抽取出RW时,放入W,即W没有减少,而抽取出WW时,放入的是B,因此W只能成对减少。因此结果与W的奇偶有关,W为奇,则剩下W;否则剩下B。33、 500Mtxt搜abcd串34、 封装,继承,多态,析构函数,解析函数 相关的题目35、 给你10万个关键词,然后再给你一些文章(这些文章的大小为k的数量级的),然后把文章中出现的关键词过滤不确定的解答:先根据10万个关键词构建AC自动机,然后对每一篇文章进行一次AC自动机处理,这样的空间复杂度是10万个关键词的字典树的空间消耗。他的下一个问题是如何进行空间优化,当事人表示不懂。36、 编程题:String str = “test”,null,”,”中国”,”福富软件”设一全局变量* 然后让字符数组变成t*e*s*t 中*国,福*富*软*件并输出答案:源码(仅供参考):public class Test public static void main(String args) String str = ,中国,null,福富软件,test;for(int i = 0 ;i1)sb.insert(n, *);n = n+2;/end whileSystem.out.println(sb);end else/end for/end main/end class37、 编程题:实现数据库连接工具类,并实现增删改查的功能。二、 面试题(计算机1、3、4、7班提供)1、 Linux的存储管理?(融通)Linux采用请求调页策略进行存储管理。请求调页策略在内外村之间来回传递的是存储页而不是整个进程,从而使得进程的地址映射具有了更大的灵活性,且允许进程的大小比可用物理存储空间大得多。2、 Linux的常用命令?(如:ls 及其参数)(融通)3、 数据库索引:如何建立及其作用?(实达电脑)索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息,索引好比是一本书前面的目录,用之能加快数据库的查询速度建立索引的一般格式: create unique cluster index on (【】,);4、 多进程访问共有资源如何解决冲突?(实达电脑)靠进程间互斥来实现5、 UML的各种图?(如请说出几种UML的图)(融通)用例图,类图,对象图,活动图,状态图,顺序图,协作图,构件图,部署图。6、 最擅长的科目?接下来的问题:用一句话概括该科目?及关于该科目的一些问题7、 在C语言里面用指针要注意哪些方面?(福富)内存泄露,内存碎片,数组越界.8、 进程间通信实现方式?(联迪、实达)信号,信号量,消息队列,共享内存,命名管道9、 Const、static、final、typed、define等的用法?(网龙、实达)1) const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性;2) C+的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用,面向过程程序设计中static用法主要有:静态全局变量,静态局部变量,还有静态函数,定义静态函数的好处:静态函数不能被其它文件所用;其它文件中可以定义相同名字的函数,不会发生冲突;面向对象中的用法有:静态数据成员,静态成员函数之类的3) Final: Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。可以修饰的对象: final 域 final 方法 final 类。final类不能被继承,没有子类,final类中的方法默认是final的。 final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。final不能用于修饰构造方法。4) Typedef: 为现有类型创建一个新的名字,是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字。5) Define:a) 简单的define定义 #define MAXTIME 1000b) define的“函数定义” #define max(x,y) (x)(y)?(x):(y)等等10、 堆和栈的区别?(联迪、实达、台达)栈区(stack)由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。堆区(heap)一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。具体差别如下:(1)申请方式:stack:由系统自动分配。例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间;heap:需要程序员自己申请,并指明大小,在c中malloc函数,如p1 = (char *)malloc(10); (2)申请后系统的反应:栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序;(3)申请大小的限制:栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。(4)申请效率的比较:栈由系统自动分配,速度较快。但程序员是无法控制的。堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便. (5)存储内容的比较:栈:在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。11、 全局变量和静态变量的存储方式?(实达)都存放在静态存储区12、 段式存储和页式存储的原理?(正泰电气)页式管理:首先,各进程的虚拟空间被划分为若干个长度相等的页。页长的划分和内存外存之间数据传输速度以及内存大小等有关。一般每个页长大约为1-4K,经过页划分之后,进程的虚地址变为页号P与页内地址W所组成;除了把进程的虚拟空间划分为大小相等的页之外,页式管理还把内存空间也按页的大小划分为片或页面。这些页面为系统中的任一进程所共享(除去操作系统区外)。从而,与分区管理不一样,分页管理师,用户进程在内存空间内除了在每个页面内地址连续之外,每个页面之间不再连续。第一是实现了内存中碎片的减少,因为任一碎片都会小于一个页面,第二是实现了由连续存储到非连续存储这个飞跃,为在内存中局部地,动态地存储那些反复执行或即将执行的程序或数据段打下了基础。再者,页式管理采用请求调页或预调页技术式实现了内外存储器的统一管理。即内存内只存放那些经常被执行或即将被执行的页,而那些不常被执行以及在近期内不可能被执行的页,则存放于外存中待需要时再调入。段式管理:段式管理是把程序按内容或过程(函数)关系分成段,每段有自己的名字,一个用户作业或进程所包含的段对应于一个二维线性虚拟空间,也就是一个二维虚拟存储器。段式管理程序以段为单位分配内存,然后通过地质映射机构把段式虚拟地址转换成实际的内存物理地址。和页式管理一样,段式管理也采用只把那些经常访问的段驻留内存,而把那些在将来一段时间内不被访问的段放入外存,待需要时自动调入的方法实现二维虚拟存储器。13、 TCP三次握手协议?(台达)在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。 第二次握手:服务器收到syn包,必须确认客户的SYN(ac k=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYNACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据。14、 对接口了解多少?(台达)鼠标、摄像头、优盘都是使用USB接口的设备,如果想要使用他们就必须连接在USB接口上,这些设备的接口必须遵守USB接口的规范才能通过USB接口来使用。可以这样说:接口是一套规范,满足这个规范的设备,我们就可以把他们组装到一起,从而实现该设备的功能。 接口类型是指游戏设备与电视机或电脑主机之间的接口类型。具体有与电视机相连的AV接口,与电脑主机相连的串口、USB接口、PCI接口、I-LINK(四针IEEE 1394接口)、连接声卡的MIDI接口、无线接口等等。15、 什么叫死锁?如何预防和解决死锁?(实达)所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。产生死锁的四个必要条件:互斥条件(Mutual exclusion)一个资源每次只能被一个进程使用。 请求与保持条件(占有等待)(Hold and wait)一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件(不可抢占)(No pre-emption)进程已获得的资源,在未使用完之前,不能强行剥夺。循环等待条件(Circular wait)若干进程之间形成一种头尾相接的循环等待资源关系。 这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之 一不满足,就不会发生死锁。死锁的解除与预防理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的情况下占用资源,在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统可能发生死锁,则不予分配,否则予以分配 。因此,对资源的分配要给予合理的规划。有序资源分配法这种算法资源按某种规则系统中的所有资源统一编号(例如打印机为1、磁带机为2、磁盘为3、等等),申请时必须以上升的次序。系统要求申请进程: 1、对它所必须使用的而且属于同一类的所有资源,必须一次申请完; 2、在申请不同类资源时,必须按各类设备的编号依次申请。例如:进程PA,使用资源的顺序是R1,R2; 进程PB,使用资源的顺序是R2,R1;若采用动态分配有可能形成环路条件,造成死锁。 采用有序资源分配法:R1的编号为1,R2的编号为2; PA:申请次序应是:R1,R2 PB:申请次序应是:R1,R2 这样就破坏了环路条件,避免了死锁的发生银行算法避免死锁算法中最有代表性的算法是Dijkstra E.W 于1968年提出的银行家算法:该算法需要检查申请者对资源的最大需求量,如果系统现存的各类资源可以满足申请者的请求,就满足申请者的请求。这样申请者就可很快完成其计算,然后释放它占用的资源,从而保证了系统中的所有进程都能完成,所以可避免死锁的发生。死锁排除的方法1、撤消陷于死锁的全部进程; 2、逐个撤消陷于死锁的进程,直到死锁不存在; 3、从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失。 4、从另外一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态16、 网络编程的顺序?(台达)*TCP编程服务器端步骤:1. 创建Socket,端口监听ServerSocketserverSocket=newServerSocket(4444);2.接受客户连接SocketclientSocket=serverSocket.accept();3.创建读写对象PrintWriterout=newPrintWriter(clientSocket.getOutputStream(),true);BufferedReaderin=newBufferedReader(newInputStreamReader(clientSocket.getInputStream();4.利用读写对象,与客户端通信StringinputLine,outputLine;inputLine=in.readLine();out.println(outputLine);5.关闭对象out.close();in.close();clientSocket.close();serverSocket.close();*TCP编程客户端步骤:1.创建SocketSocketechoSocket=newSocket(Hostname,7);2.创建读写对象PrintWriterout=newPrintWriter(echoSocket.getOutputStream(),true);BufferedReaderin=newBufferedReader(newInputStreamReader(echoSocket.getInputStream();3.利用读写对象,与服务器通信StringuserString;userString=in.readLine();out.println(userString);4.关闭对象out.close();in.close();echoSocket.close();*UDP编程服务器端步骤:1.创建socketDatagramSocketsocket=newDatagramSocket(4445);2.接受客户请求bytebuf=newbyte256;DatagramPacketpacket=newDatagramPacket(buf,buf.length);socket.receive(packet);3.数据准备StringdString=newDate().toString();buf=dString.getBytes();4.提取客户端信息InetAddressaddress=packet.getAddress();intport=packet.getPort();5.发送数据packet=newDatagramPacket(buf,buf.length,address,port);socket.send(packet);6.关闭对象socket.close();*UDP编程客户端步骤:1.创建SocketDatagramSocketsocket=newDatagramSocket();2.准备服务器信息bytebuf=newbyte256;InetAddressaddress=InetAddress.getByName(Hostname);DatagramPacketpacket=newDatagramPacket(buf,buf.length,address,4445);3.向服务器发送请求socket.send(packet);4.从服务器读取信息packet=newDatagramPacket(buf,buf.length);socket.receive(packet);5.关闭对象socket.close();17、 给你一个字符串将所有严格递增的子串输出,现场写代码实现。(淘宝)int front=-1;for(int i=1;stri!=0;+i)if(stri-stri-1=1)if(front=-1)front=i-1;elseif(front!=-1)for(int j=front;ji;+j)printf(%c,strj);printf(n);front=-1;18、 如何通过修改协议,使得服务器能一次性将客服端发过来的消息全部接收?(淘宝)19、 一个HR,两个技术官和我这个应聘者,请问可以用软件工程方法划分为几个类?(联迪商用)20、 要想和A和B两个进程中的一个通信,请问用什么方法与A通信,而不与B混淆?(联迪商用)21、 如何确保对同一数据访问的多个客户端的数据一致?SQL语句怎么写?(淘宝)22、 NEW,DELETE,MALLOC和FREE的区别与联系?(淘宝)1. malloc与free是C+/C语言的标准库函数,new/delete是C+的运算符。它们都可用于申请动态内存和释放内存。2. 对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。3. C+语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。4. C+程序经常要调用C函数,而C程序只能用malloc/free管理动态内存23、 进程与线程的区别与联系?(台达)进程概念 进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、IO设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。 在Mac、Windows NT等采用微内核结构的操作系统中,进程的功能发生了变化:它只是资源分配的单位,而不再是调度运行的单位。在微内核系统中,真正调度运行的基本单位是线程。因此,实现并发功能的单位是线程。线程概念 线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。例如,假设用户启动了一个窗口中的数据库应用程序,操作系统就将对数据库的调用表示为一个进程。假设用户要从数据库中产生一份工资单报表,并传到一个文件中,这是一个子任务;在产生工资单报表的过程中,用户又可以输人数据库查询请求,这又是一个子任务。这样,操作系统则把每一个请求工资单报表和新输人的数据查询表示为数据库进程中的独立的线程。线程可以在处理器上独立调度执行,这样,在多处理器环境下就允许几个线程各自在单独处理器上进行。操作系统提供线程就是为了方便而有效地实现这种并发性引入线程的好处(1)易于调度。(2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。(3)开销少。创建线程比创建进程要快,所需开销很少。(4)利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行。进程和线程的关系(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。(3)处理机分给线程,即真正在处理机上运行的是线程。(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。24、 ARM开发板的UBOOT移植与流程?(瑞芯微)u-boot启动过程的两个阶段:第一阶段(stage 1)是依赖于体系结构的代码(如设备初始化代码等),一般用汇编语言来实现。主要进行以下方面的设置:设置ARM进入SVC模式、禁止IRQ和FIQ、关闭看门狗、屏蔽所有中断。设置时钟(FCLK,HCLK,PCLK)、清空I/D cache、清空TLB、禁止MMU和cache、配置内存控制器、为搬运代码做准备、搬移uboot映像到RAM中(使用copy_loop实现)、分配堆栈、清空bss段(使用clbss_l实现)。第二阶段(stage 2)通常用语言来实现。start_armboot(): 一系列初始化(cpu, 板卡,中断,串口,控制台等),开启I/D cache。初始化FLASH,根据系统配置执行其他初始化操作。打印LOG,使能中断,获取环境变量,初始化网卡。最后进入main_loop()函数。在main_loop函数中会检查bootdelay和bootcmd环境变量,如果bootcmd已经设置过,则在等待bootdelay个毫秒后会自动执行bootcmd。如果等待过程中被用户中断(ctl+c)或者bootcmd没有设置,则会等待用户输入命令。25、 Socket编程服务器与客户端的实现?(台达)网络通信中的一个非常重要的概念就是套接字(Socket),简单地说,套接字就是网络进程的ID, 网络通信归根到底是进程的通信,在网络中,每个节点有一个网络地址(即IP地址),两个进程通信时,首先要确定各自所在网络节点的网络地址,但是,网络地址只能确定进程所在的计算机,而一台计算机上可能同时有多个网络进程,还不能确定到底是其中的哪个进程,由此套接字中还要有其他的信息,那就是端口号 (Port),在一台计算机中,一个端口一次只能分配给一个进程,即端口号与进程是一一对应的关系,所以,端口号和网络地址就能唯一地确定Internet中的一个网络进程。可以认为:套接字= 网络地址+端口号 系统调用一个Socket()得到一个套接字描述符,然后就可以通过他进行网络通信了。套接字有很多种类,最常用的就有两种;流式套接字和数据报套接字。在Linux中分别称之SOCK_STREAM和 SOCK_DGRAM ,他们分别使用不同的协议,流式套接字使用TCP协议,数据报套接字使用UDP协议,下文以流式套接字协议(tcp)为例。网

温馨提示

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

评论

0/150

提交评论