字节跳动前端实习面经-3(一二面)

年前又面了一次字节跳动,不过还是凉了。趁着过年,把面经贴上来,供大家参考。

部门:上海-广告创意中心

一面(1月22日)
自我介绍
项目
项目有哪些难点
现在在做什么项目,介绍一下
URL输入以后发生了什么
script标签上的 async 和 defer 分别有什么作用
为什么JS执行的时候要阻塞HTML解析
HTTP2有了解吗
HTTPS有了解吗
TCP UDP的区别
XSS CSRF 有了解吗
事件委托、事件冒泡、事件捕获
手写事件委托
手写发布订阅 EventEmitter
CSS动画了解吗
JS如何实现动画
两个链表找相交节点
cookie和session了解吗,session有哪些存储方式
微信登录怎么实现
小程序的原理
看你写过爬虫,爬虫是怎么写的,数据存在哪里,怎么导出
NodeJS express koa 了解吗

手写事件委托的时候,对浏览器的API还是不够熟悉,思路基本上能想到,但是答案不完全正确。
两个链表找相交节点那道题我用了一个常规的双指针的做法,即每个链表上的指针走到尾以后,自动走到另一个链表的头,如此往复,如果有相交节点的话,两个指针必相遇。但是面试官说这个解法不够好。建议大家刷题的时候还是看看最优解法,我之前刷题的时候是解出来就算过了,看来还是要多下点功夫,更进一步。
有关「script标签上的 async 和 defer 分别有什么作用」那道题我还是存在疑问。我的回答是,没有 async 和 defer 的 script,加载和执行时都阻塞 DOM 的解析。带 async 的 script,加载的时候不阻塞 DOM 的解析,执行的时候阻塞 DOM 的解析。带 defer 的 script,加载的时候不阻塞 DOM 的解析,并且在 DOM 解析完成后才执行,所以也不阻塞 DOM 的解析。但是面试官说我的理解是错的。不知道有没有懂哥懂的。

二面(1月26日)
自我介绍
聊了很久的项目
setInterval 的细节
Promise 的细节

这次二面是被问及知识点最少的一次,大约三分之二的时间在聊项目,最后一点时间出了两个题。项目部分其实比较好发挥,因为都是自己做过的东西,问了这么多项目的细节可见面试官也是给了我不少机会的。但是最后 setInterval 的执行机制和 Promise 回答得实在有点拉胯,所以这次二面以后还是没了三面。
setInterval 的话面试官是给了几个 case,比如 set 一个 Interval 多少毫秒的,再 set 一个 Timeout 多少毫秒的,重复设置,当中有重叠,问他们的行为。这个题目具体的记不清了,当时也没答对。现在再看这倒题的话其实只要记住,setTimeout 和 setInterval 是在相应的时间把任务添加到任务队列,但不能保证它立即执行。记住这个点应该就能够解决这类问题。
Promise 的话问在一个 if 中,resolve 或者 reject 之后需不需要 return。一开始我觉得是 return 一下更保险的,但是这道题的考点其实是 Promise 的状态一旦变成 fulfilled 或者 rejected 以后,就不能再改变了。手写一遍 Promise 的源码的话其实会知道,resolve 或 reject 在被调用时,前面都有一个判断 if (this.state === "pending"),如果 Promise 的状态不是 pending 的话,Promise 相应的解析值或者错误值就不会被改变。

总结:
比起前面两次,这一次准备得算是比较多了,常规的面经中刷到的题目基本上都准备了。但是面向面经准备也有一个弊端,即知识不够系统。其实几次面试下来,面试官给的反馈都是,知识不够系统。对于在看面经的朋友们,还是建议多看红宝书、精通CSS之类系统性的书籍,对构建知识体系比较有帮助。尤其像前端这种大学里没有开设专门课程,或者开设的课程比较基础比较落后的,在自学的过程中更应该有意识地去搭建知识的系统和网络。


