南软爱码士
查看: 1753|回复: 0
打印 上一主题 下一主题

阿里腾讯小米面经

[复制链接]

1

主题

1

帖子

29

积分

新手上路

Rank: 1

积分
29
跳转到指定楼层
楼主
发表于 2018-4-28 15:27:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 油炸电风扇 于 2018-4-28 15:29 编辑

面了几家公司,阿里腾讯小米都面了,最后也都能顺利拿到offer,积累了一些面试技巧,有一些比较深的感受:

1.简历很重要,简历怎么写差不多决定了别人会问你啥..半熟不熟的东西千万不要写上去,万一问了答不出来会被认为很浮夸,减分严重。
2.要搞清楚面试官想问什么,问题不清楚一定要先反问清楚,遇到不会的问题不要慌也不要直接说不会,表现出自己的思考过程和一些相关的知识(展示自己的知识面),遇到知识模糊的地方冷静一点说不定就回忆起来了
3.自己以前做过的项目要足够熟悉,一些面试可能会问到的非技术问题,比如觉得自己的优势在哪,学过最好的课程,都可以积累积累,临场发挥说得不会比早有准备的好。

阿里面试
五面,一面简历筛选面,二面主管面,三面总监面,四面部门交叉面,五面hr面
一面简历筛选面主要是为了了解技术概貌的,什么都可能问,不过不会面太长只是简单地问问。先拿楼主之前本科做的一个创业项目(当时写安卓的...),问了当时做什么,有没有总结失败的原因...然后问了学得最好的课程是啥,楼主大致想了想,之前学的课要不就是没有项目,要不就是太水(居多),感觉也只有研究生学的云计算课程(有点逼格)可以拿出来说了,然后就拿出来bb了一下,然后还说到了自己在里面简单实现了一个spark没有提供的推荐算法,然后面试官就说让我解释下看能不能解释到他懂...。最后根据简历上写的技术点问了两个框架。面得不怎么好,当时很紧张(电话有点突然,自己临场得心理素质也不行),说话都有点抖,不过简历还是过硬,然后临场表现虽然差但是勉强能过,所以还是给了二面的机会。

二面也是来得很突然,二面的面试官做是偏中间件的(最后问问题才知道),所以问的问题也比较偏中间件(对后台面试没有啥借鉴意义),不过想了想还是说说吧,这个面试有个特点,不是简单地问你一些知识,而是都是给场景然后让你去设计(所以能去中间件的都是大佬吧..面试这么难),而且你答不出来的话面试官会跟你解释答案...。上来先让设计个消息队列...有点懵,回答得有点急,但其实还可以先好好整体地捋一下,然后再讲的,这样会显得你这个人思维很有条理。让设计通讯协议,有什么办法优化网络通信。还有怎么减小通讯包的大小,楼主只会比如压缩啊,batching啊,然后协议元数据尽可能地精简啊,就答不出来了,面试官就问如果长度字段有没有办法是可变的然后也想不出来。又问了一个很场景化的问题,如果一个消费者下线了很长时间,现在上线要重新消费之前的消息,这样会不会对broker有什么性能上的影响,楼主就结合操作系统文件缓存说了一下,还说了linux在设计缓存时也考虑到了这种read once可能会把缓存刷掉的情况,所以在设计上做了一些规避blabla,mysql和一些其他的框架也有类似的设计,应该时不会有太大问题的。还问了一些nio的东西,问客户端nio的请求线程和应答线程不是同一个线程那要怎么办。问到redis(简历上有写),问redis集群有机器宕机了客户端会怎么样,还有redis shard migrating时,客户端的写请求怎么办。面试官看楼主的简历上写了disruptor(一个开源的高效java内存队列框架),就问了cpu缓存的一致性协议...楼主说不出来,面试官就说是MESI然后就让猜猜分别是哪四个英文单词的缩写...臣妾做不到啊...就酱,很虐,面了一个多小时,问题经常听不清,中间还挂了一下接了个外卖电话,给面试官时间精心设计了一些难难的问题...不过还好面试官人还比较好,觉得我还过得去,就把我转到了他们同大组的业务小组。

