字节跳动暑期实习——大数据开发工程师面经

Intro 本人985CS科班 无行业相关经历,有经济学辅修与深度学习的科研经历,预计这个学期会发一篇顶会,投的是字节大数据开发,面试之前没什么准备,一面的时候一道题都没有刷,直接裸面。直到三面面完lc合起来也不过刷了50题。因此面评是算法基础不扎实,但是知识面比较广。

一面:3月1日

简单的自我介绍了一下,面试官小哥哥十分友好,并没有太刁难本人。

问题1:排序长度为n,最大数小于n的数组

太紧张,归并排序没写全,后面提示哈希表,做出来了,老脸丢干净

问题2:划船问题,一个体重序列,船负重最大为n,船最多载两人,最少多少次全部人过河?

有手就行

问题3:智力题,小明打dota每一局胜率50%,求他连赢两局的局数期望?

居然想了个错位相减法,其实递推就能搞定……

然后介绍了一下项目的方向,问我要做数据分析还是算法方面,本人选择了算法,提示下一面考的计算机基础知识更多

这表现能过一面……其实挺震惊的,但是算法题事实上都做出来了,虽然不是最优解,但是表现的比较紧张, 再加上简历gpa都不错,万幸

一面结束立刻通过,约了二面的时间,

二面:3月5日

面试官小哥哥同样十分的友好,是我未来加入的部门的小leader,首先做了个自我介绍,直接做算法题。

算法:
  1. 最长公共子序列

课上学过,思路没有,代码先行……直接朗诵。

优化:空间复杂度可以到O(min(m,n)),面试官给了一点提示,然后恍然大悟,写出来了。本质上最长公共子序列就是用到前一个状态和上一行的状态,所以并不需要一个m*n的数组存储所有的值。

  1. 漂亮数组:leetcode932,数组中任意两个数,他们的平均值不在他们两个的位置中间。

例如:[1,2,3,4,5]就不行:因为2=average(1,3).[1,4,5,3,2]可以。

方法一:回溯法,面试官说不行,没有coding

方法二:尝试用动态规划,提示了老半天,几乎都把思路讲明白了才做出来……(分治的思想)其实代码很简单,本质上来说是做不出来了。

业务知识
  1. Transformer RNN ARIMA区别?

transformer本质上是有positional encoding的FNN,RNN时序,arima逻辑性强,而且有误差项。当然AR部分如果系数小的话没什么用。

  1. Transformer训练的loss能和lstm对比吗?

可以,都被同样归一化了

  1. Transformer对短序列拟合会不会出现overfitting?

本人把模型改成了mini版本,只有一个encoder head,decoder head是一个全连接层,参数很少,虽然还有200多万。。?同时学习率设的比较低,再加上其在测试集上效果不错,loss基本在0.01左右,因此没有overfitting。

  1. 金融投资中,动态规划和强化学习决策有什么区别?

动态规划可解释可预测,强化学习黑箱

面试官:你说的是深度强化学习,普通的强化学习就是马尔可夫链,还是白盒模型

我:你说的很对,RL我不太懂。但是我讲了一下动态规划决策模型。

事后才发现自己美赛项目的决策部分就是Q-learning,面试之前没有太多复习RL,关注点在deep-RL上,但是经济学模型通常不用深度强化模型(因为模型的不可解释性)

  1. mysql中Join有什么用?

纯纯是因为本人一面还不会sql,告诉面试官自己速成了,面试官就不考题了,问了一些比较宏观的问题。这里面试官印象很好,在两次面试之间看到本人的进步

  1. 了解mysql背后的原理吗?

不了解,瞎说了一顿,面试官说mysql是一种抽象,包括背后的spark和hadoop架构。本人反应:mysql应该是一种虚拟化技术。面试官:对。

  1. 你用mysql是来干什么的?

先对数据有一些想法,然后再用sql去拿相应的数据。比如我们先做假设:我们要对哪一部分人群做研究?是否要ABtest?然后再通过groupby leftjoin等方法得到相应的数据透视表

  1. 你觉得计算机知识有什么用?

高并发,大数据的时候有用。

  1. 主机和客户机如何实现通信?
    socket和TCP技术朗诵了一遍,讲了讲自己大创中用到的,并且讲出了问题(不支持高并发)
  2. 深聊美赛。

反问环节:

  1. 问了组里工作的pipeline和未来要做的东西
  2. 组内的技术栈
  3. 我表现得咋样,对我的评价?

三面:3月9日

由于组里可能比较缺人,因此三面流程其实很简单,但是自己的表现不太好……

  1. 大Leader介绍组里的业务和自己未来的任务

  2. 问项目(很细节)

    这里的难点是你没有ppt,你怎么把一个专业度很强的项目在ld面前讲清楚,本人费劲了心思ld也听不懂……最后ld打断了

  3. 考了一道数据的基本表示。

    对于一段计算:

    int a,b;
    a=10000000000000000
    b=-1000000000000000
    
     a=a+b;
     b=a-b;
     a=a-b;
    
    

这段代码能否实现a和b互换?为什么?
解释两个问题:

  1. 相互交换前后,print a,b。他们的值是什么?为什么是这些值?
  2. 在overflow的情况下,这样的交换为什么是成立的?

没有要求现场答出来,面试于10:30结束,要求12点写在共享文档上,本人尽量详细的写出来了。

HR面:3月14日

自我介绍

  1. 讲一讲你的美赛?

  2. 你的模型结果如何?

  3. 如何平衡实习与学业?

  4. 想直接就业吗?

  5. 就业期望薪资?

  6. 什么时候能入职?
    这里回答了可以尽早入职,但是三面的时候说4月中可以入职,然后追问了一下为啥和之前不一样,我:公司前进的方向就是我活着的意义

    offer:3.16日 完结撒花~

总结

一面:简单的运算

二面:动态规划、分治、回溯等算法思想

分治不是很会,两次都死这了,要加强一下。

三面:计算机基础知识,语言表达能力

自己的项目说的很烂……但是三面还是过了,感谢大leader和小leader的帮助!至此三轮技术面全部通过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值