字节前端实习-商业化广告-四面凉经

人生第一次面大厂,和节子挺有羁绊的,浅浅记录一下吧
-----------------------------------------------------
Timeline:
一面        2025-05-07    15-16    当天17: 00 通过
二面        2025-05-08    14-15    当天15: 40 通过
三面        2025-05-12    15-16    当天20: 38 面挂
[HR姐姐说一面二面面评不错,商业化CRM可以捞捞,换部门加一轮面试即可]
四面        2025-05-13    17-18    当天21: 31 面挂

------------------------------------------------------
一面面经-5.7:

1. 自我介绍

2. 项目性质:你提到的两个项目是练手还是实际投入使用的呀?

3. 问项目难点

(1)说论坛的游客模式 => 问登陆&登陆态是怎么实现的

登陆这块是怎么做的?

登陆态是怎么维护的?

用户刷新后仍然是登陆状态,怎么判断的?

(判断token是否存在)

token存在哪里(localstorage里面)

token有时效吗?(三天半)

你怎么判断它过期的(jwt)

你怎么使用jwt解析的 

localstorage里面有时效吗?

(2)消息实时推送SSE

(3)安全性优化(加入csrf)

追问:你可以详细介绍一下CSRF吗?

你对别的攻击方式了解吗(回答了XSS、提到有分为存储型XSS和反射型)

追问存储型和反射型区别

4. 自己提到项目收获和项目的开发流程

5. 问怎么了解到的项目整体规范开发

6. git开发工作流熟悉吗?

回答说对于分支流转比较熟悉

追问 git merge 和 git rebase的区别

rebase使用有什么风险 如何规避

风险:影响公共分支

追问:怎么样影响的公共分支

面试官解释:风险产生的本质原因是git rebase 时候要强推(并且必须强推)

7. 对axios封装以及取消重复请求是怎么实现的?

追问post请求的避免重复请求是怎么实现的,可以怎么优化

8. 节流防抖使用场景

9. 图片懒加载

追问offsettop是元素距离谁的

追问只判断offset整体位置可以吗

面试官补充offsettop定位的元素不一定是滚动元素

10. Vue2和Vue3的区别

11. 问react项目经验

12. react hook的原理介绍一下

追问hook使用有什么限制吗

13. useEffect和useLayout Effect区别

14. 一道算法题: 比较版本号

【一面面试官是个很温柔的姐姐,提问循循善诱,引导型,面试整体体验很舒适(不敢想要是面过了,姐姐是mentor该有多幸福)】

------------------------------------------------------

二面面经-5.8:

1. 自我介绍 (改进了下自我介绍,明显感觉面试官很赞许【听自我介绍的面试官不多见,感动子】)

2. 学校专业课学了哪些课程(自我介绍提到成绩专业第一, 回答数据结构、操作系统、计网、 电子技术基础等)

3. 什么情况下促使你去学习前端的 

4. 问数据结构问题:讲一下数组和链表的区别 (说数组像整齐排列的房子、链表像一串手串云云)

5. 讲一下树的遍历和图的遍历 (答主有点学院派,问数据结构问到点上了,爽)

6从浏览器发起一个请求,到请求返回中的过程中,整个请求到响应的路径很多情况下都有缓存。尽可能把缓存说清楚,有哪些缓存

(说了强制缓存和协商缓存)
追问除了浏览器层面的强制缓存和协商缓存还有哪些缓存,提示如DNS、服务器缓存

(讲了DNS缓存, 自己补充讲URL输入到页面呈现的过程)
追问其他的缓存

7. 你们做系统的静态资源是托管在哪里的,是部署在服务器吗
(补充讲项目开发流程, 这里抢问题了,应该看面试官眼色让他把缓存介绍一下)

8. 做项目的初衷是什么

9. post请求什么时候会出现 打印控制台,post请求出现两次的情况
简单请求和复杂请求的区别
options 请求遇到过吗

10. axios底层?,支持node吗

11. 讲一下AJAX

12. 算法题:扁平数组转成树形结构
问时间复杂度和空间复杂度

