2020一线互联网大厂面经集——阿里篇「1」

1.1.1 如何实现一个高效的单向链表逆序输出?

1.1.2 已知sqrt(2)约等于1.414,要求不用数学库,求sqrt(2)精确到小数点后10位

1.1.3 给定一个二叉搜索树(BST),找到树中第 K 小的节点

1.1.4 LRU缓存机制

1.1.5 关于epoll和select的区别,以下哪些说法是正确的.

1.1.6 从innodb的索引结构分析,为什么索引的 key 长度不能太长

1.1.7 MySQL的数据如何恢复到任意时间点?.

1.1.8 NFS与SMB的区别?

1.1.9 输入 ping IP 后敲回车,发包前会发生什么?

1.2.0 请解释下为什么鹿晗发布恋情的时候,微博系统会崩溃,如何解决?

以上问题答案及解析

1.1.1 如何实现一个高效的单向链表逆序输出?

出题人:阿里巴巴出题专家:昀龙/阿里云弹性人工智能负责人
参考答案:下面是其中一种写法,也可以有不同的写法,比如递归等。供参考。
typedef struct node{
int data;
struct node* next;
node(int d):data(d), next(NULL){}
}node;

void reverse(node* head)
{
if(head == NULL){
return;
}

node* pleft = NULL;
node* pcurrent = head;
node* pright = head->next;while(pright){pcurrent->next = pleft;node *ptemp = pright->next;pright->next = pcurrent;pleft = pcurrent;pcurrent = pright;pright = ptemp;
}while(pcurrent != NULL){cout<< pcurrent->data << "\t";pcurrent = pcurrent->next;
}

}
class Solution {

public void reverse(ListNode<T> head) {if (head == null || head.next == null) {return ;}ListNode<T> currentNode = head;Stack<ListNode<T>> stack = new Stack<>();while (currentNode != null) {stack.push(currentNode);ListNode<T> tempNode = currentNode.next;currentNode.next = null; // 断开连接currentNode = tempNode;}head = stack.pop();currentNode = head;while (!stack.isEmpty()) {currentNode.next = stack.pop();currentNode = currentNode.next;}
}

}

class ListNode{
T val;
public ListNode(T val) {
this.val = val;
}
ListNode next;
}

1.1.2已知 sqrt (2)约等于 1.414,要求不用数学库,求 sqrt (2)精确到小数点后 10 位。
出题人:——阿里巴巴出题专家:文景/阿里云 CDN 资深技术专家
参考答案:

  • 考察点
    基础算法的灵活应用能力(二分法学过数据结构的同学都知道,但不一定往这个方向考虑;如果学过数值计算的同学,应该还要能想到牛顿迭代法并解释清楚)
    退出条件设计
    二分法
  1. 已知 sqrt(2)约等于 1.414,那么就可以在(1.4, 1.5)区间做二分
    查找,如: a) high=>1.5 b) low=>1.4 c) mid => (high+low)/2=1.45 d) 1.45*1.45>2 ? high=>1.45 : low => 1.45 e) 循环到 c)

  2. 退出条件
    a) 前后两次的差值的绝对值<=0.0000000001, 则可退出

const double EPSILON = 0.0000000001;

double sqrt2() {
double low = 1.4, high = 1.5;
double mid = (low + high) / 2;

while (high - low > EPSILON) {if (mid * mid > 2) {high = mid;} else {low = mid;}mid = (high + low) / 2;
}return mid;

}
牛顿迭代法
1.牛顿迭代法的公式为:
xn+1 = xn-f(xn)/f’(xn)

对于本题,需要求解的问题为:f(x)=x2-2 的零点

EPSILON = 0.1 ** 10
def newton(x):
if abs(x ** 2 - 2) > EPSILON:
return newton(x - (x ** 2 - 2) / (2 * x))
else:

1.1.3给定一个二叉搜索树(BST),找到树中第 K 小的节点。
出题人:阿里巴巴出题专家:文景/阿里云 CDN 资深技术专家
参考答案:

  • 考察点
    基础数据结构的理解和编码能力
    递归使用
  • 示例
    5
    /
    3 6
    /
    2 4
    /
    1

说明:保证输入的 K 满足 1<=K<=(节点数目)

树相关的题目,第一眼就想到递归求解,左右子树分别遍历。联想到二叉搜索树的性质,root 大于左子树,小于右子树,如果左子树的节点数目等于 K-1,那么 root 就是结果,否则如果左子树节点数目小于 K-1,那么结果必然在右子树,否则就在左子树。因此在搜索的时候同时返回节点数目,跟 K 做对比,就能得出结果了。

/**

  • Definition for a binary tree node.
    **/

public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}

class Solution {
private class ResultType {

