2020暑期/日常实习面经 - 字节跳动

基本情况:

本人帝都某211研二非科班在读,2.5年学制。 非科班,自学前端不到一年,从2月底开始复习准备暑期实习,3月底开始投递,经历了腾讯、阿里、字节、百度的前端实习生面试,简要情况:

1. 腾讯:两轮被刷kpi(投递较晚,一定要尽快投递!!另外diss部分腾讯面试官的面试态度,理由有很多,这里不再多说,经历过的小伙伴都懂)。

2. 阿里:流程了一个月,至今还在“面试中”,一直没有三面,问内推人都无法得知二面结果。多个同部门面试完HR的小伙伴至今没接到OC,还是因为自己太菜。(部门选择很重要,多打听打听,不要海投、盲投!!!)

3. 百度:半天完成所有技术三面,问题比较偏基础,要在自我介绍和简历中体现长处,引导面试官去深挖,挖到最后可能会发现面试官也没你了解的深。五一假期接到OC电话,百度APP移动研发部门,toC业务,部门挺核心,据说日常加班11点。

4. 字节:面试流程快,面试体验极佳,在字节的面试中,才能感受到面试也可是“技术交流”,从面试体验和面试水平也可以看出各厂的企业文化和技术水平。5.6日前给结果,Data-广告部门,toB业务,给广告商提供平台。

字节的面试印象比较深,其他厂的面经没有太大的参考价值,也就是基础+项目,跟牛客的其他暑期实习面经贴差不多,在这里就直接重点介绍下字节的面试过程、部分题目和面试特点,供想去字节的前端小伙伴参考,如有言论不当,还请见谅。

4-15日字节约面试:

本来自己准备春招暑期实习面试就晚,4月中旬才在牛客上找人内推了日常实习(字节的暑期实习和日常实习本质相同,区别不大),不抱任何希望,甚至都想撤回投递。突然接到HR小姐姐打来电话约面试时间,表示很懵,都不知道是之前投的哪个,本来约当时的周四/周五面试,HR小姐姐直接跟我商量约下周一视频面,也是想让我多点时间准备,甚至还给我发前端实习生面试重点(虽然之后也没用上),体验非常nice,对我来说也很关键,给HR小姐姐比小心心。

4-20日字节一面(1h20min):

Data架构组的一个帅气时尚的小哥(莫名觉得像UI),是在家里远程面试的。

1. 自我介绍:

答: 一定要事先准备好,总时长不要超过两分钟。基本信息说明学校和学历就行了,重点是展现你的优势,如学业成绩、岗位相关学校经历、岗位相关大赛经历、项目经历、实习经历、个人博客等。别说你现在感觉自己没有优势,仔细挖掘肯定有,如果真的没有,那就停止你的“牛客面经大厂速成之旅”,老老实实的打好基础、找项目练手,或者找个难度小点的小厂实习,去增加你的优势。

2. webpack打包过程:

答:webpack原理相关的基本操作,重点在于理解webpack的意义和作用。

3. loader和plugin区别:

答:我从二者的差别,比如本质、作用时间点、作用特点、执行顺序等等进行了阐述。

4. 如何写一个loader / plugin:

答:我根据上一问的回答进行展开,详述了二者的作用过程,然后说了一下二者的实现思路,然后就是两个人一起讨论了loader的实现过程对,没错就是一起讨论,氛围极好,像跟一个学长讨论技术问题一样,自己的热情也被调动了,让面试氛围不会那么紧张。

5. 详细说一下babel的工作过程:

答:代码拆分,token流,AST解析树,巴拉巴拉巴拉。。。因为对ast解析了解不够深入,没有展开回答,但面试官点点头,说他已经得到他想听到的答案了。

6. 讲一下React的虚拟DOM对象和虚拟DOM:

