滴滴校招笔试题及解析

//仅供学习交流,请勿转载

滴滴出行2016校园招聘 软件研发工程师
单选题
1:下面代码的输出结果是什么 (      )
#include using namespace std;
class A
{   public: void virtual f() 
    {       cout << "A" << endl;
    }
};
class B : public A
{   public: void virtual f()
    {       cout << "B" << endl;
    }
};
int main(){
    A *pa = new A();
    pa->f();//A
    B *pb=(B *)pa;
    pb->f();//A
delete pa, pb;
    pa=new B();
    pa->f();//B
    pb=(B *)pa;
    pb->f();//B
}
2: 以太网转换控制包是基于 (      )
目的IP地址


3: 声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针,该函数的返回值是int,参数是int*,正确的是(      )
int (*(*p)[10])(int*);

4: 以下不能对二维数组a进行正确初始化的语句是(        )
int a[2][3] = {{0,1}, {2,3}, {4,5}};

5: 下面不属于TCP协议拥塞控制部分的是 (      )
带外数据
解:属于拥塞控制部分的有,1:快速重传,2:慢启动。3:快速恢复

6: 当很频繁的对序列中部进行插入和删除操作时,应该选择使用的容器是( list  )

7: 已知:print()函数是一个类的常成员函数,它无返回值,下列表示中, (      )是正确的
void print() const

8: Linux中,提供TCP/IP包过滤功能的软件叫什么?  (      )
iptables

9: 下面程序的正确执行结果为(      )
#include 
int f(int);

