美团点评校招笔试题

美团点评1
1:在网络7层协议中,如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章?
因为UDP要达到TCP的功能就必须实现拥塞控制的功能,而且是在路由之间实现,这个在底层明显是做不到拥塞控制的,在应用层也是做不到的,因为应用层之间和应用程序挂钩,一般只能操控主机的程序,而表示层是处理所有与数据表示及运输有关的问题,包括转换、加密和压缩,在传输层是不可能的,因为你已经使用了UDP协议,无法在本层转换它,只有在会话层.
        会话层(SESSION LAYER)允许不同机器上的用户之间建立会话关系。会话层循序进行类似的 传输层 的普通数据的传送,在某些场合还提供了一些有用的增强型服务。允许用户利用一次会话在远端的分时系统上登陆,或者在两台机器间传递文件。 会话层提供的服务之一是管理对话控制。会话层允许信息同时双向传输,或任一时刻只能单向传输。如果属于后者,类似于物理信道上的半双工模式,会话层将记录此时该轮到哪一方

2:两个线程并发执行以下代码,假设a是全局变量,那么以下输出___哪个是可能的?

A:3, 2 
y先执行++a,a为2; 
y再执行printf,a入栈,在打印到终端之前切换到x 
x执行++a,a为3; 
x执行printf,输出3;再切换到y 
y执行打印,输出2 

B:2 3 
x先执行++a,a为2; 
x再执行printf,输出2;切换到y 
y执行++a,a为3; 
y执行printf,输出3; 

C:3 3 
x先执行++a,a为2;切换到y 
y执行++a,a为3; 
y执行printf,输出3;切换到x 
x执行printf,输出3 

D:2 2 
类似C, 执行++a操作但没有写回到内存

这里关键有两点: 
(1)两个线程可随时被抢占 
(2)++a和printf不是原子指令,可随时被打断;特别注意函数printf,a作为参数压栈后,a再变化则不会影响输出(printf实际打印的是压栈的参数,是值拷贝的栈变量)

3:下列关于线程调度的叙述中,错误的是()
答案BC。
A选项,sleep()方法强制使当前线程休眠,释放CPU资源,以便使得其他所有线程有机会运行。
B选项,yield()方法使得当前的线程让出CPU的使用权,以使得比该线程优先级相同或更高的线程有机会运行。该线程在让出CPU使用权之后可能再次被选中,因此yield()方法可能会不起作用(这也说明了yield()方法不会使得比当前线程优先级低的线程运行)。
C选项,java虚拟机中如果多个线程优先级相同,则会随机选择一个线程占用CPU,处于运行状态的线程会一直运行,直至它不得不放弃CPU为止,因此不一定是分时调度。
D正确

4:在linux系统中,有一个文件夹里面有若干文件,通常用哪个命令可以获取这个文件夹的大小:
A不正确,ls的-h选项只有在有-l时候才会起作用,即ls -lh
B正确,du可以显示当前目录及子目录的磁盘占用情况,-d选项可以指明递归目录的深度,-s等价于-d 0,-h表示以可读的形式显示,比如B, KB, GB等
C不正确,df是显示整个文件系统的使用情况,不能得到当前文件夹的情况
D不正确,命令都写错了。。。就算是fdisk,是用来分区的,没关系。

5:我们用一个等臂天平来称物体的质量,如果我们要称的物体质量范围在140克(整数),请问我们最少需要几块砝码可以完成这项物体质量的称量?
此题可以看成用多少个数可以表示1-40之间任何一个数。砝码有三种状态,放在物体同侧,放在物体另一侧,并不使用。 所以这些数之间可以加可以减,也可以不计算在内。考虑用对称三进制来计算,即,-101三个状态。40可以用1111来表示,所以最多只用四个砝码就可以表示1-40之间所有数。
6:HTTP中的POST和GET在下列哪些方面有区别?()
操作方式    数据位置    明文密文    数据安全    长度限制    应用场景
GET HTTP包头  明文  不安全 长度较小    查询数据
POST    HTTP正文  可明可密    安全  支持较大数据传输    修改数据

7:以下哪些jvm的垃圾回收方式采用的是复制算法回收
两个最基本的java回收算法:复制算法和标记清理算法
                复制算法:两个区域A和B,初始对象在A,继续存活的对象被转移到B。此为新生代最常用的算法
                标记清理:一块区域,标记要回收的对象,然后回收,一定会出现碎片,那么引出
                标记-整理算法:多了碎片整理,整理出更大的内存放更大的对象
两个概念:新生代和年老代
                新生代:初始对象,生命周期短的
                永久代:长时间存在的对象
整个java的垃圾回收是新生代和年老代的协作,这种叫做分代回收。
P.S:Serial New收集器是针对新生代的收集器,采用的是复制算法
         Parallel New(并行)收集器,新生代采用复制算法,老年代采用标记整理
         Parallel  Scavenge(并行)收集器,针对新生代,采用复制收集算法
        Serial Old(串行)收集器,新生代采用复制,老年代采用标记清理
         Parallel   Old(并行)收集器,针对老年代,标记整理
        CMS收集器,基于标记清理
        G1收集器:整体上是基于标记清理,局部采用复制

综上:新生代基本采用复制算法,老年代采用标记整理算法。cms采用标记清理。

