logo资料库

2014阿里巴巴校园招聘软件研发工程师笔试真题及答案.doc

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
A: CISC计算机比RISC计算机指令多
C:增加流水线段数理论上可以提高CPU频率
A:DECBA B:DCEBA C:ECDBA D:ABCDE
A: 颜色不全相同 B:颜色全不相同C:颜色全相同D:颜色无红色
A: 10 B:11 C:14: D:15
2014 阿里巴巴校园招聘软件研发工程师笔试真题及答案 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(插入排序:最优时间复杂度 O(n)最差时间复杂度 O(n^2)平均时间复杂度 O (n^2) 冒泡排序:最优时间复杂度 O(n)最差时间复杂度 O(n^2)平均时间复 杂度 O(n^2) 间复杂度 O(nlogn) 快速排序:最优时间复杂度 O(nlogn)最差时间复杂度 O(n^2)平均时 堆排序:最优时间复杂度 O(nlogn)最差时间复杂度 O(nlogn)平均时 间复杂度 O(nlogn)) 3. 下面说法错误的是: A: CISC 计算机比 RISC 计算机指令多 B: 在指令格式中,采用扩展操作码设计方案的目的是为了保持指令字长不变而增 加寻址空间 C:增加流水线段数理论上可以提高 CPU 频率 D:诺依曼体系结构的主要特征是存储程序的工作方式 答案:B 4. 不属于诺依曼体系结构必要组成部分是:
A:CPU B: Cache C:RAM D:ROM 答案:B 5. 一个栈的入栈序列式 ABCDE 则不可能的出栈序列是: A:DECBA B:DCEBA C:ECDBA D:ABCDE 答案:C 6.你认为可以完成编写一个 C 语言编译器的语言是: A:汇编 B:C 语言 C:VB D:以上全可以 答案:D 7. 关于 C++/JAVA 类中的 static 成员和对象成员的说确的是: A:static 成员变量在对象构造时候生成 B: static 成员函数在对象成员函数中无法调用 C: 虚成员函数不可能是 static 成员函数 D: static 成员函数不能访问 static 成员变量 答案:A 8:
答案:C 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 11: n 从 1 开始,每个操作可以选择对 n 加 1 或者对 n 加倍。若想获得整数 2013,最少需 要多少个操作。 A:18 B:24 C:21 D;不可能 答案:A, 对 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:
答案:A.对于几何中的每个字符串取 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 答案:B 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,12D:11,16 答案:C 17:袋中有红球,黄球,白球各一个,每次任意取一个放回,如此连续 3 次,则下列事件中 概率是 8/9 的是: A: 颜色不全相同 B:颜色全不相同 C:颜色全相同 D:颜色无红色 答案:A 18:一个洗牌程序的功能是将 n 牌的顺序打乱,以下关于洗牌程序的功能定义说法最恰当 的是: A: 每牌出现在 n 个位置上的概率相等 B: 每牌出现在 n 个位置上的概率独立 C: 任何连续位置上的两牌的容独立 D: n 牌的任何两个不同排列出现的概率相等 答案:A 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 第二部分:多选 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(对于 A 不确定) 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 解释:归并排序的平均时间复杂度 O(nlogn),最坏 O(nlogn) 24:假设函数 rand_k 会随机返回一个【1,k】之间的随机数(k>=2),并且每个证书出现的 概率相等。目前有 rand_7,通过调用 rand_7()和四则运算符,并适当增加逻辑判断和循 环控制逻辑,下列函数可以实现的有: A:rand_3 B:rand_21 C:rand_23 D:rand_49 答案:ABCD 解释:对于 rand_x(x<7)的直接截断,只要 rand 数大于 x 直接忽略,保证 rand_x 能够 做到概率相等。而对于其他的则采用 7×rand_7+rand_7,可以-7 得到 rand_49,然后截断 成 rand_42,统一除以 2,则是 rand_21,其他类似。 第三部分 25、某二叉树的前序遍历序列为-+a*b-cd/ef,后序遍历序列为 abcd-*+ef/-,问其中序遍 历序列是——。 答案:a+b*c-d-e/f 26、某缓存系统采用 LRU 淘汰算法,假定缓存容量为 4,并且初始为空,那么在顺序访问 以下数据项的时候 1,5,1,3,2,4,1,2 出现缓存命中的次数是——。最后缓存中即将准备淘 汰的数据项是——。 答案:3,3 解释:(LRU 是 Least Recently Used 近期最少使用算法。)1-》1,5-》5,1-》5,1,3-》 5,1,3,2-》1,3,2,4-》3,2,4,1-》3,4,1,2-》 首先 1 调入存,然后 5 调入存,然后 1 调入存(命中缓存),然后 3 调入存,然后 2 调入 存,然后 4 调入存(将最少使用的 5 置换出存),然后 1 调入存(命中缓存),然后 2 调 入存(命中缓存)。最后,最少使用的 3 将面临被置换出的危险。 27、两个较长的单向链表 a 和 b,为了找出及诶单 noed 满足 node in a 并且 node in b。 请设计空间使用尽量小的算法(用 c/c++,java 或者伪代码) struct node { int v; node *next; [html]view plaincopyprint?        }; /* 返回链表的长度
                                             链表为空 返回 0 */ size_t listLen(node * p) { size_t num = 0; while (p!=NULL) { num++; p = p->next; } return num; } // 如果找到了 则返回指针 指向公共节点 // 如果不存在 则返回空指针 node * findFirstCommenNode(node * pheada, node * pheadb) { size_t lenA = listLen(pheada); size_t lenB = listLen(pheadb); node * plistA = pheada; node * plistB = pheadb; //调整长度 //plistA 指向较长的一个 if (lenA < lenB) { plistB = pheada; plistA = pheadb; size_t t = lenA; lenA = lenB; lenB = t; } while(lenA > lenB) { plistA = plistA->next; --lenA; } //一样长了 //寻找公共节点 while (plistA!=NULL && plistA != plistB) { plistA = plistA->next; plistB = plistB->next; } return plistA; } 算法的空间复杂度 O(1),时间复杂度 O(m+n)。
分享到:
收藏