字节 国际化电商 一二三面(OC 已发入职邮件)
一面(1h):
自我介绍,说了下项目
项目用到es,说一下es的原理(讲的比较详细,fts ,roaring bitmap ,跳表实现聚合查询等)
redis也问了些常规八股,没有细问
一些常规八股,就不细说了
concurrenthashmap的实现,jdk1.8前后都说一下。hashmap扩容的过程,concurrenthashmap扩容的过程,这里我说错了,面试官为了提醒我,问我他的扩容和redis的扩容有什么区别。
mysql的常规八股,讲到mvcc的时候刚想详细说,可能感觉我要开始背诵了 说可以了🤣
智力题:leetcode的灯泡那道题,本质是算完全平方数,第一次面试不太懂要先装不会,直接说了思路。面试官问我是不是做过
手撕代码:股票可以交易两次 很简单的一道hard
看代码都做的挺快的 问我leetcode做了多少道,答600多。(感觉这里是不是会给自己挖坑,比如后续面试官看到这条直接上very hard)
反问:部门业务
二面(1h)
这面有点压力面的感觉,面试官问的八股都很刁钻,而且不论回答是对是错都不会给反馈,问一句你确定吗就继续(有几个我确定说对的八股 面试官也会这么问)
几个记得比较深的八股:
向一个不存在的端口号发请求,会发生什么? 我猜要么重发要么接收端直接回RST,纠结了半天只回答重发,面后一查是回RST。这里学到一个教训:碰到不确定的非常规八股 其实该把自己的思路和想法 都说出来
把一个文件从磁盘移动到内存,要复制几次? 我当时直接一脸懵,页替换不是一次吗,纠结了半天回答一次,面试官也没继续问就下一道。后来查了还会有用户态内核态的复制,好像是4次
磁盘构造,电梯算法之类的。我这里把最短优先和扫描算法先说了,接着面试官又问我知道电梯算法吗,这么问我以为我前面说的不是电梯算法,就说这个很耳熟但是不太记得了.....
智力题:m个相同苹果放到n个相同盒子,求方案数。 这题我第一反应是隔板法,但是发现不对,盒子是相同的没法去重,但是还是一直往排列组合那方向想。最后想了10分钟只说了个排列组合的未去重解法。面试官也没给任何提示直接下一题。后来查了下发现是动态规划,虽然这个转移方程我也不太能理解:dp[i][j]=dp[i][j-1]+dp[i-j][j] 表示有i个球,和j个箱子,可以选择在所有箱子里面都放上1个球,也可以不选择这个操作。拓展:这是一类数学题目,根据苹果相不相同和盒子相不相同分了几种情况,分别对应不同的解法(隔板,动规,斯特林数...),感兴趣可以去wiki看看
智力题:m个相同苹果放到n个相同盒子,求方案数。 这题我第一反应是隔板法,但是发现不对,盒子是相同的没法去重,但是还是一直往排列组合那方向想。最后想了10分钟只说了个排列组合的未去重解法。面试官也没给任何提示直接下一题。后来查了下发现是动态规划,虽然这个转移方程我也不太能理解:dp[i][j]=dp[i][j-1]+dp[i-j][j] 表示有i个球,和j个箱子,可以选择在所有箱子里面都放上1个球,也可以不选择这个操作。拓展:这是一类数学题目,根据苹果相不相同和盒子相不相同分了几种情况,分别对应不同的解法(隔板,动规,斯特林数...),感兴趣可以去wiki看看
算法题:二叉搜索树的下一个节点,改动了一下条件:每个node都多了一个parent节点。这题很简单,但是被前面的八股和智力题搞的紧张死了。第一次写的时候本来只有判断parent那里有一点小问题,面试官指出来后 我直接把自己的解法全盘否定,改用中序遍历找下一个的暴力写法。
反问:不敢反问了直接自闭
面完后真的自闭了,感觉很多刁钻八股答的不好,智力题没做出来,算法题写了个暴力解法,都准备等gg了,结果下午来了三面。感谢二面小哥🤣
三面(1h)
自我介绍,说下项目
主要问了项目中用到的es和kafka,es问了集群架构原理(不太懂,只知道sharding分片 天生支持集群拓展),搜索原理,考察我知不知道es索引重建。kafka介绍下架构,如何保持消费顺序, 消费者组可以消费同一个partition的数据等等
接着问了一道常规八股,从客户端发请求到kafka服务器的过程,这个问法最开始没理解,后面说不管kafka,就客户端到服务端发请求的过程,分层说的详细点。从dns到http到tcp到网络层的路由寻址协议到链路层mac。
三面没有智力和算法题,给了一道系统设计题,后面大半个小时都在这里,挖的非常非常细:
设计一个运营推送公告给商家的系统,支持过期时间,撤回公告,公告是否已读等功能。
这题我是按feed流来答的,按照业务场景的商户数量 来确定是推或者拉
把设计的数据库表及各字段直接写出来(问为什么这个表我要设计的有冗余字段,答:反范式,为了取数据的时候不去join其他大表)
业务层需要实现的接口也要写出来
每种功能的实现流程都要详细说出来
基础系统设计的差不多了,就开始上拓展,比如说数据量大,或者说商户特别多,怎么办:上缓存,消息队列,各个服务分离,垂直分表,水平分表(都问的非常细,比如对哪几个表分表,垂直分哪个字段,水平分的话按照什么分)
如何保证数据不丢失,表层面加一个历史数据表,定时任务同步数据。问数据库层面怎么做:多机房异地容灾,又问知道主从架构的几种模型吗?提示全同步,半同步,不是太了解
反问:如果通过实习,在实习前有什么需要重点学习的go库或者框架吗?答都是自研,没有关系。
三面体验很好,leader会给正负反馈,觉得自己答的也还不错
3/25更新 已接到OC 沟通时间后发入职邮件