    boolean found;  // 是否找到int val;  // 节点数目ResultType(boolean found, int val) {this.found = found;this.val = val;}
}public int kthSmallest(TreeNode root, int k) {return kthSmallestHelper(root, k).val;
}private ResultType kthSmallestHelper(TreeNode root, int k) {if (root == null) {return new ResultType(false, 0);}ResultType left = kthSmallestHelper(root.left, k);// 左子树找到,直接返回if (left.found) {return new ResultType(true, left.val);}// 左子树的节点数目 = K-1,结果为 root 的值if (k - left.val == 1) {return new ResultType(true, root.val);}// 右子树寻找ResultType right = kthSmallestHelper(root.right, k - left.val - 1);if (right.found) {return new ResultType(true, right.val);}// 没找到,返回节点总数return new ResultType(false, left.val + 1 + right.val);
}

}
1.1.4LRU 缓存机制 设计和实现一个 LRU(最近最少使用)缓存数据结构,使它应该支持一下操作:get 和 put。 get(key) - 如果 key 存在于缓存中,则获取 key 的 value(总是正数),否则返回 -1。 put(key,value) - 如果 key 不存在,请设置或插入 value。当缓存达到其容量时,它应该在插入新项目之前使最近最少使用的项目作废。

出题人:文景/阿里云 CDN 资深技术专家

参考答案:

python版本的:

class LRUCache(object):
def init(self, capacity):
“”"
:type capacity: int
“”"
self.cache = {}
self.keys = []
self.capacity = capacity

def 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);}}

}

1.1.5 关于epoll和select的区别,以下哪些说法是正确的
735 Bytes
lee 提交于 9月前 . revert latest push
问题:关于 epoll 和 select 的区别,哪些说法是正确的?(多选)
A. epoll 和 select 都是 I/O 多路复用的技术,都可以实现同时监听多个 I/O 事件的状态。

B. epoll 相比 select 效率更高,主要是基于其操作系统支持的I/O事件通知机制,而 select 是基于轮询机制。

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

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

出题人:阿里巴巴出题专家:寈峰/阿里技术专家
参考答案:A,B,C
【延伸】那在高并发的访问下,epoll使用那一种触发方式要高效些?当使用边缘触发的时候要注意些什么东西?

1.1.6 从innodb的索引结构分析,为什么索引的 key 长度不能太长
405 Bytes
lee 提交于 9月前 . revert latest push
题目:从 innodb 的索引结构分析,为什么索引的 key 长度不能太长?
出题人:阿里巴巴出题专家:近秋/阿里云数据库产品技术部技术专家
参考答案:key 太长会导致一个页当中能够存放的 key 的数目变少,间接导致索引树的页数目变多,索引层次增加,从而影响整体查询变更的效率。

1.1.7 MySQL的数据如何恢复到任意时间点?
435 Bytes
lee 提交于 9月前 . revert latest push
题目:MySQL 的数据如何恢复到任意时间点?
出题人:阿里巴巴出题专家:近秋/阿里云数据库产品技术部技术专家参考答案
参考答案:恢复到任意时间点以定时的做全量备份,以及备份增量的 binlog 日志为前提。恢复到任意时间点首先将全量备份恢复之后,再此基础上回放增加的 binlog 直至指定的时间点。

1.1.8 NFS与SMB的区别?
917 Bytes
lee 提交于 9月前 . revert latest push
题目: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

1.1.9 输入 ping IP 后敲回车,发包前会发生什么?
822 Bytes
lee 提交于 9月前 . revert latest push
题目:输入 ping IP 后敲回车,发包前会发生什么?
出题人:阿里巴巴出题专家:怀虎/阿里云云效平台负责人
参考答案:
ping目标ip时,先查路由表,确定出接口

如果落在直连接口子网内,此时若为以太网等 多路访问网络 则先查询arp缓存,命中则直接发出,否则在该接口上发arp询问目标ip的mac地址,取得后发出,若为ppp等 点对点网络 ,则直接可以发出;
如果查表落在缺省路由上,此时若为以太网等 多路访问网络 则先查询网关arp缓存,命中则直接发出,否则在该接口上发arp询问网关的mac地址,取得后发出,若为ppp等 点对点网络 ,则直接可以发出;
若查表未命中,则返回不可达。

1.2.0 请解释下为什么鹿晗发布恋情的时候,微博系统会崩溃,如何解决?
459 Bytes
lee 提交于 9月前 . revert latest push
题目:请解释下为什么鹿晗发布恋情的时候,微博系统会崩溃,如何解决?
出题人:阿里巴巴出题专家:江岚/阿里巴巴数据技术高级技术专家
参考答案:
A. 获取微博通过 pull 方式还是 push 方式

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

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

更多大厂面试经验题目集锦大纲点击下方

大厂面试经验题目超详细解析免费拿网址:https://github. https://github. com/Ovoice/ interview internal reference

![各种大厂面试经验集锦]