void main()
{   
    int a=2, i;   
    for(i=0;i<3;i++) 
cout<(a)<<" ";  

cout<(int a)
{       
int b=0;        
static int c=3;
     b++;
     c++;       
return (a+b+c);
}
7 8 9

10:以下哪种排序属于稳定排序?
堆排序


单选题
1.下列PHP配置项中,哪一个和安全最不相关:(   )
file_uploads
解:与安全相关的有1:open_basedir  2:register_globals 3:disable_functions
open_basedir 可将用户访问文件的活动范围限制在指定的区域 ,通常是其家目录的路径,也   可用符号 "." 来代表当前目录。注意用 open_basedir 指定的限制实际上是前缀 , 而不是目录名。   举例来说 : 若 "open_basedir = /dir/user", 那么目录 "/dir/user" 和 "/dir/user1" 都是   可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。例如设置成 : "open_basedir = /dir/user/" 

register_globals 的意思就是注册为全局变量 ,所以当 On 的时候,传递过来的值会被直接的注册为全局变量直接使用,而 Off 的时候,我们需要到特定的数组里去得到它。 1.PHP  4.2.0   版开始配置文件中    register_globals  的默认值从  on  改为  off  了,虽然你可以设置它为 On ,但是当你无法控制服务器的时候,你的代码的兼容性就成为一个大问题,所以,你最好从现在就开始用 Off 的风格开始编程。 2. 当 register_globals 打开以后,各种变量都被注入代码,例如来自  HTML  表单的请求变量。再加上  PHP  在使用变量之前是无需进行初始化的,这就使得更容易写出不安全的代码。 当打开时,人们使用变量时确实不知道变量是哪里来的,只能想当然。但是 register_globals  的关闭改变了这种代码内部变量和客户端发送的变量混杂在一起的糟糕情况。

disable_functions 限制程序使用一些可以直接执行系统命令的函数 ,如 system , exec , passthru , shell_exec , proc_open 等等。所以如果想保证服务器的安全,请将这个函数加到 disable_functions 里或者将安全模式打开吧

file_uploads , PHP 文件上传功能记录 file_uploads 指令决定是否启用,默认值: On 。

2:我们在将某个订单送给某一司机之前,需要计算一下这个司机选择接受这个订单的概率,现有A,B两个订单,对某一司机。已知: 
1.如果只将订单A播送给司机,司机接受的概率是Pa;
2.如果只将订单B播送给司机,司机接受的概率是Pb;
现在讲AB同时播送给该司机,司机选择A的概率是多少(   )
[1-(1-Pa)*(1-Pb)]*Pa/(Pa+Pb)

(1-pa)*(1-pb)是两个单都不接的概率,1-(1-pa)*(1-pb)是接单的概率 Pa/(Pa+Pb)是在两者中选择Pa 的概率

3:int main{
    fork() || fork()
}
共创建了(3)个进程
fork()给子进程返回一个零值,而给父进程返回一个非零值;
在main这个主进程中,首先执行 fork() || fork(), 左边的fork()返回一个非零值,根据||的短路原则,前面的表达式为真时,后面的表达式不执行,故包含main的这个主进程创建了一个子进程,
由于子进程会复制父进程,而且子进程会根据其返回值继续执行,就是说,在子进程中, fork() ||fork()这条语句左边表达式的返回值是0, 所以||右边的表达式要执行,这时在子进程中又创建了一个进程,
即main进程->子进程->子进程,一共创建了3个进程。

4:同源策略是浏览器的安全基石,但互联网业务往往需要实现跨域通信,以下哪一种方案可以实现跨域?(  CORS )
同源策略(Same Origin PolicySOP)是指浏览器请求的资源必须是同域名、同协议、同端口。不同源的客户端脚本(js,actionscript)在没有明确的授权的情况下不能读取对方的资源。
跨源资源(CrossOrigin Resources SharingCORS )是一种允许多种资源在一个web页面请求域之外的另一个域的资源的协议,是为了让AJAX能够跨域而生的。
内容安全策略(Content Security PolicyCSP)是一种白名单机制,限制网站中是否可以包含某来源的内容。
Oauth是一个关于授权的开放网络标准,相当于在客户端与服务器之间添加了一个授权层。

5:链表不具有的特点是(  可随机访问任一元素  )

6:关于ARP表,以下描述中正确的是(用于建立IP地址到MAC地址的映射  )
ARP “地址解析协议”,就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行

7:如果计算机内存大小为32M,按字节编码,则表示该内存地址至少需要(  25  )位?
32M = 2^5 M
M = 2^10 K
K = 2 ^10 字节
则最少需要25位才能寻址到32M

8:C语言中5|7的结果是(7 )
C语言中:||为逻辑或,只要有一个为真,即为逻辑真 1
                 |位按位或,化成二进制进行或运算。5|7=0101|0111=0111=7

9:对于下面的C语言声明描述正确的一项是(p是指向长度为16的字符数组的指针  )

char (*p)[16]
1、char *p[16],根据运算优先级,[]优于*,所以p和[]先结合,因此p是数组;
2、char (*p)[16],p和*由括号括住,p和*先结合,因此p是 指针 。

10:下列有关Socket的说法,错误的是(   )
解:正确的有1:Socket用于描述IP地址和端口,是一个通信链的句柄2:Socket客户端的端口是不固定的3:Socket服务端的端口是固定的
socket 可以基于TCP 面向连接 也可以基于UDP无连接

11:如果137+276=435,那么731+672=(   1623)
本题采用的是八进制算法,在八进制算法中,某一位的数字达到8时就要向前进一位,跟十进制遇10向前进1位是一样的道理,所以137+276计算中,第一位是7+6=13,八进制中是13-8=5,即余5进一位,第二位是3+7=10,还有刚才进的一位,总共是10+1=11,八进制中11-8=3,即余3进一位,第三位是1+2=3,还有刚才进的一位,3+1=4,小于8不用进位直接写出,所以137+276=435,同理可计算出731+672=1623

12:深度学习是当前很热门的机器学习算法。在深度学习中,涉及到大量矩阵相乘,现在需要计算三个稠密矩阵A,B,C的乘积ABC,假设三个矩阵的尺寸分别为m*n,n*p,p*q,且m(AB)C )
a*b,b*c两矩阵相乘效率为a*c*b
ABC=(AB)C=A(BC).
(AB)C = m*n*p + m*p*q,
A(BC)=n*p*q + m*n*q.
m*n*p(AB)C 最小


13:如果我们可以通过覆盖率检测来判断我们是否对所有的路径都进行了测试,但是仍然可能存在未被检测出来的缺陷,原因是(1:程序可能因为缺某些路径而存在问题2:穷举路径的测试可能不好暴露数据敏感的错误3:就算穷举路径测试也不能保证程序符合需求   )

14:下述几种排序方法中,要求内存最大的是(   归并排序 )
冒泡排序,简单选择排序,堆排序,直接插入排序,希尔排序的空间复杂度为O(1),因为需要一个临时变量来交换元素位置,(另外遍历序列时自然少不了用一个变量来做索引)
快速排序空间复杂度为logn(因为递归调用了) ,
归并排序空间复杂是O(n),需要一个大小为n的临时数组.
基数排序的空间复杂是O(n),桶排序的空间复杂度不确定

