微软,腾讯面试总结

前言

  • 在某跳动做了半年的服务端开发, 发现并不是自己喜欢的方向, 于是决定换个方向试试, 分别面了腾讯和微软,幸运的是都拿到offer了,下面给大家分享下面试的经过。

腾讯微信-基础平台开发

  • 面的是腾讯微信事业部的基础平台开发岗,面腾讯总共是二面, 第一轮是电话面, 第二轮是当面面试。

第一轮

  • 电话打过来, 看到是腾讯的LOGO就有些小紧张, 面试官第一个问题一般就是介绍下自己。我发现这个真是很重要, 你介绍着就会把自己做过的东西介绍下, 然后接着问的技术问题就是和你介绍中相关技术的问题. 我说我在公司主要使用python和go, 然后一系列的问题来了:
    • go语言是个非常好的语言,你觉得和python相比优势在哪呢?
    • 简单说下go为什么速度快?或者简单说下go的并发机制或者调度机制吧?
    • 对垃圾回收有了解吗? 简单聊下python和go的垃圾回收机制吧?
  • 然后说了下自己的项目, 因为是电话面试, 项目中很多东西没有当面能说的那么清楚就大致说了下,然后又是一系列的问题:
    • 你项目中的高tps(15万/秒)是怎么做到的呢?
    • 项目中提到的异步架构设计, 为什么要做成异步的呢?
    • 你觉得你项目最难的地方在哪? 你是怎么解决的?
  • 我说最难的地方是存储方面的问题, 中途遇到了很多数据库的问题,因为数据量差不多3亿/天,导致的问题比如慢查询, 这聊到数据库马上又是一系列的问题:
    • 如何提升数据库查询的效率呢?
    • 如果慢查询已经发生了, 你会怎么去优化呢?
    • 简单讲下mysql里面查询优化器的大致原理吧?
    • 你说你读过redis源码, 简单说下redis清除过期键的原理吧, 如果让你设计, 你有没有别的方法去提升性能呢?
  • 然后问了一些操作系统方面的问题:
    • I/O多路复用有了解过吗?有了解过select, poll, epoll吗?简单说下实现原理
    • 伙伴系统有了解吗? 说下大致的实现原理?
    • 假设我有一个日志文件, 我需要找出其中不带重复的所有行, 你大致说下我这个命令怎么实现
    • 然后就是linux一些常用命令的询问了, 比如top, free, find, grep等
  • 最后问了下git的相关原理:
    • 简单说一下你提交代码的流程?
    • 有看过.git中的文件内容吗? 或者简单说一下你从本地分支提交到远程分支的原理吧?
  • 最后终于没有问题了… 基本上都是我简历上写了的东西, 所以基本对答如流, 中途没卡主过 除了go语言调度原理还有mysql优化器的原理 这个真是没怎么细看过。 最后就说我觉得你这边是没什么问题的, 下个星期会进行第二轮电话, 注意下电话…(我觉得腾讯可能真是不缺人, 全程对话都很高冷)

第二轮

  • 第二轮是叫我去西格玛大厦面试, 还是一样自我介绍, 这个自我介绍中的问题尽量说自己最熟悉的东西, 开头的第一个问题能答出来真是很重要。我介绍中说我有过爬虫和服务端开发的经验, 然后马上就是介绍下自己的项目:
    • 拿给我一张纸, 简单的画一下你项目大致的一个架构设计吧, 然后给我讲解一下
    • 你项目中高tps是怎么处理的呢? 多少台机器,每台机器内存和cpu都大致消耗到了什么程度?如果这一块公司没有资源需要减少机器数量, 你觉得有什么优化方案吗?
    • 项目中这个内存异步的设计思想是怎么实现的?go 语言中这种高并发是怎么实现的呢?或者说协程是怎么做到如此高并发的?
  • 然后看到我简历里面设计过高并发的基础服务, 叫我当场设计一个, 假设我上游有一个qps差不多万级别每秒, 然后你的服务是要进行db的访问的, 你怎么设计?缓存方面怎么设计? redis? local cache?怎么做能够最大性能的发挥你服务的优势?试着在服务稳定性可拓展性方面讲…(这个就是把自己怎么做的说一遍就行, 胡扯没用, 没做过扯不出来…)
  • 然后两道算法题:
    • 用python或者c++实现下冒泡排序和快速排序
    • 第二题有点长 不太记得了 大概就是一道动态规划的题目, 最后写了伪代码
  • 面了差不多2小时了, 还不放过我… 然后又是一波linux命令的询问:
    • awk命令了解吗? 不了解的话 对其他文本处理命令有了解吗?
    • free命令里面都可以查询到哪些东西?
    • …还有好多不记得了
  • 最后叫我回去等结果, 我当场问了下他大致的结果, 他就说这个不能说 回去等。

总结

  • 过了两天最后打电话给我说面试过了, 但是需要立刻入职, 因为当时还正在某跳动工作, 答应过我的mentor离职至少提前一个月跟他说, 因此我就跟腾讯说能不能过一段时间再入职, 他们的意思是现在竞争者多项目紧, 需要立刻入职大概就是一周内, 最后还是拒绝了, 不过也是一次不错的经历…

微软小冰-机器学习岗

  • 微软的面试真是难拿到, 一年内找别人内推了三次硬是没拿到面试, 这是投递的第四回, 终于拿到了面试, 下面简单分享下。(下面是JD)
