一些笔试题小汇总

来源:互联网 发布:手机淘宝联盟几号提现 编辑:程序博客网 时间:2024/06/06 19:15
1、内存抖动:
所谓抖动现象,指如果分配给进程的存储块数量小于进程所需要的最小值,进程的运行将很频繁地产生缺页中断,这种频率非常高的页面置换现象称为抖动。在请求分页存储管理中,可能出现这种情况,即对刚被替换出去的页,立即又要被访问。需要将它调入,因无空闲内存又要替换另一页,而后者又是即将被访问的页,于是造成了系统需花费大量的时间忙于进行这种频繁的页面交换,致使系统的实际效率很低,严重导致系统瘫痪,这种现象称为抖动现象。抖动现象发生在FIFO页面置换算法中,FIFO还会产生Belady现象,因而FIFO并不是一个好的置换算法。
解决办法:好的页替换算法;减少运行的进程数;增大内存。
2、初始序列为1 8 6 2 5 4 7 3一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为:()
  • 8 3 2 5 1 6 4 7
  • 3 2 8 5 1 4 6 7
  • 3 8 2 5 1 6 7 4
  • 8 2 3 5 1 4 7 6

3、                                        

排序法

最差时间分析平均时间复杂度稳定度空间复杂度冒泡排序O(n2)O(n2)稳定O(1)快速排序O(n2)O(n*log2n)不稳定O(log2n)~O(n)选择排序O(n2)O(n2)稳定O(1)二叉树排序O(n2)O(n*log2n)不一顶O(n)

插入排序

O(n2)O(n2)稳定O(1)堆排序O(n*log2n)O(n*log2n)不稳定O(1)希尔排序OO不稳定O(1)


1、vsftpd配置本地用户传输速率的参数( )
A:anon_max_rate
B:user_max_rate
C: max_user
D: local_max_rate
答案:D

解析:vsftpd 是一个在类UNIX 操作系统上运行的FTP服务器,它是一个完全免费的、开放源代码的ftp服务器软件。vsftp支持很多其他的 FTP 服务器所不支持的特征,比如:高安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
vsftpd配置参数中:
local_max_rate本地用户的传输速率限制,单位为bytes/second,如果是0 为不限制。
anon_max_rate匿名用户的传输速率限制,单位为bytes/second,如果是0 则不限制。

2、软件项目存储于/ftproot,允许apache用户修改所有程序,设置访问权限的指令( )
A:chmod apache -R /ftproot
B: chgrp apache /frproot
C: chown apache /ftproot
D: chmod apache /ftproot
答案:A

解析:B选项的chgrp命令是变更文件或目录所属群组。C选项的chown将文件的拥有者改为指定的用户或组。A、D选项的chmod 修改文件和文件夹读写执行属性;-R的作用是:可递归遍历子目录,把修改应到目录下所有文件和子目录。

3、设有6个结点的无向图,该图至少应有( )条边才能确保是一个连通图。
A:7
B:5
C:8
D:6
答案:B

解析:在一个无向图G中,若从顶点Vi到顶点Vj有路径相连,则称Vi和Vj是连通的。连通图是指任意两个结点之间都有一个路径相连。6个节点的无向图,至少要5个边才能确保是任意两个节点之间都有路径相连。下图是一种可能的连接方式:

图片1.png


4、关于Hadoop系统的作业任务调度等问题,以下描述错误的是( )
A:JobTracker是一个master服务,软件启动之后JobTracker接受Job的每一个子任务task运行于TaskTracker上,并监控它们,如果发现有失效的task就重新运行它。一般情况应该把JobTracker部署在单独的机器上。
B:JobClient会在用户端通过JobClient类对Job配置参数、打包成jar文件存储到hdfs,并把路径提交到JobTracker,然后由JobTracker创建每一个Task(即MapTask和ReduceTask)
C:Nagios不可以监控Hadoop集群,因为它不提供Hadoop支持。
D:HDFS默认Block Size为32M
答案:CD

