首页 > 笔经面经 > 字节跳动 后端开发实习生 一面+二面+三面+HR面 面经

字节跳动 后端开发实习生 一面+二面+三面+HR面 面经

头像
大梦想家豪哥
编辑于 2020-02-10 23:12:25 APP内打开
赞 30 | 收藏 177 | 回复22 | 浏览7501
楼主大三,计算机专业。
是第一次参加面试,在此分享一下面试过程。
内容不全,因为有一些我没答上来的题目,就没有记在脑子里,我已经尽量回忆了。
目前是面完了HR面,在等结果。

一面 2月4日14:00——14:50 (时长50分钟,面试官是一位程序媛小姐姐)

0、自我介绍
1、Python可变参数*args,**kwargs
2、Python内置容器及其容器及其使用场景
3、C++中const与#define的区别与优势
4、C++11新特性auto的用法
5、C++虚函数,读程序写结果
6、进程与线程的区别
7、操作系统为什么有用户态和内核态,用户级线程与内核级线程如何转换
8、TCP三次握手、TCP四次挥手的过程以及原因
9、编程题:
假设数组 A 和 B 都是有序的,并且 A 有足够多余的空间可以合并 B。要求不使用额外的空间,把 B 合并进 A 并保证最终的数组有序。
例如: A = {-3, 5, INVALID_NUM, 7, INVALID_NUM, 10, INVALID_NUM, 11, INVALID_NUM},B = {-1, 2, 6, 12}
最后:A = {-3, -1, 2, 5, 6, 7, 10, 11, 12}

总结:编程题想了半分钟,给出了最优解,秒了;总的来说一面没有答的特别精彩的题,因为都是些基础题,没有场景题,也没有可以发挥的题。(如开头所言,有些没答上来的题我可能忘记了)
最后面试官说联系一下二面的面试官跟我聊聊,10分钟后,二面开始了。


二面 2月4日15:00——15:50 (时长50分钟,面试官是个很帅的小哥哥)

0、自我介绍
1、C++关键字static、extern
2、C++关键字this,C++类的实例方法中能否写delete this,这种情况的使用场景
3、C++中new和delete语句的底层实现
4、数据库事务隔离级别
5、MVCC
6、expoll了解吗
7、http与https的区别以及https建立连接的过程
8、编程题:
给你一棵二叉树,它的根为 root 。请你删除 1 条边,使二叉树分裂成两棵子树,且它们子树和的乘积尽可能大,返回最大的乘积。

总结:编程题在编写过程中被提示改成了最优解,比较曲折;第3个问题自认为答的精彩,也想借此分享一下自己的经验,如下。(如开头所言,有些没答上来的题我可能忘记了)
问:说说new和delete发生了什么。
答:???嗯……就是动态的分配了内存空间和释放了内存空间吧……
问:仅此而已吗?
答:嗯……这种分配是在堆上进行的。
问:嗯,然后呢?
答:之前学了8086系统,里面有一个扩展段,其实就是用来指向堆。写汇编的时候,和栈段不同,栈是预先分配空间之后,由高地址向低地址生长,而堆段是低地址向高地址生长。
问:好像不对哦,这个过程只是分配内存那么简单吗?
答:new还会返回一个指针,调用构造函数,delete会调用析构函数。
问:(沉默)……
答:嗯……从编译原理的角度,编译程序会把这条记录添到变量表里,字段有变量名、类型等。
问:它到底是怎么操作了内存?
答:从操作系统的角度看,动态分配实际上并没有真正将内存分配下来,只是建立了虚拟内存的映射关系,也就是在页表中做纪录,只有在真正需要调用时,触发缺页中断,将页调进来,这种应该叫做懒加载机制。
问:那new和delete具体是怎样的过程?
答:这个……我好像不知道吧……
问:嗯,那下一题。

(如你所见,这道题我并没有答对,就是乱扯淡,但我觉得我的胡搅蛮缠能体现出我确实是学过计算机的人。这就是我给大家的经验,遇到不会的,根据自己掌握的知识,“打擦边球”就好了)
最后面试官说联系一下三面的考官,说是在开会。二面结束10分钟后,我的HR和我约了三面,定在了7号。


2月7日14:00——15:10 三面(70分钟,交谈中了解到是一个10年工作经验的程序员,应该是部门的头头)

0、自我介绍
1、说说你刚刚提到的最近参与的那个比赛
2、为什么读二专
3、今后的职业规划(问了一个送命题:我可以理解成,你如果保到了xxxxx大学就不工作了吗?)
4、谈谈你对前后端交互中使用的JSON的理解
6、http和https你了解吗
6、场景题:5000人同时执行转账,编写线程时要注意什么?没学过数据库没关系,可以认为数据在内存中(穿插着问了死锁)
7、场景题:抖音有十亿用户,32字节的userid和double类型的活跃度数据,保存在1000个文件中每个文件100万行。找出这些文件中活跃度最高的10000个玩家的userid和活跃度的数值(穿插着问了堆的实现)
8、Redis了解吗?实时排行榜使用Redis的什么数据类型?它的底层实现?查找、插入、删除操作的时间复杂度?
9、编程题:
36进制正整数加法,不允许把36进制数字整体转为10进制数字,计算出10进制累加结果再转回为36进制
总结:我认为三面是三场面试中,最有水平的一场,而我认为也是我表现最好的一场。编程题写的贼快,就是模拟计算过程,应该几分钟就基本写完了,因时间关系,没让写完。之后我搜了这道题,思路正确。问职业规划的时候,问了一个送命题:“我可以理解成,你如果保送到了xxxxx大学就不接着工作了吗?”,我当时一身冷汗,连连说这个要看我的实习体验来决定。对json的理解那块儿我主要是强调了json是一种规范,与很多语言中的数据结构都有所对应,比如Python的字典、Js的对象,但它不属于某种语言,它适用于序列化,而可序列化的东西才能用于网络传输。5000人同时转账,我主要说的就是读写加锁的问题,交流中引出了死锁的问题,我说了死锁的条件,从进程和资源两角度,然后又提到了银行家算法。一百亿数据取前一万,我的回答先是用容量为一万的最大堆,后想通是错的;然后我说快速选择,又就说用堆排序也可,这个时候他问了我如何建堆,但这两种方法均对内存不友好,需要加载全部数据;然后他开始引导我,最终我答出了正确答案——最小堆(他的提示就是,你为什么一开始用最大堆)然后我向他描述了一下用最小堆实现的算法。答完这个题,问了实时排序用Redis实现以及底层原理。(如开头所言,有些没答上来的题我可能忘记了)
三面结束后,没有告诉我结果,说是等HR通知。5分钟(可能不到)后,一个新的HR加了我的微信,说我三面过了,最后一轮是HR面,约了时间在10号。

HR面 2月10日14:00——14:15 (15分钟,是位小姐姐)

1、为什么投了后端
2、为什么转专业
3、平常怎么做项目
4、参加一些竞赛的目的
5、为什么实习,为什么来字节跳动
6、有什么职业规划
7、有没有其他在走的实习流程
总结:说是三到五个工作日会给答复。(有些问题我可能忘记了)

22条回帖

回帖
加载中...
话题 回帖

相关热帖

笔经面经近期热帖

近期精华帖

热门推荐