- 数据挖掘/算法工程师
岗位职责:
1. 利用自然语言处理、深度学习等技术解决对话系统中的问题;
2. 大数据挖掘,对项目中使用的大数据进行分类及预测,并应用至线上系统。
岗位要求:
1. 熟悉自然语言处理、数据挖掘、机器学习等常用算法,有分布式后台系统构建经验;
2. 具备优秀的逻辑思维能力,善于分析建模问题和解决问题,对解决挑战性问题充满热情;
3. 有强烈的上进心和求知欲,善于学习新事物,勇于面对挑战;
4. 具有良好的沟通表达能力、具有出色的执行力。
优先项:
1. 有分布式大数据处理经验;
2. 有爬虫经验;
3. 熟悉 Python 或者 C#

第一轮

  • 面试直接去北京总部面的, 还是简单自我介绍, 我这次是对着他的JD说的, 因为自己机器学习方面都是工作之余自学的没什么项目经验, 因此就简单说了下自己对一些基础还是有的, 然后有分布式大数据的处理经验和分布式爬虫的经验等, 马上就是一波问题:
    • 简单说下你在上一家公司做过最自豪的项目, 然后其中分布式怎么设计的, 大数据又是怎么处理的?
    • 如果叫你设计一个分布式消息中间件, 你怎么设计呢? 简单说下kafka, nsq 作用是什么 最好从原理的角度去说?
    • 你觉得你这个项目中最难处理的一个点在哪? 你是怎么解决的?
  • 问完项目之后来了一个算法题:
    • 假设我给你一组数据, 我需要往其中放档板, 然后切割之后保证档板
      之间的数据之和属于[m, n]范围内, 且m < n, 请问一共有多少种放置档板的方法?(这题用了最傻的方法, 就是先求出所有情况然后求m,n范围内的值…不过好在coding抽象的比较好, 然后代码写的很整洁, 最后面试官还是点了点头, 说明印象还不错)
  • 我以为算法题做完就到下一轮了, 没想到这个只是刚刚开始, 下面又是疯狂一波:
    • 你说阅读过redis源码, 那么我问你个问题, 请问这个redis里面这个hash table怎么存储的? 如果遇到了冲突怎么解决呢?
    • redis中是单线程还是多线程呢?为什么这么设计呢?
    • 简单介绍下redis 渐进式rehash的过程, 其中每次扩容和缩容的依据是什么呢?
  • 然后看到我写过爬虫, 然后又是爬虫的一系列问题:
    • 假设叫你设计一套这个分布式爬虫架构, 你简单设计下?
    • 死链问题你怎么解决呢?
    • 假设我让你做一个爬全网的爬虫, 你简单画一下?(这个其实我认为就是让你简单设计一个搜索引擎, 这个比较开放)
  • 最后问了几个机器学习的问题:
    • 我看你有tensorflow的使用经验, 简单说下mnist中手写识别体的前向传播过程和反向过程传播原理吧…(其实就是用数学公式推导下)
    • 对损失函数有了解过吗? 如果让你自定义一个损失函数, 你简单写一个?
    • 如果处理训练过拟合问题? 为什么我们需要进行特征缩放?
    • 简单说下梯度下降的实现原理吧?
  • 机器学习方面的理论知识问的比较简单, 可能是看中了我的工程能力, 就没有叫我推导什么模型什么的, 额 算是混过去了…紧张的等待第二轮面试…

第二轮

  • 刚进来还是自我介绍和项目介绍, 项目介绍这个基本都是一模一样的, 然后这个比较耿直, 马上就是一道算法题:
    • 一颗二叉树, 找出其中加和最大的路径, 路径的定义: 任意两点间不能重复的一条路径, 其中单独一个点也能算一个路径, 然后每个节点的数值可以是负数…
  • 这题写了伪代码, 太绕了, 递归中继续递归, 脑子不够用最后还是伪码表示了下, 后面他还给我讲解了下, 我才听懂…
  • 然后还是问了我一些爬虫的问题, 我估计进去做事要给别人训练模型的爬数据…:
    • 你抓过哪些网站, 觉得最难的网站是什么? 为什么? (我说了google和微信, 额 各位爬虫大佬别喷), 因为反爬机制和各种加密参数…
    • 让你设计一个类似scrapy框架的爬虫, 你怎么设计? 为什么scrapy不支持分布式? 如果让你改造成分布式, 你怎么设计?(其实就是scrapy-redis的实现原理)
  • 然后问了几个关于监控系统方面的设计问题:
    • 在公司肯定用过metric打点吧, 对qps ptc99等数据的监控, 如果让你设计一套这样的数据监控系统, 或者说让你设计一套你怎么设计?我们需要非常轻量的就行, 简单画下或者伪代码表示下…
  • 最后还是问了一些机器学习的问题:
    • 你说的mnist手写识别体的数字识别用的都是别人准备好的图片, 如果我需要自己写一个数字让模型识别, 你怎么做呢? (这个其实就是问我怎么处理图片)
    • 简单介绍下卷积层和池化层, 我们为什么需要卷积和池化呢?能不能简单推导下?
  • 最后终于结束了, 我问了下结果, 他说这个要等结果, 不过他说了一句 你要知道, 工程落地最重要。听到这句话 我大致知道面试过了, 因为面试过程中工程方面的问题回答都不错, 后面回去后也没想那么多了…

总结

  • 整个面试过程花了整整3个小时左右, 面完人都感觉虚脱了, 不过这样挺好, 一天结束… 后面过了五天offer来了, 真是不容易…最大的收获就是两点:
    • 简历中写的都一定是自己对答如流的东西, 这个是最基本的, 问道简历里面的东西都不会的话后面基本没法聊了
    • 自我介绍的时候开头就是直接说自己最熟悉的东西, 不熟悉的东西不要提出来, 面试官就是在你的介绍中听到自己也熟悉的地方才问你的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章