解析:在Hadoop中,作业是使用Job对象来抽象的。JobClient负责向JobTrack提交Job:包括申请Job的ID、配置Job的运行环境、检查Job的输出配置、对Job的输入数据进行切分生成Job的目录以及相应文件(如jar、xml等)。即JobClient会在用户端通过JobClient类将配置好参数的Job打包成jar文件存储到hdfs,并把路径提交到JobTracker,然后由JobTracker创建每一个Task(即MapTask和ReduceTask)并将它们分发到各个TaskTracker服务中去执行。
JobTracker是一个master服务,软件启动之后JobTracker接收Job,负责调度Job的每一个子任务task运行于TaskTracker上,并监控它们,如果发现有失败的task就重新运行它。一般情况应该把JobTracker部署在单独的机器上。TaskTracker是运行在多个节点上的slaver服务。TaskTracker主动与JobTracker通信,接收作业,并负责直接执行每一个任务。
Nagios是一个可运行在Linux/Unix平台之上的开源监视系统,可以用来监视系统运行状态和网络信息。Nagios可以监视所指定的本地或远程主机以及服务,同时提供异常通知功能。Nagios可以用来监控Hadoop集群,快速定位出现问题的机器。
HDFS的块大小由dfs.block.size参数决定,默认是67108864,即64M。

5、Fisher线性判别函数的求解过程是将M维特征矢量投影在( )中进行求解。
A:M-1维空间
B:一维空间
C:三维空间
D:二维空间
答案:B

解析:Fisher线性判别函数是将多维空间中的特征矢量投影到一条直线上,也就是把维数压缩到一维。寻找这条最优直线的准则是Fisher准则:两类样本在一维空间的投影满足类内尽可能密集,类间尽可能分开,也就是投影后两类样本均值之差尽可能大,类内部方差尽可能小。一般而言,对于数据分布近似高斯分布的情况,Fisher线性判别准则能够得到很好的分类效果。

6、采用开放定址法处理散列表的冲突时,其平均查找长度( )
A:高于二分查找
B:高于链接法处理冲突
C:低于二分查找
D:低于链接法处理冲突
答案:B

解析:散列表(哈希表)中处理冲突的方法有开放定址(Open Addressing)法和拉链(Chaining)法等。开放定址法是指一旦发生了冲突,就去寻找下一个空的散列地址。按照探查方法不同,可将开放定址法区分为线性探查法、二次探查法、双重散列法等。拉链法解决冲突的做法是将所有关键字为同义词的结点链接在同一个单链表中。拉链法处理冲突简单,且无堆积现象,即非同义词决不会发生冲突,因此平均查找长度较短。

7、并发操作会带来哪些数据不一致性( )
A:丢失修改、脏读、死锁
B:不可重复读、脏读、死锁
C:不可修改、不可重复读、脏读、死锁
D:丢失修改、不可重复读、脏读
答案:D

解析:并发操作指的是多用户或多事务同时对同一数据进行操作。
当两个或多个事务选择同一数据,并且基于最初选定的值修改该数据时,会发生丢失修改问题。每个事务都不知道其它事务的存在,最后的更新将重写由其它事务所做的更新,这将导致修改丢失。
当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据。
一个事务重新读取前面读取过的数据,发现该数据已经被另一个已提交的事务修改过。即事务1读取某一数据后,事务2对其做了修改,当事务1再次读数据时,得到的与第一次不同的值。在一个事务中前后两次读取的结果并不致,导致了不可重复读。
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

8、类域界面方程法中,不能求线性不可分情况下分类问题近似或精确解的方法是( )
A:势函数法
B:基于二次准则的H-K算法
C:伪逆法
D:感知器算法
答案:D

解析:线性分类器的设计就是利用训练样本集建立线性判别函数式,也就是寻找最优的权向量的过程。求解权重的过程就是训练过程,训练方法的共同点是,先给出准则函数,再寻找是准则函数趋于极值的优化方法。ABC方法都可以得到线性不可分情况下分类问题近似解。感知器可以解决线性可分的问题,但当样本线性不可分时,感知器算法不会收敛。

9、假设有4条语句S1:a=5x; S2:b=5+y;S3:c=a+b;S4:d=c+y;根据Bernstein条件,下面说法正确的是( )
A:S1,S4可并发执行
B:S1,S2不可并发执行
C:S2,S3可并发执行
D:S3,S4不可并发执行
答案:D

解析:Bernstein条件是指两个过程如果有数据冲突,那么就没法并行执行。
A选项中,S4需要读数据c,而S3中数据c依赖于a,因此S4依赖于S1的结果,S1、S4不可并发执行。B选项中,S1依赖于x,S2依赖于y,S1和S2之间没有数据冲突,可以并发执行。C选项中,S3依赖于b,S3和S2之间有数据冲突,不可并发执行。D选项中,S4需要数据c,S4的执行依赖S3的结果,不可并发执行。