2020一线互联网大厂面经集——阿里篇「1」相关推荐

  1. 阿里p7大手子测试笔记:一线互联网大厂面试问题吃透,巧过面试关

    前言 金九银十刚过去,有一部分朋友在这期间肯定经历了一番大厂面试的洗礼,不知道大家是经受住了考验如愿以偿了,还是折戟沉沙无功而返呢? 身边已经有技术大佬顺利通过了阿里P6/P7的面试,在30岁之前成功 ...

  2. 离开一线互联网大厂的年轻人在想什么?

    作者 | 迷茫的小白 责编 | 王晓曼 出品 | 程序人生(ID:coder_life) 笔者是2021届某一线互联网大厂的暑期实习生,岗位是iOS开发,进来的时候是零基础.然而近期迷茫的我,放弃了转 ...

  3. 2020 年互联网大厂薪资出炉!老夫酸了.......

    51CTO官微 | THEFUTURE |技术成就梦想| 最近老夫宵衣旰食,拼死网罗了2020年互联网大厂校招硕士生的薪资榜单,这份榜单中包含了 10 家公司,现在全权分享给大家,让大家看看老夫为何心 ...

  4. 互联网大厂考点(阿里+百度+腾讯+字节跳动+美团+京东)

    本文扼要 本文结构主要分为以下三个部分: 01 互联网大厂考点(阿里+百度+腾讯+字节跳动+美团+京东) 02 Java 面试考点大全(基本功底+常用技术+技术深度+技术经验+学习能力+工作能力+项目 ...

  5. 金三银四跳槽涨薪,对标一线互联网大厂面试题

    声明,本人能力有限,只是列出来参考,不对之处欢迎指正. 前言 跳槽时时刻刻都在发生,没必要局限在金三银四,金九银十.但金银月的确让我学到很多. 今天给大家分享下我刚过不久的金三银四跳槽中整理的Java ...

  6. 「实战」南京房价的秘密——小区价格篇「2」

    「实战」南京房价的秘密--准备篇 「实战」南京房价的秘密--小区价格篇「1」 案例二:南京历年小区建成情况-折线图 # 计算南京历年的小区建成数量 Jianzhu_tmp = Xiaoqu[" ...

  7. 幼儿园语言活动包括哪几类_幼儿园语言教案5篇「精选」

    幼儿园语言教案5篇「精选」 幼儿园是小朋友的快乐天地,可以帮助孩子健康快乐地度过童年时光,不仅学到知识,而且可以从小接触集体生活.那么,你知道幼儿园语言教案怎么写吗?以下是百分网小编搜索整理的5篇关于 ...

  8. 2020 年互联网大厂薪资出炉!你酸了吗

    今天和大家聊一聊 2020 届秋招硕士生开发岗位的薪资情况. 最近看网上有人爆料 2020 互联网大厂校招硕士生的薪资情况,这份榜单中包含了 10 家公司,榜单中列出的薪资情况和我了解到的基本一致,而 ...

  9. 秋招来袭,想学习Java进大厂的小伙伴,这7点武林秘籍一定要点开看看!(附一线互联网大厂MySQL面试高频考点)

    转眼间六月已经过了十天了.六月虽是盛夏,但秋招也不远了.提早做好准备才能在实战中游刃有余. 今天整理更新一篇Java学习分阶段路线攻略.希望能给大家一些启发,找到一条属于自己的学习线路. 本文为转载. ...

最新文章

  1. Realm 使用的简单教程
  2. 360浏览器调用selenium
  3. Oracle 冷备份
  4. jq.validate.js
  5. PL/SQL DEVELOPER 使用小技巧
  6. windows下 网络命令(待续)
  7. 通过ClassLoader调用外部jar包
  8. AsyncTask的基础讲解
  9. 一个炫酷的仿雷达扫描和扩散效果——自定义View就是这么简单
  10. 如何通俗易懂地让女朋友明白什么是语言模型?
  11. 小波同态滤波 matlab,matlab同态滤波程序
  12. JavaScript 修改地址栏指定参数
  13. 四天搞懂生成对抗网络(四)——CycleGAN的绝妙设计:双向循环生成的结构
  14. 小米手机的BUG,自动安装 APP 的错觉
  15. 《神奇的数学》读后感_数学王国_奇妙的数学王国读后感10篇
  16. vue做移动端适配最佳解决方案,亲测有效
  17. 数据分析之Excel的基本功能(下)
  18. 把手机当作电脑显示器指导参考
  19. 计算机视觉注意力网络(三)——CBAM [ECCV 2018]
  20. MySQL快速学习笔记(建议收藏)

热门文章

  1. 谈谈供应商管理的策略与方法
  2. [论文笔记] Chubby 分布式锁服务
  3. SCADE Sutie 状态机之Transaction History
  4. GreenDao简明教程(查询,Querying)
  5. English Alphabet(IT 英语字母表),大家来猜猜看吧!
  6. VR vs AR: 哪个有更大潜力改变未来
  7. 跨界合作,中国联通与中燃集团携手亮相中国燃气展
  8. 深度学习Win10安装配置CUDA和cuDNN实现显卡GPU加速
  9. 再见 RPM/DEB/TAR,是时候拥抱下一代全平台安装程序 AppImage 了!
  10. Excel+VBA处理高斯光束