美文网首页
可能是肉身翻墙的好机会——亚马逊面经分享

可能是肉身翻墙的好机会——亚马逊面经分享

作者: 程序员黄小斜 | 来源:发表于2018-11-03 10:47 被阅读41次


    国庆前亚马逊来我科开宣讲会,之前笔试过了,本来人已经回老家了,结果收到亚麻的电话。

    当时以为可以推迟,就让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或者是翻墙机会的同学,一定要把握住机会哦。



    相关文章

      网友评论

          本文标题:可能是肉身翻墙的好机会——亚马逊面经分享

          本文链接:https://www.haomeiwen.com/subject/nqhkxqtx.html