#实习##面经##字节跳动##前端工程师#
全部评论
大佬楼主 可以加个微信学习吗 lambda-hd 非常感谢
点赞 回复 分享
发布于 2022-03-18 00:24
//发布订阅 EventEmitter code // 当某配置发生变化时,通知到已订阅的客户端 void HocfgMgr::notifyChange( const string& filename, int mtime ) const {     string aliasPrefix = _F("%s_%s@", BOOK_HOCFG_ALIAS_PREFIX, filename.c_str());     CliMgr::AliasCursor alcr(aliasPrefix);     CliBase *cli = NULL;     vector vecCli;     string msg("{");     StrParse::PutOneJson(msg, "notify", "cfg_change", true);     StrParse::PutOneJson(msg, "filename", filename, true);     StrParse::PutOneJson(msg, "mtime", mtime, false);     msg += "}";     while ((cli = alcr.pop()))     {         IOHand* iohand = dynamic_cast(cli);         if (NULL == iohand)         {             LOGWARN("NOTIFYCHANGE| msg=book from ocli| cli=%s| file=%s",                     cli->m_idProfile.c_str(), filename.c_str());             continue;         }         iohand->sendData(CMD_EVNOTIFY_REQ, ++m_seqid, msg.c_str(), msg.size(), true);     } }
点赞 回复 分享
发布于 2022-03-15 21:16
async和defer加载的js资源好像都是不能操作DOM的吧,所以不会阻塞DOM的解析,异步加载js资源
点赞 回复 分享
发布于 2022-03-15 21:15
//事件捕获code bool BitcoinGUI::eventFilter(QObject *object, QEvent *event) { //捕获状态提示事件     if (event->type() == QEvent::StatusTip)     { //如果当前使用状态栏显示其他内容,请阻止从setstatustip()添加文本。         if (progressBarLabel->isVisible() || progressBar->isVisible())             return true;     }     return QMainWindow::eventFilter(object, event); }
点赞 回复 分享
发布于 2022-03-15 21:13
//事件冒泡code int main() {     int ix;     int a[] = {8, 34, 3, 13, 1, 21, 5, 2};     int a_length = (sizeof(a)) / (sizeof(a[0]));   // 获得数组的长度s     cout << "冒泡排序前:";     for (int ix = 0; ix < a_length; ix++)         cout << a[ix] << " ";     cout << endl;     bubleSort(a, a_length);     cout << "冒泡排序后:";     for (int ix = 0; ix < a_length; ix++)         cout << a[ix] << " ";     cout << endl;     return 0; }
点赞 回复 分享
发布于 2022-03-15 21:12
//事件委托code void WeituoInfo::initData(Event ev) {     grid_data_list.clear();     QMap & all_order = me->me_getOrderInfo();// me_getWorkingOrderInfo(); 有效委托   me_getOrderInfo();所有委托     QMap ::iterator it;     for (it = all_order.begin(); it != all_order.end(); ++it)     {         grid_data_list.append(*it);     } }
点赞 回复 分享
发布于 2022-03-15 21:09
想请问一下楼主,对于事件委托的那道题是写一下事件委托的思路还是,在什么情景下进行事件委托
点赞 回复 分享
发布于 2021-02-21 16:33
楼主做的大概是什么项目,有用框架吗?
点赞 回复 分享
发布于 2021-02-19 11:40
居然没有问vue\react\webpack?
点赞 回复 分享
发布于 2021-02-15 22:49
点赞 回复 分享
发布于 2021-02-13 20:39
事件委托是给了具体场景么😳😳
点赞 回复 分享
发布于 2021-02-13 18:25
什么部门呀
点赞 回复 分享
发布于 2021-02-13 18:21
加油💪
点赞 回复 分享
发布于 2021-02-13 15:23

相关推荐

