拼多多 后端 二面 压力-拷打-羞辱(😭)
拼多多 暑期实习 二面,总共用时1h 左右, 被面试官疯狂拷打, 估计凉凉。
首先介绍项目, 对方完全不感兴趣: 你做的这些和后端开发有什么关系?
我简单介绍了下后端相关的,面试官可能觉得太简单了,没有继续问。
然后就是痛苦的手撕拷打,持续50mins 左右。
问题1: 给你两个班级, 每个班级共有 k 个人,你是班主任,要从每个班级中挑出1个人,使得他们的身高差最小。
回答: 先排序, 然后遍历A班级,二分查找B班级中的第一个大于等于(lower_bound)A班级里的那个 的位置,然后比较那个位置和前一个位置。
面试官和我不太同频,问我为什么要找第一个大于等于?二分查找不就是找一个位置吗? 面试官笑眯眯的问我是第一次接触二分搜索吗?
然后计算时间复杂度。
感觉完全不同频。
问还有更优解法吗?
回答双指针,还是固定遍历A, 然后另一个指针从B开始找比A大的,然后在和前一个也比较,取最小的。这样就是O(n).
面试官提示一下,不要局限在当前这个和前一个比较,换种思路。
然后我一直在思考,对方问我双指针要怎么初始化? 因为我还没想好,就没回答。
面试官: 双指针要怎么初始化?这你都不懂吗。。。? 怎么不回答我。
我说新思路还没想好,面试官表示刚才那种思路的双指针要怎么初始化? 答:都初始化在第一个位置。
问题2: 两个班级, 换成 N 个班级, 每个班级选1个人, 要求算出来的人里的 max - min 最小。
答没思路, 面试官提示下多个指针? 考虑下指针应该如何移动。
我想了想,移动最小的那个指针,直到所有指针都走到末尾,每次移动,从这个N个人里面取最大的,最小的,比较。
然后算时间复杂度:
n个班,每个班k个人, 我想整体的数据规模是 N = n*k , 然后我用 N 去后续表示。
面试官:你为什要定义新的符号N?
算完时间复杂度,问我“从这个N个人里面取最大的,最小的”这部分可以优化吗?
我回答可以使用 map (cpp里的),面试官表示你直接说数据结构,不要说语言中的名字。
问这个的时间复杂度,答logn
面试官:那你开始写吧。
写了大概 3 分钟。 他看了眼。
问题3: ping 100ms , curl http://1.2.3.4:8080/hello 需要多少时间?
这里我考虑了4次挥手, 面试官:需要考虑这个吗?
答 200ms.
问题4: 直播间,打赏金额最高的100个用户? 你应该如何实现维护?
我回答使用 redis 的 zset , 可以高效的获取top 100.
面试官问:这样有什么问题吗? 如果用户特别多的情况。
我想了一会,也没想出什么问题,回答没什么思路。
面试官:用户太多了会有 大 key 问题, zset 删除的时候会阻塞几秒。 (我不太理解)
面试官:你应该考虑怎么优化?
答: string 配合 zset 使用, string kv 中存 user, money, 而 zset 中只维护 top 100 的。同时更新这俩。
最后, 反问
部门业务:拼多多直播带货。
技术栈: 面试官看我的简历里面,cpp 太底层了我们这边不用,golang 也不用,主要是 java , 然后 redis, mysql, kafka这些。
面试官问我懂不懂二分, 我当时多少有点生气💢, 不过总的来说面试官人还不错,还算友善,给了很多引导。
#牛客创作赏金赛#
#拼多多#
首先介绍项目, 对方完全不感兴趣: 你做的这些和后端开发有什么关系?
我简单介绍了下后端相关的,面试官可能觉得太简单了,没有继续问。
然后就是痛苦的手撕拷打,持续50mins 左右。
问题1: 给你两个班级, 每个班级共有 k 个人,你是班主任,要从每个班级中挑出1个人,使得他们的身高差最小。
回答: 先排序, 然后遍历A班级,二分查找B班级中的第一个大于等于(lower_bound)A班级里的那个 的位置,然后比较那个位置和前一个位置。
面试官和我不太同频,问我为什么要找第一个大于等于?二分查找不就是找一个位置吗? 面试官笑眯眯的问我是第一次接触二分搜索吗?
然后计算时间复杂度。
感觉完全不同频。
问还有更优解法吗?
回答双指针,还是固定遍历A, 然后另一个指针从B开始找比A大的,然后在和前一个也比较,取最小的。这样就是O(n).
面试官提示一下,不要局限在当前这个和前一个比较,换种思路。
然后我一直在思考,对方问我双指针要怎么初始化? 因为我还没想好,就没回答。
面试官: 双指针要怎么初始化?这你都不懂吗。。。? 怎么不回答我。
我说新思路还没想好,面试官表示刚才那种思路的双指针要怎么初始化? 答:都初始化在第一个位置。
问题2: 两个班级, 换成 N 个班级, 每个班级选1个人, 要求算出来的人里的 max - min 最小。
答没思路, 面试官提示下多个指针? 考虑下指针应该如何移动。
我想了想,移动最小的那个指针,直到所有指针都走到末尾,每次移动,从这个N个人里面取最大的,最小的,比较。
然后算时间复杂度:
n个班,每个班k个人, 我想整体的数据规模是 N = n*k , 然后我用 N 去后续表示。
面试官:你为什要定义新的符号N?
算完时间复杂度,问我“从这个N个人里面取最大的,最小的”这部分可以优化吗?
我回答可以使用 map (cpp里的),面试官表示你直接说数据结构,不要说语言中的名字。
问这个的时间复杂度,答logn
面试官:那你开始写吧。
写了大概 3 分钟。 他看了眼。
问题3: ping 100ms , curl http://1.2.3.4:8080/hello 需要多少时间?
这里我考虑了4次挥手, 面试官:需要考虑这个吗?
答 200ms.
问题4: 直播间,打赏金额最高的100个用户? 你应该如何实现维护?
我回答使用 redis 的 zset , 可以高效的获取top 100.
面试官问:这样有什么问题吗? 如果用户特别多的情况。
我想了一会,也没想出什么问题,回答没什么思路。
面试官:用户太多了会有 大 key 问题, zset 删除的时候会阻塞几秒。 (我不太理解)
面试官:你应该考虑怎么优化?
答: string 配合 zset 使用, string kv 中存 user, money, 而 zset 中只维护 top 100 的。同时更新这俩。
最后, 反问
部门业务:拼多多直播带货。
技术栈: 面试官看我的简历里面,cpp 太底层了我们这边不用,golang 也不用,主要是 java , 然后 redis, mysql, kafka这些。
面试官问我懂不懂二分, 我当时多少有点生气💢, 不过总的来说面试官人还不错,还算友善,给了很多引导。
#牛客创作赏金赛#
#拼多多#
全部评论
第一个身高差问题,如果是整型,因为身高数据量不大,可以直接搞个数组,身高直接作为下标,出现就+1,然后遍历两个班级 2*n如果第二遍遍历班级的时候没有出现>2的数组,说明身高没有相同的。就需要遍历存储身高数量的数组,这时候使用两个变量记A,B录下标而且因为是按照下表从小到大便利或者从大到小便利的,那么两个变量都已经使用之后在遇到另外一个身高C的时候A和C的身高差距肯定不会比B小,这时候只需要比较B/C A/B之间的差距再决定要不要更新,如果AB都有值之后,而且当前下标- B> B-A的时候就可以退出这次遍历了。这样只需要三次遍历就能拿到结果,时间复杂度是 2*N + K = O(N),不过如果使浮点型这个方法就不行了
大佬有后续吗
这手撕也太不常规了
很强!
昂? 拼多多是我觉得最容易的面试了 uu运气不好
面试官表示 zset 最好不要超过 1000。 我对这个表示怀疑,key, value 都很小, zset真的handle不了吗?
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
投票

点赞 评论 收藏
分享
点赞 评论 收藏
分享