10、在C++语言中,若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )
A:Data+operator(Data);
B: Data+(Data);
C: Data operator+(Data);
D: Data operator+(Data,Data);
答案:C

解析:运算符重载声明形式为:返回类型 operator运算符(参数表);由于加法是二目运算符,作为类成员函数,还需要一个数据做“被加数”,因此参数列表中Data的数目是1个。此外,使用友元函数也能够达到同样的目的,其声明为friend Data operator+(Data,Data),因为友元函数不是类的成员函数,没有this指针,其形参数目与运算符需要的数目相同。

11、在一个带头结点的单链表HL中,若要在第一个元素之前插入一个由指针p指向的结点,应该使用的语句为:( )
A:HL =p; p->next =HL;
B: p->next =HL ;HL =p;
C: p->next =HL ->next;HL ->next =p;
D: p->next =HL ;p =HL;
答案:C

解析:在插入节点时:先要将待插入节点p的后继节点设为第一个元素,也就是p->next =HL ->next。然后再将头结点HL的后继节点改为p节点,HL ->next =p。下图中红色的箭头说明了插入操作执行的顺序,如果顺序不当,就会丢失指向第一个元素的指针,破坏链表结构。

图片2.png


12、在KMP算法中,已知模式串为ADABCADADA,请写出模式串的next数组值( )
A:0,1,1,2,1,1,2,3,4,3
B:1,2,3,2,1,1,2,4,4,3
C:0,1,1,1,2,1,2,3,4,3
D:2,1,1,2,1,1,2,3,3,4
答案:A

解析:'前缀'指除了最后一个字符以外,一个字符串的全部头部组合;'后缀'指除了第一个字符以外,一个字符串的全部尾部组合。next数组值就是'前缀'和'后缀'的最长的共有元素的长度。
首先求最大相同前缀后缀长度。'A'的前缀和后缀都为空集,没有共有元素,共有元素长度为0;'AD'的前缀为[A],后缀为[D],没有共有元素,共有元素长度为0;'ADA'的前缀为 [A, AD],后缀为[DA, A],共有元素为A,长度为1;'ADAB'的前缀为[A, AD, ADA],后缀为[DAB, AB,B ],共有元素长度为0;以此类推,最大公共元素长度为0,0,1,0,0,1,2,3,2。
然后将最长相同前缀后缀长度值右移一位,并将next[0]初值赋为-1,得到的next数组:-1,0,0,1,0,0,1,2,3,2。
在某些语言中,数组不是从0开始索引的,而是从1开始索引,只需要将next数组中每个值加1,得到0,1,1,2,1,1,2,3,4,3。

13、影响聚类算法效果的主要因素有( )
A:特征选取
B:已知类别的样本质量
C:模式相似性测度
D:分类准则
答案:ACD

解析:聚类的目标是使同一类对象的相似度尽可能地大;不同类对象之间的相似度尽可能地小。聚类分析的算法可以分为划分法(Partitioning Methods)、层次法(Hierarchical Methods)、基于密度的方法(Density-Based Methods)、基于网格的方法(Grid-Based Methods)、基于模型的方法(Model-Based Methods)、谱聚类(Spectral Clustering)等,不用的方法对聚类效果存在差异(D正确);特征选取的差异会影响聚类效果(A正确)。聚类的目标是使同一类对象的相似度尽可能地大,因此不同的相似度测度方法对聚类结果有着重要影响(C正确)。由于聚类算法是无监督方法,不存在带类别标签的样本,因此,B选项不是聚类算法的输入数据。



1. 单选题

1. 假设把整数关键码K散列到N个槽列表,以下哪些散列函数是好的散列函数

A: h(K)=K/N;

B: h(K)=1;

C: h(K)=K mod N;

D: h(K)=(K+rand(N)) mod N, rand(N)返回0到N-1的整数

参考答案:D


2. 下面排序算法中,初始数据集的排列顺序对算法的性能无影响的是:

A: 堆排序 B:插入排序

C: 冒泡排序 D:快速排序

参考答案:A 


3. 下面说法错误的是:

A: CISC计算机比RISC计算机指令多

B: 在指令格式中,采用扩展操作码设计方案的目的是为了保持指令字长不变而增加寻址空间

C:增加流水线段数理论上可以提高CPU频率

D:冯诺依曼体系结构的主要特征是存储程序的工作方式

参考答案:B

