注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
继策略和简历篇后,来讲讲码农面试三大考量 -> coding, system design and behavior question。
. 1point3acres
Coding
一般来讲现在感觉有两种类型,一种是Leetcode类型(侧重算法和数据结构),一种是customized coding(像是模拟一个背景让你做一些实质的coding, 结合一些design pattern或者ood)。第一种大家都熟悉的,第二种比较玄学,只能看自己的底子还有经验。
主要讲讲leetcode类型吧。首先从准备来讲我就刷了Leetcode。
1. 按tag刷了大概150,这一遍熟悉各种tag,找回感觉。(做完这一步我就开始面试了). 1point 3 acres
2. 找个top freq或者随便你觉得不错的List(我选了blind 75),这一遍重点在综合训练,别看tag自己做,保证速度,正确率,还有multi solutions。. 1point 3 acres
我基本focus on easy and medium。这次面试95%都是Medium,很少撞见hard题(也可能是运气好)。接下来想仔细讲讲leetcode practice和coding面试之间的区别。
不知道大家有没有想过,如果你保证Leetcode随便一个Medium 20mins内做出来代表什么,代表你可以过OA。那OA和coding面试有什么区别呢,就是你屏幕的另一边多了一个人,一个来评判你是否可以成为一个qualified coworker的面试官。区别就是你从头到尾需要合理的communicate,send positive signals, make sure you work well with them to solve the problems。我觉得有很多需要训练的部分,比如
1. 怎么表达你的solution, 你可以很好的口头描述,你也可以结合text board写一写画一画,whatever make it easy and clear。
2. 还有你怎么clarify problem, 有什么edge case。
3. 你是闷头思考不说话,还是合理的thought aloud, 你是否合理展现了你的thought process还是说给面试官的感觉就是做过,直接背了答案。
4. 你是否有好的写码习惯,style。
5. 你是否可以合理的设计出reasonable test cases。
主打还是一个交流,交流是灵魂。我觉得在大家都做出题目的情况下,有些人pass,有些人fail,就能解释了。说这么多是想强调刷leetcode跟面试coding还是不一样的,你可能需要找人mock,take a record, review the record, improve it, 或者你可以create a checklist for coding interview,去帮助你养成好习惯,cover一些great signals,like我一来要记得clarify problem, 我要记得图文并用去解释我的想法if needed, 我要记得不要闷头想,起码让面试官知道我在干什么, etc. ..
还有每个公司的面试侧重点也许不同,这个可以通过看面经来了解下。比如比较经典的就是google vs meta。google极其看重process,最终你有没有runnable codes and pass all the tests不是绝对decider。meta不一样,感觉侧重result, bug free, two problems, optimized solutions,你快准狠给我弄出来基本ok,只要过程别太拉胯。
.
System Design
这个难点可太多了,我浅薄地share一下我的想法和tips。system design主要是让你带着面试官去设计一个东西,从这个过程来看看你是不是能解决相应level的问题。其实大家不必要把这个事情想的太复杂或者太难(尽管他确实很难啊)。我自己有个Template, 可以防止自己遗漏掉重要的步骤。不过这个template的痕迹建议不要太重,我见过面试官反感template,觉得我很依赖它。实际上当你融会贯通以后,template早就融入了,痕迹会自然消失。你可以看看现在公司里的eng deisgn template之类的,其实是一个意思。主要是作为一个标准,协议。而不是没了template你就不会设计了。我的template大致如下
1. Requirements(Scope/Goals/Non-goals)
1. functional requirements -> 5mins
2. System API -> 3mins
3. non-functional requirements -> 4mins
2. High level architecture -> 15mins
1. Interactions between components
2. Data flow/operation(read, write)
3. Data storage -> 13mins.1point3acres
1. sql/nosql
2. schema
3. index
4. partition
5. replica. check 1point3acres for more.
4. Scale bottleneck/Fault tolerant/others -> 5 ~ 10mins. Χ
我准备sd主要是以下几个方面
1. 内功。内功还是挺重要的(面试senior以上应该挺关键,需要deep dive),平时design做的不多的朋友们,或者tech stack接触的很局限的朋友们,建议稍微花时间补一补。我用了DDIA(这个快速看一下就可以了,说实话我觉得就面试而言帮助不大,我主要之前看过两遍了所以快速go over了一下,也不花很多时间)。我看了https://github.com/donnemartin/system-design-primer。还有之前在公司做的design, recap一下看哪些做得好,哪些做的不好,为什么。还有各种tech stack的大致特点,运用,比如各种nosql,区别,tradeoff。
2. 套路和技巧。这个主要是帮助我pick up面试。包括template,看看别人的心得。
3. 例题。我觉得除非是做过很多系统很多年的大牛,很少有人接触过很多类型的系统,like video streaming, notification, message app, payment, ecommence。在几十分钟内纯靠实力design一个没怎么接触过的系统并且pass interview几乎不适用于绝大多数人。那么就只能看了呀,先学学其他人怎么design的,有哪些考量,系统有啥特性,有啥独特的challenges。先学再自己design。我用了大量的资料,like alex xu, 俄罗斯大哥, grokking。我自己列了20多种类型的系统,不过到最后也只看完了60%。. ----
4. 练习画图,我觉得很关键,比较推荐miro or excalidraw, 很好用,也是主流的面试工具。hand-writing好的朋友可以试试apple pencil。. From 1point 3acres bbs
5. Mock interview(必须做,做了才知道到底啥水平,到底哪里还要Improve, time management做的好不好,etc)。我推荐找专业sd面试官,因为要Mock sd很麻烦,门槛很高。如果Interviewer不专业很大程度会影响你的发挥。我是付费在interview.io上做的,我比较喜欢他take the record然后我可以去复盘。复盘了才知道how badly I did...
Classic Questions. 1point 3 acres
1. Fundamental systems
1. Job Scheduler(airflow)
2. Cache system
3. File system/s3 object storage
4. Message queue
5. Rate limiter. From 1point 3acres bbs
6. ID generator
2. Functional systems
1. Web Crawler
2. Tiny URL(bitly)-baidu 1point3acres
3. Event data processing system(ad click aggregation/youtube video view count/metric counter collection)
4. Notification service
5. Search engine(elastic search/google search)
6. Sync Service(dropbox/Code deployment system). .и
7. Typeahead/auto-complete
3. Product/feature systems
1. News feed(twitter/Facebook/ins/pyq/weibo)
2. Messenger(Facebook messenger/slack/whatsapp)
3. Video streaming(Youtube/Netflix/Bili) — recommandation
4. Uber/Lyft/Google Map
5. Yelp/Nearby-friends
6. Ticketmaster/Amazon/Airbnb
7. Stock trading system(broker, robinhood). .и
8. Payment system
9. Digital wallet. check 1point3acres for more.
10. Real-time Gaming leaderboard.1point3acres
11. Leetcode
总之我觉得sd考量以下几点(不分先后). 1point3acres.com
1. 内功,你功夫扎实吗。各种系统都懂一些吗,广度和深度。你有足够的知识储备吗。
2. 交流,你让我觉得想和你一起work吗。你表达清楚了吗。你设计的是我要求的吗。. From 1point 3acres bbs
3. design经验。你能表现出实际的design功底吗。我怎么知道你平时有没有积累实战的design skills呢。. 1point 3 acres
4. 整个过程顺畅吗,展现出soft skills了吗。
.--
下边给一些我的tips
1. 我觉得sd面试也是主打一个交流,面试官可以有不同的喜好和风格,得对症下药。最好的方式就是问。一般sd需要你去drive the design。但是你可以confirm, like now I would like to talk about xxx, or xxx. do you have any preference? or before I move, do you have any questions or concerns? do you prefer I start designing a single machine solution and scale it or design upon the targeted scale?
2. 我觉得每个人都有自己的优势和劣势,会形成bottleneck, 比如我到后面发现时间真的不够用。我自己的知识储备不错,交流也不错,soft skills也可以。不过平时工作中design还是少了,经验不多,而且对于各种系统的了解不够,特别是偏application/feature的。所以我发现我很擅长design message queue, object storage, id generator, cache system, 比较generic and low level system。因为我分布式做的多,各种分布式框架都知道一二,所以特别容易联想起来。但是要我直接设计一个like tiktok real-time comments sliding window or message app我就很慢,做不好,因为不熟。那就只能多看其他人怎么design各类系统,学习然后自己练,最后达到效果,不超时。
3. 时间很tricky, 我在template上加了时间限制主要是limit the time. 我觉得time management很难。
4. capacity estimation这部分,我感觉好多resource都魔化了,特别是grokking。实际上不需要那么详细的估计。除非是特定的岗位Like resource management. 我发现好多面试官对于这部分其实都不感兴趣。我自己觉得点到为止,合理就好。estimation的目的是帮助我们了解system scale还有具体resource capacity。基本上算一个api qps和storage data size就好了。qps用来了解system traffic,data size用来了解storage. 而且算个大概,知道量级就够了。
5. 我自己体会是多做一些design是有明显的帮助。如何合理运用知识储备很关键,其实sd也不全是很高深很复杂的东西。比如经过练习之后,我会熟练掌握write flow如果可以tolerant delay, 不需要real-time, 那就可以做成async, 加一个queue, decouple, add buffer。如果想reduce read latency, 可以考虑加cache, 怎么加,可以考虑pre-generate data(highly available, weak consistency),等于是push data model。如果有时间敏感的需求,not client initiated,可以考虑加一个scheduled job去处理。如果需要near real-time counter, top x,可以做一个aggregation components,怎么做。这些东西并不复杂,而且是常用的design pattern或者solution。
Behavior Question
这个主要是你要了解自己,准备好高质量的故事,然后有条理的说出你的故事,send great signals for your target level.
1. 我把之前公司的经历总结起来,挖出了一些故事,这些故事可以Prove A B C D for target level.
2. 关键是高质量的故事,这个也许可以解释为什么有些朋友总觉得bq达不到对应level的要求。因为确实是不一样的level啊。举个例子,面试官想了解你如何solve conflicts, 请看以下三个故事。. 1point3acres
1. 我和另外一个同事pair programing. 我想这么写,他想那么写,最后我们积极讨论,终于一致了。.google и
2. 我在做一个design, 组里TL有不同意见,我最后臣服了。
3. 我在带一个大项目,这个项目和其他两个大项目产生了dependency. 这个严重冲击了项目的计划和时间线。为了push things forward and don't delay(too much)。我drive conversation with stakeholders and leaderships to clarify dependency and conflicts, different solutions and tradeoffs. 我写了几个page然后host meeting, summaize meeting notes发到channel to provide viz。最后一起努力align了新的solution and timeline, milestones. 项目也只delay了一点点。
你不会觉得回答1可以拿到L5或者senior level吧。上述三个回答基本就是junior, mid, senior的case。高质量的故事是针对level的,如果你的故事不能体现你对应Level的能力,那可能会被down level or reject.. Waral dи,
3. 这两篇推荐看一下。1. https://sugarac.gitbooks.io/high ... uo-de-zong-jie.html 2. https://www.techinterviewhandboo ... -interview-rubrics/ ..
4. 建议运用STAR原则自己多练练,比如我练完发现自己下意识的忽略result。或者你练完发现你总是少说challenge。
.1point3acres
. Waral dи,
写了好多,求米。差不多这一篇也结束了。这次经验分享,希望有借鉴意义。也欢迎大家去看我之前的两篇,结合在一起看效果更好哟!
1. https://www.1point3acres.com/bbs/thread-1018136-1-1.html
2. https://www.1point3acres.com/bbs/thread-1018524-1-1.html |