笔试——题库汇总(阿里)

原创 2015年07月14日 16:51:01

1 不算main这个进程自身,到底创建了多少个进程啊?

int main(int argc, char* argv[])
{
   fork();
   fork() && fork() || fork();
   fork();
}

18
19
20
21

这里写图片描述
先执行第一个fork产生两个进程,包括主进程。
fork() && fork() || fork(); 这一句先执行第一个fork,产生4个,在这4个中有两个是主进程返回非零值,两个子进程返回0值,因而会影响接下来的运行。先判断fork() && fork(),如果第一个fork产生了0值,则第二个fork不会执行,直接执行||后面 的fork,入产生非零值,则fork() && fork()该表达式还需要继续判断&&后面的fork的真假。

【答案】http://blog.csdn.net/hs794502825/article/details/10242091
http://blog.csdn.net/jason314/article/details/5640969

2 在一个童话世界里,任意两个人之间要么是朋友关系,要么是敌人关系,不存在其他关系及没有关系的情况。并且,如果A和B是朋友关系,B和C是朋友关系,那么A和C必然是朋友关系。那么关于这个童话世界中的人群的说法错误的是:__
可能只有1个人群,这个人群内部是朋友关系。
可能有2个人群,人群内部是朋友关系,人群之间是敌人关系。
可能有3个及以上个人群,人群内部是朋友关系,人群之间是敌人关系。
如果存在多个人群,并且人群内部是朋友关系,人群之间是敌人关系,那么这些人群必然是差不多大小的。

选项D中的情况可以是其中一个人群只有一个人,另外一个人群可以由很多人。
这样一个世界里朋友关系是比较不容易发生变化的。

3 一条很长的河,河水的流速是1m/s,一个皮划艇逆流滑行的速度是2m/s。某一刻皮划艇运动员发现丢失了一只漂流瓶,然后调头顺流以相同的节奏划船,经过半小时后发现了漂流瓶。请问船调头时距离漂流瓶多远()?
5400m
3600m
7200m
1800m
9000m
无法判断

【关键点】A 5400m,人逆流速度2m/s,河流流速1m/s,所以人在静水速度3m/s,人在顺水速度4m/s。

4 下列不属于hash碰撞解决方法的是()。
线性探测 1 2 3 …m-1
单旋转法
二次探测 1² -1² 2² -2² …
拉链法 链地址法
双重散列
多重散列

旋转法是将数据的键值中进行旋转。如5062101旋转之后得到1506210,这是产生随机散列值(hash)的一种方法,不是解决hash碰撞的方法
散列:产生散列值得过程,用哈希函数来产生 直接定址、数字分析、平方取中、折叠法、除留余数法等
解决冲突的方法:
拉链法:http://sjjp.tjuci.edu.cn/sjjg/DataStructure/DS/web/chazhao/chazhao9.4.3.3.htm

5 有两个32bit的数A、B,使用下面方式得到32bit的数C、D。哪一种可以使用C、D得到A、B的值?
C=(int32)(A+B),D=(int32)(A-B)
C=(int32)(A+B),D=(int32)((A-B)>>1)
C=(int32)(A+B),D=B
C=(int32)(A+B),D=(int32)(A+2*B)
C=(int32)(A*B),D=(int32)(A/B)
都不可以,可能溢出

C
第一项:A=(C+D)/2,B=C-A
第二项:D右移一位,不知道移出的是1还是0,不能恢复
第三项:A=C-D,B=D
第四项:B=D-C,A=C-B
第五项:虽然可以C*D再开方,但是不能确定A和B的正负
但是对于无符号数,A不行,这里简单起见,以3bit数为例。例如A=111,B=110。C=A+B=001(溢出),D=A-B=001,所以A不能正确恢复了。C仍然可以,A=C-D=001-110=111。D答案,同样因为溢出不能恢复。

