拿字节练手,过了!
星球里的一位录友第一次找实习,然后让我看简历把把关,我当时看了一下,感觉简历写的还真不错没啥毛病,就和他说:放心投。
话说上海这一波疫情,本来他也是想投小公司练练手,不过小公司都不招人,以至于他就直接投了字节。
结果还顺利拿到了offer,虽然是C++客户端岗位,但大家可以看看下面他的面经, 一二三面,问的问题一点都不简单。
C++ ,计算机基础,还有后端相关的内容都问了,也没有局限于客户端。
还有很多发散性问题,例如:
如果现在有远远多于线程的任务数量在等待处理你要怎么分析这个问题? 说一下我们现在面试我的摄像头采集到的视频信息是如何发送到你屏幕上的? udp不需要建立连接,那是不是所有人都可以向我发送数据?
这些问题其实都不太好回答,这位录友在下面也给出他当时的回答。
还有这位录友在HR面中 HR问的问题都很有代表性,基本校招和实习 都是这么问的,大家如果没有经历多HR面 可以好好看一看。
以下为他在知识星球里的分享,大家可以自我代入一下面试场景,如果以下这些问题问的是你,感觉能过不。
【前言】
不知道星球里有没有小伙伴比我更晚找实习然后更晚拿offer的,我大概是四月初开始准备投实习,然后四月三十接到了字节的面试邀请(字节对暑期和日常实习不太区分),面试了大概三个周通过。
很明显是要比别人晚了非常非常多,这里给星球中小伙伴的建议就是能早尽量早,一般找暑期都是二月三月就开始了,我的话还是有点慢热了。
这里感谢卡尔哥,四月中旬找卡尔哥看了一次简历,卡尔哥对我的简历表示了肯定在当时算是给我打了一剂强心针,然后去投了字节,最后也算是成功如愿进入大厂。
【个人情况】
本硕211,24届毕业生,非科班通信专业,现在研一。
无实习经历,有一点点硬件和人工智能的竞赛经历,去年八月份开始准备的算法题,到面试前题量六百出头,刷题中间偶尔准备一下计算机基础以及项目。
网络:计算机网络的话是一遍《网络是怎么连接的》、一遍《计算机网络》(谢希仁的那个,我本科的教材)还看了小林的图解网络。
操作系统:主要看的就是小林的图解系列外加一些博客。
数据库:主要看的是《MySql必知必会》以及《MySql45讲》
C++:看了《C++ Primer》、《Effective C++》、《明解C++》(这本书不太建议,过于基础只适合入门)。
项目:做的C++人手一个的WebServer和一个自己本科的一个C和C++混编的硬件项目。
当时准备还是按照后端准备的,但确实是投的太晚了,没什么坑位了,最后选择了客户端,这里还是要夸字节的效率真的高,从通电话到拿到录用通知大概就用了三个周。
下面就是面经的正式部分,我觉得答得不好的地方会在题目下面把我当时的思路写出来,欢迎小伙伴们一起讨论呀~
【一面】(1h6min)
自我介绍 项目介绍 Web服务器里怎么设计的IO复用 是否有做压测 请求是同时请求还是分开的 你觉得现在一般大厂使用的支持百万千万并发的服务器与你这个项目是一个概念吗 有没有了解过Nginx,Nginx里使用的连接模式是怎样的 项目里用了线程池,线程池怎么建立起来的,为什么要用线程池 那你从请求队列里取请求那不还是一个连接对应一个线程吗? 请求队列中请求的插入与取出的过程 如果请求量非常大,那从请求队列里取对于后面的请求是不是会有延迟 答得会有影响,但自己的项目里由于业务的读写内容不高所以不会有(给自己挖坑了,说自己的没有,面试官马上就开始设计场景了,无缝切换) 那假设有这样一个场景,有着百万并发,请求各不相同,按照你的这样做法会不会存在延迟的问题 答了使用更好的机器,提高线程数量(追问:线程数量应该如何设置,老八股答得很顺) 提出了对于各种请求进行分类,对不同的请求执行不同的策略(具体分析了计算密集型和IO密集型请求的区别) 追问:那一个IO密集型的请求,如果有缓存了,是不是就不需要IO读写了,那是不是就变成了计算密集型了,要如何去分类呢? 答:不会哈哈哈哈哈哈(这个时候觉得一面比较稳了,因为面试官说了一句:等你进来教你) 聊比赛,问最近一次的比赛,答得数学建模,然后面试官觉得这个项目不是很贴近软件,就又追问了其他比赛,聊了比较久一个人工智能的竞赛,问到了深度学习里用了什么网络模型,自己做了什么贡献、如何更新模型,怎么开展的,识别出错怎么办,如果遇到恶意攻击怎么办(说了一个自己的方案) 业余爱好,怎么拿的奖 强项、缺点(如何解决) 聊一下C++里面的智能指针吧 聊一下哈希表 详细介绍一下unordered_map 既然是用哈希函数,那么肯定有哈希冲突,遇到冲突怎么办,分析一下时间复杂度 讲一下https和http的区别 https为什么是安全的 https中传输会经过网关,为什么网关不能知道他们的密钥 答得非对称加密与对称加密相结合 后来被面试官换了个问法又问了一遍,被问懵了,其实还是非对称加密,自己阵脚真的不能乱 介绍一下深拷贝与浅拷贝 如果想让你用深拷贝拷贝一个字典,你怎么做 智力题:抛硬币,抛到正面就不抛了,抛到反面继续抛,问一百个人抛,最后正反面的比例 答得1:1,不知道标答(追问有没有可能给出具体公式,答的条件概率,公式没写出来) 以前面试过没有 答:没有,人生第一面(面试官笑:那挺好,字节每面都有编程题,来做一下,感受感受) 算法题:手写atoi函数 写的比较顺,ACM模式输入出了一点问题,后面自己发现了然后解决了,顺利通关
【二面】(1h24min)
自我介绍 聊竞赛 把我所有的竞赛全部问了一遍,感觉是看竞赛中的参与程度 Web服务器为什么要去关闭长时间没有请求的连接 客户端使用keep-alive不也可以控制连接时长吗 答得针对自己业务,主要是静态资源访问,然后时间一般都不长,所以用服务器主动断开比较好 然后如果客户端请求keep-alive的话服务器是支持长连接的 断开连接这个时间是怎么定的 高并发情况下,如果网络出现大面积波动,导致很多客户端下线了,但其实它们很快就会连接回来,断开连接就会很影响用户的体验,怎么解决? 问了下硬件项目,面试官搞过嵌入式的,聊了一下硬件 回归Web服务器项目,多进程、多线程的通信方式 为什么要设计内核态、用户态两种状态 说一下C++里面inline有什么用 CPU是怎么执行代码的 对CPU流水线有没有了解(指出我前一个问题没有说流水线) 答不了解 算法题:链表带进位的求和,每个链表的节点只有一位数字,然后对所有位求和返回一个新链表 顺利通关 面试官追问代码哪里可以优化,优化完,面试结束
巨无比感谢二面面试官,人超nice,不会的问题会给讲一下,面试体验+++++
【三面】(1h18min)
(没有自我介绍是我没想到的)
会经常写代码吗,学校内的课程、竞赛、项目讲一讲 熟悉汇编吗 对于字符编码有哪些了解 unicode和utf-8的区别 “Unicode是“字符集”,UTF-8 是“编码规则” 线程同步说一下 为什么会有线程同步的出现,从底层汇编的角度说一下 读写锁说一下,应用场景、原理 说一下线程池,详细说说你认为构建一个线程池最重要的部分 线程数量在运行中是一成不变的吗 多线程是怎么处理许多个任务一起到来的 EPOLL跟你怎么处理多个任务有关系吗? (这里是因为我上面啰嗦了,提了EPOLL,然后解释了一下,EPOLL不涉及任务处理,它做的是一个任务分发,使得一个线程可以处理分发多个请求) 如果现在有远远多于线程的任务数量在等待处理你要怎么分析这个问题? 首先判断这个请求数量远远多于线程是常态吗,如果是常态则先要考虑是不是线程数量设置有问题,然后判断机器是否能力不足以处理这些数据 假如说硬件软件都没有问题,那么考虑这个问题为什么会产生,是不是我们的高计算密集型任务太多了,如果说我们的请求任务比较复杂,那么考虑进行一个分类,将处理特别慢的请求作为一个特定类,将一些线程固定给他们使用,而不是所有线程都用来处理这种任务,因为既然很慢,那么慢1个和慢10个点区别就没有那么大了,将其他线程用来处理能够快速处理完的请求,这样子就保证了一个相对的处理效率 说一下缺页中断 说一下我们现在面试我的摄像头采集到的视频信息是如何发送到你屏幕上的 说一说那我这边是怎么寻址到你的ip的,你现在看到的自己的ip是我发送时填入的ip吗 了解NAT吗 udp不需要建立连接,那是不是所有人都可以向我发送数据 答得:是的,虽然网卡能够接受这些数据包,但是会判断这个udp包的ip地址是否接受,然后端口号对应的服务是否开启,开启的话对应的应用层应用也会判断这个包是否是有效的,因此不会出现数据包错乱的情况 对DNS劫持了解吗 怎么规避呢? 没答出来,就说了自动切换 面试官说去了解一下HTTPDNS 了解HTTP3吗,说一下HTTP1到HTTP3所有版本使用了哪些技术,相比上一代技术有哪些改进 数据库的一组操作,如果中间崩溃了数据会丢失吗 问了几个事务的场景:(答得不好,有数据库大佬可以说说自己的理解) 执行的过程中,数据库服务器死机了会丢吗 执行的过程中,数据库服务器断电了会丢吗,跟死机情况是否一样 执行的过程中,数据库服务中间崩溃了,但很快重启了,重启前后查询的结果是否相同 讲一讲C++里面的多态,怎么实现的 讲一讲C++的new、delete和malloc、free的区别 讲一讲C++中extern "C" 的作用 了解C++中编译时的优化吗 不了解……只说了O2级别优化很常用 说一下push_back() 和emplace_back() 的区别 算法题:一道DFS深搜加优化的题目 闲聊 印象最深的问题:如果我给你挂了,你接下来会去做什么
【HR面】(25min)
经过前三轮面试,说一下你个人的感受 对于这次面试的岗位,都做了哪些准备 参与过ACM竞赛吗 没参与过ACM竞赛的话,算法题方面是怎么准备的呢 第一个答了本科阶段有数据结构和算法的基础 然后老老实实说了针对题型在力扣上刷了一些题 那在力扣上应该刷了很多题了?具体刷了多少道? 是从什么时间开始准备这次面试的 你觉得你在这几轮面试中你的优势是什么,劣势是什么 面试完之后会复盘吗 为什么选择字节跳动 说一下职业规划,看到简历偏后端一些,是否会并不喜欢客户端的方向呢? 个人的优势与短板 你说擅长团队协作是因为自己带队作为负责人参与了很多比赛吗 说一下你带团队时会考虑哪些问题,一个团队的关键点是什么 大概什么时间能够到岗,实习多久 对于转正你有什么问题吗 对于工作的城市有要求吗 家里对于工作地点上有意见吗 进入到字节跳动团队后,你希望从你的mentor得到哪些帮助 当你遇到问题你会主动找他人问吗 有过压力很大时候吗? 是怎样克服这个压力 还有其他公司在面试吗 对于这边的团队有了解吗
反问:
技术团队的人员组成是什么样子的 offer结果什么时候能收到
可以在知识星球「精华」里找到原始帖子,也可以去找他一起交流学习。
最后欢迎大家加入代码随想录知识星球,这里有很多优秀的人,有很多精彩的事!
点击下方【阅读原文】,了解星球详情