答:我从React的渲染过程开始回答,从JSX讲到Fiber,巴拉巴拉巴拉。。。。。自己对日常整理的React原理相关的问题进行了“线性”的梳理,不是简单的一问一答,所以能比较清晰明确的阐述各个过程(React渲染过程、合成事件触发过程、批处理机制过程等),且各React原理之间是互通的,总能在相关问题上找到关联处进行拓展/深入阐述,从而体现自己对原理的理解,而不是死记硬背,建议这块通过看源码辅助记忆,这点很重要,也很加分,因为我从面试官的表情里看到了赞许。

7. 说一下虚拟DOM对象有哪些属性值?

答:一开始大脑突然短路,只记得$$typeof(React元素类型标记、Symbol值、防止XSS攻击),后来巴拉巴拉typeof的作用的时候想起来key值、type值等等等,然后对他们的作用进行了阐述。这也得益于面试官营造的极好的面试氛围,如果过于紧张,很可能是想不起来其他属性的。

8. 代码题:

① 根据要求写Promise异步代码 / promise 应用层考察,判断打印顺序 (二选一)

② 二叉树遍历

③ 二叉树最大深度

9. 反问:对非科班转行学习前端有什么建议?对自己在这行缺乏自信,间歇性怀疑自己

4-20日字节二面(1h40min):

穿着格子衫有绝对气场的大佬,但却“和蔼可亲”,也是在家里远程面试的。


1. 自我介绍

2. 讲一下在公司实习的某个项目,做了什么重要的事:

答:解决了几个贼坑的bug(涉及快应用框架底层渲染)、webpack配置优化(10s→2s)、公共组件封装/优化

3. 讲一下怎么解决项目中解决的最大问题:

答:开发、发现bug、debug、解决bug、找原因、与同事沟通、写复现Demo、记录总结

4.在项目中做了哪些webpack配置优化:

答:css压缩、图片压缩、webpack缓存等等,因实习项目比较小,也都是比较简单的处理。

5. loader与plugins的区别,第二次被问:

答:这次把整个webpack的打包过程说了一遍,从Complier编译对象的初始化到文件列表输出,在中间穿插了loader和plugins的一些要点,webpack的API,发布订阅,依赖关系图等等。(面试官:嗯,这方面没问题,那就接着往下)

6. 为什么转行干前端?

答:对编程的热爱 + 个人价值观 + 研究生阶段的机缘巧合 + 师兄影响

7. 说一下项目中的“登录校验”过程

答:cookie/session这一套

8. 无cookie的“登录校验”怎么实现?

答:一开始以为出题的目的是考察cookie导致的一系列安全问题,所以说了token、localStorage、axios请求/响应拦截等等。后来才明白面试官的重点是“不使用任何存储方式来实现登录校验”,然后我说可以通过url传递。 然后面试官开始说JWT方案,Refresh Token ----> OAuth 2.0 (OAuth认证只听过,没接触过,二面完后立马补上,推荐阮一峰老师的入门博客)

9. 代码题:

答:也是一个场景设计题,面试官自己根据Node中的某个常见处理延伸的,让我用非伪代码实现,涉及异步 + 柯里化。

10. 反问:对非科班学习前端的建议?对我个人的建议?


4-29日字节三面(30min)+ HR面(30min):

发量茂盛且发型柔顺飘逸、知识的广度和深度都是绝对的、面试过程中学到很多技术和非技术上的东西。

1. 快应用的特点(之前公司实习的时候用的技术栈主要是快应用)

2. 快应用和小程序在渲染上的区别

3. 详细说一下快应用的native渲染,小程序的webview渲染 ,是如何实现的

4. 从产品角度分析快应用和小程序

5. 简历中提到了three.js,都做了些啥

6. redux流程

7. redux中dispatch原理

8. 如何实现一个redux

9. 反问:对非科班学习前端的建议?对我个人的建议?



HR面就是常见问题了,比如为什么转行,自己的优缺点,老师和同学对你是怎么评价的,最有成就的一件事,为什么想来字节跳动,你希望字节跳动能带给你什么。。。我希望大家不要也不必事先准备这些问题,HR都不是好糊弄的,不是你提前背一背喊喊口号就能过去的,而且每个人的情况也大有不同,重点还是表达出自己的真情实感吧,思路清晰就行。

