【java错题集】 阿里巴巴2017实习生笔试题(一)

都是什么鬼的题呀

关于c++的inline关键字,以下说法正确的是()
正确答案: D   你的答案: 空 (错误)
使用inline关键字的函数会被编译器在调用处展开
头文件中可以包含inline函数的声明
可以在同一个项目的不同源文件内定义函数名相同但实现不同的inline函数
定义在Class声明内的成员函数默认是inline函数
优先使用Class声明内定义的inline函数
优先使用Class实现的内inline函数的实现

A 项错误,因为使用 inline 关键字的函数只是用户希望它成为内联函数,但编译器有权忽略这个请求,比如:若此函数体太大,则不会把它作为内联函数展开的
B 项错误,
头文件中不仅要包含 inline 函数的声明,而且必须包含定义,且在定义时必须加上 inline 。【关键字 inline 必须与函数定义体放在一起才能使函数成为内联,仅将 inline 放在函数声明前面不起任何作用】
C 项错误,
inline 函数可以定义在源文件中,但多个源文件中的同名 inline 函数的实现必须相同。一般把 inline 函数的定义放在头文件中更加合适。
D 项正确,类内的成员函数,默认都是 inline 的。【定义在类声明之中的成员函数将自动地成为内联函数】

EF 项无意思,不管是 class 声明中定义的 inline 函数,还是 class 实现中定义的 inline 函数,不存在优先不优先的问题,因为 class 的成员函数都是 inline 的,加了关键字 inline 也没什么特殊的

对N个数进行排序,在各自最优条件下以下算法复杂度最低的是()
正确答案: D   你的答案: A (错误)
快速排序
堆排序
冒泡排序
插入排序
选择排序

归并排序


甲乙两个一样大小的杯子各自分别装着小于一半容积的水和酒精.现将甲杯子里的一部分水倒入乙杯子;之后将乙杯子的混合液倒入一些到甲杯子,此时甲杯子的液体恢复到最初的状态.假定水和酒精混合之后的体积等于混合之前的体积之和。 那么以下说法正确的是()
正确答案: A   你的答案: 空 (错误)
甲杯子里的酒精体积等于乙杯子里的水的体积
甲杯子里的酒精的体积等于乙杯子里的酒精的体积
甲杯子里的水的体积等于乙杯子里的酒精的体积
甲杯子里的水的体积等于乙杯子里的水的体积
甲杯子里的液体高于乙杯子里的液位

以上都不对

最初,甲杯子只有酒精,乙杯子只有水。
最后,甲杯子恢复到最初的高度,只是混入了一些酒精。
所以从乙杯子拿出多少酒精给甲杯子,乙杯子就有多少甲杯子的水。

ps:题目已经假设 酒精和水混合后等于两者容量之和

在TCP/IP建立连接过程中,客户端和服务器端的状态转移说法错误的是?
正确答案: D   你的答案: 空 (错误)
经历SYN_RECV状态
经历SYN_SEND状态
经历ESTABLISHED状态
经历TIME_WAIT状态
服务器在收到syn包时将加入半连接队列

服务器接受到客户端的ack包后将从半连接队列删除

TCP建立连接时,首先客户端和服务器处于close状态。然后客户端发送SYN同步位,此时客户端处于SYN-SEND状态,服务器处于lISTEN状态,当服务器收到SYN以后,向客户端发送同步位SYN和确认码ACK,然后服务器变为SYN-RCVD,客户端收到服务器发来的SYN和ACK后,客户端的状态变成ESTABLISHED(已建立连接),客户端再向服务器发送ACK确认码,服务器接收到以后也变成ESTABLISHED。然后服务器客户端开始数据传输

http://www.cnblogs.com/tonyluis/p/5729531.html

假设在n进制下,下面的等式成立,n值是()240*12=2880
正确答案: F   你的答案: 空 (错误)
19
18
17
16
15

以上都对

假设为n进值则 [2*(n^2)+4*(n^1)+0] * [1*n+2]=2*(n^3)+8*(n^2)+8*(n^1) 

下面关于系统调用的描述中,错误的是()
正确答案: B   你的答案: B (正确)
系统调用把应用程序的请求传输给系统内核执行
系统调用中被调用的过程运行在"用户态"中
利用系统调用能够得到操作系统提供的多种服务
是操作系统提供给编程人员的接口
系统调用给用户屏蔽了设备访问的细节
系统调用保护了一些只能在内核模式执行的操作指令

系统调用通过中断完成,这一过程中系统由用户态变为内核态。 在内核态下,系统可以无限制的访问内核资源

关于linux的I/O复用接口select和epoll,下列说法错误的是()
正确答案: C   你的答案: 空 (错误)
select调用时会进行线性遍历,epoll采用回调函数机制,不需要线性遍历
select的最大连接数为FD_SETSIZE
select较适合于有大量并发连接,且活跃链接较多的场景
epoll较适用于有大量并发连接,但活跃连接不多的场景
epoll的效率不随FD数目增加而线性下降

epoll通过共享存储实现内核和用户的数据交互

select 和 epoll效率差异的原因:select采用轮询方式处理连接,epoll是触发式处理连接。
Select:
1.Socket数量限制:该限制可操作的Socket数由FD_SETSIZE决定,内核默认32*32=1024.
2.操作限制:通过遍历FD_SETSIZE(1024)个Socket来完成调度,不管哪个Socket是活跃的,都遍历一遍。
Epoll
1.Socket数量无限制:该模式下的Socket对应的fd列表由一个数组来保存,大小不限制(默认4k)。
2.操作无限制:基于内核提供的反射模式,有活跃Socket时,内核访问该Socket的callback,不需要遍历轮询。
但当所有的Socket都活跃的时候,所有的callback都被唤醒,会导致资源的竞争。既然都是要处理所有的Socket,