15:表达式"X=A+B*(C-D)/E+F"的后缀表示形式可以为(  XABCD-*E/+F+= )
不包含括号,   运算符   放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行

16:采用多路复用I/O监听3个套接字的数据时,如果套接字描述符分别是:5,17,19,则
select(int maxfd,struct fd_set* rdset,NULL,NULL)中的maxfd应取为()
Maxfd是三个套接字描述符中最大数字加上1

单选题:1
1:有3堆火柴,分别有4,5,7根,两个人依次取火柴,每次只能取同一堆的火柴,最少拿一根,最多拿着堆内所有火柴,取走最后一根火柴,让对方无火柴可以取者为胜。请问现在谁会获胜?( 先手)
先手先拿掉第3堆的6根,这时候变成了4,5,1三堆
此时如果对方(后手)拿掉了1,那么就剩下4,5两堆  我就拿5里面的1根,保证剩下两堆的数量相等,这样不论对方如何再拿,我都可以从另外一堆拿掉相应的根数,始终保持两堆相等,直到出现两堆都是1根的情况,这时就赢了。
如果对方(后手)拿4或5堆全部,我就把剩下的拿掉剩1根,又出现了两堆都是1的情况。
如果对方(后手)拿掉4或5堆的一部分:如果4里拿1,我在5里拿2,变成1,2,3 对方如何再拿我都能保证最后手;   如果5里拿1,我就拿1堆里的那一根,变成4,4,保证后手;如果5里拿2,我就4里拿2,变成1,2,3,保证最后手。

2:有三个白人被一个印第安人反对部落俘虏了。部落的首领愿意把他们放了,所以他把他们领到一根没有亮光的帐篷里。他给了每人一条头巾(他有5条头巾,3白2红,所以有2条是没有用到的)。然后他们排着队出去。这样,每个人都可以看到前面人的头巾颜色,但是看不到自己头巾的颜色(第一个走出去的看不到任何头巾,第二个可以看到第一个人的头巾,第三个人可以看到前面两个人的头巾)。如果其中一个人说出了自己头巾的颜色,那么所有人都可以被放了。几分钟的沉默后,其中一个人说:"我头巾的颜色是。。。"。然后他们就被放了。问题是第几个人说的?头巾是什么颜色的?(第一个人:白色)

附件条件:你可以设想所有的囚犯都是足够聪明的,而且他们对同伴的智慧也很有信心他们猜错一次就会被监禁。所有人加起来只能猜一次所有人都想被释放。

一共有以下四种情况:
1)第一个红色,第二个红色;此时,第三个人不用沉默,直接说,我是白色。
2)第一个红色,第二个白色;此时,沉默一会儿,第二个人想,如果我是红色,前面也是红色,第三个人早就说自己是白色了,他没有说,说明我是白色。(但题目没有此选项)
3)第一个白色,第二个红色;
4)第一个白色,第二个白色;
3和4情况下,会沉默两会儿(^-^比一会儿时间长些),第一个就想了,如果是前两种情况,等了这么就后面两个人该说话了,他们不说,说明不确定是哪种情况,但对自己而言3和4都是白色,所以说自己是白色的。

达到目的的前提,大家有一个时间观念能够区分,直接说出、等一会儿,等两会儿的时间概念。(好在这个题没有 “第二个白色” 的选项,所以不用纠结这个几分钟的沉默是等一会儿还是等两会儿)

3:某宿舍有甲乙丙三人,一个出生在北京市,一个出生在上海市,一个出生在广州市,他们所学的专业,一个是金融,一个是管理,一个是外语。已知:
(1)乙不是学外语的
(2)乙不出生在广州市
(3)丙不出生在北京市
(4)学习金融的不出生在上海市
(5)学习外语的出生在北京市
根据上述条件,可推出丙所学的专业是(金融)。
1、学习外语出生在北京市,
乙不学外语,又不出生在广州市,所以乙在上海市
又因为学习金融不出生在上海,所以乙学习管理,
2、丙不出生在北京,所以不学外语,所以丙只有金融可以学