总结:

1. 一面上来就问原理,基础问题基本不问,不过这也都是现在大厂前端面试的基操了,相信大家也见怪不怪了。但是不是为了考察原理而问你原理,而是考察你对它的深度程度,对整体设计思路的一个把控,这都是没办法提前准备的,面试中的很多话都是平时学习过程中的一些思考,是需要脱离原理本身,对其设计有个宏观的视角和认识。

2. 二三面的问题就有时候在天上,比如考察你的产品思维;有时候在地上,比如直接问redux中的某个api的实现。

3. 根据个人情况/经历的不同,面试问题的差异就大,所以一定一定一定要重视简历和自我介绍。比如因为自我介绍中提到了看过react、hooks、redux等源码,说构建过程的时候也把发现的redux中的一些问题和解决方案说了,所以才更深入的问我如何实现一个redux。

4. 我觉得做得好的地方就是:对基础知识的笔记积累 + 对原理、源码、项目(无论大小)的换个人认识和深刻理解 + 面试技巧。

心得:

己当初选择入坑,除了导师选择上的机缘巧合和亲师兄影响,最主要原因还是对编程的热爱和个人价值观,从大二开始接触编程,通过单片机入门,跟着老师做过大创项目,毕设做了个智能车,都取得了不错的成绩,感受到了编程带来的成就感和满足感,这是其他行业很难给予的,而且互联网行业在现阶段的创新力和活力都是远超过传统行业,自己也想在年轻的时候拼一把吧,不给自己留遗憾。所以才做了这个偏赌博性质、不顾后果的选择,甚至就算是现在我都不知道我当初所做的选择是不是真的正确。我是从去年5月开始集中学习的,之前课业多,都是零碎时间看看书和视频,然后在9.10月份找实习,拿到了爱奇艺、百度、**的offer,最后选择了有成熟前端团队的**实习了三个月,在实习过程中,真切的认识到自己与科班差距,每天在完成自己的任务之后,就自己充电,日常10点以后出公司,经常做最后一班地铁,拼了命的想弥补差距,因为忍不了自己这么的菜。就算是在准备暑期实习面试的过程中,2 7 7的复习模式也不能避免在一开始的不顺利,有过一段低谷期,开始怀疑自己,怀疑自己当初选择的正确性,怀疑自己的学习能力,怀疑自己适不适合干这个,怀疑自己是否足够热爱。。。但尽管这么难,尽管我想过放弃,但我还是选择了继续坚持下去,骨子里的不服输吧。再次特别感激字节,就是在低估期的时候接到了字节的面试邀请,在跟字节面试官的交流过程中,感受到了他们对我的肯定,让我有了一点自信和再坚持一下的理由。

摸着良心说,我跟大多数前端小菜一样,想都不敢想能有啥胆去面字节,毕竟是年轻程序员成长的天堂,当初也是各个厂海投加上内推人的极力劝说才投的,真是没想到最后能顺利通过三面,或许这真的就是“黎明前的黑暗”吧。这条路上的人太多,优秀的人大把有,如果你想要得到,就得付出比别人更多的努力,承受比别人更多的东西。最后写下这个“心得”,也是希望给同样遇到困难、怀疑自己的小伙伴们打个气,因为我经历过,对于长期的压力和困难来说,什么鸡汤都没用,靠的就是早已麻木的坚持。同样在奋斗路上的小伙伴们,尤其是非科班的,只要你认定了这条路,明确了这个目标,请务必一定要坚持到底,再多坚持一点点或许就能看到光了。

有交流意向或者相关疑问的小伙伴欢迎私信我交流,有问必答。



最后:

第一次写牛客,也是个回馈,从5.5日写到了5.6日,可见真心。所以在此祈求一波,希望今天能接到字节爸爸的oc电话!!!