8:对于满足SQL92标准的SQL语句:
Select  foo,count(foo)  from pokes where foo>10  group by foo having count (*)>5  order by foo 
其执行顺序应该是?
1、from子句组装来自不同数据源的数据;  
2、where子句基于指定的条件对记录行进行筛选;  
3、group by子句将数据划分为多个分组;  
4、使用聚集函数进行计算;  
5、使用having子句筛选分组;  
6select计算所有的表达式;  
7、使用order by对结果集进行排序。 


9:将7723810的各位数字打乱排序,可组成的不同的7位自然数的个数是?
首先不看重复的两个7,首位除了0外可放六个数字,次位可放0所以也是六个,之后是5,4,3,2,16*6*5*4*3*2=4320     因为七重复了一次除以2即可

10:以下关于linux操作系统中硬链接和软链接的描述,正确的是?
硬链接就是在原有的iNode的引用加一,用ls -li是可以看到,硬连接的文件与源文件iNode值相同;而软连接是建立了一个iNode,专门用来指向实际文件的iNode,像快捷方式。所以D是错误的。
然而我对B保有疑惑,看到B时我就选了。我认为,“建立”一个空文件的软连接是不可能的,连iNode都没有了,怎么可能去建立软连接。应该用“存在”比较恰当。所以B不准确。
P.S.很多笔试题出的都很不严谨

11:开发C代码时,经常见到如下类型的结构体定义:
typedef struct list_t{
struct list_t *next;
struct list_t *prev;
char data[0];
}list_t;
最后一行char data[0];的作用是? 

看不懂char data[0];请去百度  柔性数组,它只能放在结构体末尾,是
申明一个长度为0的数组,就可以使得这个结构体是可变长的。对于编译器来说,此时长度为0的数组并不占用空间,因为数组名本身不占空间,它只是一个偏移量, 数组名这个符号本身代 表了一个不可修改的地址常量 (注意:数组名永远都不会是指针! ),但对于这个数组的大小,我们可以进行动态分配 请仔细理解后半部分,对于编译器而言,数组名仅仅是一个符号,它不会占用任何空间,它在结构体中,只是代表了一个偏移量,代表一个不可修改的地址常量!
 对于0长数组的这个特点,很容易构造出变成结构体,如缓冲区,数据包等等:
注意:构造缓冲区就是方便管理内存缓冲区,减少内存碎片化,它的作用不是标志结构体结束,而是扩展
柔性数组是C99的扩展,简而言之就是一个在struct结构里的标识占位符(不占结构struct的空间)。

12:在x86系统下,sizeof如下结构体的值是多少?
1
2
3
4
5   struct{ 
char a[10];
int b;
short c[3];
}

相对简单的内存对齐,需要注意的是char a[10];并不是代表结构体需要对齐最长的长度是10,它只是10个char聚在一起,本质没有变化
所以说,需要对齐的最大长度还是4,故4(char a[4])+4(char a[4]) +4(char a[2] 由于内存对齐为4)+4(int)+4(short[2])+4(short[1]内存对齐为4)=6*4=24



13:C++中构造函数和析构函数可以抛出异常吗?
 1.不建议在构造函数中抛出异常;
 2.构造函数抛出异常时,析构函数将不会被执行,需要手动的去释放内存

1.析构函数不应该抛出异常;
2.当析构函数中会有一些可能发生异常时,那么就必须要把这种可能发生的异常完全封装在析构函数内部,决不能让它抛出函数之外;

3. 析构函数异常相对要复杂一些,存在一种冲突状态,程序将直接崩溃:异常的被称为“栈展开(stack unwinding)”【备注】的过程中时,从析构函数抛出异常,C++运行时系统会处于无法决断的境遇,因此C++语言担保,当处于这一点时,会调用 terminate()来杀死进程。因此,当处理另一个异常的过程中时,不要从析构函数抛出异常, 抛出异常时,其子对象将被逆序析构


14:mysql数据库中一张user表中,其中包含字段A,B,C,字段类型如下:A:int,B:int,C:int根据字段A,B,C按照ABC顺序建立复合索引idx_A_B_C,以下查询语句中使用到索引idx_A_B_C的语句有哪些?
因复合索引为idx_A_B_C,所以查询条件只能是在a,ab,abc,ac才算 使用到索引idx_A_B_C

15:HTTPS是使用()来保证信息安全的.
HTTP协议通常承载于TCP协议之上,有时也承载 于TLS( 安全传输层协议 )或 SSL( 安全套接层协议Secure Sockets Layer )协议层之上,这个时候,就成了我们常说的HTTPS
16:由A地到B地,中间有一段扶梯,总路程和扶梯长度是固定的,为赶时间全程都在行走(包含扶梯上),中途发现鞋带松了,需要停下来绑鞋带.请问在扶梯上绑鞋带和在路上绑鞋带两种方式比较()
假设:人行走的速度为v1,
                  扶梯的速度为v2,
                  绑鞋带需要花的时间为t0
                  总路程为S
                  扶梯长度为S2
       那么:1)路上绑鞋带方案,全程用时:
                       t1 = ( S - S2 ) / v1  + S2 / ( v1 + v2) + t0
                  2)扶梯上绑鞋带情况下,全程用时:
                       t2 = (S - S2 ) / v1 + ( S2 - v2 * t0 ) / ( v1 + v2 ) + t0
                       其中v2 * t0 为绑鞋带的一段时间内,扶梯行进的距离
       所以:t1 - t2 = ( v2 * t0 ) / ( v1 + v2 )  > 0 
                   因此在扶梯上绑鞋带的方案下,全程用时比较短,选择B

