海龟龟

2020/09 快手广告后端面经

关键词:快手,面经,广告,高并发,工程,算法

2020年9月我在BOSS直聘上联系了快手的广告组,HR秒回,在简短的intro call里面简单介绍了岗位信息,很快安排了面试。一共3轮技术面。

一面

面官是IC同事。面官让写了两道常规medium算法题,聊了聊简历项目后,就开始让我问问题。

二面

面官是直属老板,广告工程负责人,有10年以上的广告工程经验。一开始面官在开会,打字告诉我很抱歉,老板主持的会不得不参加,先做两道题吧,我说没问题。面官先让写了道简单算法题,然后考察了一个多线程相关的编程问题。我被考到了知识盲区,没有给出最好的解法。面官理解和接受了我的菜,也结束他正在开的会,跟我说了好多次抱歉,开始和我聊简历项目。

聊了项目后,面官指出了我在知识储备上的两个gap:高并发和C++。广告系统的请求量巨大,对并发的要求非常高,需要熟练地掌握高并发基础知识(例如刚刚考察的多线程编程),去保障系统的稳定、吞吐、容错、通信。工作语言C++以复杂著称,我没有相关经验,需要从头开始学习,因此一开始的进度可能会比较慢。建议我可以通过LevelDB这个项目学习一下。

基于这些concern,面官跟我说,我各方面都不错,但是技术栈的短板可能意味着我需要花一些时间熟悉。可是,现在业务压力很大,更希望招的人能快速上手。面官表示,他和一面面官商量一下,再做决定。

最后,我问了面官不少问题。问及工作节奏时,面官提到节奏非常非常快,可以说机遇和压力并存。

三面

二面面官还是放我过了,嘿嘿。于是有了三面。

面官是大老板,在包括广告的各种领域都做过,履历十分丰富。面官让我介绍我做的广告系统,问了一些关键的特征集和性能指标,我滔滔不绝介绍一通,最后用“这个系统还比较早期”收尾。面官听了,笑笑说,哈哈,是挺初期的。电话两头充满了快活的空气。

随后,他接着问如果要接着往下做,会着重提高系统的哪几个方面,不管是架构上的,还是业务上的。我平时的关注点更多在架构上,对业务不太关心,这就回答得比较naive,面官说,hmm你好像不是很懂业务,我说嗯确实如此。我心想,说我不关心业务可能等于说我关心技术,于是问了面官一个问题:“我对技术更有研究,对业务了解得少,是不是对长期发展不太好”?面官再次笑笑表示,啊,其实在技术方面,你的提升空间也很大的,不存在太偏技术不懂业务,因为两方面都很多需要学习。电话两头叒充满了快活的空气。

gif

最后面官跟我说,如果对机器感兴趣可以去做工程,对业务感兴趣可以去做算法,团队里两方面都有不少机会。

总结

快手的几个面官都比较心直口快,很利落地指出我的不足,也给出了明确的提高建议,对我的帮助很大,我很感谢他们。

欢迎浏览 国内互联网面试流程指南国内互联网软件工程师面试风格 了解更多关于面试的信息汇总。

4赞

就喜欢这些干货 :+1:

1赞

感谢分享!请问版主在美国工作时使用的技术栈大概是怎么样的呢?我知道很多在美国大厂的同学可能使用的技术栈和国内很不一样,甚至干脆就是公司自己做的一套闭源的架构。另外很多人可能是更专注于业务而不是架构。那对于这样的求职者来说是否需要拿出更多的时间来准备国内的面试?

1赞

@root 谢谢你的问题,是很好的问题。我建议也可以发几个独立的新帖来问,这样子大家搜起来或者看起来也会更方便 :slight_smile:

版主在美国工作时使用的技术栈大概是怎么样的呢?

我在美国的工作经验主要来自在Tubi搭建广告系统,技术栈主要是:

  • 后端系统开发:Scala语言和Akka框架
  • 数据库:PostgreSQL和Redis
  • 消息队列:AWS Kinesis
  • 运行环境:AWS EC2

在美国大厂的同学可能使用的技术栈和国内很不一样,甚至干脆就是公司自己做的一套闭源的架构。

可能更大的不同是在于大厂vs小厂,小厂不可避免地更重地依赖开源,大厂不可避免地需要更多的定制化和闭源。但关于中国vs美国的区别,我目前没感觉差别特别大。在美国火的开源软件,在中国大概率也很火,比如云原生方面的kubernetes和envoy,机器学习方面的tensorflow和pytorch,流式计算方面的flink,批处理方面的spark,etc。在机器学习和流式计算的领域,中国企业在应用上甚至走在前头,见 https://huyenchip.com/2020/12/27/real-time-machine-learning.htmlhttps://twitter.com/chipro/status/1337077324936663040 。只要在使用工具的时候,多去了解它的原理和实现,就可以和面官谈笑风生,因为面官一般也不期待技术栈对齐,而更在意一些相通的东西。这部分我在最后一段有介绍,在 国内互联网软件工程师面试风格 的“组件原理”一节也有介绍。

但中国vs美国科技公司还是有一个比较显著的不同点:云服务的普及程度。美国有更成熟的云服务,很多东西不会考虑自建,例如monitoring(datadog),object store(AWS S3),等等。但很多云服务在中国没有,或者很贵,(阿里云和腾讯云还需努力),国内企业会考虑自建。对于这部分技术,在面试前可以针对性地了解一下它们的开源实现,否则,用一句“我用的云服务,不懂原理”来应对面试,就减少了一个展示自己的机会。

很多人可能是更专注于业务而不是架构

对于这种情况,不妨把业务中使用到的技术了解得更深一些。工作中没机会用的话,可以通过阅读公司文档或者好的技术书籍的方式去学习。这样子,在介绍自己项目时,也可以装作自己懂架构的样子。技术书籍我强烈推荐 Designing Data-Intensive Applications (DDIA),不要脸地附上我的书评 https://www.goodreads.com/review/show/3713136943

2赞

感谢详细的回答!非常有帮助。顺便 DDIA 我去年读过,现在也是我最喜欢的技术书籍之一 :smiley:

十分妥了 :+1: ,那书提供了一个挺好的基础