百度2014软件开发工程师笔试题详解 (转)

转:http://blog.csdn.net/zs634134578/article/details/21387117

一.简答题

1.简述iso的7层设计

解析:

  1. 应用层:提供应用程序间通信
  2. 表示层:处理数据格式、数据加密等
  3. 会话层:建立、维护和管理会话
  4. 运输层:建立主机端到端连接
  5. 网络层:寻址和路由选择
  6. 数据链路层:介质访问,链路管理
  7. 物理层:比特流传输

2.如何在多个进程间进行数据共享(至少写出3种)

Linux下:

  • 管道
  • 信号量
  • 共享内存
  • 消息队列
  • 本地域socket

Windows下:

  1. 文件映射;文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待。因此,进程不必使用文件I/O操作,只需简单的指针操作就可读取和修改文件的内容。
  2. 共享内存:Win32 API中共享内存(SharedMemory)实际就是文件映射的一种特殊情况。进程在创建文件映射对象时用0xFFFFFFFF来代替文件句柄(HANDLE),就表示了对应的文件映射对象是从操作系统页面文件访问内存,其它进程打开该文件映射对象就可以访问该内存块。由于共享内存是用文件映射实现的,所以它也有较好的安全性,也只能运行于同一计算机上的进程之间。
  3. 匿名管道:管道(Pipe)是一种具有两个端点的通信通道:有一端句柄的进程可以和有另一端句柄的进程通信。管道可以是单向-一端是只读的,另一端点是只写的;也可以是双向的一管道的两端点既可读也可写。
  4. 命名管道:命名管道(Named Pipe)是服务器进程和一个或多个客户进程之间通信的单向或双向管道。不同于匿名管道的是命名管道可以在不相关的进程之间和不同计算机之间使用,服务器建立命名管道时给它指定一个名字,任何进程都可以通过该名字打开管道的另一端,根据给定的权限和服务器进程通信。
  5. 邮件槽:邮件槽(Mailslots)提供进程间单向通信能力,任何进程都能建立邮件槽成为邮件槽服务器。其它进程,称为邮件槽客户,可以通过邮件槽的名字给邮件槽服务器进程发送消息。进来的消息一直放在邮件槽中,直到服务器进程读取它为止。一个进程既可以是邮件槽服务器也可以是邮件槽客户,因此可建立多个邮件槽实现进程间的双向通信。
  6. 剪贴板:剪贴板(Clipped Board)实质是Win32 API中一组用来传输数据的函数和消息,为Windows应用程序之间进行数据共享提供了一个中介,Windows已建立的剪切(复制)-粘贴的机制为不同应用程序之间共享不同格式数据提供了一条捷径。当用户在应用程序中执行剪切或复制操作时,应用程序把选取的数据用一种或多种格式放在剪贴板上。然后任何其它应用程序都可以从剪贴板上拾取数据,从给定格式中选择适合自己的格式。
  7. 动态数据交换:动态数据交换(DDE)是使用共享内存在应用程序之间进行数据交换的一种进程间通信形式。应用程序可以使用DDE进行一次性数据传输,也可以当出现新数据时,通过发送更新值在应用程序间动态交换数据。
  8. WM_COPYDATA消息:WM_COPYDATA是一种非常强大却鲜为人知的消息。当一个应用向另一个应用传送数据时,发送方只需使用调用SendMessage函数,参数是目的窗口的句柄、传递数据的起始地址、WM_COPYDATA消息。接收方只需像处理其它消息那样处理WM_COPY

3.简述TCP与UDP的区别


TCP


UDP


是否有序


接收到的可能乱序,但是有段标号供排序


无序


可靠性


可靠的


不可靠的


是否连接


面相连接


面相非连接


负责


维护虚拟连接,负载较高


无连接,负载较小


是否确认


需要确认(可靠性的一种)


不需要确认


是否有控制


滑动窗口和拥塞控制机制

无控制

二.算法题

1.有一个数据A = [a_1,a_2,a_3.....a_n],n的大小不定,请设计算法将A中的所有数据组合进行输出

解析:可以采用递归的方式来实现,每次取一个元素,在剩下元素的数组中递归,要注意递归结束的条件。

2.有这样一个数组A,大小为n,相邻元素差的绝对值都是1,如A={4,5,6,5,6,7,8,9,10,9},现在给定数组A和目标整数t,请找到t在A中的位置。(15分)

解析:

解法一:常规解法:遍历,时间复杂度O(n)

解法二:快速定位到第一个目标整数,后面继续遍历,最好情况下是O(1),最坏情况是O(n)

快速定位方法:以A[0]<t为例:

  1. dis = t - A[0],如果A[dis] = t,则定位到,
  2. 否则A[dis]必然小于t,重复步骤1

3.二叉树的面积等于二叉树的长乘以二叉树的宽,二叉树的宽等于最长节点间的距离,二叉树的长等于根节点到子节点的最长长度,请设计算法计算二叉树的面积?

解析:面积 = 长 * 宽 = 树的深度 * (左子树的深度 + 右子树的深度 + 1)

三.算法设计题

百度地图中存在需要标注的很多点,并且这些点都需要带描述,现将描述假设为矩形,并且可以位于点的左边或右边,但点不能移动,如果两个点间的描述发生覆盖,则

需要将其中的一个点进行删除

1.在一个区域内,请设计算法将有效的点进行输出(尽可能多的点)?

2.如果区域足够大,点足够多,算法会出现性能的瓶颈,请设计详细的算法来说明并解决问题?

解析:个人理解