4:两个圆,半径分别为1cm,3cm,小圆在大圆外,绕大圆圆周一周,请问小圆一个旋转了多少圈?4
解:把大圆剪断拉直.小圆绕大圆圆周一周,就变成从直线的一头滚至另一头.因为直线长就是大圆的周长,是小圆周长的3倍,所以小圆要滚动3圈.
但是现在小圆不是沿直线而是沿大圆滚动,小圆因此还同时作自转,当小圆沿大圆滚动1周回到原出发点时,小圆同时自转1周.当小圆在大圆内部滚动时自转的方向与滚动的转向相反,所以小圆自身转了2周.当小圆在大圆外部滚动时自转的方向与滚动的转向相同,所以小圆自身转了4周.
       如何更通俗的理解呢,就是看圆心距离,在圆外时圆心距离是4,且小球滚动圆心距离是不变的,然后路径是4πR,又可知,圆心走过的距离和小圆边走过的距离一定是相等的,故也是4πR,所以要转的圈数是4πR/ πR=4圈,同理可知如果小圆在圆内只要2圈就够了

5:一块不均匀的主板,从头烧到尾要2个小时,最少需要几块相同款型的主板,才能准确的衡量出2小时30分钟?
三根就可以。 首先拿一根从两头烧。是一个小时。 再拿一根从两头烧,又是一个小时。 第三根和第二根同时烧,不过第三根是从一头烧,等第二根烧完了第三根就烧了一个小时,还剩一个小时。然后将第三根剩余的从两头烧,就是半个小时了。 所以总共就是3根了

6:一根长度为10000米长的棍子,需要被切割成10000根长度为1米的小段,若一次可以同时切割多根棍子,问最少需要切割几次?
2^13<10000<2^14

7:已知A市到B市有2/3的路程是高速公路,1/3是普通公路。小王开车从A市到B市,在高速公路上的行驶速度是每小时120公里,在普通公路上的行驶速度是每小时60公里,小王总共开了10个小时,请问A市到B市有多长距离?()
高速和低速:长度比为2:1,速度比也为2:1,所以用的时间相同,各为5小时。距离=(120+60)*5=900

2/3*x/120+1/3*x/60=10;x=900

8.某办公室包括主任在内10人,有关这10人的说法,以下三个只有一个是真的:
1.有人会使用五笔打字 
2.有人不会使用五笔打字 
3.主任会使用五笔打字
以下那项为真?
1若对,2错-->没有人不会用五笔,3错-->主任不会用五笔。出现矛盾。
2若对,1错->没有人会使用五笔,3错->主任不会使用五笔,没有出现矛盾,所以没有人会使用五笔

9:32!的计算结果,尾数总共有几个零?
只有5或0做乘法才得到0
套公式:
32!末尾0的个数,即求32!中 2X5 的因子的个数,有多少个  2X5 的因子,就有多少个0
由于 2 的因子个数远大于 5 的个数,所以转换为求 5 的因子个数
1~32中,有5 10 15 20 25(5X5) 30,注意黑体的有两个5,总共7个

10:有一个小白程序员,写了一个只能对5个数字进行排序的函数。现在有25个不重复的数字,请问小白同学最少调几次该函数,可以找出其中最大的三个数?
先每5个数一组,分5组比较,得到5个小组最大,在对这5个数比较得到前3大的,分析,最大的那个肯定最大,排在第一位,第二第三的只能出现在一下5个数中(最大组的第2、3位,第二大的组的第1、2位,或者第三大的组的第1位)将这5个数再比较一次得到第2、3。所以共5+1+1=7次

11:2015盏灯,一开始全部熄灭,序号分别是1-2015,先把1的倍数序号的灯的开关全部按一次,然后把2的倍数的灯的开关全部按一次,然后把3的倍数的开关按一次,以此类推,最后把2015的倍数灯的开关按一次。问最后亮着的灯有多少盏?

由于最初所有电灯是关着的,所以只有哪些拉了奇数次开关的电灯才是亮的,而每一盏电灯的拉线开关被拉了多少次取决于这盏灯的编号的数字有多少个不同的正约数,而一个数的约数都是两两对应的,平方数有两个是相同的,所以减去一个,变成了奇数,也就是说平方数的正约数为奇数个。1,4,9,16,.......

12:有2分盐,一份120克,一份10克,用一个天平最少几次可以称出一份25克的盐?
3
因为有一份是10
所以用天平可以称出10的
两次10   然后把其中一份10平分  就有25了

单选题 2
1:关于ARP表,以下描述中正确的是()
ARP是地址解析协议,工作在网络层,简单语言解释一下工作原理。
1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
2:当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP  地址。
3:当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IPMAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
4:源主机收到ARP响应包后。将目的主机的IPMAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
广播发送ARP请求,单播发送ARP响应。

