楼主本硕都是天坑专业,硕2才开始自学编程,工作快3年,最近拿到了中国亚麻的offer,分享一下亚麻的社招面经
我最终的级别是sde1(虽然投递的是sde2,但是很遗憾在系统设计上没有发挥好,没能拿到sde2)
我的亚麻面试的整个流程包括简历投递、OA、loop面、沟通offer四个环节
其中OA是全英文,loop面都是中文面试
简历投递有2种途径
这里我推荐第二种,通常内推的岗位就是正在招人的岗位,同时内推的人也会帮你追踪面试过程,比起自己盲目投递要靠谱一些
我是在内推之后1个星期左右收到OA的邮件的
OA有3部分,都是全英文的
楼主是在OA之后1周左右收到hr邮件约loop面试时间,真正loop面时间距离这封邮件应该有差不多一个月的时间
loop面分为4轮,2轮面试是在线coding,2轮面试是系统设计,当然每一轮面试开始前都会自我介绍,并描述项目,针对项目问些问题。
同时每轮面试可能会夹杂着问你一些behavior question,这里大家可以自己搜索一下关于亚麻bq的一些问题
系统设计面试,关于系统设计,我觉得可以去了解分布式id生成、短链、feed流、微博、微信红包、在线聊天系统、日志、监控系统、直播弹幕系统等这些系统设计,网上会有一些资料,但是也要自己思考如果是自己设计,会怎么设计,着重点在于 需求分析、存储设计、服务拆分、后续监控维护,注意如何保证系统的高性能、高可用、扩展性(当然楼主好像没资格在这里说教,因为面得不好)
在线coding
在线coding需要先和面试官确认好题目的意思,进而讲解自己的思路,在写代码的过程中也要描述细节,最后整体讲解一遍,给出时空复杂度,这里注意一下,以前楼主一般不会将函数的递归调用算进空间复杂度里面,之前被字节坑过,因此在讲解的时候都会说明一下
题目1:给你2个有序单链表,合并成一个链表,写出来之后又追加如果是n个有序链表,该如何合并
2个链表合并,直接递归合并,n个有序链表楼主刚开始答的是小顶堆,后来又答可以像合并2个链表一样依次合并,最终优化成归并合并:将n个链表分成2个n/2的链表处理
题目2:给定一个无序数组,删除中间一个子数组,剩余数组前后拼接成一个非递减的数组,求剩余这个数组的最大长度
这道题事后发现也leetcode上的原题,楼主当时是二分做的,先分别抠出原数组左右2边非递减的数组,针对这2个数组看怎么取舍合并
我还问面试官有没有o(n)的做法,面试官居然说他没想到,事后发现可以对左右2边的数组用双指针,做到o(n)
题目3:二叉树删除一些节点,会形成很多个二叉树组成一个森林,给定一个二叉树和需要删除的节点,返回最终森林里每一个树的根节点的list
楼主的做法:遍历每一个节点,判断 当前节点和它的父节点的删除状态
dfs函数定义如下: leftOrRight表示当前节点是父节点的左孩子还是右孩子
void dfs(TreeNode father, TreeNode current, int leftOrRight)一共四种状态,针对每一种状态决定是否添加当前节点至结果list里面
1、当前节点和父节点都没删除
2、都删除
3、当前节点删除 父节点不删除
4、当前节点不删除,父节点删除
在整个面试完成之后2天收到hr电话,说过了
我在研二18年才接触到leetcode,当时还没有中国区,之前都是在美国区刷题(在美国区刷题也锻炼我的英文读题能力),当时我还是个计算机小白,还在自学java基础,也对转行比较迷茫,也是一步一步刷过来的,在平常也看到很多同学发帖吐槽题目难刷,想放弃,分享一下自身经历和大家共勉