口试要通过层层磨练,刷题肯定是必不可少的。
这一次口试题,不仅是知识的收成,还将间接地与技能大牛们做了直不雅观的沟通,理解他们的出题思路与稽核要点,并加以消化接管。

阿里巴巴面试题+参考谜底!速来_阿里巴巴_专家 科技快讯

这对自己技能能力本身便是一种极大的提升。
走上编程之路,不断丰富自己方能与世接轨,努力做最精良的自己。

口试题001:如何实现一个高效的单向链表逆序输出?

——阿里巴巴出题专家:昀龙/阿里云弹性人工智能卖力人

参考答案

下面是个中一种写法,也可以有不同的写法,比如递归等。
供参考。

口试题002:已知sqrt (2)约即是1.414,哀求不用数学库,求sqrt (2)精确到小数点后10位。

——阿里巴巴出题专家:文景/阿里云CDN资深技能专家

稽核点

根本算法的灵巧运用能力(二分法学过数据构造的同学都知道,但不一定往这个方向考虑;如果学过数值打算的同学,该当还要能想到牛顿迭代法并阐明清楚)。
退出条件设计。

参考答案

1. 已知sqrt(2)约即是1.414,那么就可以在(1.4, 1.5)区间做二分查找,如:

high=>1.5 low=>1.4mid => (high+low)/2=1.451.451.45>2 ? high=>1.45 : low => 1.45循环到c)

2. 退出条件

前后两次的差值的绝对值<=0.0000000001, 则可退出。

代码示例:

口试题003:给定一个二叉搜索树(BST),找到树中第K小的节点。

——阿里巴巴出题专家:文景/阿里云CDN资深技能专家

稽核点

1. 根本数据构造的理解和编码能力

2. 递归利用

示例

如下图,输入K=3, 输出节点值3

解释:担保输入的K知足1<=K<=(节点数目)

参考答案

树干系的题目,第一眼就想到递归求解,旁边子树分别遍历。
遐想到二叉搜索树的性子,root大于左子树,小于右子树,如果左子树的节点数目即是K-1,那么root便是结果,否则如果左子树节点数目小于K-1,那么结果一定在右子树,否则就在左子树。
因此在搜索的时候同时返回节点数目,跟K做比拟,就能得出结果了。

代码示例:

繁芜度剖析:

韶光繁芜度:O(N),节点最多遍历一遍

空间繁芜度:O(1),(如果算上递归深度可以当做O(logN))

口试题004:LRU缓存机制。

——阿里巴巴出题专家:文景/阿里云CDN资深技能专家

设计和实现一个LRU(最近最少利用)缓存数据构造,使它该当支持一下操作:get和put。

get(key) - 如果key存在于缓存中,则获取key的value(总是正数),否则返回 -1。

put(key,value) - 如果key不存在,请设置或插入value。
当缓存达到其容量时,它该当在插入新项目之前使最近最少利用的项目作废。

参考答案

代码示例:

《 Python版本 》

class LRUCache(object):def __init__(self, capacity):""":type capacity: int"""self.cache = {}self.keys = []self.capacity = capacitydef visit_key(self, key):if key in self.keys:self.keys.remove(key)self.keys.append(key)def elim_key(self):key = self.keys[0]self.keys = self.keys[1:]del self.cache[key]def get(self, key):""":type key: int:rtype: int"""if not key in self.cache:return -1self.visit_key(key)return self.cache[key]def put(self, key, value):""":type key: int:type value: int:rtype: void"""if not key in self.cache:if len(self.keys) == self.capacity:self.elim_key()self.cache[key] = valueself.visit_key(key)def main():s = [["put","put","get","put","get","put","get","get","get"],[[1,1],[2,2],[1],[3,3],[2],[4,4],[1],[3],[4]]]obj = LRUCache(2)l=[]for i,c in enumerate(s[0]):if(c == "get"):l.append(obj.get(s[1][i][0]))else:obj.put(s[1][i][0], s[1][i][1])print(l)if __name__ == "__main__":main()

