理论上有五面,算法做的不好,hr 面后通知挂了
没有 system design,全是 coding(这个应该知道是哪家了). ----
一面是 orderbook
二面是流中的中位数,每次调用 compute 返回并删除所有已记录的数字;follow up 是流保留任意时间
数据结构应该有两种,第一种是无脑存
std::vector
复制代码
然后 compute 的时候排序;第二种是存
std::priority_queue
复制代码
在来数据的时候 balance,compute 的时候只需要堆顶的数据;follow up 是每次 compute 时记录一个当前最大 ts,用
std::queue
复制代码
来维护,然后方法一就是遍历删除,方法二就是 lazy delete;后续面试官问如果 ts 会出现历史数据(即 ts 不是 monotonic)会有什么问题;这个应该是每次 compute 时记录的最大 ts 其实是近似分割点,在两个近似分割点中存在物理真实的分割点,如果历史数据落在这个范围,delete 的时候会没清干净-baidu 1point3acres
三面是给定 m 个与 x 轴平行的直线,再给 n 个点,求这 n 个点与 m 条直线的交点,每个直线需要返回一个数字(即反馈长度为 m 的