字节跳动后端三面面经 人生第一个三面orz
从2月份开始边投边复习,不知不觉到现在已经面了一个月了。。
字节这场是我第11场面试,也是第一次进三面,希望可以上个岸🤣在池子里泡的太苦了
一二面见 https://www.nowcoder.com/discuss/380550
正片:
你是不是上个月投过一次字节?你觉得为什么被拒了。。🤣。。。(凉经见https://www.nowcoder.com/discuss/371292)
我说可能因为算法题没想出优化,只写了暴力。面试官感兴趣的ES也不怎么懂,都是拿来就用
面试官:那来看看这个题吧
LC 22 括号生成 https://leetcode-cn.com/problems/generate-parentheses/
这题其实我之前刷LC的时候做过。。大概讲了一下怎么递归:当前有左括号仍未闭合时,可以选择继续加左括号,也可以加右括号;当前没有左括号未闭合时,只能加右括号,否则就非法匹配了;当左括号、右括号全部用完时,说明到了边界,记录一路上添加的括号并输出
面试官:如果你有4G内存,保存所有结果序列而不是直接打印,你觉得K能开多大?
我:这就要求出K的时候序列一共有多少个,想了很久没想出来到底怎么用K表示
面试官:那你估一下它大概是什么级别?我蒙了个2^N(应该不对)然后列了个不等式算了一下K的取值
面试官没说什么,直接进入第二题:
一个升序排列(允许有相等元素)的链表,将最后一个元素指向开头元素形成一个环。现在任意给出一个环中的节点引用,并给定整数K,要求实现一个insert函数,将K插入到合适的位置上
我第一反应是要找到原链表的表尾,也就是p.val>=p.next.val的那个节点,面试官说你一定要找这个交界点吗?
分类讨论了下,发现K大于初始节点值时,一直搜到表尾即可;K小于初始节点值时,先找到表尾,然后从表尾之后找地方插入节点
面试官提示我的while循环有问题,我发现我的循环跳出条件是p.val>p.next.val,如果原链表只有一个节点,那么我永远会因为p和p.next值相等而死循环
我说那就加一个p.next!=p,面试官又说这样不能解决问题,比如仅包含两个相同元素的链表,4->4,你还是会死循环
所以问题就落到怎么解决原链表所有元素都为同一个值的情况,我想了很久只想到保存初始节点的引用,如果循环过程中又回到初始节点,说明这里已经是表尾了,且整个链表仅由多个重复元素组成
面试官问还有什么别的方案么,我想了五分钟没想到,他说已经一个小时了,就到这里了。
反问环节:
部门业务具体做些什么?大概是To B的图片素材收集、管理和销售
刚刚那个链表的题,特殊情况到底怎么搞?面试官:你问我没意义啊,我肯定会啊😂我说好吧我回去和舍友讨论下
总结:果然字节还是非常看重算法题,我面了五场,没有一场是不用做题的,大家如果投字节一定要非常重视这方面训练,题不一定难,但是要保证自己吃透思路,能顺利手撕