暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

阿里云技术面试真题公开!云原生、大数据、IOT、数据库等领域的30道面试真题!(中篇)

原创 小小亮 2020-07-16
1879

本文内容截取自《阿里云技术面试红宝书》
阿里云技术面试官面试真题和题解,助你拿下Offer!

image.png

1. 举一个数据库快照读的实现方案

参考答案:本题考察候选人对于基于时间戳的常见快照读的实现和一般 MVCC 机制的理解

2. B+ 树和 B 树的区别有哪些?

参考答案:本题考察候选人对数据库中经典数据结构的细节掌握度,以及常见的数据库扫描方法的理解程度

3. 编程实现 DAG(有向无环图)的 DeepCopy

这是一道编程题目,结合了数据结构和简单算法(如递归等)。

考察点:

  1. 候选人应该明确什么是 DeepCopy 并主动沟通

  2. 候选人应该清楚的定义数据结构
    这个问题里面,需要定义节点,节点只要有  {value,   Collection neighbors} 就可以了,增加别的成员一般是不合理的。
    候选人应该意识到需要定义数据结构,如果不清楚定义(是个扣分项)需要提醒候选人。
    图的话可以不定义单独的数据结构,有 Collection 所有节点集合就可以了。当然专门定义也可以。
    有的候选人会有 Collection 和 Collection 定义(Node 里面没有 edge),或者有的候选人用二维链接矩阵,这也 OK。
    数据结构定义合理性检查:例如包含一些算法需要的 mutable variable 在数据结构里面,破坏结构定义封装以及 immutability 和 thread safety 的话,对于有经验的候选人是个比较大的减分项,对于学生一般是 OK 的。

  3. 编程实现
    一般来说比较方便的是用递归 /DFS 实现,候选人也可以选择其他算法(如 BFS)。
    以 Java 为例:

public static Collection<Node> DeepCopy(Collection<Node> nodes) {
 Collection<Node> newNodes = new ArrayList<>();
 Map<Node, Node> copyMap = new HashMap<>();
 for (Node node : nodes) {
 newNodes.add(copyNode(node, copyMap)); 
 } 
 return newNodes;
}
private Node copyNode(Node node, Map<Node, Node> copyMap) {
 if (copyMap.containsKey(node)) {
 return copyMap.get(node); // 可以加上 nullability check
 }
 Collection<Node> newNeighbors = new ArrayList<>();
 for (Node neighbor : node.getNeighbors()) { 
 newNeighbors.add(copyNode(neighbor, copyMap));
 }
 Node newNode = new Node(node.getValue(), newNeighbors);
 copyMap.put(node, newNode);
 return newNode;
}
  1. 其他

这个编程的过程,经常出现的是递归的方法和 wrapper 方法之间划分不清,出现大量的重复代码,候选人这里花多少时间解决也是一个能力的表现。
还有经常有候选人意识不到 DeepCopy 里面需要保持图的结构因此想不到用 Map,这个也是不行的。当然如果要求不高,可以直接把题目编程 DeepCopy 一个树,这样就没有去重的需求了。
能够正确完成的,可以 follow up:如线程安全,问一下候选人方法是否是线程安全的(如果在 Node 节点里面存一些临时变量,或者把 Map 作为全局变量等就不是了),可以问如何改造成线程安全之类的问题。
另外 Follow up Big(O):时间复杂度(O(V) + O(E))

4. 设计一个抽奖,假定只有非常有限的内存,如何处理一个无限的样本流?

问题:设计一个抽奖,假定只有非常有限的内存,处理一个无限的样本流,任何时候都能提供出 N 个中奖的样本,而且所有已经遇到的样本的几率一样

该问题比较适合:(1)需要考察设计的;(2)有一定的统计的背景,即便不了解reservoir sampling 也可以自己去推理。

如果不熟悉这个算法没关系,候选人完全可以通过自己的思路去推演这个设计,不要求做出来,只是系统设计的思路。

5.如果 Java 程序 CPU 飚高到 100%,怎么排查原因?

考察点:系统运维的能力,常见命令的使用。

思路:Top -H 查看 CPU 飚高的线程,jstack 看看线程所在的 Stack 来分析问题。

6. 多租户隔离是什么?解决哪些问题?多租户的架构是怎么样的?

考察点:面向企业场景的安全、高可用能力

思路:多租户分为逻辑隔离和物理隔离,解决的是企业数据安全和高可用的问题,可
以从分布式切片的角度和统一路由的角度来回答该问题。

7. 图的基础概念以及基础数据结构。

已知有 5 个城市,现需要在城市间搭建通信电缆,各个城市间的造价如下,求最小造价。
image.png

考察点:图的基础概念以及基础数据结构,得到最小生成树的经典方法

参考答案:
Prim’s algorithm 普林演算法(贪心算法):
image.png

C++ 实现:
image.png

8. 请实现代码片段,把地址 0x80008000 处的 32 位数据的第 10 位开始的 7 位设置为 0xAA。

考察点:

  1. 对 C 的位运数的理解
  2. 对绝对地址访问的理解

答案:
unsigned int tmp;
tmp = *(volatile unsigned int *)0x80008000;
tmp = (tmp & (~(0xff<<10))) | (0xAA << 10);
*(volatile unsigned int *)0x80008000 = tmp;

9. 设计和编码实现一个具备 LRU 过期策略的缓存程序。

本题考察对 java 基础能力,对 HashMap 熟悉程度.

答案:

public class LRUMap<K,V> extends LinkedHashMap<K,V>
{
 protected final int _maxEntries;
 public LRUMap( int maxEntries)
 {
 this(16, maxEntries);
 }
 public LRUMap(int initialEntries, int maxEntries)
 {
 super(initialEntries, 0.8f, true);
 _maxEntries = maxEntries;
 }
 @Override
 protected boolean removeEldestEntry(Map.Entry<K,V> eldest)
 {
 return size() > _maxEntries;
 }
}

10. 一个云端应用部署会涉及到哪几类配置信息?

答案:1. 基础设施配置;2. 部署配置;3. BaaS 服务配

更多相关文章

阿里云技术面试真题公开!(上篇)
阿里云技术面试真题公开!(下篇)

最后修改时间:2020-07-16 17:29:06
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论