1
2
6
7
8
16
20
21
关于c++的inline关键字,以下说法正确的是(定义在Class声明内的成员函数默认是inline函数)
使用inline关键字的函数会被编译器在调用处展开:使用 inline 关键字的函数只是用户希望它成为内联函数,但编译器有权忽略这个请求
头文件中可以包含inline函数的声明:头文件中不仅要包含 inline 函数的声明,而且必须包含定义,且在定义时必须加上 inline 。
【关键字 inline 必须与函数定义体放在一起才能使函数成为内联,仅将 inline 放在函数声明前面不起任何作用】
可以在同一个项目的不同源文件内定义函数名相同但实现不同的inline函数: inline 函数可以定义在源文件中,但多个源文件中的同名 inline 函数的实现必须相同。
一般把 inline 函数的定义放在头文件中更加合适。
定义在Class声明内的成员函数默认是inline函数:定义在类声明之中的成员函数将自动地成为内联函数
优先使用Class声明内定义的inline函数\优先使用Class实现的内inline函数的实现: 不管是 class 声明中定义的 inline 函数,还是 class 实现中定义的 inline 函数,不存在优先不优先的问题,因为 class 的成员函数都是 inline 的,加了关键字 inline 也没什么特殊的
对N个数进行排序,在各自最优条件下以下算法复杂度最低的是()
Quicksort:快速排序
MergeSort:归并排序
Timsort: 优化了归并排序和插入排序
Heapsort:堆排序
Bubble sort:冒泡排序
insertion sort:插入排序
selection sort:选择排序
shell sort:希尔排序
Bucket sort:桶排序
Radix sort:基数排序
3 甲乙两个一样大小的杯子各自分别装着小于一半容积的水和酒精.现将甲杯子里的一部分水倒入乙杯子;之后将乙杯子的混合液倒入一些到甲杯子,此时甲杯子的液体恢复到最初的状态.假定水和酒精混合之后的体积等于混合之前的体积之和。 那么以下说法正确的是() 甲杯子里的酒精体积等于乙杯子里的水的体积
4
下列程序的执行结果是(at)
5
一个黑盒子里有若干红球和黑球,随机取出一个球是红球的概率是p.现在从黑盒子中拿出等量的红球和黑球后,随机取出一个球是红球的概率是q,如果p<q,那么以下说法正确的是( 最初红球的个数小于黑球的个数)
以下二叉树的后序遍历结果是()
(DEBFCA)
在TCP/IP建立连接过程中,客户端和服务器端的状态转移说法错误的是)
TCP三次握手与四次挥手 - TonyLuis - 博客园
http://www.cnblogs.com/tonyluis/p/5729531.html
http://www.cnblogs.com/tonyluis/p/5729531.html
假设在n进制下,下面的等式成立,n值是()240*12=2880( 15~19 都正确 )
如果用10进制代入时,等号左右两边是相等的。因为10进制相等的两个数转化为任意进制都会相等,所以答案是任意进制。
9
下面关于系统调用的描述中,错误的是()
系统调用把应用程序的请求传输给系统内核执行;
系统调用中被调用的过程运行在"用户态"中;(调用过程运行在“用户态”,被调用的过程运行在“系统态”)
利用系统调用能够得到操作系统提供的多种服务;
是操作系统提供给编程人员的接口;
系统调用给用户屏蔽了设备访问的细节;
系统调用保护了一些只能在内核模式执行的操作指令;
10
利用系统调用能够得到操作系统提供的多种服务;
是操作系统提供给编程人员的接口;
系统调用给用户屏蔽了设备访问的细节;
系统调用保护了一些只能在内核模式执行的操作指令;
关于linux的I/O复用接口select和epoll,下列说法错误的是()
1、select调用时会进行线性遍历,epoll采用回调函数机制,不需要线性遍历
2、select的最大连接数为FD_SETSIZE
3、select较适合于有大量并发连接,且活跃链接较多的场景
4、epoll较适用于有大量并发连接,但活跃连接不多的场景
5、epoll的效率不随FD数目增加而线性下降
6、epoll通过共享存储实现内核和用户的数据交互
2、select的最大连接数为FD_SETSIZE
3、select较适合于有大量并发连接,且活跃链接较多的场景
4、epoll较适用于有大量并发连接,但活跃连接不多的场景
5、epoll的效率不随FD数目增加而线性下降
6、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,
那么遍历是最简单最有效的实现方式。
11
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水
2=7-5; 3=5*2-7; 6=5*4-2*7; 8=5*3-7; 11=5*5-2*7;
127的2014次方这个整数的十位数字数是 4
7^0=01 7^1=07 7^2=49 7^3=..43 7^4=...01
从此进入以4为周期的循环,2014=4*503+2,所以末尾2位应该是49。
在100-999这900个自然数中,若将组成这个数的三个数字认为是三条线段的长度,那么是三条线段组成一个等腰三角形(包括等边)的共有()个
首先,等边三角形有9个。
考虑非等边的等腰三角形。若双边为1,则第三边不存在。
若双边为2,则第三边只能是1或3。同理,可知1-9的等腰三角形的个数为(0+2+4+6+8*5)=52
三位数任选两个作为等腰三角形的两边,有3种取法,总计52*3+9=165
14
考虑非等边的等腰三角形。若双边为1,则第三边不存在。
若双边为2,则第三边只能是1或3。同理,可知1-9的等腰三角形的个数为(0+2+4+6+8*5)=52
三位数任选两个作为等腰三角形的两边,有3种取法,总计52*3+9=165
下面哪个不是线性表?(关联数组)
1、循环链表:.循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的 指针 域指向 头结点 ,整个链表形成一个环。
(1)单循环链表——在单链表中,将终端结点的指针域NULL改为指向表头结点或开始结点即可。
(2)多重链的循环链表——将表中结点链在多个环上。
2、队列:队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。
3、栈:在计算机科学中是限定仅在栈顶进行插入或删除操作的线性表。
4、关联数组:是一种具有特殊索引方式的数组。
(1)单循环链表——在单链表中,将终端结点的指针域NULL改为指向表头结点或开始结点即可。
(2)多重链的循环链表——将表中结点链在多个环上。
2、队列:队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。
3、栈:在计算机科学中是限定仅在栈顶进行插入或删除操作的线性表。
4、关联数组:是一种具有特殊索引方式的数组。
不仅可以通过整数来索引它,还可以使用字符串或者其他类型的值(除了NULL)来索引它。
http://baike.baidu.com/link?url=yYrNB5t4PrCvs-XfxfEM0ZZfALpsEi3FYopk1v0BuopUSWOr7mS0Lou8C-SzhDnSuv7BH5vKIoIblvi8GgUmGq
关联数组和数组类似,由以名称作为键的字段和方法组成。 它包含标量数据,可用索引值来单独选择这些数据,和数组不同的是, 关联数组的索引值不是非负的整数而是任意的标量。这些标量称为Keys,可以在以后用于检索数组中的数值。
关联数组的元素没有特定的顺序,你可以把它们想象为一组卡片。每张卡片上半部分是索引而下半部分是数值。
5、空字符串数组:
6、双向链表:是一种常见的基础数据结构,是一种线性表,是一种物理存储单元上非连续、非顺序的存储结构。双向链表也叫 双链表 ,是链表的一种,它的每个数据结点中都有两个 指针 ,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向 循环链表
关联数组的元素没有特定的顺序,你可以把它们想象为一组卡片。每张卡片上半部分是索引而下半部分是数值。
5、空字符串数组:
6、双向链表:是一种常见的基础数据结构,是一种线性表,是一种物理存储单元上非连续、非顺序的存储结构。双向链表也叫 双链表 ,是链表的一种,它的每个数据结点中都有两个 指针 ,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向 循环链表
线性表,一对一关系,除首节点和尾节点外,每个结点都有一个直接前驱和后继结点。
15下面的哪种排序算法在算复杂度平均不是O(nlogn)的?(桶排序)
某创业团队的一个很大的办公室(障碍和遮挡可以忽略)里有一个WIFI源,有1个工位由于距离WIFI源太远而接收不到信号.为了提高该工位的联网质量,准备在工位和WIFI信号源之间安装一个无线AP(相当于中继的,可以中转该工位上的计算机和WIFI之间的信号).只考虑从WIFI发出的信号,如果AP离WIFI源太近,就起不到中继的作用,如果AP离工位太远则可能连不上WIFI.因此AP有一个最佳的安装位置,那么关于AP最佳安装位置的说法正确的是()
无线AP是用于接收WiFi信号,并将之传递给工位的。将WiFi源信号强弱范围看作一个圆,那么WiFi源功率越大,所能辐射到的范围也即圆的半径越大,越靠近工位。无线AP就是要物尽其用,在能接收到WiFi信号的前提下,将信号传递给工位,故在WiFi源功率越大时,AP最佳位置越靠近工位
17有100个金币,分给10个人.第一个金币等概率地分给10个人之一.之后的每一个金币分配给第K个人的概率正比于这个人已经持有的金币数+1.在这样的分配机制下,关于每个人最终的金币个数的分布的说法错误的是()
A、每个人得到的金币的个数的期望是相等的:由于第一个金币是随机等概率给人,所以每个人拿到第一个金币的概率是一样的,所以每个人的期望相同。
B、 每个人的金币个数接近均匀分布 :这种马太效应的分布模式怎么可能是均匀分布呢
C、第一个金币给哪个人,哪个人的最终金币个数的期望就会更大:第一个拿到金币的人,拿到第二个金币的概率要比其他人高一倍。
D、在中间的某个阶段金币个数越多的人,未来获得金币的可能性越大:中间某个阶段拿到较多金币的人,他后面拿到金币的概率也比其他人高
18
B、 每个人的金币个数接近均匀分布 :这种马太效应的分布模式怎么可能是均匀分布呢
C、第一个金币给哪个人,哪个人的最终金币个数的期望就会更大:第一个拿到金币的人,拿到第二个金币的概率要比其他人高一倍。
D、在中间的某个阶段金币个数越多的人,未来获得金币的可能性越大:中间某个阶段拿到较多金币的人,他后面拿到金币的概率也比其他人高
在自由交换的情况下,只考虑偏好,小张用自己的小刀换了小王的橡皮.关于这个交换以下说法错误的是:()
A、小张觉得橡皮比小刀更好
B、小王觉得小刀比橡皮更好
C、小张和小王总的财富里没有发生变化
D、小张和小王的效用值增加了
E、如果把小王换成小吴,那么这个交换可能就不会发生
F、小刀和橡皮等值(小刀和橡皮本身物品的价值不能因为这次交易就变成等值了)
19
B、小王觉得小刀比橡皮更好
C、小张和小王总的财富里没有发生变化
D、小张和小王的效用值增加了
E、如果把小王换成小吴,那么这个交换可能就不会发生
F、小刀和橡皮等值(小刀和橡皮本身物品的价值不能因为这次交易就变成等值了)
如下C程序,在64位处理器上运行后sz的值是什么?()
struct st
{
int *p;
int i;
char a;
};
int sz=sizeof(struct st);
考点:1、struct的对齐原则,注意不同的编译器有不同的效果。
2、不同的数据类型在32位和64位下所占字节的区别
32位编译器:(四字节对齐)
char :1个字节
指针变量: 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
64位编译器:(8字节对齐)
char :1个字节
即指针变量: 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
此处指针先占用8字节。int占用4字节,满足要求不用补齐,char占用一个字节,同时总的字节数必须满足8的倍数即16
下面这个代码输出的是()()100 300 300 500
#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;
}
下面关于一个类的静态成员描述中,不正确的是()
A、静态成员变量可被该类的所有方法访问
B、该类的静态方法只能访问该类的静态成员
C、该类的静态数据成员变量的值不可修改(常量成员不可修改)
D、子类可以访问父类的静态成员
E、静态成员无多态特性
B、该类的静态方法只能访问该类的静态成员
C、该类的静态数据成员变量的值不可修改(常量成员不可修改)
D、子类可以访问父类的静态成员
E、静态成员无多态特性
类的静态成员属于整个类 而不是某个对象,可以被类的所有方法访问,子类当然可以访问父类静态成员;
静态方法属于整个类,在对象创建之前就已经分配空间,类的非静态成员要在对象创建后才有内存,所有静态方法只能访问静态成员,不能访问非静态成员;
静态成员可以被任一对象修改,修改后的值可以被所有对象共享。
22
静态方法属于整个类,在对象创建之前就已经分配空间,类的非静态成员要在对象创建后才有内存,所有静态方法只能访问静态成员,不能访问非静态成员;
静态成员可以被任一对象修改,修改后的值可以被所有对象共享。
给定的一个长度为N的字符串str,查找长度为P(P<N)的字符串在str中的出现次数.下面的说法正确的是()
A、不存在比最坏时间复杂度O(NP)好的算法
B、不存在比最坏时间复杂度O(N^2)好的算法
C、不存在比最坏时间复杂度O(P^2)好的算法
D、存在最坏时间复杂度为O(N+P)的算法
E、存在最坏时间复杂度为O(log(N+P))的算法
B、不存在比最坏时间复杂度O(N^2)好的算法
C、不存在比最坏时间复杂度O(P^2)好的算法
D、存在最坏时间复杂度为O(N+P)的算法
E、存在最坏时间复杂度为O(log(N+P))的算法
朴素匹配算法 时间复杂度O((N-P+1)*P)
KMP匹配算法 时间复杂度为O(N+P)
KMP匹配算法 时间复杂度为O(N+P)
kmp最坏时间复杂度应该是O(NP),而通过kmp不能确定答案,而是考虑比kmp更好的bm和Sunday算法
23
某体校选择校服,每套校服都包括短袖运动衫,长袖运动衫,厚外套,运动长裤和运动短裤组成.每种运动服有3个备选方案.老师请了部分学生来挑选自己喜欢的校服.结果发现任意3个学生都至少在一种运动服上选择互不相同,那么老师最多邀请了( 8 )名学生参加挑选.
每套校服都包括短袖运动衫,长袖运动衫,厚外套,运动长裤和运动短裤组成.“每种运动服”有个备选方案。说明校服一共有2^5=32种选择方案。
任意3个学生都至少在一种运动服上选择互不相同,假设有老师邀请了n个学生参加挑选,说明Cn 2 <32<Cn 3,得出n=8。
24
任意3个学生都至少在一种运动服上选择互不相同,假设有老师邀请了n个学生参加挑选,说明Cn 2 <32<Cn 3,得出n=8。
有4副相同的牌,每副牌有4张不同的牌.先从这16张牌中,随机选4张出来.然后,在这4张牌中随机选择一张牌,然后把抽出的一张放回3张中,再随机选择一张牌.与上次选出的牌一样的概率是(2/5)
第二次抽样与第一次抽的是同一张牌的概率是1/4,不同张的概率是3/4,同一张的话肯定是一样,不同张的时候如果抽中一样的牌的概率是3/15,所以答案是1/4+3/4 * 3/15 = 2/5