阿里技术面试题汇总,“跳槽”就靠它了(文中附答案)

以下为整理的2019阿里技术面试题及部分答案,详细答案可在文末获取!

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

部分参考答案
 

typedefstructnode

{

intdata;

structnode*next;

node(intd):data(d),next(NULL){}

}node;

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

考察点

1. 基础算法的灵活应用能力(二分法学过数据结构的同学都知道,

但不一定往这个方向考虑;如果学过数值计算的同学,应该还要

能想到牛顿迭代法并解释清楚)

2. 退出条件设计

 

部分参考答案

已知 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)

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

考察点

1. 基础数据结构的理解和编码能力

2. 递归使用

部分参考答案

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

· LRU 缓存机制。

部分参考答案

《 Python 版本 》

class LRUCache(object):

def __init__(self, capacity):

"""

:type capacity: int

"""

self.cache = {}

self.keys = []

self.capacity = capacity

· 关于 epoll 和 select 的区别,哪些说法是正确的?(多选)

参考答案

A、epoll 和 select 都是 I/O 多路复用的技术,都可以实现同时监听多个 I/O 事件的状态;

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

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

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

参考答案

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

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

参考答案

恢复到任意时间点以定时的做全量备份,以及备份增量的 binlog 日志为前提。恢复到任意时间点首先将全量备份恢复之后,再此基础上回放增加的 binlog 直至指定的时间点。

· 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,那么它们是同一个文件。

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

参考答案

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

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

参考答案

A. 获取微博通过 pull 方式还是 push 方式

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

C. 流量明星的发微博,和普通博主要区分对待,比如在 sharding

的时候,也要考虑这个因素

· 现有一批邮件需要发送给订阅顾客,且有一个集群(集群的节点数不定,会动态扩容缩容)来负责具体的邮件发送任务,如何让系统尽快地完成发送?请详述技术方案!

参考答案

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

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

C. 不借助任何中间件,且所有节点均等。通过数据库的 update

returning,从而实现节点之间任务的互斥

· 有一批气象观测站,现需要获取这些站点的观测数据,并存储到 Hive 中。但是气象局只提供了 api 查询,每次只能查询单个观测点。那么如果能够方便快速地获取到所有的观测点的数据?

参考答案

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

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

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

· 如何实现两金额数据相加(最多小数点两位)?

部分参考答案

其实问题并不难,就是考察候选人对 JavaScript 数据运算上的认知以及考虑问题的缜密程度,有很多坑,可以用在笔试题,如果用在面试,回答过程中还可以随机加入有很多计算机基础的延伸。

由于文章字数有限,将全部的面试题及答案以网盘的形式分享给大家哦

资源获取方式

关注【程序员生活志】

回复关键词“阿里” 立即免费获取 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为一个嵌入式软件工程师跳槽面试的准备,有几个重要的方面需要注意。首先,你需要复习C语言的基础知识,包括常见的面试题目和问题。你可以通过上网搜索一些常见的C语言面试题目,也可以参考何昊老师的《程序员面试笔试宝典第三版》这本书,这本书主要介绍了面试过程中经常问到的问题,对C/C程序员来说非常有用。不过要注意,这本书中可能有些错误,所以在阅读时要进行验证并向作者反馈错误。 [1] 其次,你需要准备你自己参与过的项目。你要确保对你参与的项目有清楚的理解和掌握,包括项目的原理、设计和实现。在面试中,面试官可能会询问你所做项目的原理和实现细节,因此你需要能够清晰地解释和演示。如果涉及到复杂的原理和公式,你可以用图表或推导的方式进行解释,确保面试官能够理解你的回答。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [我的嵌入式软件工程师秋招之路(文末送福利)](https://blog.csdn.net/qq_16933601/article/details/111278570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值