2:下列有关Socket的说法,错误的是()
socket 可以基于TCP 面向连接 也可以基于UDP无连接
3:下列PHP配置项中,哪一个和安全最不相关:()
open_basedir 可将用户访问文件的活动范围限制在指定的区域 ,通常是其家目录的路径,也   可用符号 "." 来代表当前目录。注意用open_basedir 指定的限制实际上是前缀 , 而不是目录名。   举例来说 : 若 "open_basedir = /dir/user", 那么目录 "/dir/user" 和 "/dir/user1"都是   可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。例如设置成 : "open_basedir = /dir/user/" 

register_globals 的意思就是注册为全局变量 ,所以当 On 的时候,传递过来的值会被直接的注册为全局变量直接使用,而 Off 的时候,我们需要到特定的数组里去得到它。 1.PHP  4.2.0   版开始配置文件中    register_globals  的默认值从  on  改为  off  了,虽然你可以设置它为 On ,但是当你无法控制服务器的时候,你的代码的兼容性就成为一个大问题,所以,你最好从现在就开始用 Off 的风格开始编程。 2. 当 register_globals 打开以后,各种变量都被注入代码,例如来自  HTML  表单的请求变量。再加上  PHP  在使用变量之前是无需进行初始化的,这就使得更容易写出不安全的代码。 当打开时,人们使用变量时确实不知道变量是哪里来的,只能想当然。但是 register_globals  的关闭改变了这种代码内部变量和客户端发送的变量混杂在一起的糟糕情况。

disable_functions 限制程序使用一些可以直接执行系统命令的函数 ,如 system , exec , passthru , shell_exec , proc_open 等等。所以如果想保证服务器的安全,请将这个函数加到 disable_functions 里或者将安全模式打开吧

file_uploads , PHP 文件上传功能记录 file_uploads 指令决定是否启用,默认值: On 。

4:深度学习是当前很热门的机器学习算法。在深度学习中,涉及到大量矩阵相乘,现在需要计算三个稠密矩阵A,B,C的乘积ABC,假设三个矩阵的尺寸分别为m*n,n*p,p*q,且mABC=(AB)C=A(BC).
(AB)C = m*n*p + m*p*q,
A(BC)=n*p*q + m*n*q.
m*n*p(AB)C 最小

5:如果137+276=435,那么731+672=()
本题采用的是八进制算法,在八进制算法中,某一位的数字达到8时就要向前进一位,跟十进制遇10向前进1位是一样的道理,所以137+276计算中,第一位是7+6=13,八进制中是13-8=5,即余5进一位,第二位是3+7=10,还有刚才进的一位,总共是10+1=11,八进制中11-8=3,即余3进一位,第三位是1+2=3,还有刚才进的一位,3+1=4,小于8不用进位直接写出,所以137+276=435,同理可计算出731+672=1623
6:C语言中5|7的结果是()
C语言中:||为逻辑或,只要有一个为真,即为逻辑真 1
                 |位按位或,化成二进制进行或运算。5|7=0101|0111=0111=7

7:如果计算机内存大小为32M,按字节编码,则表示该内存地址至少需要()位?
32M = 2^5 M
M = 2^10 K
K = 2 ^10 字节
则最少需要25位才能寻址到32M

8:如果我们可以通过覆盖率检测来判断我们是否对所有的路径都进行了测试,但是仍然可能存在未被检测出来的缺陷,原因是()


9:我们在将某个订单送给某一司机之前,需要计算一下这个司机选择接受这个订单的概率,现有A,B两个订单,对某一司机。已知: 
1.如果只将订单A播送给司机,司机接受的概率是Pa;
2.如果只将订单B播送给司机,司机接受的概率是Pb;
现在讲AB同时播送给该司机,司机选择A的概率是多少()
(1-pa)*(1-pb)是两个单都不接的概率,1-(1-pa)*(1-pb)是接单的概率 Pa/(Pa+Pb)是在两者中选择Pa 的概率

10:下述几种排序方法中,要求内存最大的是()
这个题要求的是空间复杂度。
冒泡排序,简单选择排序,堆排序,直接插入排序,希尔排序的空间复杂度为O(1),因为需要一个临时变量来交换元素位置,(另外遍历序列时自然少不了用一个变量来做索引)
快速排序空间复杂度为logn(因为递归调用了) ,
归并排序空间复杂是O(n),需要一个大小为n的临时数组.
基数排序的空间复杂是O(n),桶排序的空间复杂度不确定

11:链表不具有的特点是()

12:表达式"X=A+B*(C-D)/E+F"的后缀表示形式可以为()