6 关于引用以下说法错误的是()。
引用必须初始化,指针不必
引用初始化以后不能被改变,指针可以改变所指的对象
不存在指向空值的引用,但是存在指向空值的指针
一个引用可以看作是某个变量的一个“别名”
引用传值,指针传地址
函数参数可以声明为引用或指针类型

首先,E明显是不对的。引用也是传递的地址,否则你在函数内部操作的就不可能是实参,而只能是形参。实参的内容是不会改变的。其次B项说法不明确,“引用初始化以后不能被改变 ”有歧义。如果已有&a = b; 则不能再有&a = c; 若b = 2; &a = b; a = 5;则是可以的,b的值也将被赋为5。考虑到B项后面又说:“指针可以改变所指的对象 ”,该题考察的应该是前一种意思。综上所诉,选E

7 下列关于线程调度的叙述中,错误的是()。
调用线程的sleep()方法,可以使比当前线程优先级低的线程获得运行机会
调用线程的yeild()方法,只会使与当前线程相同优先级的线程获得运行机会 yeild()会给优先级相同的或者比自己高的线程运行的机会。✘
当有比当前线程的优先级高的线程出现时,高优先级线程将抢占CPU并运行
一个线程由于某些原因进入阻塞状态,会放弃CPU
具有相同优先级的多个线程的调度一定是分时的 在批处理操作系统中并不存在分时调度。✘
分时调度模型是让所有线程轮流获得CPU使用权

8、 一台刚刚接入互联网的WEB服务器第一次被访问到时,不同协议的发生顺序是下面中的__
ARP -> DNS -> HTTP
ARP -> HTTP -> DNS
DNS -> HTTP -> ARP
DNS -> ARP -> HTTP
HTTP -> ARP -> DNS
HTTP -> DNS -> ARP
信息发送出去都是由低层逐层向上传递的,arp是数据链路层的协议,dns是网络层的协议、http是应用层的协议。 选A

9、以下程序输出是__

#include <iostream> 
using namespace std; 
int main(void) 
{ 
    const int a = 10; 
    int * p = (int *)(&a); 
    *p = 20; 
    cout<<"a = "<<a<<", *p = "<<*p<<endl; 
    return 0; 
} 

编译阶段报错运行阶段报错
a = 10, *p = 10
a = 20, *p = 20
a = 10, *p = 20
a = 20, *p = 10

