首页 > 代码库 > 百度软件开发(上海站)笔试题解答

百度软件开发(上海站)笔试题解答

软件开发(上海)

简答题

  1. 描述OSI(开放系统互联基本参考模型)七层结构:

第七层:应用层,直接对用程序提供服务,应用程序可以变化,但要包括电子消息从传输;

第六层:表示层,格式化数据,以便为应用程序提供通用接口,这可以包括加密服务

第五层:会话层:在两个节点之间建立端连接。此服务包括建立连接是以全双工还是以半双工的方式进行设置,尽管可以再层4中处理双工方式

第四层:传输层,常规数据递送,面向连接或无连接。包括全双工或半双工,流控制和错误恢复服务

第三层:网络层,通过寻址来建立两个结点之间的连接,它包括通过互联网来路由和中继数据

第二层:数据链路层,将数据分帧,并处理流控制。本层指定拓扑结构并提供硬件寻址

第一层:物理层,原始化比特流的传输,电子信号传输和硬件接口

数据发送时从第七层到第一层,接受方则相反

上三层总称应用层,用来控制软件方面

下四层总称数据流层,用来管理硬件

数据在发送至数据流层的时候将被拆分

在传输层的数据叫段 网络层叫包 数据链路层叫帧 物理层叫比特流 这种叫法叫PDU(协议数据单元)

  1. 写出进程间数据共享的方式,至少三种

1)通过共享内存映射文件

2)利用共享内存dll

3)向另一个进程发送WM_COPYDATA消息

4)调用ReadProcessMemory以及WriteProcessMemory函数,用户可以发送由GlobalLock(GMEM_SHARE,...)函数调用提取的句柄、GlobalLock函数返回的指针以及VirtualAlloc函数返回的指针。

  1. 描述TCPUDP的区别,并各写出他们的一个上层协议

TCP是面向链接的,TCP的三次握手在很大程度上保证了连接的可靠性

UDP传送数据前并不与对方进行建立连接,对接收到的数据不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以UDP是一种无连接的,不可靠的一种数据传输协议

UDP由于不进行数据确认,所以传输速率更快,实时性更好

上层协议很多,比如TCPHTTPFTPSMTPUDPnfstftpsnmp,snmp

程序与算法设计

  1. 给出数组A={a_0a_1a_2,…,a_n}(你是可变的),打印出所有元素的组合

程序代码为:

#include<iostream>

#include<sstream>

#include<string>

usingnamespace std;

voidmain(){

string* str_arr=new string[10];

int len=10;

for(int i=0;i<len;i++)

{

           ostringstream oss;

           oss<<i;

           str_arr[i]="a_"+oss.str();

}

cout<<"组合结果为:"<<endl;

for(int i=0;i<len;i++)

{

           for(int j=i+1;j<len;j++){

                    cout<<str_arr[i]<<"-"<<str_arr[j]<<"      ";

           }

           cout<<endl;

}

cin>>len;//防止运行后关闭窗口

}

  1. 数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置。

程序代码:

#include<iostream>

#include<math.h>

usingnamespace std;

voidmain()

{

 constint len=12;

intnums[len]={1,2,3,4,5,4,3,2,1,0,-1,-2,},find;

cout<<"请输入要查找的数"<<endl;

cin>>find;

int i=0;

while(i<len)

{

           int tmp=abs(find-nums[i]);

           if(tmp==0)

           {

                    cout<<"位置为"<<i;

                    break;

           }

           else if(i+tmp<len)

           {

                    i+=tmp;

           }

           else

           {

                    cout<<"要查找的元素不在数组中";

                    break;

           }

}

cin>>find;//防止运行后关闭窗口

}

  1. 求二叉树的面积(高乘宽),高为二叉树根结点到叶子结点的最大距离,宽为二叉树最多的结点数

此题由于需要封装树的操作,故略去代码,具体思路为:先进性深度优先搜索,得到树的高度,再进行广度优先搜索得到树的宽,然后相乘即可。

系统设计题

         给定一个百度地图的截图,对于地图上的某一点,需要在地图上标注该点的信息,将信息抽象成一个矩形,可以在该点的左边标记,也可以在该店的右边标记。但是任意两点标记后的矩形是不能有覆盖的,否则删除其中一个点。

问题1:现给一固定区域,设计一个算法,要求标记足够多的点

问题2:当点足够多的时候,算法可能遇到性能瓶颈,需要对算法重新优化

         这条实在是不会,只想到将地图栅格化。


本文出自 “虎哥的博客” 博客,请务必保留此出处http://7613577.blog.51cto.com/7603577/1560280

百度软件开发(上海站)笔试题解答