字节跳动日常实习-已oc
问题可能有些遗漏,整体大概是这样
一面 1h
- 自我介绍
- 浏览器输入URL会发生什么
- 计网五层模型,网络层作用,路由器位于那一层,网络层协议介绍几个
- 三次握手介绍,第二次握手为什么SYN要置为1
- 四次挥手Time-wait的作用
- TCP是怎么实现可靠传输的
- 操作系统进程与线程的区别
- 死锁是怎么形成的,怎么破坏
- 介绍下自旋锁和互斥锁,可重入锁和不可重入锁,公平锁和非公平锁的区别
- 介绍下项目(一个并发系统),做了哪些优化
- 数据库学过吗,介绍下Mysql innodb的索引数据结构
- B树和B+树的区别,一般哪个层数更高?
- JAVA中Hashmap的结构(PS:这里是想通过Hash冲突引出红黑树的,我直接说最近没复习JAVA,主要看的go,就直接问红黑树了)
- 红黑树介绍,与B+树相比哪个索引更快
我是假定外存的场景,B+树IO更少所以更快,面试官想让我答内存的场景,我就说红黑树最好O(1),B+树都是O(logn),红黑树可能更快,具体是什么我也不清楚 - 算法题:K个一组翻转链表
- 反问
二面 40min
- 自我介绍
- 项目介绍(同上),这里我就顺着一面做了哪些优化讲了
- CAS原语的实现原理
- 看你项目是单机的,如果要拓展成分布式应该怎么考虑
面试官说肯定需要做数据库,数据不能存内存,在这个基础上进一步展开。我就说了两方面,单一的业务ID生成,读写分离与负载均衡 - 单一业务ID有了解哪些算法吗
答:UUID、snowflake和美团leaf算法,自己试过snowflake - snowflake具体介绍
- snowflake有什么缺点
复盘感觉应该是想问snowflake如果单机时间出错导致业务ID重复,当时没想到说的是每毫秒最多生成4096个ID。面试官说每毫秒最多生成4096个ID是单机下的,snowflake还有机器号,多机是没有这个限制的,连忙解释说自己只试过单机的。 - 那单机下怎么突破4096这个限制?
压缩时间戳或者机器号的位数给序列号 - JAVA的static关键词
答最近在看go,只能凭印象答一下,面试官说语言不是问题,那就问你go吧 - GO的GMP模型
- 为什么要有P
- GO的内存分配
- GO的内存回收,不问三色法,而是说标记完成后,已经确定要回收内存块了,这个内存怎么回收
- 算法题:从前序遍历和中序遍历中重建二叉树,排序链表,还让分析了时间复杂度
- 反问
三面 40min
自我介绍
看你简历项目写了很多,介绍一下你觉得做的最好的项目,同上
围绕项目问的,为什么用位图做数据压缩,考虑过用树吗
项目当时没有考虑负载均衡,如果现在让你去做,你会怎么设计
这里面试官给了一个场景,一步一步引导我去思考的,因为面试比较紧张后面才get到面试官的意思,复盘的时候感觉问题本身不是很难CAS原语的原理,操作系统是怎么保证缓存一致性的
CAS原语一定比锁的性能好吗
假如让你设计一个RPC协议,你会怎么设计
直接答不清楚RPC。。了解过中间件吗
就学过一点Redis开始问操作系统,Linux同步IO和异步IO,阻塞IO和非阻塞IO
操作系统fork进程的具体流程
父进程的文件描述符和子进程共享吗
文件描述符具体是什么东西
从task_struct和linux的文件索引两方面讲的
Linux打开文件和windows打开文件有什么不同
算法题:删除有序数组中的重复元素,两个一组反转链表
反问
hr面 30min
- 自我介绍
- 介绍下项目的背景和目的
- 从项目中学到了什么
- 介绍下竞赛的经历
- 队伍是如何协作的
- 你有提到过队伍有时会有意见分歧,这个时候怎么解决
- 是怎么协调学习和竞赛的时间的
- 项目和竞赛这种课外的内容是如何进行学习的
- 为什么现在要来实习
- 为什么要来字节
- 有考虑过未来的工作方向吗,以后的计划是什么
- 大学期间有佩服的人吗,身上有什么特质吸引你
- 之前没有过实习的经历,你觉得你实习可能遇到的困难是什么,如何解决
- 相比其他人,你觉得你的最大优势是什么
- 反问
小结
- 字节的面试整体来说比较舒服,面试官会引导你去解答问题,有不会的及时说面试官不会一直追问,就是日常实习都这么多轮有点麻
- 三轮技术面聊项目都挺多的,八股主要是在一面问的,比我想象的要简单很多。三面只问了一些,但特别细,这也算是压力比较大的一面。
- 字节的算法是在字节自己的在线IDE做的,比较简陋,给面试官看样例即可不用提交。我面到的基本都是原题。但是得自己处理输入输出,我一面的时候处理不熟练,反问的时候被面试官吐槽调代码有点慢了(当时是饭点了)
- 字节的效率特别高,我中午投的简历下午就直接打电话约面试了,从投简历到拿offer花了11天,还是中航被封的情况下