北航计算机大三,这学期打算找个实习,看了一圈大厂发现字节实习生给的薪资最高,福利也挺不错的,就通过内推投了字节的后端实习,很快就收到了面试邀约,从一面到收到offer一共6天,以下是本次面试的面经(部分题目可能记不太清了)
一面:
上来先是自我介绍,大概介绍了一下学校年级所学课程和做过的项目,然后开始提问
- 面试官先是让我从做过的项目里挑一个来讲,我就挑了之前小学期的一个Spring项目
- “用户登录状态如何判断“ --我用的是Cookie
- “Cookie里包含哪些内容”–用户名和经过加密的用户密码以及登录状态
- “那么要是用户伪造Cookie呢,有没有改进方法“–用Session
- “如何解决跨域问题” --不是很清楚
接下来问的是计算机网络 - http和https的区别
- https加密过程
- https证书合法性校验方法
- 证书的数字签名是用什么加密的?-这里我回答错了,答案应该是机构的私钥
- 说一下tcp的拥塞控制
- tcp连接建立过程(三次握手)
- 发送方和接收方的初始序列号是一样的吗
- 为什么不一样?–这里把我难住了,我一开始说是防止之前同一端口的连接的报文停留在网络中刚刚到达使得服务端接收到错误的报文,面试官说不对,面试结束后也没有搜到合适的答案,查了一堆资料后猜测可能是为了防止第三方截获报文后伪装成客户端或者服务端与另一方建立连接进行通信,还有一种说法就是防止dos攻击
- GET和POST的区别
- http有哪些状态码,具体的意义?–我说2xx是成功,3xx是重定向,4xx是客户端错误,5xx是服务端错误,然后具体的状态码只说出了200是成功,404是页面未找到,403是forbidden,500是服务器处理请求错误,其他的都不太清楚,面试官也没继续问
然后是数据库相关的知识,这部分答的不是很好
- Mysql事务隔离级别有哪些? --记不得了
- Mysql有哪些锁?–我答的读写锁,包括互斥锁和共享锁,其实还应该加上意向锁
- Mysql有哪些封锁协议 --不知道
面试官看出我数据库掌握的不是很好,就没怎么问数据库了,接下来问了我一些操作系统的知识
- 线程和进程的区别,多线程和多进程各自的优势
- 内存管理机制,页表项如何映射到物理地址
- 死锁的条件和解决方法
- 编译的过程
- 页面置换算法(LRU,LFU)
- 让你实现LRU你会用什么数据结构
还问了一个git的问题:
- merge和rebase的作用区别 --我说都是合并分支,然后具体的区别不是很清楚
接下来是算法题
第一题:Leetcode628.三个数的最大乘积
leetcode上的简单题,我之前也做过,一开始用的是先排序再计算最大乘积,复杂度是nlogn,面试官问我有没有更好的算法,我想了想很快给出了复杂度为n的解法。面试官也挺满意,很快进入了下一题
第二题:Leetcode25.K个一组反转链表
这题我也做过,很快说出了思路,但在实现的时候一些细节部分没处理好,最后链表中出现了环,de了十来分钟bug也没de出来,面试官说时间差不多了,今天就到这里,让我回去好好想想,最后问我有什么要问的,我问了面试岗位的技术栈
第一面面完不到一个小时,hr打电话来告诉我第一面通过了,并约了二面的时间,我约的第二天下午
二面:
上来还是先自我介绍
然后面试官问了我简历中一个Golang写的聊天室项目
- 有用到框架吗
- 聊天室功能怎么实现的
- 用户加入一个聊天室历史消息推送怎么实现的
- 私聊功能怎么实现的
- 图片发送功能怎么实现的
- 历史记录保存在哪
接着问了计算机网络
- 网络五层结构
- 每层都有哪些协议
- tcp的拥塞控制(一面考过了,二面又考了一次)
- tcp连接释放过程
- 链路层和网络层各自的作用
- 网络通信中怎么区分进程
- tcp和udp的区别
- 数据报文在哪里被解析 --我一开始说在交换机和路由器中会被拆包和封装,然后面试官提示说是客户端的哪个部分,我马上想到了是网卡
- 进程怎么从网卡获取网络数据
- 中断的种类
然后问了Java的一些问题
- Java的线程池了解吗 --我说通过一个ThreadPoolExecutor类创建线程池,线程池里包括核心线程和非核心线程,然后就不知道了,面试官也没继续问
- HashMap的底层实现
- 并发情况下可能出现的异常
- 迭代过程中修改原集合会发生什么问题?如何解决?
- JVM内存模型,垃圾回收机制
- 什么是内存泄露?
- 什么时候会发生内存泄露?
然后问了我关于快速排序的几个问题:
- 快排的原理和过程
- 时间复杂度
- 最坏情况时间复杂度
- 优化
接着直接就开始撕算法题了,有点出乎意料
第一题:Leetcode102.二叉树的层序遍历
简单题,用一个队列,几分钟搞定
面试官看起来挺满意,又出了第二题
第二题:Leetcode152.乘积最大子数组
也挺简单的,想了十几秒说用动态规划做,然后很快写完测试也通过,面试官问能不能优化一下空间复杂度,我想了想说可以把动态规划的数组简化为一个max变量和一个min变量,这样空间复杂度就从O(n)变成了O(1),面试官点点头说今天的面试就到这,然后问我有什么想问的,我问了关于面试的岗位的工作内容
二面面完不久就接到hr的电话说面试通过了,本来约的当天下午六点的hr面,结果面试官临时有事,改成第二天下午四点
HR面:
开头依然是熟悉的自我介绍,然后就是闲聊
- 为什么想来字节跳动
- 打算读研吗
- 实习时间能保证吗,打算实习多久?
- 说说你的优点和缺点
- 手上还有其他家的offer吗
- 对之前两轮面试的自我评价
- 职业规划
然后问我有什么想问的,我问了这些问题 - 关于工作时间和加班问题
- 大小周
- 转正的成功率和条件
- 工作的具体内容
最后hr说我的表现挺不错的,说和部门那边沟通一下,很快给我答复
当天晚上收到hr通知说面试通过,由于第二天是周六,因此周一才收到offer,和hr谈好下一周周一入职
大学的第一份实习,还是挺期待的