07-30 18:17
已编辑
东莞理工学院 Web前端
字节跳动火山引擎一面46&nbsp;分钟2025.7.151.&nbsp;自我介绍2.&nbsp;介绍项目3.&nbsp;看你项目提到了,cloudflare的全球加速是怎么做的?4.&nbsp;浏览器访问链接全过程5.&nbsp;页面框架加载优化6.&nbsp;跨域是什么7.&nbsp;数组和链表的随机查找、插入删除的时间复杂度的8.&nbsp;MySQL写入锁9.&nbsp;HTTP缓存&nbsp;强缓存&nbsp;协商缓存10.&nbsp;算法题11.&nbsp;反问字节火山引擎二面1.&nbsp;自我介绍2.&nbsp;项目介绍3.&nbsp;项目遇到的性能问题是如何解决的4.&nbsp;css如何实现动画(transition、keyframe)5.&nbsp;如何渲染一万个元素(documentfragment、虚拟列表),同时显示的话呢?(canvas、requestAnimationFrame延迟加载分片渲染)6.&nbsp;算法题:控制并发量7.&nbsp;未来职业发展字节火山引擎三面2025.7.221&nbsp;小时1.&nbsp;请做一个简单的自我介绍。2.&nbsp;之前编程主要是什么方向?是爱好还是认真学习的?3.&nbsp;你更喜欢做前端、全栈还是其他方向?为什么觉得前端可替代性强?4.&nbsp;你平时学习技术的渠道有哪些?5.&nbsp;你现在独立运营两个产品,未来有考虑盈利吗?6.&nbsp;未来的职业发展规划7.&nbsp;请介绍一下你简历里提到的XXX项目,它主要是什么,有哪些难点?8.&nbsp;对于XXX项目中性能优化问题,你解决减少顶点数量的思路是什么?9.&nbsp;提高三维图形真实性的路径精确计算,用到了什么算法?10.&nbsp;在XXX项目中,用&nbsp;WebGL&nbsp;处理时性能瓶颈通常出现在哪些方面,你是如何解决的?11.&nbsp;请介绍一下另一个项目&nbsp;app,它主要功能是什么,如何解决学生无网络时的离线使用问题?12.&nbsp;这个&nbsp;app&nbsp;做了哪些数据分析,还有哪些社交相关功能,自习室排名逻辑是什么?13.&nbsp;这个&nbsp;app&nbsp;如何实现一个账号在多设备同步?14.&nbsp;你做的项目中前端跨端表现好是因为编译成二进制文件和内置运行时,能说说大概流程吗?15.&nbsp;能介绍一下&nbsp;Flutter&nbsp;开发中&nbsp;element&nbsp;和渲染对象相关知识,以及不同端的渲染实现逻辑吗?16.&nbsp;HTTP1.0、HTTP2.0、HTTP3.0&nbsp;有什么区别?17.&nbsp;TCP&nbsp;和&nbsp;UDP&nbsp;有什么区别,Promise&nbsp;有哪三种状态,分别是什么?18.&nbsp;你了解哪些网络安全方面的内容?19.&nbsp;你用到了数据库,能介绍常见数据库类型及大致划分区别吗?20.&nbsp;你提到&nbsp;CDN,能说说&nbsp;CDN&nbsp;加速的原理吗?21.&nbsp;算法题:最长公共子串、二路归并22.&nbsp;你后续的长期规划是继续做技术,还是也会考虑往产品方向发展?23.&nbsp;你未来实习时间大概是怎样的,可以长期实习吗?可以转正吗?24.&nbsp;如果未来做的事情和你自己的规划不太匹配,且全栈机会不多,你会怎么选择?2025.7.30HR&nbsp;反馈:业务说咱们的前端经验和产品sense都很好,但是沟通表达能力相对于另一位同学薄弱了些,并且对于未来规划这部分不太清晰,希望咱们目标可以更坚定一些
点赞 评论 收藏
分享
评论
22
84
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务