1 关键是在怎么样解决两个点之间发生冲突的情况,在发生冲突时应该如何调整。

  1. 从地铁左上角开始标记,逐行标记
  2. 默认的标记位置为点的右边
  3. 当发生冲突时,查看冲突区域的负责点,询问是否可以调整为左置
  4. 如果被冲突点可以重置方向,则重置;否则,同样发起询问动作,直到有一个点重置成功为止。

2 性能瓶颈应该出现在调整算法上,当发生一次冲突时,可能会引起连带的反应,造成多次调整。

解决方案:对点进行分级,每个点增加权重,按级别进行标记,优先标记权重值较高的点。

时间: 2024-10-19 09:36:51

百度2014软件开发工程师笔试题详解 (转)的相关文章

百度2015软件开发工程师笔试题

百度的题总体来说不难,都是一些基础的题.好像近几年都有这样的趋势,计算机网络,操作系统,数据库,每个基础课出一道题.接着是三道程序设计题.最后是系统设计题.所以好好看计算机基础是关键. 计算机基础简答题 1.简述tcp的三次握手和四次挥手,以及为什么挥手的时候需要四次. 2.列出内存管理淘汰算法,并简述. 3.列出数据库的范式,并简述. 程序设计题 1.寻找单向链表中的某一项,如果这项出现了两次,则返回第一次. 2.一个正整数集合s,找到其中的最大元素从c,使得c=a+b.a,b也是正整数集合的

腾讯web前端开发工程师笔试题及答案

1. 如何实现事件委托? 首先要知道什么是事件委托. 考虑一个列表,在li的数量非常少的时候,为每一个li添加事件侦听当然不会存在太多性能方面的问题,但是当列表非常的长,长到上百上千甚至上万的时候(当然只是一个解释,实际工作中很少遇到这么多li的情况),为每个li添加事件侦听就会对页面性能产生很大的影响. 就像下面这段代码: <!DOCTYPE HTML><html><head><meta charset="utf-8" /><ti

iOS开发工程师笔试题

iOS开发工程师笔试题 分类: IOS 面试题2013-01-17 10:28 820人阅读 评论(0) 收藏 举报 随着iOS平台开发的职位的增加,笔试.面试也越来越有“套路”,这里我总结了一些面试题,多数是Objective-C的基础知识,适合于面试新人,答案是我自己答的,不准确的地方,欢迎指出. 1.   Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? Object-c的类不可以多重继承:可以实现多个接口,通过实

前端试题-2016年阿里前端开发工程师笔试题6,7,8题的解法

2016年阿里前端开发工程师笔试题(只有题,没有答案): http://www.cnblogs.com/sdgf/archive/2015/08/18/4740698.html 第6题:请在____处填写答案,从而达到题目的要求 var arr = [1, 2, 3, 4, 5]; var result = arr.sort(_______________________________).join("+"); console.log(result); 解答:在排序当中,如果需要按照某

C++经典笔试题详解

1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问.它是一个本地的全局变量. 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用.那就是,这个函数被限制在声明它的模块的本地范围内使用 2.引用与指针有什么区别? 1) 引用必须被初始化,指针不必. 2) 引用初始化以后不能被改变,指针可以改变所指的对象.

阿里巴巴2014笔试题详解(9月22北京)(转)

转:http://blog.csdn.net/zs634134578/article/details/21101971 第一部分  单选题(前10题,每题2分:后10题,每题3分.选对得满分,选错倒扣1分,不选得0分) 1.一次内存访问,SSD硬盘访问和SATA硬盘随机访问的时间分别是() A.几微秒,几毫秒,几十毫秒     B.几十纳秒,几十毫秒,几十毫秒 C.几十纳秒,几十微秒,几十毫秒 D.几微秒,几十微秒,几十毫秒 解析:内存访问速度通常在50ns到80ns范围内,SSD硬盘的访问速度

2014网易运营工程师笔试题(邮件运维)--题解--第二天

1.对于多关键字而言,那种文件组织方便而又高效() A.顺序文件 B.倒排文件 C.散列文件 D.B+树索引文件 文件在外存上的基本的组织方式有四种:顺序组织,索引组织,散列组织和链组织:对应的的文件名称分别为:顺序文件.索引文件.散列文件和多关键字文件.选择哪一种文件组织方式,取决于对文件中记录的使用方式和频繁程度.存取要求.外存的性质和容量. 多关键字文件:包含有多个次关键字索引的文件称为多关键字文件. 倒排表的主要优点是:在处理复杂的多关键字查询时,可在倒排表中先完成查询的交.并等逻辑运算

CVTE C/C++开发工程师笔试题(一)

问题描述: 字符串组装. 现在需要将一些数据格式不同的数据组装成一个char型字符串输出,数据来源包含一个char型的字符串,一个short型的16进制数据: 举例: 假若定义如下2个变量: 1.char* vendor = "cvte"; 2.unsigned short checksum = 0xA0B0; 最终输出结果为:cvte_A0B0: 请在不调用库函数的情况下实现函数  char* CombineString(char *vender,unsigned short che

笔试-4399【2020校招】Web后端开发工程师笔试题(我又行了?然后一份面试通知都没有,我是真的菜啊。。。。)

感悟:两小时,单项选择15,问答8,编程3,论述5(大学规划,为什么选这个岗位等等,也占分) 单选:计算机网络偏多,然后就是一些基本知识点了: 好喜欢考这东西啊,下面答案是6,因为末尾有个'\0',我做错了....如果c[10]的话就是10 归并排序最坏情况(多分析一点最坏情况,因为最好情况都考烂了.....): 问答: TCP的三次握手和四次挥手,为什么是三次而不是两次,为什么是四次而不是三次 SQL建表(create table `user`(id int not null, user va