- 一级建造师考试
- 二级建造师考试
- 三支一扶
- 安全评价师考试
- 保险经纪资格考试
- 报关员资格考试
- 博士入学考试
- 成人高考
- 成人英语三级考试
- 程序员考试
- 出版专业资格考试
- 大学英语三级
- 大学英语四六级考试
- 单证员考试
- 导游证考试
- 电气工程师
- 电子商务设计师考试
- 房地产经纪人考试
- 房地产评估师考试
- 高级会计师资格考试
- 高考
- 高中会考
- 给排水工程师
- 公共英语等级考试
- 公务员考试
- 国际货运代理
- 国际内审师
- 国家司法考试
- 化工师
- 环境影响评价师
- 会计人员继续教育
- 会计职称考试
- 基金从业资格
- 计算机等级考试
- 计算机软件水平考试
- 监理工程师考试
- 教师招聘
- 教师资格
- 结构工程师考试
- 经济师考试
- 考研
- 空姐招聘
- 遴选
- 美术高考
- 普通话考试
- 期货从业资格
- 求职招聘
- 人力资源管理师
- 软件设计师考试
- 商务英语考试(BEC)
- 社会工作者职业水平考试
- 审计师考试
- 事业单位招聘
- 事业单位招聘
- 数据库系统工程师
- 特许公认会计师(ACCA)
- 同等学力
- 统计师考试
- 托福考试(T0EFL)
- 外贸跟单员考试
- 网络工程师考试
- 网络管理员考试
- 网络规划设计师考试
- 系统分析师考试
- 消防工程师
- 小升初
- 校园招聘
- 信息系统管理工程师考试
- 选调生考试
- 雅思考试
- 岩土工程师考试
- 医生招聘
- 艺术高考(艺考)
- 银行从业人员资格
- 银行招聘
- 英语翻译资格考试
- 营销师考试
- 造假工程师考试
- 证券从业资格考试
- 中考
- 注册安全工程师考试
- 注册测绘师考试
- 注册城市规划师考试
- 注册环保工程师考试
- 注册会计师考试
- 注册计量师考试
- 注册建筑师考试
- 注册税务师考试
- 注册资产评估师
- 专升本考试
- 专业英语四级八级考试
- 自考
- 安全员
- 跟单员
- 考试一本通
- 其它资料
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 该文档为会员上传,版权归上传者负责解释,如若侵犯你的隐私或权利,请联系客服投诉
点击加载更多评论>>