字节跳动前端实习面经-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

相关推荐

04-16 10:27
已编辑
美团_Saas_后端开发
今天周一休息,突发奇想写一篇阶段总结。如题,我已经去了一个和Java彻底毫无关联的行业。曾经我以为自己能在计算机行业发光发热,拿到美团offer那会感觉自己天都亮了。没想到刚入行一年多就当了逃兵。从最开始的热爱到现在一看到代码就厌恶,不知道自己经历了什么。所以我去干什么了?答案是:在成都当了租房销售。上班那会压力大了就念叨着去干租房中介,但是一直下不去这个决心,想着自己学了四年多的计算机知识,终究还是不甘心。终于在某一天准备八股文的时候,看着无数篇和工作内容关系不大的理论知识,那一刻下定决心,决定尝试一下销售行业,也算是给自己一个交代。后面阴差阳错的投了成都自如去当租房管家,没想到面试很顺利,在当天一百多个面试的人里面,我成为了为数不多通过的几个幸运儿之一。目前已经培训通过,正式入职,也开了单,有压力但是每天过得很开心,真心喜欢那种和人交流的感觉,哪怕是最后没有选择找我租房。说这些也是想告诉那些大三,大四正在找Java实习而焦虑的同学:你们现在还年轻,选择很多,容错率也很高,可以尽情去尝试自己喜欢的行业和工作。不用因为某一次的面试没通过或者简历石沉大海而焦虑,更不用因为身边人都在挤编程的独木桥就强迫自己跟风。也算是自己的碎碎念吧,也希望自己能在新的领域取得一点小成就。也祝牛油工作顺利!
沉淀小子:干啥都不丢人啊,生存是必须要的,销售很考验一个人综合素质能力的,好的销售人脉和资源可不比写字楼的白领差啊
点赞 评论 收藏
分享
评论
22
85
分享

创作者周榜

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