17:具有7个顶点的有向图至少应有多少条边才可能成为一个强连通图?
强连通图必须从任何一点出发都可以回到原处,每个节点至少要一条出路(单节点除外)至少有n条边,正好可以组成一个环
18: 18: 一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足?
之所以不能选AB,是因为题目中只交代了非空,
而如果该二叉树只有根节点,即满足了AB条件,
而显然此状态下,三种遍历顺序的结果都相同。
因此我们只能选择C
先序:根->左->右
后序:左->右->根
只有两个节点是,可以省略为:
先序:根->孩子
后序:孩子->根
因此选C

19假设在x86平台上,有一个int型变量,在内存中的内部由低到高分别是:0x12,0x34,0x56,0x78当通过网络发送该数据时,正确的发送顺序是

X86 系列 CPU都是 little-endian 的,所以int 型变量值为 0x78563412, 网络发送数据时,采用大段,先发送高位再发送低位 

20以下哪个属于在预编译阶段执行____,以下哪些指令属于操作符___
a:malloc;  b:++;  c:#pragma;  d:sizeof;   e:#define

sizeof属于操作符,malloc是函数

21: 开发C代码时,经常见到如下类型的结构体定义:
typedef struct list_t{
struct list_t *next;
struct list_t *prev;
char data[0];
}list_t;
请问在32位系统中,sizeof(list_t)的值为?

在用作定义时char[0]是空数组,是不占空间的。如果定义char[1],那么就是长度为1的数组,使用char[0]则表示这唯一的数据,注意差别啦

22: 对进程和线程的描述,以下正确的是()
A错,进程拥有独立的地址空间;B错,主线程和子线程是并行关系的时候,并没有依赖关系。父进程和子进程中,子进程是父进程的一个副本,创建子进程后,子进程会有自己的空间,然后把父进程的数据拷贝到子进程的空间里。运行时,谁先运行是不确定的,这由系统决定;C错,多线程和多进程都会引起死锁,一般说的死锁指的是进程间的死锁。
23: 以下哪个ip不和10.11.12.91/28处于同一个子网
每个IP地址的前28位表示网络号,所以其子网掩码为255.255.255.240,前面都相同,240表示最后4位可用,即11110000,题目中的每个ip的前3个都一样,所以只考虑最后一个,因为240说明后4位可以不同,子网不同只需考虑11110000的前四位1111不同即可,128/64/32/16,可以看出64+32=96是一个划分点,所以在它2侧的肯定不属于同一个子网
24: 给字母重新进行二进制编码,以使得"MT-TECH-TEAM"(包含连字符,不包含引号)的长度最小.并能够根据编码,解码回原来的字符串.请问最优编码情况下该字串的长度是多少bit?

字母有点多,T:3  E:2  M:2   --:2   C:1  A:1  H:1
形成哈夫曼树:
25: 有9个球,其中一个的质量与其他的不同,有一个天平,通过最多几次可以找出那个质量不一样的球?
此题说的是最多几次,如果是最少的话的,一次就有可能 如果一开始拿了8球分摊,如果相等,则剩下的就只有一个球,则这个球就是答案。
现在异常的球的质量为b,正常的球的质量是a。(a!=b)
选择6个球,放在天平上进行称量,每边都是三个。
1.如果天平没有倾斜,则表示这6个球都是正常的,即另外3个球中有一个球是b,则只需要拿其中一个球称量与另外两个球分别称量一次即可。如果两次都倾斜,则表示你拿的是异常的,反之,只有另一种可能,一次没有倾斜,一次倾斜,则一次没有倾斜的肯定都是a,剩余的就一定是b。
2.如果天平发生了倾斜,则表示这6个球中有一个是异常的。假设为a,a,a与a,b,a。拿另外3个替换左边3个或右边3个,如果天平没有倾斜,则可以得出替换掉的3个中有一个是异常的,如果倾斜,也可得到没有替换的3个中有一个是异常的,同时也可以得到a与b之间的关系(自己想一想)。知道有异常球的3个后,只要再任意拿其中2个,进行比较一次,如果相等,则另外一个是异常的,否则的话可以根据a与b之间的大小判定异常球!
总共才3次称量。

26: 上网的时候发现网页不能访问,QQ使用正常,出现此问题最可能的原因是
QQ和网页访问使用的都是传输层的UDP协议,因此QQ正常可以排除传输层以下的所有原因。因此,A,C,D不对,选B项。
所有网页均打不开的可能原因是DNS服务器配错了,或者是指定DNS服务器故障等原因。若是特定网页打不开,可能是要访问的域名被DNS劫持、DNS污染等。

27: 以下序列中不可能是一棵二叉查找树的后序遍历结构的是:
题目给出的是后续遍历的序列,那么最后一个节点必定是 根节点。
最后一个节点之前的所有节点必定是根节点的左右子树,根据二叉查找树的定义,其左子树和右子树中的节点, 是大于或者小于根节点的
选项中只有B 无法找到一个合理的划分点,来组成二叉查找树

28: 具有相同类型的指针类型变量p与数组a,不能进行的操作是:
a表示数组a的地址指针,a和p类型相同,所以p=a操作正确;
*p表示p指向的值,a[0]表示数组的第一个值,两者类型相同,可赋值,正确;
&a[0]是数组第一个元素的地址,与a相同,也是指针,可赋值,正确;
a本身是一个指针,而&a表示a的地址,地址是int型,但p不一定是int型的,错误。

29: 以下代码输出什么?
    int a =1,b =32 ;