三面是总监,就是职级很高的比如p8、p9的面的,大概二面两周后打过来的吧,晚上8点..当时在打游戏。上来省掉了自我介绍直入主题,问kafka这么快的原因是啥,就说是采用的数据结构不是b树,顺序写,然后sendfile优化, batching,压缩。答得不是很全,不是很好,然后就让我再选一个其他我熟悉的,我选了redis,然后问redis这么快的原因是啥...我...答不出来,就扯了点单线程处理模型啥的,然后问我为啥用的单线程,我说不是很清楚但是最近redis官方有做多线程化的打算。最后面试官得出一个结论说,看来你看的东西很多但是都不是很深...膝盖中箭,想反驳但估计反驳可能就跪了。然后总监面一般项目和在实际场景对技术的运用会问得比较多,问了下之前在美团的实习经历,楼主就说了做api、维护老筛选服务、nginx日志统计项目、服务异常链路检测系统。然后问了下课程的学习情况,楼主照例将云计算搬了出来,说到分类和聚类时,就被问有没有做什么优化的措施,楼主就说调调参,数据本身限制了模型的能力(其实还可以说得更好的,但面试前没有对自己的项目和课程进行好好总结临场想发挥好不是很容易)。问了下我成绩,研究方向,emmmm...楼主一水硕,哪有啥研究方向都是在上上课自己捣鼓捣鼓,就说了下环境啥的,然后自己没有什么研究方向(好尴尬...其实可以不用说得这么直接的)。问了mysql在数据很多的时候要怎么办,楼主就回答mysql表在数据在千万行以上的时候性能会比较差,可以考虑分库分表,然后分库分表比较麻烦的是现有数据迁移的问题,然后其他的脑子短路,其实虽然说是脑子短路但也有可能是因为对问题不够理解,想了一下想不出其他啥,但又不能就这么尴尬着吧,然后就想到在一些技术网站看到的和分库分表有关的案例,说了一下。最后还问了下最近有没有看什么新技术,刚好最近在看dubbo,然后也比较好侃,就说了一下。就酱。

四面是交叉面,交叉面是菜鸟网络的大佬做的,还提前预约了说这两天面,有预约就很nice。这一面比较恐怖,虽然交叉面不太会筛人,只要表现得稳、谦虚就好。每个面试官都很有特点,这个面试官的特点是,如果你不会问题然后想侃一些相关的他会不耐烦,所以我侃了一次之后就不敢再绕圈了(绕圈也是为了表现自己的知识面嘛,虽然问题答得不好但是说不定绕了一下还行呢)。上来先问觉得自己的优势是什么(这种问题平时准备准备面试时候就能答得更好),然后让我挑一个简历。


最后一面是hr面,只要负能量不是太大,表现得沉稳一点,谦虚好学一点,基本都能过(没有过的原因有可能不是因为hr,而是因为择优排序之类的),还有如果被问到之前的实习公司或者是导师的话,千万不能黑。


腾讯面试
腾讯是被补捞的,可能是由于没有填事业群意向的原因,第一次内推被一个写C++的组捞错了然后就没有然后了。捞起来的组就对口了,写java api层的,不过也是被捞得很晚(所以一定要填事业群意向...)。
一面面试官上来先让我自我介绍,然后再介绍下他们部门问有没有意向(emmm这个当然只能答有意向了)。然后让我介绍下美团的实习经历,对感兴趣的项目还深入问了一点。然后就是开始一些问题,问进程和线程的区别是啥,线程之间的通讯机制,进程之间的通讯。然后问了下之前实习的时候是怎么做服务降级的,然后我就说主要信息不可降级,次要信息可降级,然后问怎么知道什么重要什么不重要呢,然后楼主说信息都有个优先级排序,服务不可能是完美的,做有损服务,具体要和pm商量,用户体验是首位。然后问为什么要做服务降级呢,又问我们的服务啥时候流量高峰(问这种问题主要是看你之前有没有好好实习,对业务系统的了解怎么样,如果答得很好的话挺加分的)。有没有看过和网络有关的东西,楼主答tcp和java nio,然后问tcp在有一端宕掉后会怎么样,楼主已经将近一个月没有去复习过和面试有关的东西了,所以说得不是很清楚,说tcp一段宕掉的话,另一端会超时重试,重试几次,重试间隔时间应用了指数回退,在重试超过一定次数后关闭连接,面试官还反问了一下(..我记得确实是这么个东西啊),然后我又说了还有两个参数但名称不太记得了,一个是在超过之后会更新路由,另一个blabla。如果另一端没有宕掉只是进程挂掉的话,会由tcp协议层返回rst报文使得另一端关闭连接...楼主之前也是比较详细地看过tcp/ip协议详解卷一,但tcp这种东西真的是太容易忘记了...。问有没有查过日志,然后楼主说之前美团有日志平台(收集各服务器日志),上线的时候也要看日志有没有异常。问了一下筛选一个日志文件,ip的访问次数,但格式没有给,就说把ip grep出来,用\d+\.\d+\.\d+\.\d+(我也不知道这个正则语法是不是grep的正则语法,面试时候脑子没有像现在说得这么清楚),然后sort|uniq|wc -l。又问有没有做过和安全有关的东西,楼主就拿之前做过的一个需求爬虫限流来说,说自己怎么设计的,包括功能开关,算法参数能通过配置平台动态修改,也简单地说了一下两种限流算法漏桶和令牌桶,令牌桶用的比较多因为能比较好的应对突发流量,还有一些很基本的比如时间窗口这种,当时不记得名字了就没有说。最后让设计一个抽奖系统,有几种大奖,然后要保证1000万个用户参与活动后奖都要发完,最大的奖要在800w次参与后才开始发,楼主就说用mysql,流量大需要分库分表,每一个奖做单独的主键,一次抽取先select ... for update,然后判断还有没有然后就update,再用redis存储参与次数,800w次后然后就被打断了...面试官又反问了一下这样能保证1000万次参与后奖品总能发完嘛(很迷),我迷了一下,说奖品一般比较少,然后参与多的话,奖品应该就能很快发完了,然后也说了下自己缺乏这种系统的设计经验,然后面试官反问说你这样是不是有bug,先到先得。然后楼主想了一下想不出这样做有什么不好,但为了避免冷场说了下自己是按照秒杀系统来理解这个需求的,然后好像真的是对问题(业务)理解得不够彻底吧,之后面试官就没有再追问了。