解释:指令操作码分为三种:定长操作码,霍夫曼操作码和扩展操作码,采用扩展操作码可以使得指令字长不变的情况下,尽可能多的表示更多的指令。


4. 不属于冯诺依曼体系结构必要组成部分是:

A:CPU B: Cache C:RAM D:ROM

参考答案:应该是选cache


5. 一个栈的入栈序列式ABCDE则不可能的出栈序列是:

A:DECBA  B:DCEBA  C:ECDBA  D:ABCDE

参考答案:C


6.你认为可以完成编写一个C语言编译器的语言是:

A:汇编 B:c语言 C:VB D:以上全可以

参考答案:我认为选D,编译器的目的就是把编程语言编译成为汇编语言或者机器语言,主要是词法分析,语法分析,语义分析,编译原理这门课程的时候曾经用c语言实现过编译器的部分功能,而设想没有c语言,那么第一c程序跑起来的编译器肯定用汇编语言写的,所以应该是全部


7. 关于C++/Java类中的static成员和对象成员的说法正确的是:

A:static成员变量在对象构造时候生成

B: static成员函数在对象成员函数中无法调用

C: 虚成员函数不可能是static成员函数

D: static成员函数不能访问static成员变量

参考答案:C

转载请注明出处:csdn-zhlfox2006

8:


参考答案:C,13个


9:某进程在运行过程中需要等待从磁盘上读入数据,此时进程的状态将:

A: 从就绪变为运行  B:从运行变为就绪

C: 从运行变为阻塞  D:从阻塞变为就绪

参考答案:c 


10:下面算法的时间复杂度为:

Int f(unsigned int n)
{

If(n==0||n==1)

Return 1;

Else 

Return n*f(n-1);

}

A: O(1)   B:O(n)  C:O(N*N)  D:O(n!)

参考答案:B,题目算得是n!,但是复杂度确实O(n)

转载请注明出处:csdn-zhlfox2006

11: n从1开始,每个操作可以选择对n加1或者对n加倍。若想获得整数2013,最少需要多少个操作。

A:18    B:24   C:21  D;不可能

参考答案: A,18个完美解决,方法也很简单,尽量对2013用除法,显示2013->2012->1006->503->502->251->250->125->124->62->31->30->15->14->7->6->3->2->1

正向只能是+1和×2,所以逆向只能-1和/2,由上过程可得18次


12:对于一个具有n个顶点的无向图,若采用邻接表数据结构表示,则存放表头节点的数组大小为:

A: n  B: n+1    C: n-1   D:n+边数

参考答案:A 


13:


参考答案:对于几何中的每个字符串取hash可以看作是同分布的独立重复事件,所以每一个事件出现10的概率都是p=1/1024,那么当出现的时候,期望的次数就是1/p,1024.


14:如下函数,在32bit系统foo(2^31-3)的值是:

Int foo(int x)
{

Return x&-x;

}

A: 0   B: 1  C:2  D:4

参考答案:C,首先-号比^的优先级高,所以实参应该是2^28,而C++中并没有幂指数的运算符,这个^只表示异或运算,所以实参的二进制值,

x的值为  0000 0000, 0000 0000, 0000 0000,0000 0010

               -x 的值为 1111 1111, 1111 1111, 1111 1111, 1111 1110

 x&-x; 0000 0000, 0000 0000, 0000 0000,0000 0010

即为2。

所以答案为C


15:对于顺序存储的线性数组,访问节点和增加节点删除节点的时间复杂度为:

A: O(n),O(n) B:O(n),O(1) C:O(1),O(n) D:O(n),O(n)

参考答案:C


16:在32为系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是:

Struct A
{

Int a;short b;int c;char d;

};

Struct B
{int a;short b;char c;int c;};

A: 16,16    B:13,12   C:16,12 D:11,16

参考答案:C


17:袋中有红球,黄球,白球各一个,每次任意取一个放回,如此连续3次,则下列事件中概率是8/9的是:

A: 颜色不全相同 B:颜色全不相同C:颜色全相同D:颜色无红色

参考答案:A

解释:由于颜色任一颜色相同的概率为1/27

颜色无红色的概率为2/3×2/3×2/3=8/27

颜色全部相同的概率为1/9

颜色都不同,概率为3×1/3×2×1/3×1/3=2/9

颜色不全相同为8/9

 

18:一个洗牌程序的功能是将n张牌的顺序打乱,以下关于洗牌程序的功能定义说法最恰当的是:

A: 每张牌出现在n个位置上的概率相等