13:同源策略是浏览器的安全基石,但互联网业务往往需要实现跨域通信,以下哪一种方案可以实现跨域?()
同源策略(Same Origin PolicySOP)是指浏览器请求的资源必须是同域名、同协议、同端口。不同源的客户端脚本(js,actionscript)在没有明确的授权的情况下不能读取对方的资源。
跨源资源(CrossOrigin Resources SharingCORS )是一种允许多种资源在一个web页面请求域之外的另一个域的资源的协议,是为了让AJAX能够跨域而生的。
内容安全策略(Content Security PolicyCSP)是一种白名单机制,限制网站中是否可以包含某来源的内容。
Oauth是一个关于授权的开放网络标准,相当于在客户端与服务器之间添加了一个授权层。

•14:采用多路复用I/O监听3个套接字的数据时,如果套接字描述符分别是:5,17,19,则
select(int maxfd,struct fd_set* rdset,NULL,NULL) 中的maxfd应取为()
Maxfd是三个套接字描述符中最大数字加上1

15:对于下面的C语言声明描述正确的一项是()
char (*p)[16]
p和谁先结合,p就是什么。
[]的运算级别大于*,
1、char *p[16],根据运算优先级,[]优于*,所以p和[]先结合,因此p是数组;
2、char (*p)[16],p和*由括号括住,p和*先结合,因此p是 指针 。

16:int main{
    fork() || fork()
}
共创建了()个进程
ork()给子进程返回一个零值,而给父进程返回一个非零值;
在main这个主进程中,首先执行 fork() || fork(), 左边的fork()返回一个非零值,根据||的短路原则,前面的表达式为真时,后面的表达式不执行,故包含main的这个主进程创建了一个子进程,
由于子进程会复制父进程,而且子进程会根据其返回值继续执行,就是说,在子进程中, fork() ||fork()这条语句左边表达式的返回值是0, 所以||右边的表达式要执行,这时在子进程中又创建了一个进程,
即main进程->子进程->子进程,一共创建了3个进程。


单选题3
1:边长1米的正方体共计2100个,堆成一个实心的长方体,它的高是10米,长,宽都大于高,问长方体的长与宽的和是多少米?
高是10米,则长乘以宽=2100/10=210
将210分解质因数,得到210=2*3*5*7 
 到了这里,因为长和宽都大于10 ,所以只能取2*7和3*5 
 所以长为15,宽为14

2:在所有的2位数,十位数比个位数大的位数有几个?()

一共有100个两位数组合(00~99),其中两位相等的有10个(00、11。。。99),因为十位和个位处于同等的地位,所以十位比个位大的有一半即90/2=45个。
ps:可以这样考虑是因为如果十位比个位大,十位一定不为0

3:人患癌症的概率为1/1000.假设有一台癌症诊断仪S1,通过对它以往的诊断记录的分析,如果患者确实患有癌症它的确诊率为90%,如果患者没有癌症,被诊断成癌症的概率是10%。某人在被诊断为癌症后,他真正患癌症的概率为()

分为真的有癌症真的检查出来了:1/1000*9/10
假的有癌症但是检查错误了:999/1000*1/10
所以概率为:(1/1000*9/10)/((1/1000*9/10)+(999/1000*1/10))=/1/112

4:你站在一艘船上,你站起来提起船上的一个箱子,人拿起箱子的过程中,船吃水线会怎么样?


5:有3堆火柴,分别有3,9,12根,两个人依次取火柴,每次只能取同一堆的火柴,最少拿一根,最多拿走堆内所有火柴,取走最后一根火柴,让对方无火柴可以取者为胜。请问现在谁会获胜?()

采取的是特例分析法,可以采取以每次最少取一根的胜负结果这种特例来分析,
分析如下,首先按照取火柴的堆的顺序来看
堆的单双决定了这个堆决定两个人中的哪个获胜,
设甲乙两人,甲先手,乙后手
如果堆的顺序是 单单双(3.9.12; 9,3,12)
单堆--> 甲乙甲
单堆--> 乙甲乙
双堆--> 甲乙甲乙(最后甲没有火柴可拿)

如果堆的顺序是 双单单(12,3,9 ; 12,9,3)
双堆--> 甲乙甲乙
单堆--> 甲乙甲
单堆--> 乙甲乙(最后甲没有火柴可拿)

如果堆的顺序是 单双单(3,12,9 ; 9,12,3)
单堆 --> 甲乙甲
双堆 --> 乙甲乙甲
单堆 --> 乙甲乙(最后甲没有火柴可拿)