#字节跳动实习##字节跳动##实习##前端工程师##面经#
全部评论
还愿,已oc,offer立马到邮箱。后边的美团也不打算面了。 历经两个月,无数次自我怀疑,成功挺过“黎明前的黑暗”。 选择字节最重要的原因还是面试官对我的肯定吧。 新的征途开始了,虽然有很多未知和压力,但还是想挑战下自己,肉蛋葱鸡!!!! 小伙伴们加油冲啊!!!!
6 回复 分享
发布于 2020-05-07 13:42
自顶。顶。。顶。。。顶。。。 再求一波offer,字节爸爸快给我打电话吧!!!
5 回复 分享
发布于 2020-05-06 01:27
想问以下你是怎么准备的?我也是在自己准备前端,看你的面试问题真的都很细节, 我虽然已经看了很多东西了, 但是感觉还是漏掉了很多。
1 回复 分享
发布于 2020-05-08 11:14
对于长期的压力和困难来说,什么鸡汤都没用,靠的是早已麻木的坚持。 这句话,真不错,深有同感!
1 回复 分享
发布于 2021-03-19 00:56
太强了 我刚学前端还不到半年。我面的字节一二面一共2小时20分钟吧 基本是基础加上做题 两面做了七道算法加手写js 还好都做出来了了。 请问你面试的时候做算法了吗。 后天三面感觉我过不了,源码都没怎么研究 不知道现在是去补源码还是复习基础
点赞 回复 分享
发布于 2020-05-06 05:29
我字节29号三面完的,希望今天能hr面
点赞 回复 分享
发布于 2020-05-06 08:28
希望今天下午自己三面顺利!!!蹭蹭好运!!!
点赞 回复 分享
发布于 2020-05-06 10:50
点赞 回复 分享
发布于 2020-05-06 11:43
三面结束后如果被刷了会有人告知吗?还是直接就没人理了🙁
点赞 回复 分享
发布于 2020-05-08 19:06
许愿明天hr面,沾沾喜气
点赞 回复 分享
发布于 2020-05-14 22:14
三面还会手撕算法题吗?
点赞 回复 分享
发布于 2020-05-14 22:39
呜呜呜,楼主太强啦,我后天三面,现在很慌,不知道该复习啥
点赞 回复 分享
发布于 2020-05-18 23:08
这么难吗,还是日常实习。。我看官网上的要求好像没那么高。。https://jobs.bytedance.com/campus/position/7067055406754269476/detail?referral_code=GC48H2Z
点赞 回复 分享
发布于 2022-03-11 09:02
字节跳动企业应用前端实习内推:https://job.toutiao.com/s/N2m8hSD,目前部门hc多多,面试流程快,已内推两名春招同学。校招:https://jobs.bytedance.com/campus/position/7057014489909299487/detail,我的内推码:G1SWS8D
点赞 回复 分享
发布于 2022-03-14 20:51

相关推荐

