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

原创 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是否为真,其为假故永不执行。

阿里面试心得

分类: 工作—面试-笔试(12) 作者同类文章X 上周发了一个阿里内推的帖子,没想到短时间内就收到了成百上千封简历。 我仔仔细细地看了每一封简历,附带有Gi...
  • qq_34424731
  • qq_34424731
  • 2017年03月12日 19:29
  • 520

2018阿里软件工程师笔试题

1、给定一个字符串S和有效单词的字典D,请确定可以插入到S中的最小空格数,使得最终的字符串完全由D中的有效单词组成,并输出解。 如果没有解则应该输出n/a 例如 输入 S = "ilikeal...
  • Bing_Lee
  • Bing_Lee
  • 2017年08月25日 21:36
  • 478

一个嵌入式工程师的面试之路

一个嵌入式开发者的面试之路
  • aotony_1988
  • aotony_1988
  • 2016年10月23日 20:04
  • 2820

阿里巴巴常考面试题及汇总答案

原文地址:http://blog.csdn.net/free0sky/article/details/7927275 一、String,StringBuffer, StringBui...
  • natian306
  • natian306
  • 2013年09月01日 21:56
  • 115267

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

1 不算main这个进程自身,到底创建了多少个进程啊?int main(int argc, char* argv[]) { fork(); fork() && fork() || fork...
  • tanxuan231
  • tanxuan231
  • 2015年07月14日 16:51
  • 619

记阿里的三次面试

前言 鉴于在网上搜“阿里三面”搜出来一堆“阿里巴巴三面牙刷”,没有任何借鉴意义,只能自己亲身经历了,故写点经验以后面试可以参考。本人参加了5月5日的笔试,在5月20多号接到了电面,紧接着第二天是电面...
  • felicitia
  • felicitia
  • 2013年06月02日 21:28
  • 44995

最近一段时间的笔试心得(阿里,网易,华为)

到了大三下学期,开始要找实习了。= =刚开始做安卓开发水平还比较渣,但觉得实习生的要求可能没有那么高。抱着试一试的心态投了阿里,网易,腾讯和华为。接下来就讲讲的我自己的一些体会。阿里之前认识一个学长在...
  • dvsjvhdvhdnt
  • dvsjvhdvhdnt
  • 2016年03月31日 21:41
  • 5973

阿里笔试和视频一面 2017.9

1.首先先自我介绍,根据我的感觉来说,最好先讲讲自己对Android的看法,还可以简单的介绍下自己做过的项目。 面试官的一些问题 1.Activity的启动模式 -4种,问在哪些情况下用哪种 2.Ja...
  • qq_38366777
  • qq_38366777
  • 2017年09月13日 20:10
  • 90

研发和开发---谈谈我经历的一些公司面试

我之前的公司面试分为这两类比较恰当:一类偏向做业务软件的,一类偏向做系统软件的。   业务软件和底层软件两个领域的不同特点.       做业务软件,好的职业发展偏向客户需求分析,和客户有好的沟通交流...
  • buhui912
  • buhui912
  • 2014年03月24日 19:09
  • 1177

阿里笔试题第二题之-------容错技术

阿里笔试题第二题之——-容错技术 定义:容错就是当由于种种原因在系统中出现了数据、文件损坏或丢失时,系统能够自动将这些损坏或丢失的文件和数据恢复到发生事故以前的状态,使系统能够连续正常运行一种技术。...
  • u012896140
  • u012896140
  • 2015年04月06日 17:38
  • 508
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:笔试——题库汇总(阿里)
举报原因:
原因补充:

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