6:只使用一次临时变量,请问计算X^5+4X^3+6X+5最少需要几次算数操作?

这个题目肯定x是给定的已知数,不然没发做
分解成(((x^2+4)*x*x+6)*x+5
不会分解的请去看看秦九昭展开~
x已知,x^2 一次, x^2+4 二次 ,(x^2+4)*x 三次, (x^2+4)*x*x 四次
(x^2+4)*x*x+6 五次,((x^2+4)*x*x+6)*x 六次,(((x^2+4)*x*x+6)*x+5
七次


7:某一个非闰年有53个星期日,请问第二年的元旦一定是星期几?()

非闰年365天,也就是52周加1天,有53个周日说明首尾都是周日,那么第二年的元旦一定是星期一

8:在两位数10,11,....,98,99中,把每个被7除以余2的数字,如16,23....等,改成1,6,2,3....,而其余的数不变。问经过这样的变化之后所有数的和是多少()
假设满足被7除余2条件的数十位为m,各位为n,那么这个数变化之前数值为10*m+n,变化之后数值为m+n,两者之差为9*m。
10到99之前,这样的m有12个,分别为1,2,3,3,4,5,5,6,7,7,8,9,9*(1+2+3+…+9+3+5+7)=540;
10+11+…+99=4905;
4905-540=4365

9:有三个黑气球,其中只有一个黑气球中有金币,你可以任意选择任何一个气球,而主持人在剩下的气球中打破一个气球,然后告诉你里边没有金币:你还有一次机会,既可以坚持选择,也可以换另外一个未打破的气球。如果你选择换的话获得金币的概率为()

你选的那个中奖的概率是1/3,另两个整体中奖的概率是2/3,主持人打破一个气球里面没金币,那么2/3的概率就全部落在了剩下的那个气球上了。

10:水果店店长早晨通知店员,苹果应减10%,中午发现该减价是香蕉而非苹果,便又通知了香蕉减价10%,苹果提价10%,那么苹果是否恢复了原价?()
原价x元,降价后y=x(1-10%)=0.9x,升价后z=y(1+10%)=1.1y=0.99x。
所以苹果没有恢复原价。除非苹果原价是0元。

11:一个车队总长500米正在前进,其中有一辆摩托车从队尾行驶到队头,到达后又从队头走到队尾,这时,车队正好前进了1000米。已知车队的速度和摩托车的速度保持不变,问摩托车这段时间总共开了约多少米?()X是队伍的速度,Y是摩托车速度
                  追队头时,时间为:500/(Y-X)
                  追队尾时,时间为:500/(Y+X)
                 总时间为1000/X
所以有如下表达式:
               500/(Y-X)+500/(Y+X)=1000/X
 解得:Y^2=X^2+XY
同时除以X^2,解得:Y/X=1.618,所以时间一样,路程比=速度比,所以路程=1000*1.618=1618


单选题4
1:如下哪一段代码不能给地址0xaae0275c赋值为1?()

(volatile int *)0xaae0275c[0]=1 的意思是,先取出0xaae0275c地址处的值,然后把该值强制转换成int*类型,显然,该值是一个数值,不是变量,是右值,向该值再赋值1,就类似于 2=1; 这样的赋值,显然不对。
想改正确很容易,加上括号就OK了。
正确方式如下:
((volatile int *)0xaae0275c)[0]=1;
加上一对括号即可。

2:以下那种结构,平均来讲获取任意一个指定值最快?()
因为哈希表,就是几乎是一一对应的,你输入一个数,立马出结果,不用搜索的,其他的都得搜索
哈希表是O(1) , 二叉树是logN,栈是N,最慢。


3:一条tcp连接,主动关闭的一方不可能出现的连接状态是()
1)当客户端没有主动close的时候就断开连接,即客户端发送的fin丢失或者失败:  1:这时候若客户端断开的时候发送了FIN包,则服务端将会处于CLOSE_WAIT状态;2:  这时候若客户端断开的时候未发送FIN包,则服务端处还是显示ESTABLISHED状态
2) 当client想要关闭它与server之间的连接。client(某个应用进程)首先调用 close 主动关闭连接,这时TCP发送一个FIN M;client端处于 FIN_WAIT1 状态。
3)  当server端接收到FIN M之后,执行被动关闭。对这个FIN进行确认,返回给client ACK。当server端返回给client ACK后,client处于FIN_WAIT2 状态,server处于 CLOSE_WAIT 状态。它的接收也作为文件结束符传递给应用进程,因为FIN的接收     意味着应用进程在相应的连接上再也接收不到额外数据;
4) 一段时间之后,当server端检测到client端的关闭操作(read返回为0)。接收到文件结束符的server端调用 close 关闭它的socket。这导致server端的TCP也发送一个FIN N;此时server的状态为last——ack .
5)当client收到来自server的FIN后 。 client端的套接字处于 TIME_WAIT 状态,它会向server端再发送一个ack确认,此时server端收到ack确认后,此套接字处于CLOSED状态。

