2020 年面试记录 [Microsoft / Coupang / CoinMarketCap]
微软 O365 苏州
一面
- 算法题:给你一个字符串,输出所有字符能组成的不同的字符串的个数
- 如:AAB,输出:8(A, AA, AAB, AB, BA, ABA, BAA, ABA)
- 代码(暴力)
- 有什么想问的问题?
- 小组负责的事情:中国美国双线汇报、Office 技术上 Azure、Azure 技术引入、老应用服务&容器化
一面补充面
- 中文自我介绍
- 介绍一个在阿里的项目、遇到了哪些难点以及怎么解决的
- 为什么想换工作(答:WLB & 技术挑战)
- 有什么想问我的(具有什么特质的人更能在微软发展的更好?)
- 英文问答:解释序列化和反序列化是什么
- 在记事本上共享屏幕写题(英文):
- 给一棵树,实现序列化和反序列化函数,在Windows记事本上手写,并英文解释问答
- 面试官说最好用 non-recursive,然后我懵了不会写最后用的 recursive,代码
- 问我今天的安排,请假了还是?
Coupang - 上海
一面
基本没有印象了... 应该是基础知识面(好像有问 JDK 8 新特征)
二面 - 项目面
- 自我介绍
- 介绍考核项目、遇到的问题、难点、指标介绍等
- 介绍分层项目,遇到的难点,稳定性怎么优化的
- 介绍数据化项目,数据来源等
- 有什么想问的:负责的事情、技术挑战
三面 - 基础算法面
- 算法题1:链表形式给定2个数求和,LeetCode 原题,现场代码
- 算法题2:给定一个树,求树上的每一个节点,到其他所有节点的距离之和 ,LeetCode 原题,现场代码
四面 - 进阶算法面
- 算法题1:给一个表达式如 1+2*4-5/2,只有加减乘除,问最后结果是多少
- 算法题2:给几种金额的硬币,和物品总价值,问有几种组合法,LeetCode 原题,现场代码
- 如果有特殊输入,比如金额或价值为 0 或负数怎么处理(考察边界、抛异常等)
- 做完还没结束,问了其他:如何保证消息队列的 消息不重复、消息不丢失
五面 - 系统设计/架构面
- 设计一个分布式任务调度系统:产品功能、整体架构设计、细节设计
- 设计一个分布式爬虫系统:Master / Slave 设计、任务调度&优先级、去重、一致性 Hash、存储 等
- 有什么想问的:日常工作模式和强度(貌似不应该在终面问这个...)
CoinMarketCap - 上海
一面
- Java 中 HashMap 和 ConcurrentHashMap 原理
- 类加载过程、垃圾收集器、Java 内存区域划分、OOM
- 线程状态、线程池
- 项目开发模式、为什么想换工作
- 有什么想问的:公司状况、加班情况(据说到 9 点,去了主要做项目迁移)
微软 Intune 苏州
一面
- 面试官自我介绍,对方是前端,目前前后端分工比例大概是3:7
- 简单介绍目前所做的一个项目,技术栈、项目中的角色等
- Java 中 HashMap 的原理,复杂度等
- HTTPS、HTTP 的区别,SSL 加密过程,对称加密还是非对称
- 数据库使用哪些?是否用过 MongoDB,与 MySQL 这类数据库的区别
- 算法题,可以用 IDE
- 基础:给二维数组,1 代表有路,0 反之,点可以走向上下左右;给两个坐标,问是否连通(BFS)
- 进阶1:给出两个点之间的距离,求两个坐标的最短距离(单源最短路)
- 进阶2:给任意两个坐标,连续查询是否连通,优化复杂度(并查集)
- 时间剩不多了,想再做题还是问面试官问题?
- 我选择问面试官问题:组里做的事情、跟美国合作情况、加班情况
二面
- 自我介绍
- 项目中遇到的难点是什么,怎么解决的
- 常用什么设计模式?单例模式在序列化场景会多个,如何解决
- 项目是什么架构?微服务还是单体?互相之间怎么联动?
- 用的缓存在高可用方面有什么考虑?缓存穿透和雪崩是什么,怎么解决?
- Java 中的 HashMap、HashTable、ConcurrentHashMap,及 1.8 优化
- 算法题1:给一个只有 0 1 2 的数组进行排序;代码
- 算法题2:实现 LRU:代码;进阶:实现 LFU
三面
- 介绍最拿得出手的项目、具体怎么解决的
- 做题:给一些课程及依赖的前导课程、一个同学想上的所有课程(不想上这之外的课程),输出上课顺序,如果不能上完,返回空
- 进阶:这个同学可以上这些课的前导课程了,输出上课顺序;代码
四面
- 自我介绍,最有亮点的项目介绍
- 短网址服务设计、进阶设计(高 QPS)、代码实现 long2short、short2long;现场代码
- 如果需要去支持前端的项目,是否愿意
- 英语怎么样(时间不够没有问题英语的问题)
- 有什么想问我的,项目的前景、目前的业务开发节奏怎样
五面
- 这轮是全英文面,附上大佬 LinkedIn:https://www.linkedin.com/in/nathansgreen/
- 面试官介绍整个面试流程、面试官自我介绍
- 英文自我介绍;介绍做过的项目、难点、解决;在项目中的角色,其他人的角色
- 算法题:字符串压缩,aaaaccdddggg 压缩成 a{4}c{2}d{3}g{3}
- 用啥语言写?思路是什么、编码
- 异常输入如何解决思路,考虑字符非常多的情况,用 int 是否合适
- 如果使用 bigInteger 用 cplusplus 如何实现?
- 如果使用 bigInteger 在 decompress 时候会不会有问题,如果数据太大会不会爆掉内存,如何解决
- 设计题:一个数据,来自于多个数据源,如果在查询、排序、过滤的时候都有比较好的体验?(崩了,本来思路就不是很好,解释起来还比较麻烦... 面试官怕我听力有毛病直接手打字了)
- 有什么想问面试官的:What kind of people do well in your team or company?
六面
- 这轮是中文面,附上大佬 LinkedIn:https://www.linkedin.com/in/jeff-liu-82a651107/
- 面试官介绍整个面试流程
- 自我介绍、最优难点的项目
- 日常需求如何管理
- 算法题:给一个数组,数字是有序的,其中缺失1个数,输出这个数,如 1,2,3,5 输出 4。思路和code,单步样例跟踪讲解:现场代码
- 进阶1:如果缺失了多个数,输出所有缺失的数字,怎么解决?
- 进阶2:如果只需要求缺失了多少个数字呢?
- 对于整个面试有什么问题?面试感受怎么样?有什么想问我的?
心得体会
- 记得几年前有个阿里同事说,每年都要去外面面试看看,看看自己的水平怎么样了,也看看外面的行情
- 面试不仅仅是面试官对候选人的选拔,也是候选人对于各公司的很好的了解的途径。面试官的考察方式、技术水平、是否尊重人、甚至面试邀约安排方式 都很重要
- 好的面试不应该是考察八股文(如红黑树旋转原理),而是引导候选人不断深入思考,最大程度挖掘候选人的横向和纵向潜力,再看是否符合公司对人的要求