二面聊了25分钟,上来还是自我介绍,然后也是问美团的实习经历,用到了那些技术,遇到的最大的困难是什么,还问自己觉得有哪些收获。项目问完之后,让我说一个和web开发有关的框架,楼主想选kafka,不行,选redis不行,然后说是说一些比如spring、struts之类的框架的模块,我对这些框架更多是使用层面的,比如什么IOC啊AOP啊,一些自定义的配置比如BeanPostProcessor,BeanFactoryPostProcessor,还说了几个自己听到过的内部类(反正就是答得很糟,其实Spring MVC内部的DispactchingServlet之类的一般都看过,也是可以拿出来说一下的,可惜当时没有说)。然后让我说一些JVM和GC,这个楼主就了解得比较多了,侃了很久还不带重样的,讲Serial、Parralel GC、CMS、G1,然后拿CMS出来说了一下,分代收集的思想,年轻代分为Survivor1、Survivor2、Eden,对象分配到Eden,每个线程有自己的分配区,避免锁竞争,说了很多参数PretenureSizeThreshold,两个晋升的参数,SurvivorSize、老年代收集最重要的两个参数,老年代碎片,单线程full gc,碎片压缩等,一些调优,感觉是JVM这一块帮自己拉回分了吧


hr面是现场的,不过当时已经拿到阿里offer了,比较尴尬,聊一会就走了。


小米面试
小米面的是搜索和推荐,主要是问一些spark/storm/kafka之类的问题,问的都不是很深也不是很多。一面面试官问了下和spark/storm有关的项目,还有问我觉得现在spark还是storm用得多为啥,我就说spark,可能spark代码写起来比较简洁吧,然后spark也提供了很丰富的算子涵盖了流计算、sql、graph、机器学习等方面,而storm就比较少。然后就是要在线写两道算法题,第一道是给一个单向链表,比如1->2->3->4,两两交换顺序,即变成2->1->4->3,第二道是给一个二叉查找树,其中有两个节点的位置互换了,写代码找出这两个节点。


二面上来也是问spark/storm有关的项目,然后也是问了spark和storm现在哪个用得多为啥...因为我实习时候维护过一个老筛选系统,然后就问了一下做了哪些,说了写过增量索引,然后问增量索引和全量索引两个同时存在话,会不会elasticsearch索引的新数据被旧数据覆盖的问题,一开始问题不是很清楚,问了一会才搞懂问的是啥的,然后就说虽然当时的项目里确实存在这个问题,但可以通过乐观锁的方式解决,即在索引数据里面基于版本号做乐观并发控制。然后还问了使用kafka的一个问题,楼主先说了一下美团当时基于kafka改造的mafka大概有哪些改造,当时用的kafka版本大概是0.8.1,挺老的,问的kafka问题和消费者ack有关,可能是拿他们之前遇到的一些问题来问的吧,问消费者消费中忽然宕机了,会不会有数据丢失,楼主之前看过kafka的官方文档和客户端的源码,听着比较疑惑,然后就探讨了一下,说了下1.0.1中的kafka是什么样的,老版本的没有看过,新版本里,消费者的ack默认采用auto ack的方式,能保证at-least-once的消息处理语义,然后消费者offset是存储在broker(大概叫consumer coordinator)保管的一个topic上,都有哪些默认配置,之前offset是保存在zookeeper上的,然后kafka consumer提供的api也有seek(offset),消费者重启时的消费也有几种配置,比如从上一次offset,从最开始,从最后。聊得还挺开,然后感觉面试官可能对我比较满意,聊到最后就说让hr过几天联系我给offer了,不过最后没有去,之前本科实习去帝都,感觉帝都不太适合生存,雾霾多房价贵户口难...


就酱,大家有什么问题欢迎加我微信wtf191002交流






分享到:? 微信微信
收藏收藏2 分享淘帖
返回顶部