printf("%d,%d",a<<b,1<<32);
1
2
3   执行a<<b时,编译器会先将b与31进行and操作,以限制左移的次数小于等于31。b&31=0,则a<<b=1
执行1<<32时,编译器直接执行算术左移的操作。
 来自 http://blog.csdn.net/hgl868/article/details/7058909

美团点评2
请设计一个算法,给一个字符串进行二进制编码,使得编码后字符串的长度最短。
输入描述:
每组数据一行,为待编码的字符串。保证字符串长度小于等于1000。
输出描述:
一行输出最短的编码后长度。
输入例子:
MT-TECH-TEAM
输出例子:
33

对于一个由0..n的所有数按升序组成的序列,我们要进行一些筛选,每次我们取当前所有数字中从小到大的第奇数位个的数,并将其丢弃。重复这一过程直到最后剩下一个数。请求出最后剩下的数字。
输入描述:
每组数据一行一个数字,为题目中的n(n小于等于1000)。
输出描述:
一行输出最后剩下的数字。
输入例子:
500
输出例子:
255
因为是从0开始,所以第一轮移走的是二进制下最右边为0的位置(从0开始的偶数位置)上的数,然后我们发现第二轮各个number的位置等于number/2,即从number位置到number>>1位置,这时候我们依然移走二进制下最右边为0的位置(1(01)  5(101) 9(1001) ……它们第二轮对应的位置是024),最后剩一个数肯定是0到n中二进制下1最多的那个数,因为它每次的位置都是奇数位置。代码如下


 [编程题] 二维数组打印
有一个二维数组(n*n),写程序实现从右上角到左下角沿主对角线方向打印。
给定一个二位数组arr及题目中的参数n,请返回结果数组。
测试样例:
[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]],4
返回:[4,3,8,2,7,12,1,6,11,16,5,10,15,9,14,13]


在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。请采用实践复杂度低的方法实现。
给定价格序列prices及它的长度n,请返回最大收益。保证长度小于等于500。
测试样例:
[10,22,5,75,65,80],6
返回:87
有一个长为n的数组A,求满足0≤a≤b<n的A[b]-A[a]的最大值。
给定数组A及它的大小n,请返回最大差值。
测试样例:
[10,5],2
返回:04x4的棋盘上摆满了黑白棋子,黑白两色的位置和数目随机其中左上角坐标为(1,1),右下角坐标为(4,4),现在依次有一些翻转操作,要对一些给定支点坐标为中心的上下左右四个棋子的颜色进行翻转,请计算出翻转后的棋盘颜色。
给定两个数组A和f,分别为初始棋盘和翻转位置。其中翻转位置共有3个。请返回翻转后的棋盘。
测试样例:
[[0,0,1,1],[1,0,1,0],[0,1,1,0],[0,0,1,0]],[[2,2],[3,3],[4,4]]
返回:[[0,1,1,1],[0,0,1,0],[0,1,1,0],[0,0,1,0]]
现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。
给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。
测试样例:
[[0,1,0],[2,0,0]],2,3
返回:2
有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。
给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。
测试样例:
[2,7,9,4,1],5
返回:14

求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。


输入描述:
每组数据包涵s1(长度小于100),s2(长度小于100),len1(小于100000),len2(大于len1,小于100000)

输出描述:
输出答案。
输入例子:
ab ce 1 2
输出例子:
56

已知某公司总人数为W,平均年龄为Y岁(每年3月末计算,同时每年3月初入职新人),假设每年离职率为xx>0&&x<1,每年保持所有员工总数不变进行招聘,新员工平均年龄21岁。 
从今年3月末开始,请实现一个算法,可以计算出第N年后公司员工的平均年龄。(结果向上取整)。 

输入描述:
输入W Y x N
输出描述:
输出第N年后的平均年龄
输入例子:
5 5 0.2 3
输出例子:
15
美团点评1