那么遍历是最简单最有效的实现方式。

有无限的水源,一个5L无刻度桶和一个7L无刻度桶,则只利用这两个无刻度桶,将不能获得()L水
正确答案: F   你的答案: B (错误)
2
3
6
8
11

以上均能获得

5a+7b=t

7的2014次方这个整数的十位数字数是()
正确答案: D   你的答案: F (错误)
0
1
3
4
5

7

7^0=01
7^1=07
7^2=49
7^3=x43
7^4=x01

从此进入以4为周期的循环,2014=4*503+2,所以末尾2位应该是49。

在100-999这900个自然数中,若将组成这个数的三个数字认为是三条线段的长度,那么是三条线段组成一个等腰三角形(包括等边)的共有()个.
正确答案: F   你的答案: 空 (错误)
45
91
121
142
156
165

首先,等边三角形有9个。
考虑非等边的等腰三角形。若双边为1,则第三边不存在。
若双边为2,则第三边只能是1或3。同理,可知1-9的等腰三角形的个数为(0+2+4+6+8*5)=52
三位数任选两个作为等腰三角形的两边,有3种取法,总计52*3+9=165

下面哪个不是线性表?
正确答案: D   你的答案: A (错误)
循环链表
队列

关联数组
空字符串数组

双向链表

线性表,一对一关系,除首节点和尾节点外,每个结点都有一个直接前驱和后继结点。
关联数组,是数组的一组,在物理存储层面来讲,数组是连续的等大的存储单元构成,每个单元存储的数据类型都是一样的。

但是关联数组的特性是key-value,根据key来查找value,这也就意味着关联数组的每个元素可以无前后顺序是离散的不是线性连续的

下面的哪种排序算法在算复杂度平均不是O(nlogn)的?
正确答案: B   你的答案: 空 (错误)
快速排序
桶排序
合并排序
二叉树排序树排序
堆排序

有100个金币,分给10个人.第一个金币等概率地分给10个人之一.之后的每一个金币分配给第K个人的概率正比于这个人已经持有的金币数+1.在这样的分配机制下,关于每个人最终的金币个数的分布的说法错误的是()
正确答案: B   你的答案: 空 (错误)
每个人得到的金币的个数的期望是相等的
每个人的金币个数接近均匀分布
第一个金币给哪个人,哪个人的最终金币个数的期望就会更大
在中间的某个阶段金币个数越多的人,未来获得金币的可能性越大

#include <iostream>       
#include <vector>
using namespace std;
int main(void)
{
    vector<int>array;
    array.push_back(100);
    array.push_back(300);
    array.push_back(300);
    array.push_back(300);
    array.push_back(300);
    array.push_back(500);
    vector<int>::iterator itor;
    for(itor=array.begin();itor!=array.end();itor++)
    {
        if(*itor==300)
        {
            itor=array.erase(itor);
        }
    }
    for(itor=array.begin();itor!=array.end();itor++)
    {
            cout<<*itor<<"";
    }
  return 0;
}
下面这个代码输出的是()

正确答案: C   你的答案: 空 (错误)
100 300 300 300  300 500
100 3OO 300 300 500
100 300 300 500
100 300 500
100 500

程序错误

smartz
vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 
vector::erase()方法有两种重载形式 
如下: 
iterator erase(   iterator _Where); 
iterator erase(   iterator _First,   iterator _Last); 
如果是删除指定位置的元素时: 
返回值是一个迭代器,指向删除元素下一个元素; 
如果是删除某范围内的元素时:返回值也表示一个迭代器,指向最后一个删除元素的下一个元素;


在本题中,当 *itor==300成立时,删除第一个值为300的元素,同时itor指向下一个元素(即是第二个值为300的元素),
                            在for(;;itor++)执行itor,itor指向第三个值为300的元素,进入下一个循环
         进入循环满足*itor==300,重复上面的过程,执行完循环,itor执行值为500的元素。

所有整个过程中,只删除了2个值为300的元素。

给定的一个长度为N的字符串str,查找长度为P(P<N)的字符串在str中的出现次数.下面的说法正确的是()
正确答案: D   你的答案: 空 (错误)
不存在比最坏时间复杂度O(NP)好的算法
不存在比最坏时间复杂度O(N^2)好的算法
不存在比最坏时间复杂度O(P^2)好的算法
存在最坏时间复杂度为O(N+P)的算法
存在最坏时间复杂度为O(log(N+P))的算法

以上都不对

http://blog.csdn.net/liu940204/article/details/51318281

某体校选择校服,每套校服都包括短袖运动衫,长袖运动衫,厚外套,运动长裤和运动短裤组成.每种运动服有3个备选方案.老师请了部分学生来挑选自己喜欢的校服.结果发现任意3个学生都至少在一种运动服上选择互不相同,那么老师最多邀请了()名学生参加挑选.
正确答案: B   你的答案: 空 (错误)
7
8
9
10
11

12


有4副相同的牌,每副牌有4张不同的牌.先从这16张牌中,随机选4张出来.然后,在这4张牌中随机选择一张牌,然后把抽出的一张放回3张中,再随机选择一张牌.与上次选出的牌一样的概率是()
正确答案: C   你的答案: A (错误)
1/4
1/3
2/5
1/2
2/3

3/4

直接看第二次抽样即可,与第一次抽的是同一张牌的概率是1/4,不同张的概率是3/4,同一张的话肯定是一样,不同张的时候如果抽中一样的牌的概率是3/15,所以答案是1/4+3/4 * 3/15 = 2/5

猜你喜欢

转载自blog.csdn.net/wenyimutouren/article/details/80568806