位置:首页 > 求职招聘

2014年百度校园招聘济南站研发工程师笔试题

2020-07-16发布者:郝悦皓大小:118.50 KB 下载:0

2014 年百度校园招聘济南站研发工程师笔试题 一,简答题(30 分) 1,当前计算机系统一般会采用层次结构存储数据,请介绍下典型计算机存储系统一般分 为哪几个层次,为什么采用分层存储数据能有效提高程序的执行效率?(10 分) 所谓存储系统的层次结构,就是把各种不同存储容量、存取速度和价格的存储器按层次 结构组成多层存储器,并通过管理软件和辅助硬件有机组合成统一的整体,使所存放的程 序和数据按层次分布在各种存储器中。目前,在计算机系统中通常采用三级层次结构来构 成存储系统,主要由高速缓冲存储器 Cache、主存储器和辅助存储器组成。 存储系统多级层次结构中,由上向下分三级,其容量逐渐增大,速度逐级降低,成本则 逐次减少。整个结构又可以看成两个层次:它们分别是主存一辅存层次和 cache 一主存层 次。这个层次系统中的每一种存储器都不再是孤立的存储器,而是一个有机的整体。它们 在辅助硬件和计算机操作系统的管理下,可把主存一辅存层次作为一个存储整体,形成的 可寻址存储空间比主存储器空间大得多。由于辅存容量大,价格低,使得存储系统的整体 平均价格降低。由于 Cache 的存取速度可以和 CPU 的工作速度相媲美,故 cache 一主存 层次可以缩小主存和 cPu 之间的速度差距,从整体上提高存储器系统的存取速度。尽管 Cache 成本高,但由于容量较小,故不会使存储系统的整体价格增加很多。 综上所述,一个较大的存储系统是由各种不同类型的存储设备构成,是一个具有多级层 次结构的存储系统。该系统既有与 CPU 相近的速度,又有极大的容量,而成本又是较低的。 其中高速缓存解决了存储系统的速度问题,辅助存储器则解决了存储系统的容量问题。采 用多级层次结构的存储器系统可以有效的解决存储器的速度、容量和价格之间的矛盾。 2,Unix/Linux 系统中僵尸进程是如何产生的?有什么危害?如何避免?(10 分) 一个进程在调用 exit 命令结束自己的生命的时候,其实它并没有真正的被销毁,而是 留下一个称为僵尸进程(Zombie)的数据结构(系统调用 exit,它的作用是使进程退出, 但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。 在 Linux 进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间, 没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退 出状态等信息供其他进程收集,除此之外,僵尸进程不再占有任何内存空间。它需要它的 父进程来为它收尸,如果他的父进程没安装 SIGCHLD 信号处理函数调用 wait 或 waitpid()等待子进程结束,又没有显式忽略该信号,那么它就一直保持僵尸状态,如果这 时父进程结束了,那么 init 进程自动会接手这个子进程,为它收尸,它还是能被清除的。 但是如果如果父进程是一个循环,不会结束,那么子进程就会一直保持僵尸状态,这就是 为什么系统中有时会有很多的僵尸进程。 避免 zombie 的方法: 1)在 SVR4 中,如果调用 signal 或 sigset 将 SIGCHLD 的配置设置为忽略,则不会产 生僵死子进程。另外,使用 SVR4 版的 sigaction,则可设置 SA_NOCLDWAIT 标志以避免 子进程 僵死。 Linux 中也可使用这个,在一个程序的开始调用这个函 数 signal(SIGCHLD,SIG_IGN); 2)调用 fork 两次。 3)用 waitpid 等待子进程返回. 3,简述 Unix/Linux 系统中使用 socket 库编写服务器端程序的流程,请分别用对应的 socket 通信函数表示(10 分) TCP socket 通信 服务器端流程如下: 1.创建 serverSocket 2.初始化 serverAddr(服务器地址) 3.将 socket 和 serverAddr 绑定 bind 4.开始监听 listen 5.进入 while 循环,不断的 accept 接入的客户端 socket,进行读写操作 write 和 read 6.关闭 serverSocket 客户端流程: 1.创建 clientSocket 2.初始化 serverAddr 3.链接到服务器 connect 4.利用 write 和 read 进行读写操作 5.关闭 clientSocket 这个列表是一个 Berkeley 套接字 API 库提供的函数或者方法的概要: socket() 创建一个新的确定类型的套接字,类型用一个整型数值标识,并为它分配系统资 源。 bind() 一般用于服务器端,将一个套接字与一个套接字地址结构相关联,比如,一个指定 的本地端口和 IP 地址。 listen() 用于服务器端,使一个绑定的 TCP 套接字进入监听状态。 connect() 用于客户端,为一个套接字分配一个自由的本地端口号。 如果是 TCP 套接字 的话,它会试图获得一个新的 TCP 连接。 accept() 用于服务器端。 它接受一个从远端客户端发出的创建一个新的 TCP 连接的接入 请求,创建一个新的套接字,与该连接相应的套接字地址相关联。 send()和 recv(),或者 write()和 read(),或者 recvfrom()和 sendto(), 用于往/从远程套 接字发送和接受数据。 close() 用于系统释放分配给一个套接字的资源。 如果是 TCP,连接会被中断。 gethostbyname()和 gethostbyaddr() 用于解析主机名和地址。 select() 用于修整有如下情况的套接字列表: 准备读,准备写或者是有错误。 poll() 用于检查套接字的状态。 套接字可以被测试,看是否可以写入、读取或是有错误。 getsockopt() 用于查询指定的套接字一个特定的套接字选项的当前值。 setsockopt() 用于为指定的套接字设定一个特定的套接字选项。 二,算法与程序设计题 1,使用 C/C++编写函数,实现字符串反转,要求不使用任何系统函数,且时间复杂度最 小,函数原型:char* reverse_str(char* str)。(15 分) 获取首尾指针,然后将首尾指针指向的元素交换,将首指针指向下一个,将尾指针指向前 一个,交换指针指向的元素,然后重复执行,直到首尾指针相遇。 2,给定一个如下格式的字符串(1,(2,3),(4,(5,6),7))括号内的元素可以是数字,也可以是 另一个括号,请实现一个算法消除嵌套的括号,比如把上面的表达式变成: (1,2,3,4,5,6,7),如果表达式有误请报错。(15 分) 使用栈和队列实现 好像当时懵了,太困。就开始乱写了。写的是首先找出 query_topic_info 数组和 adwords_topic_info 数组的最大值,然后返回其乘积
温馨提示:当前文档最多只能预览 2 页,此文档共4 页,请下载原文档以浏览全部内容。如果当前文档预览出现乱码或未能正常浏览,请先下载原文档进行浏览。
发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

下载需知:

1 该文档不包含其他附件(如表格、图纸),本站只保证下载后内容跟在线阅读一样,不确保内容完整性,请务必认真阅读

2 除PDF格式下载后需转换成word才能编辑,其他下载后均可以随意编辑修改

3 有的标题标有”最新”、多篇,实质内容并不相符,下载内容以在线阅读为准,请认真阅读全文再下载

4 该文档为会员上传,版权归上传者负责解释,如若侵犯你的隐私或权利,请联系客服投诉

返回顶部