1:已知一个线性表(382574635248),假定采用散列函数h(key) = key%7 计算散列地址,并散列存储在散列表A【0....6】中,若采用线性探测方法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为
38%7=3 (第1次出现3,无冲突,放在位置3,查找次数为125%7=4(第1次出现4,无冲突,放在位置4,查找次数为174%7=4(第2次出现4,有冲突,放在位置5,查找次数为263%7=0(第1次出现0,无冲突,放在位置0,查找次数为152%7=3(第2次出现3,有冲突,发现冲突3,4,5,故只能放到6,查找次数为448%7=6 (第1次出现6,有冲突,发现冲突6,1,故只能放到1,查找次数为3)
结果:(1+1+2+1+4+3)÷6=2

2:用二进制来编码字符串“xyzwxyxx”,需要能够根据编码解码回原来的字符串,则我们最少需要多长的二进制字符串
哈夫曼编码的问题 x出现4次 y2次 w1次 z1次
x0
y10
w用110 
z用111
w和z的编码方案可以互换
length=1*4+2*2+1*3+1*3=14

3:由多个源文件组成的C程序,经过编辑、预处理、编译,链接等阶段会生成最终的可执行程序。下面哪个阶段可以发现被调用的函数未定义?
A: 预处理是 C 语言程序从源代码变成可执行程序的第一步,主要是 C 语言编译器对各种预处理命令进行处理,包括头文件的包含、宏定义的扩展、条件编译的选择等。
B: 编译之前,C 语言编译器会进行词法分析、语法分析 (-fsyntax-only) ,接着会把源代码翻译成中间语言,即汇编语言 。 编译程序工作时,先分析,后综合,从而得到目标程序。所谓分析,是指词法分析和语法分析;所谓综合是指代码优化,存储分配和代码生成。 值得一提的是,大多数的编译程序直接产生机器语言的目标代码,形成可执行的目标文件,但也有的编译程序则先产生汇编语言一级的符号代码文件,然后再调用汇编程序进行翻译加工处理,最后产生可执行的机器语言目标文件。 
C: 链接是处理可重定位文件,把它们的各种符号引用和符号定义转换为可执行文件中的合适信息( 一般是虚拟内存地址 ) 的过程。



4:常见的网络嗅探器,以下哪个不是?
wvs是一个自动化的web应用程序安全测试工具,可以扫描任何可以通过web访问和遵循http/https访问的站点和应用程序。
snifft是一个网络监听软件,主要针对tcp/ip协议的不安全对运行该协议的机器进行监听
wireshark是一个网络封包分析软件,功能抓取网络封包,然后尽可能详尽的分析网络封包
tcpdumptak他可以将网络中所有传送的数据包抓取下来,进行详尽的分析,主要针对的是网络层,端口,主机,协议,并且提供andornot等命令来进行处理,从而剔除没有用的信息

5:下列哪种排序算法是不稳定算法
不稳定的排序算法有:快、希、选、堆。(记忆:找到工作就可以“快些选一堆”美女来玩了(并不能))

6:已知有30匹马,5个跑道,每个跑道只能容一匹马,没有计时器,至少需要比赛多少次,可以找出最快的前三匹马
因为是30匹马,5个跑道,每个跑道只能容一匹马,没有计时器,所以分成6次,先可以决出前6个跑道的第一名,6次。
 然后6组的第一跑2次,选出1,2,3名 ,8次
  然后就用以前的老方法,第1名组的2,3,第2名组的1,2,第3名组的1跑,分出2,3

7:当前目录下有a和b两个文件,执行命令“ls>c”,请问文件c里面的内容是什么?
使用ls命令产生的输出为当前路径下的所有文件名。>c即代表将结果输出至c中,若没有c则先产生c文件,即内容里含有abc
8:设无向图的顶点个数为n,则该图最多有多少条边?
这是一个公式,你也可以在考试上面推导,1个顶点0条边,2个顶点1条边,3个顶点3条。。。。最多为n(n-1)/2,如果是无向连通图,最少为n-1
9:下午210分的时候,在指针型时钟上的时针和分针的夹角是多少度?
钟表一圈是360度
十分的位置是(2/12*360度
一小时是1/12*360度也就是一个格子是30度
在分针走1/6时,时针也应该向前走一个格子的1/6
也就是30度的1/6
也就是510:在Unix系统中,若一个进程退出时,其子进程还在运行(没有被杀死),则这些子进程会变成孤儿进程(Orphan Process),请问孤儿进程会被以下哪一个系统进程接管?
僵尸进程:一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
僵尸进程将会导致资源浪费,而孤儿则不会。

11:以下哪些不是链表的特征?
线性表分为顺序表(数组等)和链表

ACD为顺序表的特征
只有B是链表的特征

12:求函数返回值,输入x=9999
1
2
3
4
5
6
7
8
9   int func(int x){
    int count=0;
    while (x)
    {
        count++;
        x=x&(x-1);//与运算
    }
    return count;
}

一个数与这个数减1的结果进行'&'按位与运算,结果为:这个数二进制数最右边的1变为0;
举例说明如下:
X=55&(5-1) = 010 1 & (0100) = 010 0
经过上述计算,5的二进制最右边的1变为了0,由此可知,题目中count是用以统计x的二进制中1的个数的
9999的二进制表示为:10011100001111 共有81,显然,答案为A。

13:关于支持向量机SVM,下列说法错误的是()
在高等代数中 ||w||表示的是范式  2-范式  就是向量的模长  故C错误
14:中缀表达式X=A+B*(C-(D+F))/E转后缀表达式之后是什么?
中缀表达式转后缀表达式的方法: 
1.遇到操作数:直接输出(添加到后缀表达式中) 
2.栈为空时,遇到运算符,直接入栈 
3.遇到左括号:将其入栈 
4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出。 
5.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈 
6.最终将栈中的元素依次出栈,输出。


15:某次买可乐集瓶盖活动中有5种不同的瓶盖以等概率出现,每买一瓶汽水可得到一个瓶盖,集齐所有瓶盖所买汽水瓶数的期望,与以下哪个结果最为接近?
答案是11+5/12.  设 E(i) 表示 目前已有i个不同瓶盖集齐五个不同瓶盖所需的瓶子个数期望。

•   E(0) = E(1)+1  ,  需要一个瓶盖跳到E(1)
•   E(1) = (E(2)+1)*4/5+(E(1)+1)*1/5
•   E(2) = (E(3)+1)*3/5+(E(2)+1)*2/5
•   E(3) = (E(4)+1)*2/5+(E(3)+1)*3/5
•   E(4) = (E(5)+1)*1/5+(E(4)+1)*4/5
•   E(5) = 0
解得E(4) = 5, E(3)=15/2, E(2)=55/6, E(1)= 125/12, E(0) = 11+5/12 
E(0)是我们的所求。

16:JAVA语言的下面几种数组复制方法中,哪个效率最高?
首先:Sytem.copyOf有这个?我只知道是Arrays.copyOf

结论:
效率:System.arraycopy > clone > Arrays.copyOf > for循环

理由:
A:for循环,效率最低,随便写个程序验证一下,效率慢的不是一点.....我测试的时候比clone和System.arraycopy差了100多倍

B:System.arraycopy:原型是
public static native void arraycopy(Object src,  int  srcPos , Object dest, int destPos, int length);

C:Arrays.copyOf底层调用了上面的System.copyOf效率比上面两个低。

D:clone()的完整定义:protected native Object clone() throws CloneNotSupportedException;
高票答案说的clone()返回的是Object类型,其实是错误的,只有Object[]数组的clone()方法才返回Object类型,子类重写了父类的方法。

其实,一般情况下,前三个的效率差别几乎忽略不计,但是从Arrays.copyOf底层调用的System.arraycopy效率自然要低一些。
而clone()和arraycopy只是从实验的结果来看是arraycopy的效率高。


170123,⋯,499500501个数按升序排列,每次取奇数序位的数丢掉,然后取剩下的数的奇数序位的数丢掉,重复这个过程,那么最后剩下的数是多少?
 其实你可以推导一下,我以前类似的题目有推导过的过程,过程比较麻烦,故我在此不细推导,总结下来就是接近末尾这个数的最大的数是2的n次方比如末尾是65,那么剩下就是64,末尾是127也是64,是130就是128,当然这都是从1开始,这个题目从0开始,故而是255

18:一个不透明的箱子里共有红,黄,蓝,绿,白五种颜色的小球,各个小球的数量非常多而且接近相等,每种颜色的小球大小相同,质量相等,每个人从篮子里抽出两个小球,请问至少需要多少个人抽,才能保证有两个人抽到的小球颜色全部相同?
题意就是球量充足,近似相等,所以不用担心放回不放回的概率问题。五种颜色的球组合:(5颜色选2颜色)10+(同颜色)5=15。而且这15种组合是等概率出现。所以重复的话,就是发生在第16个人身上。

19:机器学习中L1正则化和L2正则化的区别是?
使用L1正则后的权值更新规则多了一项 η * λ * sgn(w)/n,这一项 当w为正时,更新后的w变小。当w为负时,更新后的w变大——因此它的效果就是让w往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。所以说L1可以得到更稀疏的权值

20:浏览器和服务器在基于https进行请求链接到数据传输过程中,用到了如下哪些技术?
非对称加密算法用于在握手过程中加密生成的密码
对称加密算法用于对真正传输的数据进行加密
而HASH算法用于验证数据的完整性。
非对称加密算法会生成公钥和私钥,公钥只能用于加密数据,因此可以随意传输,而网站的私钥用于对数据进行解密,所以网站都会非常小心的保管自己的私钥,防止泄漏。


21:有订单表orders,包含字段用户信息userid,字段产品信息productid,以下语句能够返回至少被订购过两会的productid?
顺序为:select, from, where, group by, having, order by, limit
where增加分组前的限定,having增加分组后的限定
D,先用group by分组,再用having对分组进行约束
22:使用堆排序方法排序(457857254189),初始堆为(?)
第一层:        45
第二层:   78      57
第三层:25 41  89
按照选项应该是递减的排序,从89开始上移,完成max heap
则第一次移动之后
第一层:        89
第二层:   78      57
第三层:25 41  45


23:对n个元素的数组进行(),其平均时间复杂度和最坏情况下的时间复杂度都是O(nlogn).
排序方法中,最好情况和最坏情况都一样的是选择排序和堆排序,不管初始序列是否有序
选择排序时间复杂度是O(N2)
堆排序时间复杂度是O(NlogN)


24:一架飞机在满油的情况下可绕地球飞0.5圈,假设飞机与飞机之间可以互相加油,且地球只有一个基地。请问在确保所有飞机够油飞回起点的情况下,最少需要几架飞机才可以让其中一架飞机成功绕地球飞行一圈?(提示1:地球是圆的!提升2:飞机可以重复使用!)
只需要ABC共3架飞机。
3架共同出航,A1/8圈后返航,1/4圈油分给BC;B继续1/8圈至1/4圈处后返航,1/8圈油给C;C继续飞行1/2圈至3/4圈处空油。
C飞行至1/2圈时,AB反向共同出航,A1/8圈后至7/8圈处返航,1/8圈给B(加满);B继续飞行1/8圈后至3/4圈处恰遇C,B给C1/8圈油共同返航;于此同时A重新反向出发再次至7/8圈处恰遇C,给C1/8圈油后,3机共同返航。


25:关于volatile关键字,下列描述不正确的是?
一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:
1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
2)禁止进行指令重排序。
volatile只提供了保证访问该变量时,每次都是从内存中读取最新值,并不会使用寄存器缓存该值——每次都会从内存中读取。
而对该变量的修改,volatile并不提供原子性的保证。
由于及时更新,很可能导致另一线程访问最新变量值,无法跳出循环的情况
多线程下计数器必须使用锁保护。


26:SNMP所采用的传输层协议是什么?
SMTP:简单邮件传输协议,使用TCP连接,端口号为25,
SNMP:简单网络管理协议,使用UDP 161端口,


27:机器学习中做特征选择时,可能用到的方法有?
卡方
信息增益
平均互信息
期望交叉熵


28:如果第一组2个数字之和为9825,那么第二组的2个数字之和为多少?第一组:6128+9091;第二组:8159+1912
把数字给倒过来:6128+9091-->>8219+1606=9825所以
8159+1912-->>6518+2161=8679
话说谁是自己做对的麻烦传授一下技巧


29:以下属于网络层协议的是?
物理层:RJ45、CLOCK、IEEE802.3 
数据链路:PPP、FR、HDLC、VLAN、MAC 
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP
传输层:TCP、UDP、SPX
会话层:NFS、SQL、NETBIOS、RPC
表示层:JPEG、MPEG、ASII
应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS

30:对于以下用数组存储的二叉树A B C D E采用中序和前序遍历的结果是()
以数组存储,是按照层次序来保存的。所以A在第一层BC在第二层DE在第三层
31:以下选项中哪些是SQL的DML语句?
BD
DML(data manipulation language)是数据操纵语言:它们是UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言,增删查改。 
DDL(data definition language)是数据定义语言:DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用。
DCL(DataControlLanguage)是数据库控制语言:是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。

32:从25中选两个数,第一个数较大,将两数之和告诉甲,两数之差告诉乙,两个人根据自己手上的数都算不出来答案,求这两个数分别是多少?
甲知道和为7,可推得是:2534。
乙知道差为1,可推得是:233445。
都不能单独确定。

33:在以下协议中,那个协议与其他协议是不属于同一类的()
网络层:IP协议、ICMP协议、ARP协议、RARP协议。
传输层:UDP协议、TCP协议。
应用层:FTP(文件传送协议)、Telenet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议),HTTP协议, SNMP协议, TFTP。


34:在C++STL中常用的容器和类型,下面哪些支持下标"[]"运算?
vector:随机访问迭代器,复杂度O(1)
deque:同上,O(1map:双向迭代器,不过由于是关联容器,需要通过key访问alue的方法,O(h),h为树的高度
unordered_map:前向迭代器,同上,平摊复杂度O(1),最差O(n),也与散列函数的好坏有关。
string:同vector
35:在OSI参考模型中,物理层的作用是?
    物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)
    数据链路层:将比特组装成帧和点到点的传递(帧Frame)
    网络层:负责数据包从源到宿的传递和网际互连(包PackeT)
    传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
    会话层:建立、管理和终止会话(会话协议数据单元SPDU)
    表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
    应用层:允许访问OSI环境的手段(应用协议数据单元APDU)



1
下面哪些机制可以用于进程间通信?
Linux进程间通信:管道、信号、消息队列、共享内存、信号量、套接字(socket)
Linux线程间通信:互斥量(mutex),信号量,条件变量
Windows进程间通信:管道、消息队列、共享内存、信号量   (semaphore)   、套接字(socket)
Windows线程间通信:互斥量(mutex),信号量(semaphore)、临界区(critical section)、事件(event)
2
下面的程序执行输出几个hello?
    #include<stdio.h>
#include <unistd.h>
int main( ) {
    fork( );
    fork( );
    fork( );
    printf(“hello\n”);
    return 0;
}
fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值: 
    1)在父进程中,fork返回新创建子进程的进程ID;
    2)在子进程中,fork返回03)如果出现错误,fork返回一个负值;
3
进行数据库提交操作时使用事务(Transaction)是为了?
数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。数据库事物就是为了保证数据的一致性,比如说你处理银行的存取,在两个窗口同时登陆,必须保证你在一台上取完之后,在另一台上显示已经取完之后的余额。(只是举个例子,银行是不能同时登陆的)
4
我们用a^b 来表示a的b次幂,那么下列算是判断正确的是?
 比较a^b 与b^a的大小,可变为比较ln(a^b) = blna 与ln(b^a)=alnb的大小,则blna/alnb = (lna/a)/(lnb/b) 
设有f(x) = lnx/x    f'(x) = (1-lnx)/x^2 令f'(x)=0,求出x=e 则,当x<e时,递增,x>e时,递减。对称轴为x=e

故有,a=2.1 b=3.1时,a距离对称轴>b距离对称轴  f(a)<f(b) 则b^a>a^b  ==> 3.1^2.1 >2.1^3.1
当a=2.1 b=4.1时,a距离对称轴<b距离对称轴 f(a)>f(b) 则a^b >b^a ==>2.1^4.1 > 4.1^2.1
5
下面哪个是版本控制工具?
版本控制工具主要有三个:CVS、SVN,Git.
6
当n=5时,下列函数的返回值是:
    int foo(int n){
 if(n<2){
   return n;
}
 else
   return 2*foo(n-1)+foo(n-2);
}
n = 0,f(0) = 0; 
n = 1,f(1) = 1; 
n = 2,f(2) = 2*f(1)+f(0) = 2; 
n = 3,f(3) = 2*f(2)+f(1) = 5; 
n = 4,f(4) = 2*f(3)+f(2) = 12; 
n = 4, f (5) = 2*f(4)+f(3) = 29; 

... ... 
f(n) = 2*f(n-1)+f(n-2); 
7
假设一段公路上,1小时内有汽车经过的概率为96%,那么,30分钟内有汽车经过的概率为?
一小时有车的概率 = 1 - 一小时没车的概率 = 1 - 两个半小时都没车的概率 = 1 - (1 - 半小时有车的概率)^2
1-(1-x)^2=0.96
x = 0.8
8
一副扑克(52张,不含大小王),抽出两张牌,一红一黑(不考虑先后顺序)的概率是多少?
第一次抽到的肯定是红的或黑的,则第二次抽到另一种颜色的可能性就是26/51,第一次抽了一张,剩下51张,若第一张抽到的是红牌,则黑牌有26张,故答案为26/51
9
以下设计模式中,哪一项不属于结构性模式?
前面讲过,社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。因为对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。这里有6个具体的创建型模式可供研究,它们分别是:

简单工厂模式(Simple Factory);

工厂方法模式(Factory Method);

抽象工厂模式(Abstract Factory);

创建者模式(Builder);

原型模式(Prototype);

单例模式(Singleton)。

说明:严格来说,简单工厂模式不是GoF总结出来的23种设计模式之一。

2.结构型模式

在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。对象结构的设计很容易体现出设计人员水平的高低,这里有7个具体的结构型模式可供研究,它们分别是:

外观模式(Facade);

适配器模式(Adapter);

代理模式(Proxy);

装饰模式(Decorator);

桥模式(Bridge);

组合模式(Composite);

享元模式(Flyweight)。

3.行为型模式

在对象的结构和对象的创建问题都解决了之后,就剩下对象的行为问题了,如果对象的行为设计的好,那么对象的行为就会更清晰,它们之间的协作效率就会提高,这里有11个具体的行为型模式可供研究,它们分别是:

模板方法模式(Template Method);

观察者模式(Observer);

状态模式(State);

策略模式(Strategy);

职责链模式(Chain of Responsibility);

命令模式(Command);

访问者模式(Visitor);

调停者模式(Mediator);

备忘录模式(Memento);

迭代器模式(Iterator);

解释器模式(Interpreter)。
10
下列能实现一个正整数N对256求余运算的代码是:
对256取余,255表示为0xFF11111111),只需取出N低8位部分,其他位置为0,故使用运算符&。>>8和<<8是移位处理,会将N缩小或放大28次方倍,缩小时会失去低8位即余数。
11
11.现有二叉搜索树(BST)前序遍历结果序列为abdefgc,中序遍历结果序列为debgfac,请问后序遍历结果序列?
根据先序遍历知道a是根节点,那么根据中序遍历a的位置,知道debgf在左枝,c在右枝;
再对根据bdefg的先序遍历可知b为左枝的根节点……以此类推,得到
12
如果某系统15*4=112成立,则系统采用的是几进制?
设使用的是p进制,则15*4=112等价于:
1   (p + 5) * 4 = p^2 + p + 2
解出来p=-3(舍去)和p=6
13
操作系统中关于竞争和死锁的关系下面描述正确的是?
产生死锁的原因主要是:
(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
一不满足,就不会发生死锁。
死锁的解除与预防:
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和
解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确
定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态
的情况下占用资源。因此,对资源的分配要给予合理的规划。
14
对于一个分布式计算系统来说,以下哪三个指标不能同时完成?
分布式中,一般要求的是CAP,分别为一致性,可用性,可分区性
因为要在分布式系统中,所以我们优先保障可分区性,即P,此时C和A只能保证一个:
如果保证了一致性,则我们的每次操作,都要求完全一致后才成功,这会严重影响可用性,
如果保证了可用性,则无法保证一致性。

好像分布式系统中最常用的是最终一致性。
15
设栈S和队列Q的初始状态均为空,元素啊,a,b,c,d,e,f,g依次进入栈S。若每个元素出栈后立即进入推列Q,且7个元素出队的顺序是b,d,,c,f,e,a,g,则栈S的容量至少是?
这个题目主要就是理解一个栈在同一时间最多存储多少个元素,也就是栈的最大容量,比较一下就会发现同一时间最大存储是316
062460120, ?
0=0*1*2
6=1*2*3
24=2*3*4
60=3*4*5
120=4*5*6
210=5*6*7
17
一个栈的入栈序列是a,b,c,d,e,f,则栈的不可能的输出序列是()
d最先出栈说明下面压着abc,他们出来的顺序必然是cba
18
在网络应用测试中,网络延迟是一个重要指标。以下关于网络延迟的理解,正确的是?
定义:在传输介质中传输所用的时间,即从报文开始进入网络到它开始离开网络之间的时间。
如何定义网络延迟程度:
(网络延迟PING值越低速度越快)
1~30ms:极快,几乎察觉不出有延迟,玩任何游戏速度都特别顺畅
31~50ms:良好,可以正常游戏,没有明显的延迟情况
51~100ms:普通,对抗类游戏能感觉出明显延迟,稍有停顿
>100ms:差,无法正常游戏,有卡顿,丢包并掉线现象
计算方法:1秒=1000毫秒(例:30ms为0.03秒)
19
书架一排有5个格子。现在有20本书,编号从120。要求20本书要摆放在同一排里,并且从左到右编号依次递减;每个格子至少有一本书;并且编号789的书籍必须在同一个格子里面。问,一共有多少种可能的摆放方法?
把78,9看成一本书因此共有18本书,要保证每个格子中都有书,因此可以在118之间的空隙中选择四个位置
组合数
直接 不好理解,我是这样用笨方法理解的:
7,8,9看成一本书,共有18本书,17个空隙,放入4个隔板(a,b,c,d)即分成了5份。共有17*16*15*14=57120种放法。题目又要求20本书从左到右编号依次递减,所以需保证隔板的顺序从左到右依次是a-b-c-d,而实际上隔板的排列共有4*3*2=24种,a-b-c-d是其中的一种,所以需要57120/24=238020
下列方法中,可以用于特征降维的方法包括()

稀疏自编码就是用少于输入层神经元数量的隐含层神经元去学习表征输入层的特征,相当于把输入层的特征压缩了,所以是特征降维。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页