4:哪种排序算法最坏情况下是最快的?()
首先排除怎么都是O(n2)的冒泡排序。
对快速排序,它是每次划分出小于key和大于key的2部分,继续往下排序的。对每种特定的key选择策略,我们都可以构造出一个无序序列,使得快速排序每次划分时有一个区间只有一个值,另一个区间右剩下所有值,最坏复杂度是O(n2)
对希尔排序,他的时间复杂度最坏情况取决于所选取的步长序列(参考:https://en.wikipedia.org/wiki/Shellsort),而最好的也是O(nlog2n)/O(n1.5)的
对归并排序,先往下划分到不可再划分,之后往上合并相邻2个有序序列,层数一定是logn层,每层合并完成代价是n,所以在任何情况下时间复杂度为O(nlogn)

5:下列不属于标准冯诺依曼计算机体系结构部件的是()

6:如果downcast是安全的(也就是,如果基类指针或者引用确实指向一个派生类对象)这个运算符会传回适当转型过的指针。如果downcast不安全,这个运算符会传回空指针(也就是说,基类指针或者引用没有指向一个派生类对象)。这个是指C++里的()
dynamic_cast将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理, 即会作一定的判断。 对指针进行dynamic_cast,失败返回null,成功返回正常cast后的对象指针; 对引用进行dynamic_cast,失败抛出一个异常,成功返回正常cast后的对象引用。 
reinterpret_cast这个转换是最“不安全”的,两个没有任何关系的类指针之间转换都可以用这个转换实现。
static_cast静态转换是最接近于C风格转换,很多时候都需要程序员自身去判断转换是否安全。
const_cast这个转换好理解,可以将常量转成非常量。


7:math.h的abs返回值()

num为0或正数时,函数返回num值;
当num为负数且不是最小的负数时(不要问我最小的int类型负数是多少,上面那个图里面有真相),函数返回num的对应绝对值数,即将内存中该二进制位的符号位取反,并把后面数值位取反加一;
当num为最小的负数时(即0x80000000),由于正数里int类型32位表示不了这个数的绝对值,所以依然返回该负数。

8:arp协议用了()
地址解析协议,即ARPAddress Resolution Protocol),是根据 IP地址 获取 物理地址 的一个 TCP/IP协议 。 主机 发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

9:大量在外部排序中使用的数据结构是()
外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。外部排序最常用的算法是多路归并排序,即将原文件分解成多个能够一次性装人内存的部分,分别把每一部分调入内存完成排序。然后,对已经排序的子文件进行归并排序。
大规模数据存储中,实现索引查询这样一个实际背景下,树节点存储的元素数量是有限的(如果元素数量非常多的话,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下,那么如何减少树的深度(当然是不能减少查询的数据量),一个基本的想法就是:采用多叉树结构(由于树节点元素数量是有限的,自然该节点的子树数量也就是有限的)。
这样我们就提出了一个新的查找树结构——多路查找树。根据平衡二叉树的启发,自然就想到平衡多路查找树结构,也就是B~tree(B树结构)。


10:若有定义语句:char s[3][10],(*k)[3],*p;则以下赋值语句错误的是()
1.p=s; 
2.p=k;
3.p=s[0]; 
4.k=s;
124

11:若一序列进栈顺序为e1,e2,e3,e4,e5,问存在多少种可能的出栈序列()


12:IPv4版本的因特网总共有多少有效A类地址网络()

AIP地址范围从1.0.0.0 到126.0.0.0。可用的A类网络有126个。 
BIP地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个 。 
CIP地址范围从192.0.0.0到223.255.255.255。C类网络可达209万余个。 
D类地址用于多点广播(Multicast)。 DIP地址第一个字节以“lll0”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。 
EIP地址以“llll0”开始,为将来使用保留。 


你可能感兴趣的:(笔试)