13. 面试官小哥:
我再来问你一些不相干的问题(以为可以开始扯闲话环节了,结果继续问问题

Vue中编写UI会使用 template 和 render,这两者有什么区别吗、有什么关系吗
追问:不进行打包、编译可以直接使用template语法吗,render函数最终返回的是什么
template最终会被编译成render,这个编译发生在什么时间?

14. Vue-loader有什么作用(跟上一题有关系)

15. 在webpack项目中自己随便写了一个a.abc文件,可以在js或ts文件中随便引入吗

16. Vue中的nextTick,底层怎么实现的?

17. 介绍一下浏览器中的微任务
(自己扩展说微任务和宏任务的区别、使用场景)

反问环节:
1. 反问面试官求职时的心理状态、做了哪些准备

2. 反问面试官有什么技术方面的书推荐

3. AI风潮下,程序员的核心能力会发生转变吗?从业务能力向 AI使用 能力偏移

【隔了一周多,编辑面经还在感慨,二面面试官小哥真的很nice,面试节奏特别对。要反馈有反馈、要引导有引导,表示不懂的时候还会重新解释问题,整场面试说说笑笑地进行下来了,轻松愉悦(以至于复盘的时候才发现有的问题还是有点小难的!)

最后反问环节聊天也聊得很开心啊啊啊,要是二面小哥是组长就好了...可惜没有缘分。祝大家面大厂都遇到这样的面试官(接好运!)】

------------------------------------------------------

三面面经-5.12:

1. 自我介绍

2. js闭包内存泄漏原因, 降低内存泄漏风险的方法

3. 自动设置垃圾回收

4. weakmap

5. node.js:common.js和ES module 

追问Common.js的缓存机制

6. script的async和defer的区别

async会阻塞后续dom吗

7. cookie存token和header存token有什么差别

8. ES6装饰器

9. decorator装饰器,普通函数不支持装饰器的原因, 高阶函数

10. 回流重绘 怎么尽量降低影响(方法)

11. TS枚举和定义普通对象区别

12. 普通枚举和常量枚举

13. type 和 interface的区别

14. ts类型断言 两种方式的区别

15. HTTP2.0中的服务器推送有哪些应用场景

16. git相关的命令

17. git pull 和 git fetch区别

18. 本地分支做变更, 怎么办(回答stash暂存)

19. 算法题1
const [a,b] = {a:1, b:1} 能正常运行吗?为什么
封装一个通用型的方法, 左右结构不动, 成功解构

20. 算法题2
大数相加

21. 追问: 你有一个网站 包含了各种各样的静态资源, 你会怎么设置缓存策略

-三面面试官应该是leader,经过我长长的自我介绍后,大手一挥说那我们开始吧!
整场面试下来问题密度挺高的,苯人感觉自己答得也很不错,没有卡壳的地方。leader大人也会给一些反馈,面试整体比较顺畅~依旧是体验感不错的面试,但最后还是挂了。。。
HR姐姐说面评反馈主要是算法题1思路有问题,应该是用迭代器+沟通不够简明有效

得到结果后整个人都down了,非常难受哇非常......感觉像做了一场梦,二面通过的时候觉得自己很lucky,好像离字节很近了,但是结果三面出结果又离得远远的了

仔细复盘了一下觉得确实还可以语言更精炼一些回答问题,整体面试还很有收获的。虽然没过,但是感恩~

------------------------------------------------------

四面面经-5.13:

前半小时闲聊规划、学习前端原因、项目(有点不太记得了)

后面四道手写题

1. TS 泛型用法

2. 写出数组的10个方法(写了十几个,面试官问了几个方法的用法)
手写实现一个reduce

3. this指向

4. 给二叉树,输出二叉树每一层的最大节点

- 算法题撕得不好,面得有点低气压。但是此 leader 挺活泼的哈哈哈,也会主动给出一些提示(重生之部门leader亲自教你写算法)。面试结束后就知道g了,瘫椅子上半小时没说话,才收拾收拾去吃饭了
和面评反馈的一样,《可能太过紧张,心态会有点急促》。但是很感激面试官啊,哎哎哎这把确实没缘分#牛客AI配图神器#

我是不会放弃面试字节的(我节孝子一定会回来的)
全部评论
感谢佬的面经,真的就是看了你的面经写了几个原题才oc的,也祝佬早日找到心仪的实习offer
2 回复 分享
发布于 05-27 15:50 北京
是暑期嘛
1 回复 分享
发布于 06-04 09:10 陕西
很厉害了,加油
1 回复 分享
发布于 05-27 11:02 北京
佬儿已经很厉害啦
点赞 回复 分享
发布于 05-18 18:10 河南

相关推荐

一、面试基本情况本次面试主要围绕 React 相关技术、流式传输以及算法与 React Hook 实现展开,包含技术原理问答和两道代码实现题。二、技术问题回顾与解答1. React Router 的实现机制React Router 基于 HTML5 的 history API 实现单页面应用的路由功能。它通过监听浏览器的 popstate 事件(当用户点击浏览器的前进、后退按钮时触发)以及手动调用 history.pushState()、history.replaceState() 方法来更新 URL 地址,同时不触发页面刷新。在 React 组件中,通过 BrowserRouter(基于 history API)、HashRouter(基于 URL 的 hash 部分,兼容性更好)等组件包裹应用,结合 Route 组件定义不同路径对应的渲染组件。当 URL 变化时,React Router 会根据当前路径匹配相应的 Route 并重新渲染对应的组件,从而实现页面内容的更新 。不过在本次面试中,我对这块知识掌握不够扎实,未能完整清晰作答。2. React memo 是做了什么React.memo 是一个高阶组件,用于对函数式组件进行性能优化。它会对组件的 props 进行浅比较,如果前后两次传入的 props 浅比较结果相同,就直接复用之前渲染的结果,不再重新执行组件函数,从而避免不必要的重复渲染。但需要注意,它仅对 props 变化进行比较,当组件内部状态(如通过 useState 创建的状态)变化时,即使 props 未变,组件仍会重新渲染。3. React Suspense 怎么实现的React Suspense 用于处理组件的异步加载情况,让开发者可以指定在异步操作(如数据获取、动态导入组件)进行时显示的加载状态。它通过在组件树中标记一个“等待”区域,当子组件中有异步操作未完成时,会先渲染 Suspense 组件指定的 fallback 内容(如加载动画),直到异步操作完成,再渲染实际的子组件内容。内部实现依赖于 React 的 Fiber 架构,利用 Fiber 的可中断、可恢复特性,在等待异步操作完成期间释放 CPU 资源,不阻塞主线程,提高应用的响应性能 。4. 流式传输相关讨论在讨论流式传输时,我提出可以在前端利用 Server-Sent Events(SSE)实现。SSE 是一种单向的、由服务器向客户端推送数据的技术,适合用于实时数据传输场景。同时,对于 JSON 数据的处理,采用流式解析会更加高效,比如在处理阶乘等数据量较大且逐步生成的场景下,流式解析无需一次性将所有数据加载到内存中,而是边接收数据边解析处理,减少内存占用,提升数据处理效率。三、代码题实现1. 大数相减(考虑负数结果)function subtractLargeNumbers(num1, num2) {    function compare(num1, num2) {        if (num1.length > num2.length) return 1;        if (num1.length < num2.length) return -1;        for (let i = 0; i < num1.length; i++) {            if (num1[i] > num2[i]) return 1;            if (num1[i] < num2[i]) return -1;        }        return 0;    }    const sign = compare(num1.split(''), num2.split(''));    let larger = sign >= 0? num1 : num2;    let smaller = sign >= 0? num2 : num1;    let result = '';    let carry = 0;    for (let i = 0; i < larger.length; i++) {        let diff = parseInt(larger[larger.length - 1 - i]) - (parseInt(smaller[smaller.length - 1 - i]) || 0) - carry;        if (diff < 0) {            diff += 10;            carry = 1;        } else {            carry = 0;        }        result = diff + result;    }    while (result[0] === '0' && result.length > 1) {        result = result.slice(1);    }    return sign < 0? '-' + result : result;}2. 实现一个可暂停、继续的倒计时 React Hookimport { useState, useEffect } from'react';function useCountdown(initialTime) {    const [time, setTime] = useState(initialTime);    const [isRunning, setIsRunning] = useState(true);    let intervalId;    useEffect(() => {        if (isRunning && time > 0) {            intervalId = setInterval(() => {                setTime(prevTime => prevTime - 1);            }, 1000);        } else {            clearInterval(intervalId);        }        return () => clearInterval(intervalId);    }, [isRunning, time]);    const start = () => {        setIsRunning(true);    };    const pause = () => {        setIsRunning(false);    };    return {        time,        start,        pause    };
查看6道真题和解析
点赞 评论 收藏
分享
评论
18
56
分享

创作者周榜

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