2024-11-10 17:45
同济大学 golang
这是我投递的岗位仍然是后端开发,但是我的简历还是转到了数开的那里紧急学习了一下关于数开的一些技术栈字节的面试官很好很好 是我太菜了呜呜  大部分时间在问项目 并且很认真地引导我思考  1. 先问项目  简单介绍一下项目2. 介绍一下分布式锁  为什么要使用分布式锁 为了解决什么问题用于分布式系统中保证资源的独占性  避免多个进程同时修改同一资源  3. 分布式锁怎么实现的  1. Redis  setnx  互斥命令  只用setnx xxx的时候才会成功  2. 利用过期时间  如果出现宕机的情况也会自动释放  3. 同一个线程无法多次获得同一把锁    4. 获取锁只尝试一次就返回false  没有重试机制  5. 锁超时释放虽然可以避免死锁   但如果是业务执行耗时较长  也会导致锁释放问题  6. Redisson 自动续期的机制 来避免锁的误释放问题   看门狗机制    1. 自动会为锁续期  直到业务逻辑执行完成为止    2. RedLock算法是一种基于多个redis实例的分布式锁机制    只有大多数节点成功枷锁  才认为锁被成功获取    3. 重入锁      1. 同一个线程可以多次获取同一把锁      2. 锁计数器记录了获取锁的次数      4. 公平锁      1. 按照请求的顺序来获取锁  类似于排队机制  需要保证请求顺序   而不是像非公平锁那样可以随机抢占资源      2. 性能上会有所损失4. 在这个项目中  你面对的最大的难题是什么高并发下数据一致性  性能优化  缓存设计   解决分布式环境中的一致性和延迟问题5. 你承担的角色是怎么样的  1. 开发工程师  系统架构设计  核心功能开发  技术选型6. 你的项目的数据链路结构会是怎样的  1. 用户请求  负载均衡分发到应用服务器   通过消息队列分发任务   再到数据库存储   通过缓存和搜索引擎加速访问7. 首页为什么要缓存  是静态页面还是动态页面 为什么要缓存  为什么之前那么慢  1. 减少数据库负载和提升响应速度  8. 你的数据埋点的整个数据链路是怎么做的9. 会考虑性别 校区的影响吗10. Kafka 是如何保证高容错的  1. 数据存储    1. 日志文件    内存提高读写速度  磁盘负责持久化操作    2. 分段  清理机制  处理过期信息  2. 消息分区    1. 每个分区都是一个有序的消息序列   分区使得消息可以被消费者并行消费  提高了并行量  3. 索引机制    1. 方便消息的快速查找  4. 高可用性    1. 创建数据副本  5. 顺序与一致性  6. 缓存与流量控制机制    1. 信用机制  7. 分布式协调服务    1. zookeeper来管理节点状态   分区分配   故障监测  8. 消息消费机制    1. 是主动推动 还是被动拉取  9. 事务机制  10. 错误恢复和重试机制  11. 底层优化    1. Kafka  zookeeper    2. Rabbitmq amqp协议  使用内存和磁盘存储信息  11. 再问问技术方面12. Mysql 事务的隔离级别是什么13. 什么会发生幻读14. 如何避免幻读  1. 可重复读结合MVCC机制 实现  或者使用表级锁来避免幻读15. redis的list底层是怎么样实现的  1. 双向链表和压缩列表实现   提供高效的插入和删除操作紧凑的存储:元素之间没有额外的指针,每个元素之间是紧密相连的,节省了空间。  多种编码方式:压缩列表中的元素会根据内容的类型和大小选择最优的编码方式。比如,整数可以用更少的字节表示,小的字符串也会用更紧凑的格式存储。  双向遍历:每个元素保存前一个元素的长度,使得压缩列表支持双向遍历,从头部或尾部都可以遍历整个列表。  2. 与列表的元素个数有关  512个  每一个的字节都小于64  3. 3.2版本之后 变成了 跳跃表  4. 消息队列(但是有两个问题:1.生产者需要自行实现全局唯一 ID;2.不能以消  费组形式消费数据)  5. 有序单链表的一种改进  查询、插入、删除也是O(logN)的时间复杂度。  那如果加二级索引呢?如下图所示,查找路径:1、7、9、10。是不是找 10 的效率更高了?这就是跳表的思想,用“空间换时间”,通过给链表建立索引,提高了查找的效率。16. Hash类型底层实现是怎样的  1. 缓存对象  购物车等  2. 压缩列表或者哈希表实现的  3. 现在使用listpack   为了节省空间,它采用了多种编码方式来表示不同长度的整型和字符串17. Set 类型  1. 哈希表  整数集合  2. 小于512  使用整数集合  大于使用 哈希表18. Zset实现原理  1. 排序场景  2. 有序集合 元素小于128个  元素的值小于64字节时候  使用压缩列表  3. 否则使用  跳跃表  和  哈希表  4. 19. redis的持久化了解过吗  1. AOF日志  2. RDB快照20. redis为什么是单线程 1. 「接收客户端请求->解析请求 ->进行数据读写等操作->发生数据给客户端」这个过程是由一个线程(主线程)  可以避免了多线程之间的竞争,省去了多线程切换带来的时间和性能上的开销,而且也不会导致死锁问题。  2. 后台线程相当于一个消费者,生产者把耗时任务丢到任务队列中,消费者(BIO)不停轮询这个队列,拿出任务就去执行对应的方法即可。  3. CPU 并不是制约 Redis 性能表现的瓶颈所在,更多情况下是受到内存大小和网络I/O的限制  4. 使用了单线程后,可维护性高,多线程模型虽然在某些方面表现优异,但是它却引入了程序执行顺序的不确定性,带来了并发读写的一系列问题,增加了系统复杂度、同时可能存在线程切换、甚至加锁解锁、死锁造成的性能损耗21. spark操作过吗  1. 数据处理  计算 模型训练22. redis和mysql如何保证数据的一致性的  1. 事务   消息队列  延迟双删除  数据同步脚本  2. 更新数据的时候 直接删除缓存    3. 23. 先读还是先存  1. 优先读取缓存  缓存未命中时读取数据库并更新缓存24. mysql的悲观锁 乐观锁  1. 悲观锁  直接加锁  2. 乐观锁  版本号等方式控制25. mysql有哪些锁  1. 行级锁  表级锁  全局锁  共享锁  排他锁  意向锁  保证数据一致性和并发控制26. mvcc是乐观锁实现 还是悲观锁实现  1. 乐观锁  通过记录数据的多个版本来实现隔离级别 避免加锁带来的性能影响 27. 幻读问题如何解决  1. InnoDB 的 MVCC 结合快照读和间隙锁,使得在 REPEATABLE READ 隔离级别下也可以避免幻读。28. Hive sql题   取出连续三天一样的数据id  1. 窗口函数但第一时间想到的方法被认为会有一些问题  被看出来了29. MySQL是怎么保证原子性的?  1. 事务的原子性就是:一个事物要么全部执行成功,要么全部执行失败。MySQL 主要是利用 undo log,也就是回滚日志来实现原子性。  2. 平常我们在对数据进行增删改时,InnoDB 除了会记录 redo log,还会将更新的数据记录写进 undo log 中。当事务出现异常,执行失败的时候,就需要利用 undo log 中的信息将数据回滚到修改之前的版本  3. undo log:  4. 作用包括:    - 提供回滚(行里面有一个roll point指向undo log该行修改前的信息)保证原子性!    - MVCC(undo log版本链)  - 与redo log 的区别:  redo log: 记录的是物理日志,记录事务中修改的信息  保证事务的持久性   redo log   数据库崩溃时的数据恢复   undo log: 记录的是逻辑日志,记录修改前的信息    保证事务的原子性   事务的原子性就是:一个事物要么全部执行成功,要么全部执行失败。MySQL 主要是利用 undo log,也就是回滚日志来实现原子性。30. Binlog是什么  1. 日志文件31. 编程题  字符串按照z字输出 javaZ 字形输出指的是将字符串按行间交替对齐,按行存储,然后逐行输出。可以用一个二维数组来模拟“Z”字形排列,或用指针上下移动实现 zigzag字符串操作忘记了  所以被认为基础不牢 确实 刷题刷太少了#牛客创作赏金赛##字节#复盘:项目其实是我在一个月内紧急编出来的一个项目 自己并没有做很多亮点的地方 但是又必须得写一些亮点的地方  所以被拷打的很凶 基础不牢就很麻烦  现在想的是又需要沉淀一下  也需要可以更好的把技术真正的做好
查看30道真题和解析 牛客创作赏金赛
点赞 评论 收藏
分享
2024-11-20 11:45
已编辑
门头沟学院 Java
快手 电商后端 n+2,房补2k*12,一般4个月年终,公积金12
点赞 评论 收藏
分享
评论
40
167
分享
牛客网
牛客企业服务