选D。
因为a 和p都指向相同的内存地址,所以输出的前两个结果是相同的,但为啥相同的内存里的结果不相同么?--这就是常量折叠.
这个”常量折叠”是 就是在编译器进行语法分析的时候,将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化。
因为编译器在优化的过程中,会把碰见的const全部以内容替换掉(跟宏似的: #define pi 3.1415,用到pi时就用3.1415代替),这个出现在预编译阶段;但是在运行阶段,它的内存里存的东西确实改变了!!!
简单的说就是,当编译器处理const的时候,编译器会将其变成一个立即数。

10、将整数序列(7-2-4-6-3-1-5)按所示顺序构建一棵二叉排序树a(亦称二叉搜索树),之后将整数8按照二叉排序树规则插入树a中,请问插入之后的树a中序遍历结果是__

答案:1-2-3-4-5-6-7-8

11、如下SQL语句中,__可能返回null值。
(1) select count(*) from t1;
(2) select max(col1) from t1;
(3) select concat(‘max=’,max(col1)) from t1;
(1)不可能,(2)和(3)可能

(1)返回的是表的行数,如果没有记录,应该返回0,不会出现NULL,
(2) 和(3) 正常情况下不会出现NULL,但是如果表里面没有记录,则会出现NULL

12 以下使用了贪心算法的是__
KMP算法
希尔排序算法
冒泡排序算法
Dijkstra算法
快速排序算法
Floyd算法

正确答案: D Dijkstra算法

13 进程阻塞的原因不包括__
时间片切换
等待I/O
进程sleep Sleep之后进程处于中断挂起状态。当系统恢复后进程会从中断点继续进程运行。
等待解锁

正确答案: A

14
Dijkstra算法用于求解图中两点最短路径,其时间复杂度O(n^2)
Floyd-Warshall算法用于求解图中所有点对之间最短路径,其时间复杂度为O(n^3)
找出n个数字的中位数至少需要O(n*logn)的时间 快排时从中间比,一比即中就是O(1)
基于比较的排序问题的时间复杂度下界是O(n*logn)

15 如果在一个排序算法的执行过程中,没有一对元素被比较过两次或以上,则称该排序算法为节俭排序算法,以下算法中是节俭排序算法的有__
插入排序 每个未排序的元素只会与 已经有序的元素进行至多一次比较
选择排序
堆排序 是选择排序的一种
归并排序 每个有序列表内的元素不进行比较;列表之间的元素比较一次之后就进入了同一个列表

选择排序 :
①初始状态:无序区为R[1..n],有序区为空。
②第1趟排序
在无序区*R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换*,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

16 设 m 和 n 都是 int 类型,那么以下 for 循环语句,__
for(m=0,n=-1;n=0;m++,n++)
n++;
A.循环体一次也不执行
B.循环体执行一次
C.是无限循环
D.有限次循环
E.循环结束判断条件不合法
F.运行出错

选A,因为n=0是赋值运算,先将0给n然后再判断n是否为真,其为假故永不执行。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

跳格子问题——阿里笔试

有1,2,3,......无穷个格子,你从1号格子出发,每次1/2概率向前跳一格,1/2概率向前跳两格,走到格子编号为4的倍数时结束,结束时期望走的步数为____。 2 12/5 14/...

将整数nSum拆分成num个数的和的形式——阿里巴巴笔试题

将一个整数nSum分解成num个整数和的形式,如nSum=6,num=3那么,nSum就可以分解成为1 1 4;1 2 3;222。请编程实现!   方法解析:采用递归的算法,分解时,层次(n...

2013年阿里巴巴暑期实习招聘笔试题目及部分答案——5月5日

网上各种标为2013年,实际上都是2012年或者更早的,下面的才是真正的2013年5月5日考试的卷子。 答题说明: 1.答题时间90分钟,请注意把握时间; 2.试题分为四个部分:单项选择题...

阿里巴巴应聘有感——从笔试到面试

本人西工大数学系本科生一枚,九月开学,又要开始忙了,金九银十我也不能错过呀,我本可以保送研究生,说实在的能找到好的工作,我才不愿意考研呢!于是网上各种投简历,什么阿里,百度,腾讯,华为......于是...

基于LRU算法的缓存池——阿里笔试题

这是一题2011年阿里实习生招聘的笔试题,感觉不错,拿来给大家fen'xia

2015年秋季阿里巴巴在线笔试——Java研发师——部分试题分析

d 分析: 从A到B总共12步,向上可以走5步,向右可以走7步。注意,必须向上走5步,向右走7步。 排除从A到P的C3,4.(就是排列组合那个符号),和从P到B的C2,8。共有 C5,12 -C...

iOS面试题合集(77道)【有答案】 | IT笔试面试题库

1.#import和#include的区别 @class? @class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文 件中还是需要使用#import 而#import比起#incl...

最全的Java笔试题库之问答题篇-总共243道【1~60】

1. J2EE是什么?它包括哪些技术? 解答:从整体上讲,J2EE是使用Java技术开发企业级应用的工业标准,它是Java技术不断适应和促进企业级应用过程中的产物。适用于企业级应用的J2EE,提...

笔试题库

1、下面哪些选项能编译通过()?int i; char a[10]; string f(); string g(string &str); A. if(!!i){f();} B. g(f());...

iOS面试题合集(77道)【有答案】 | IT笔试面试题库

1.#import和#include的区别 @class? @class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文 件中还是需要使用#import 而#import比起#incl...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)