B: 每张牌出现在n个位置上的概率独立

C: 任何连续位置上的两张牌的内容独立

D: n张牌的任何两个不同排列出现的概率相等

参考答案:A

解释,创新工场笔试题让设计一个shuffle算法的时候就是特意提到,每张牌出现在任意位置的概率相等。


19:用两种颜色去染排成一个圈的6个棋子,如果通过旋转得到则只算一种,一共有多少种染色:

A: 10 B:11 C:14: D:15

参考答案:C

解释:应该有14种方案,设只有黑白两色,默认白色,那么,用p(n)表示有n个黑棋的种类

p(0)=p(6)=1

p(1)=p(5)=1

p(2)=p(4)=3 //相邻的一种,隔一个的一种,两个的一种

p(3)=4 //都相邻的一种,BB0B的一种,BB00B的一种,B0B0B的一种,一共4种

综上是14种


20:递归式的先序遍历一个n节点,深度为d的二叉树,则需要栈空间的大小为:

A: O(n) B:O(d)  C:O(logn)  D:(nlogn)

参考答案:B 

解释:因为二叉树并不一定是平衡的,也就是深度d!=logn,有可能d》》logn。。所以栈大小应该是O(d)


第二部分:多选

21:两个线程运行在双核机器上,每个线程主线程如下,线程1:x=1;r1=y;线程2:y=1;r2=x;

X和y是全局变量,初始为0。以下哪一个是r1和r2的可能值:

A: r1=1,r2=1

B: r1=1,r2=0

C:r1=0,r2=0

D:r1=0,r2=1

参考答案:ABD


22.关于Linux系统的负载,以下表述正确的是:

A: 通过就绪和运行的进程数来反映

B: 通过TOP命令查看

C: 通过uptime查看

D: Load:2.5,1.3,1.1表示系统的负载压力在逐渐变小

参考答案:BC


23:关于排序算法的以下说法,错误的是:

A: 快速排序的平均时间复杂度O(nlogn),最坏O(N^2)

B:堆排序平均时间复杂度O(nlogn),最坏O(nlogn)

C:冒泡排序平均时间复杂度O(n^2),最坏O(n^2)

D:归并排序的平均时间复杂度O(nlogn),最坏O(n^2)

答案: D


24:假设函数rand_k会随机返回一个【1,k】之间的随机数(k>=2),并且每个证书出现的概率相等。目前有rand_7,通过调用rand_7()和四则运算符,并适当增加逻辑判断和循环控制逻辑,下列函数可以实现的有:

A:rand_3 B:rand_21  C:rand_23  D:rand_47

 参考答案:ABCD

解释,对于rand_x(x<7)的直接截断,只要rand数大于x直接忽略,保证rand_x能够做到概率相等。而对于其他的则采用7×rand_7+rand_7,可以-7得到rand_49,然后截断成rand_42,统一除以2,则是rand_21,其他类似。多谢@plylw456 提醒。

鉴于大家对这道题的解释看得不太清,我就在此展开解释一下:

首先分析:7×rand_7+rand_7

1.      首先它是由两个随机变量组成,亦即7X+Y,只不过X与Y是独立同分布的而已,所以上式子表示为Z=7X+Y

那么对于随机变量X,你可以理解为它是一个“量级”的概念,X取值为1~7

当X=1时,随机变量Z取值范围是1*7+(1~7),也就是8~14

当X=2时,随机变量Z取值范围是2*7+(1~7),也就是15~21

当X=3时,随机变量Z取值范围是3*7+(1~7),也就是22~28

以此类推。。。

可以产生8~56的随机数。

那么产生的8~56的随机数,概率都相等吗?

答案是必然的,因为X是量级的概念,达到每个量级的概率是1/7,在量级内,Y达到1~7每个数的概率依然是1/7,所以8~56的每个数的概率都是1/49

好了我们可以得到1/49等概率的8~56,直接在生产的时候-7,得到等概率1/49的1~49.。。。。

好,现在只需要记住,得到rand_49,1~49的每个数都是等概率的就可以了,因为我们要截断,也就是说,为了得到rand_23直接截断,判断输出如果>23,直接忽略,否则输出,大家可能有点别扭,因为有的随机数生成的时候可能时间上要比其他的长点。但是要记住,1~23每个数输出的概率都是相等的,只不过不能保证每次输出时间都分秒不差而已。时间长短是跟概率无关的概念。



原创粉丝点击