小米武研 web 后端开发面试杂记

引子

2018/03/20 多云

我参加了小米武汉研发中心的面试, 岗位是 web 后端开发
当中还有一个小插曲, 在当天的上午接到人事电话, 约好当天下午 3 点现场面试
电话结束前说好了以电邮的形式告知详细信息, 然后一直到当天下午 2 点都没收到电邮
可能是被拒了我也没在意, 直到当天下午 3 点一刻的时候, 人事打来电话询问到哪了
我回复没有收到电邮, 没有准备动身… 最后还是定好当天下午 6~7 点进行现场面试

整体感受

小米武研中心场地并不大, 加上金山办公一起两家公司不到 100 人
办公室是那种孵化器式的全开放的, 包括前台, 会客室等等都在一个大厅里

粗略估计了一下, 男女比例 8:2, 对于一个 R&D Center 来说已经很给力了

面试

流程

首先是到场前台签到, 这里有个题外话, 小米武研坐落于武汉金融港园区
我在进单元楼的时候被要求进行访客登记, 在得知我是面试者之后还查阅当日面试名单
可以说是非常负责的物业了
前台签到完成之后就拿到人事刚刚打印的两道笔试题, 都是传统的 oj 题, 详见下文
完成笔试题之后就是正儿八经的技术面, 过程大概用时 45 分钟
然后就是一些老生常谈的套话环节 (薪资待遇, 上班时间, 等等…..)
趁机了解了一下原来小米武研是双休的, 难怪对我的期望薪资犯嘀咕 :P
技术面结束后面试官走掉, 人事过来提醒说可以走了, 于是马上开溜

技术细节

起手的两道面试题的难度在 leetcode 里一道简单一道中等
简单题(下称205): https://leetcode.com/problems/isomorphic-strings/description/
中等题(下称402): https://leetcode.com/problems/remove-k-digits/description/

因为从来没做过 oj 相关的题型, 掏手机什么的又觉得太没有面子, 所以只能硬着头皮上
205 这道题很简单, 在纯 ASCII 的情况下直接做差即可判断是否同构
402 这道题当时难住我了, 后来想了个答案交卷之后发现不是通解
这里贴上我当时的解答, 让各位欣赏一下我丑陋的手写体 xD

技术面阶段面试官首先指出 402 这道题的问题, 并给出足够的时间让我 fix
我当时因为紧张也没想到 fix 的方案, 面试官遂开始浏览我的简历进行提问
打头就问了我以前的实习经历, 项目经验, 等等…..
遇到这种问题我是最不怕的, 真金白银的回应之
面试官发现占不到便宜, 遂开始问一些准备好的问题:

  • MySQL 索引机制 (聚簇/非聚簇)
  • php7 新特性 (jit, 新的 zval 结构, zend 核心排序 hybrid sort)
  • 爬虫相关 (死循环问题, 返回结果解析) (部分答上)
  • Python 多线程 (GIL) (没答上)
  • …….
    最后面试官在白纸上手写了一道算法题, 也是给了足够时间和耐心提示, 没答上
    1
    2
    3
    4
    5
    # 一个数经过几次加一和乘二运算变成另一个数
    # 求最少次数
    # 举例
    (2 + 1) * 2 == 6 # (两次, 最优解)
    2 * 2 + 1 + 1 == 6 # (三次)

面试官提示说可以用二叉树来表示两种运算方式, 遍历出目标数, 得到最少次数
也可以用数学方法, 可惜当时没答上, 面试就这样结束了

后记

跟小公司不同, 这种巨型公司更注重对算法的把握, 对开发经验方面并不看中
而小公司反而问你一些工程上的问题, 有的时候甚至直接把开发遇到的难题拿来面试
我以前去小公司面试, 直接去他们主站溜达一圈, 找几个技术上不规范的地方记录好
面试之前准备两张纸, 一张给面试官, 称为简历, 一张留给自己, 称为 countermeasures
当面试走向向对方倒去的时候, 马上掏出货来, 一一对应, 挽回尊严…
而对于巨型公司来讲, 这些都不顶用了, 只能老老实实做题, 就像考研一样 :-)