《 C++版本 》

class LRUCache{public:LRUCache(int capacity) {cap = capacity;}int get(int key) {auto it = m.find(key);if (it == m.end()) return -1;l.splice(l.begin(), l, it->second);return it->second->second;}void set(int key, int value) {auto it = m.find(key);if (it != m.end()) l.erase(it->second);l.push_front(make_pair(key, value));m[key] = l.begin();if (m.size() > cap) {int k = l.rbegin()->first;l.pop_back();m.erase(k);}

口试题005:关于epoll和select的差异,哪些说法是精确的?(多选)

——阿里巴巴出题专家:寈峰/阿里技能专家

A. epoll和select都是I/O多路复用的技能,都可以实现同时监听多个I/O事宜的状态。

B. epoll比较select效率更高,紧张是基于其操作系统支持的I/O事宜关照机制,而select是基于轮询机制。

C. epoll支持水平触发和边沿触发两种模式。

D. select能并行支持I/O比较小,且无法修正。

参考答案 A . B . C

口试题006:从innodb的索引构造剖析,为什么索引的key长度不能太长?

——阿里巴巴出题专家:近秋/阿里云数据库产品技能部技能专家

参考答案

key太长会导致一个页当中能够存放的key的数目变少,间接导致索引树的页数目变多,索引层次增加,从而影响整体查询变更的效率。

口试题007:MySQL的数据如何规复到任意韶光点?

——阿里巴巴出题专家:近秋/阿里云数据库产品技能部技能专家

参考答案

规复到任意韶光点以定时的做全量备份,以及备份增量的binlog日志为条件。
规复到任意韶光点首先将全量备份规复之后,再此根本上回放增加的binlog直至指定的韶光点。

口试题008:NFS和SMB是最常见的两种NAS(Network Attached Storage)协议,当把一个文件系统同时通过NFS和SMB协议共享给多个主机访问时,以下哪些说法是缺点的:(多选)

——阿里巴巴出题专家:起影/阿里云文件存储高等技能专家

A. 不可能有这样的操作,即把一个文件系统同时通过NFS和SMB协议共享给多个主机访问。

B. 主机a的用户通过NFS协议创建的文件或者目录,另一个主机b的用户不能通过SMB协议将其删除。

C. 在同一个目录下,主机a通过NFS协议看到文件file.txt,主机b通过SMB协议也看到文件file.txt,那么它们是同一个文件。

D. 主机a通过NFS协议,以及主机b通过SMB协议,都可以通过主机真个数据缓存,提升文件访问性能。

参考答案 A . B . C

口试题009:输入ping IP后敲回车,发包前会发生什么?

——阿里巴巴出题专家:怀虎/阿里如斯效平台卖力人

参考答案

首先根据目的IP和路由表决定走哪个网卡,再根据网卡的子网掩码地址判断目的IP是否在子网内。
如果不在则会通过arp缓存查询IP的网卡地址,不存在的话会通过广播讯问目的IP的mac地址,得到后就开始发包了,同时mac地址也会被arp缓存起来。

口试题010:请阐明下为什么鹿晗发布恋情的时候,微博系统会崩溃,如何办理?

——阿里巴巴出题专家:江岚/阿里巴巴数据技能高等技能专家

参考答案 《 参考思路 》

A. 获取微博通过pull办法还是push办法

B. 发布微博的频率要远小于阅读微博

C. 流量明星的发微博,和普通博紧张区分对待,比如在sharding的时候,也要考虑这个成分

口试题011:现有一批邮件须要发送给订阅顾客,且有一个集群(集群的节点数不定,会动态扩容缩容)来卖力详细的邮件发送任务,如何让系统尽快地完成发送?请详述技能方案!

——阿里巴巴出题专家:江岚/阿里巴巴数据技能高等技能专家

参考答案

A. 借助中间件,通过发布者订阅者模式来进行任务分配

B. master-slave支配,由master来分配任务

C. 不借助任何中间件,且所有节点均等。
通过数据库的update returning,从而实现节点之间任务的互斥

口试题012:有一批气候不雅观测站,现须要获取这些站点的不雅观测数据,并存储到Hive中。
但是气候局只供应了api查询,每次只能查询单个不雅观测点。
那么如果能够方便快速地获取到所有的不雅观测点的数据?

——阿里巴巴出题专家:江岚/阿里巴巴数据技能高等技能专家

参考答案

A. 通过shell或python等调用api,结果先暂存本地,末了将本地文件上传到Hive中。

B. 通过datax的httpReader和hdfsWriter插件,从而获取所需的数据。

C. 比较空想的回答,是在打算引擎的UDF中调用查询api,实行UDF的查询结果存储到对应的表中。
一方面,不须要同步任务的导出导入;另一方面,打算引擎的分布式框架天生供应了分布式、容错、并发等特性。

口试题013 如何实现两金额数据相加(最多小数点两位)?

——阿里巴巴出题专家:御术/蚂蚁金服数据可视化高等技能专家

参考答案

实在问题并不难,便是稽核候选人对 JavaScript 数据运算上的认知以及考虑问题的严密程度,有很多坑,可以用在笔试题,如果用在口试,回答过程中还可以随机加入有很多打算机根本的延伸。

回到这个问题,由于直接浮点相 yu 加会失落精,以是要转整数;(可以插入问碰着过吗?是否可以举个例子?)。

转整数是第一个坑,虽然只有两位可以通过乘以100转整数,但由于乘以一百和除以一百都会涌现浮点数的运算,以是也会失落精,还是要通过字符串来转;(可以插入问字符串转整数有几种办法?)

字符串转整是第二个坑,由于末了要对齐打算,如果没考虑全面先 toFixed(2),对付只有一位小数点数据进入打算就会缺点;转整数后的打算是个加分点,很多同学每每便是直接算了,如果可以考虑大数打算的场景,恭喜同学进入隐蔽关卡,这就会涉及如何有效循环、遍历、算法繁芜度的问题。

口试题014:关于并行打算的一些根本开放问题。

——阿里巴巴出题专家:何万青/阿里云高性能打算资深技能专家

◼ 如何定义并打算,请分别阐述分布式内存到共享内存模式行编程的差异和实现(例子代码)?

◼ 请利用MPI和OpenMP分别实现N个处理器对M个变量的求和?

◼ 请解释SIMD指令在循环中利用的权限?向量化优化有哪些手段?

◼ 请用Amdahl定律解释什么是并行效率以及并行算法的扩展性?并解释扩展性的性能指标和限定成分,末了请解释在共享内存打算机中,共享内存的限定?OpenMP是若何实现共享内存编程环境的?MPI壅塞和非壅塞读写的差异?

参考答案

(简要答案,但必须触及,可以展开)

◼ 同时实行多个/算法/逻辑操作/内存访问/IO,相互独立同时运行,分三个层次:进程级,多个节点分布式内存通过MPI通信并行;线程级,共享内存的多路机器,通过OpenMP实现多线程并行;指令集:通过SIMD指令实现单指令多数据。



举例吧啦吧啦。

◼ MPI代码,,,OpenMP代码,分别写出来 M个元素,N个处理器的累加,后者把稳private 参数。

SIMD在循环中的运用,限定在于 SIMD指令处理的每一个数组的长度,cache line利用,内部循环间的依赖和条件调用等。

◼ 向量化,紧张看SSE和AVX指令占比率,通过编译器优化。



在loop代码中利用,

◼ 性能和打算规模随处理器增加的变革曲线,实测HPL和峰值HPL比率,能用用Amdahl定律表达 Tpar(N) = (an + (1-a)n/N )t + C (n,N), 能够讲明白串行部分对全体并行的天花板效应,扩展性能够阐明清楚算法的扩展性=并行效率随处理器数目的变革关系,画出来。

◼ 共享内存打算机OpenMP对变量的限定描述,EREW,CREW,ERCW,CRCW等差异,NUMA观点,如何保持coherent等。

◼ 写出OpenMP和MPI的核心函数,回答问题即可。

口试题015:请打算XILINX公司VU9P芯片的算力相称于多少TOPS,给出打算过程与公式。

——阿里巴巴出题专家:隐达/阿里云异构打算资深专家

参考答案

基于不同的算法,这个值在十几到几百之间。
但是,如果只是纯挚比算力,FPGA和ASIC、GPU比较并无太大上风,乃至大多时候有较大劣势。
FPGA的上风在于高度的灵巧性和算法的针对性。

口试题016:一颗当代处理器,每秒大概可以实行多少条大略的MOV指令,有哪些紧张的影响成分?

——阿里巴巴出题专家:子团/创新产品虚拟化&稳定性资深技能专家

参考答案

及格:

每实行一条mov指令须要花费1个时钟周期,以是每秒实行的mov指令和CPU主频干系。

加分:

在CPU微架构上,要考虑数据预取,乱序实行,多发射,内存stall (前端stall和后端stall)等诸多成分,因此除了cpu主频外,还和流水线上的效率(IPC)强干系,比较繁芜的一个问题。

口试题017:请剖析MaxCompute产品与分布式技能的关系、当前大数据打算平台类产品的市场现状和发展趋势。

——阿里巴巴出题专家:云郎/阿里MaxCompute高等产品专家

参考答案

开放性问题,无标准答案。

口试题018:对大数据平台中的元数据管理是怎么理解的,元数据网络管理体系是怎么样的,会对大数据运用有什么样的影响。

——阿里巴巴出题专家:映泉/阿里巴巴高等技能专家

参考答案

开放性问题,无标准答案。

口试题019:你理解常见如阿里,和友商大数据平台的技能体系差异以及发展趋势和技能瓶颈,在存储和打算两个方面进行概述。

——阿里巴巴出题专家:映泉/阿里巴巴高等技能专家

参考答案

开放性问题,无标准答案。

口试题020:在云打算大数据处理场景中,每天运行着成千上万的任务,每个任务都要进行IO读写。
存储系统为了更好的做事,常常会担保高优先级的任务优先实行。
当多个作业或用户访问存储系统时,如何担保优先级和公正性。

——阿里巴巴出题专家:田磊磊/阿里云文件存储高等技能专家

参考答案

开放性问题,无标准答案。

口试题 021:最大频率栈。

——阿里巴巴出题专家:屹平/阿里云视频云边缘打算高等技能专家

实现 FreqStack,仿照类似栈的数据构造的操作的一个类。
FreqStack 有两个函数:push(int x),将整数 x 推入栈中。
pop(),它移除并返回栈中涌现最频繁的元素。
如果最频繁的元素不但一个,则移除并返回最靠近栈顶的元素。

示例:

push [5,7,5,7,4,5]

pop() -> 返回 5,由于 5 是涌现频率最高的。
栈变成 [5,7,5,7,4]。

pop() -> 返回 7,由于 5 和 7 都是频率最高的,但 7 最靠近栈顶。
栈变成 [5,7,5,4]。

pop() -> 返回 5 。
栈变成 [5,7,4]。

pop() -> 返回 4 。
栈变成 [5,7]。

参考答案

令 freq 作为x的涌现次数的映射 Map。

此外maxfreq,即栈中任意元素确当前最大频率,由于我们必须弹出频率最高的元素。

当前紧张的问题就变成了:在具有相同的(最大)频率的元素中,怎么判断那个元素是最新的?我们可以利用栈来查询这一信息:靠近栈顶的元素总是相对更新一些。

为此,我们令 group 作为从频率到具有该频率的元素的映射。
到目前,我们已经实现了 FreqStack 的所有必要的组件。

算法:

实际上,作为实现层面上的一点细节,如果 x 的频率为 f,那么我们将获取在所有 group[i] (i <= f) 中的 x,而不仅仅是栈顶的那个。
这是由于每个 group[i] 都会存储与第 i 个 x 副本相关的信息。

末了,我们仅仅须要如上所述坚持 freq,group,以及 maxfreq。

代码示例:

繁芜度剖析:

韶光繁芜度:对付 push 和 pop 操作, O(1)。

空间繁芜度:O(N),个中 N 为 FreqStack 中元素的数目。

口试题022:给定一个链表,删除链表的倒数第N个节点,并且返回链表的头结点。

——阿里巴巴出题专家:屹平/阿里云视频云边缘打算高等技能专家

◼ 示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

解释:

给定的 n 担保是有效的。

哀求:

只许可对链表进行一次遍历。

参考答案

我们可以利用两个指针而不是一个指针。
第一个指针从列表的开头向前移动 n+1n+1 步,而第二个指针将从列表的开头出发。
现在,这两个指针被 nn 个结点分开。
我们通过同时移动两个指针向前来保持这个恒定的间隔,直到第一个指针到达末了一个结点。
此时第二个指针将指向从末了一个结点数起的第 nn 个结点。
我们重新链接第二个指针所引用的结点的 next 指针指向该结点的下下个结点。

代码示例:

public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dummy = new ListNode(0);dummy.next = head;ListNode first = dummy;ListNode second = dummy;// Advances first pointer so that the gap between first and second is n nodes apartfor (int i = 1; i <= n + 1; i++) {first = first.next;}// Move first to the end, maintaining the gapwhile (first != null) {first = first.next;second = second.next;}second.next = second.next.next;return dummy.next;}

繁芜度剖析:

韶光繁芜度:O(L),该算法对含有 L 个结点的列表进行了一次遍历。
因此韶光繁芜度为 O(L)。

空间繁芜度:O(1),我们只用了常量级的额外空间。

口试题023:如果让你设计一个通用的、支持各种数据库秒级备份和规复的系统,你会如何设计?

——阿里巴巴出题专家:千震/阿里云数据库高等技能专家

参考答案

开放性问题,无标准答案。

口试题024:如果让你来设计一个支持数据库、NOSQL和大数据之间数据实时流动的数据流及处理的系统,你会考虑哪些问题?如何设计?

——阿里巴巴出题专家:千震/阿里云数据库高等技能专家

参考答案

开放性问题,无标准答案。

口试题025:给定一个整数数组和一个整数,返回两个数组的索引,这两个索引指向的数字的加和即是指定的整数。
须要最优的算法,剖析算法的空间和韶光繁芜度。

——阿里巴巴出题专家:龙欣/异构打算资深技能专家

参考答案

开放性问题,无标准答案。

口试题026:如果给你一个新产品,你将从哪些方面来保障它的质量?

——阿里巴巴出题专家:晨晖 /阿里云中间件技能部测试开拓专家

参考答案:

可以从代码开拓、测试保障、线上质量三个方面来保障。

在代码开拓阶段,有单元测试、代码Review、静态代码扫描等;测试保障阶段,有功能测试、性能测试、高可用测试、稳定性测试、兼容性测试等;在线上质量方面,有灰度发布、紧急回滚、故障演习训练、线上监控和巡检等。

口试题027:如何用socket编程实现ftp协议?

——阿里巴巴出题专家:吴明/阿里云弹性打算资深技能专家

参考答案:

https://www.jianshu.com/p/e9a2e0755496

口试题028:请评估一下程序的实行结果?

——阿里巴巴出题专家:桃谷/阿里云中间件技能专家

public class SynchronousQueueQuiz { public static void main(String[] args) throws Exception {BlockingQueue<Integer> queue = new SynchronousQueue<>(); System.out.print(queue.offer(1) + " "); System.out.print(queue.offer(2) + " "); System.out.print(queue.offer(3) + " "); System.out.print(queue.take() + " "); System.out.println(queue.size()); } }

A. true true true 1 3

B. true true true (壅塞)

C. false false false null 0

D. false false false (壅塞)

参考答案 D