国庆前亚马逊来我科开宣讲会,之前笔试过了,本来人已经回老家了,结果收到亚麻的电话。
当时以为可以推迟,就让HR帮我延后。但是后来听说可能过了这村就没这店了,所以我赶紧让同学帮我找HR联系,最后好不容易让HR帮我安排了面试,赶紧从家里买车票回学校参加现场面试。
不得不说亚马逊的工作人员的联系方式真是隐蔽得非常好,官网和其他渠道都找不到联系方式,最后还是托同学才安排上了面试,总之还是很庆幸,能够参加这次面试。
为什么这么看重亚马逊呢。一来是因为work life balance的诱惑,二来是肉身翻墙的好机会。而且亚马逊的整体难度比微软要低,应该算是非常不错的机会。
但是!十月中旬就要出结果了,如果还没有offer call可能就是凉了。所以,现在心里还是很慌的。
下面分享一波面经,顺带提一下,之前笔者在6月底参加了一次亚马逊的实习生面试(为提前批面试做准备),感觉面试难度比正式批要大一点。
亚马逊秋招面经
亚马逊的研发岗位叫做SDE,我面试的就是这个岗位。
一面:
1 多线程的通信,同步方式。面试官问我volatile和synchronized的区别。
我从底层原理方面讲了两者的实现方式,主要解释了synchronized基于mutex lock实现,重量级锁,需要从用户态切换到内核态。volatile则是通过插入内存屏障的方式,保证变量读写的可见性。
2 集合类用过哪些
当时回答的是ArrayList,linkedlist,hashmap这类简单的集合类,于是面试官就问了hashmap的实现原理,以及和chm的比较,不同版本JDK的区别。也是比较老生常谈的问题了。
3 JVM的内存模型
说完内存模型的主要情况,面试官开始问我关于内存泄漏和内存溢出相关的问题,也比较简单,另外还问了GC相关的问题。
4 NIO和BIO的区别
主要就是讲述BIO的阻塞式IO读写,然后讲一下NIO的实现原理,相关类,并且说到IO多路复用的实现方式,底层的epoll实现方式等等。
5 算法题:实现一个LRU
只要求实现超过容量时的缓存淘汰,不用处理缓存超时的问题,所以只要写一个双向链表来存节点即可。另外,不能直接使用linkedhashmap实现,所以直接用hashmap作为成员变量,另外写一个含有容量参数的构造方法即可,也是比较常见的问题了。
6 n个有序链表合并,怎么实现。
刚开始说的是直接合并,然后优化使用多机进行。后来看了一下,可以用最小堆实现。
二面:
这轮是经理面
1 项目
2 项目的多线程问题
3 项目的架构
4 项目的数据库使用,部署方式,缓存部署方式。
5 项目的实际场景
6 讲一下JVM的内存分区
7 秒杀系统架构设计
秒杀系统设计也是一个比较常见的问题了。一般可以分几个方面作答。
首先,前端限制访问时间,以及同一IP的访问次数。
然后,第一层的服务做负载均衡,比如使用nginx,然后服务器做集群。
接着,可以用消息队列做削峰和限流,然后做一层缓存,最后只有少量请求到达数据库。
面试官问nginx怎么做高可用,前一层能不能再做负载均衡,我回答的是nginx也做集群,前一层可以用硬件负载均衡或者dns服务器做第一层负载均衡。
另外面试官还问了如果有ddos攻击怎么办,我刚好想到通过人机验证来避免大量肉鸡的攻击,于是就说了验证码的方式,面试官也说可以。
8 Redis的分布式部署
说了Redis cluster的部署方式,其实就是分片加哨兵的部署方式,另外Redis还可以使用codis这类代理来做分布式。
9 MySQL的主从部署,读写分离。
这个就是比较常见的MySQL部署方案了,稍微说了一下实现方式就没再问了。
10 cap定理
讲了一下为什么三者只能选两者,这个问题还是挺绕的。
11 负载均衡怎么做
12 kafka的作用,持久化,其他问题
kafka之前看了一些比较好的文章,但是时间一久就忘了,于是我就说了读写性能好,以及多个副本的部署方式。
13 前端解决一些无效的请求过滤,怎么做
14 有什么offer,想去哪里工作。
15 有什么问题想问我的
亚马逊实习生面经
一面
1 聊项目20分钟,难点,重构特点。
2 写题,跳台阶的递归和dp方式。
3 如何查找一个数组中的局部最小值。
直接遍历复杂度是O(N),但不是最优。
使用二分查找优化,逼近局部最小值,复杂度是O(logn),有一些问题,并且写出死循环了。
不过面试官挺好的,让我过了。
二面
1 聊聊项目中的重构,数据表设计的方式。谈到了索引。
2 使用索引和不使用索引的区别,何时使用索引的查询效率不如不使用索引的查询效率。
这个问题懵了好久,以前没有遇到过。
面试官提醒了我一下,因为索引需要logn次IO找叶节点,然后再一次IO去真正找数据。
而不用索引每次查找都要一次IO,所以数据行为N时,不使用索引要N次IO,使用索引,假设索引包括M行数据,则需要(logn + 1)* N/M次,当两者相等时效率相近,否则不同。
3聚簇索引,最左前缀匹配索引,B+树。
4 算法题 版本号的大小比较
首先正则表达式过滤非法输入,并且拆成数组进行判断。
这个就不难了,就是比如1.1和2.2.1这种类型的版本号比较。
5 算法题 一个单词变成另一个单词。
一次只能变一个字母,并且中间过程需要是一个合法的单词。并且每一个位置都可以修改多次。文最少需要变化几次能变成指定单词。
刚开始在纠结判断合法的问题,后来面试官说这个可以放放。于是开始考虑DFS方式,巴拉巴拉说了一下,后来发现单词不是按顺序修改字母的,所以dfs根本行不通,想了半天只写了个大概的dfs模型。当然其中还有很多交流,但是最后也没写对。
现在看来应该是用BFS来做,每次把所有的修改情况找出来,然后分别进队,接着每次拿出一种方案继续做下去,最后成功到达结果时就是最小的变化次数了。
总结
当时亚马逊实习生给了offer,不过没时间去等转正了,于是就拒了。外企的校园招聘时间也确实是要到10月左右了,也就是说转正要等9月底,这比国内互联网公司还要晚上一个月。
对于正式秋招来说,大部外企的面试时间大概是10月初,基本上此时国内大厂已经结束战斗了,所以对于要参加外企校招的同学来说,可能要做好拉长战线的准备了,至少你要复习到十月份。譬如大摩,微软这一类外企是在十月中旬展开面试,后续笔者也会献上有关面经供大家参考。
总体来说,亚马逊的面试难度不及bat等大厂,也对英文没有太大要求,所以其实是一个性价比非常高的公司,如果是比较看重work life balance或者是翻墙机会的同学,一定要把握住机会哦。
网友评论