注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
lz背景:985硕,国内大厂2年工作经验
# 1面:项目、算法题
## 算法题:面试官看简历里写了json,就出题:比较两个json是否相同。
lz用go写的,大概150行左右代码。
# 2面:项目、BQ、系统设计
## 系统设计题:设计一个文件传输程序(系统),支持从aws s3传输文件到azure的某个storage服务。提供了一批机器可以并行传输,要满足一定的吞吐要求。
先是大致说了下设计思路:设计两种服务:1)任务分发服务:负责为传输的一批文件生成任务,将文件拆分到多个woker服务处理;2)worker服务:负责接收来自任务分发者的文件列表,并执行传输。
接着面试官follow up问这个系统还有什么要考虑的吗?或者平时做系统的设计过程是怎样的?
lz就参考<grokking the system design interview> 的步骤描述了详细的设计过程。
1. 需求分析
1. 功能:
1. 支持从aws的s3存储传输到azure的存储服务. check 1point3acres for more.
2. 考虑到模块可扩展性,程序可以设计成支持多个输入和输出,支持从aws多个输入源到azure多个输出
2. 非功能
1. 性能:吞吐、延迟
2. 可扩展性:在需要更大数据传输吞吐的时候,能通过增加机器或提升配置来扩展. 1point3acres.com
3. 可用性:服务器挂掉的情况能继续保持可用。
1. 任务分发者可用性:采用master-slave模式。多个分发者服务器,使用外部存储(比如ectd、zookeeper等)进行选主,任意时间只有一个主提供服务,主挂掉后重新选举、切换.
2. worker可用性:对于挂掉的worker,如果任务中包含未完成的文件,分发者将文件分发给其它worker。
2. 容量估算:估算要求的吞吐量,需要多少机器
3. 系统接口
1. 设计任务分发者接口:1)创建文件传输任务的接口;2)提供worker将文件标记为传输成功的接口
2. 设计worker接口:1)接收文件列表接口,执行传输工作
4. 数据库模式和选型
1. 存储任务、对应文件列表、状态等信息。属于非关系型数据,可以选择nosql存储,比如mongodb。但因为数据量不大,没有较大的吞吐要求,所以也可以用sql存储,比如mysql. check 1point3acres for more.
5. 顶层设计:
描述了需要的模块:任务分发者、worker、etcd、mysql
# 3面:项目、BQ、算法题
. 1point3acres.com
## 算法题:约瑟夫环问题:n个数,编号为1~n形成一个圈,依次去掉第m个元素,最后剩下的是哪个?
直接暴力模拟做的O(mn), 面试官让想O(n)的解法没想到,后来网上查到了。
## 系统设计:设计一个高速etc系统。
比较开放的题目。让不用考虑硬件部分的实现,就考虑软件部分的。
大体思路是:设计一个etc后台服务,在高速入口记录车辆的信息、高速点、进入时间等信息,在出口获取信息计算费用,对etc绑定的支付方式进行扣费。. From 1point 3acres bbs
. 1point 3acres
. Χ
# 4面:BQ、算法题、程序设计
. ----
## 算法题:翻转指定区间内的链表节点
比较简单,直接做就好了。面试官follow up考察了代码测试问题,lz设计了正常和异常情况下的测试用例,感觉比较全面了。 ..
## 程序设计:设计一个ETL程序,支持从不同的输入源,执行数据处理后,输出到不同的输出源。
面向对象设计题。设计了输入、转换、输出接口,和一些具体输入、输出源的实现类,最后设计了程序的yml配置:可以对不同的输入输出进行组装。
面试官follow up问了一个具体的实例:如果要把文件作为输入,输出到mysql怎么做?实际问题是:输入输出数据结构不一样怎么办?
Lz给的解答是:输入和输出统一用字符串作输入输出,但对应到mysql输出,就需要数据满足其要求的格式,比如:字符串中的列数据按tab分割,以json存储等。而要满足其格式,可以是输入源的数据本身已经满足条件,也可以是数据转换后使其满足。
. 1point 3 acres
# 5面:BQ、算法题
## 算法题:计算中缀表达式
我的思路是直接顺序处理字符串,这样写起来代码比较多,大概120行+,lz调试了几次才通过用例。然后还因为工作主要用go语言,刷题用c++,导致c++和go的语法有点弄混了,但心急就没纠正语法错误而是换了种写法,感觉这里表现有点糟糕。。。
后来查了知道可以按照类似计算后缀表达式的思路,用两个栈处理,代码简单不少。
. 1point3acres.com
# 后续:. Waral dи,
面完两天后向hr要了面评,好像2面的面试官对系统设计能力有些concern,但个人觉着2面这里答得还挺好的。。
虽然挂了,但不得不说整体面试体验非常棒,面试官都非常友好,不像国内一些大公司的面试。。
第一次面试微软,觉着微软面试考察得比国内公司更全面,而且也都是工作中实际需要具备的工程能力。准备系统设计的过程中看了不少资源,感觉技术广度也提升了不少,推荐下:github上的<system design primer>看组件、概念和原理,<groking system design interview>看例子,然后youtube上再找些具体例子看下。
|