前端暑期面试记录

小米一面挂

因为家在武汉,所以还是蛮想去小米实习,顺便回家的,但可惜一面挂,感觉我的这个没有很大的参考价值,因为确实不记得题目了。

1.代码输出提,闭包+变量提升。

先是一个很常规的输出题,做出来后,就评论区发给你好几个for循环的闭包+变量提升的题目,大致第一个是常规的,后面就是什么 自执行,变量放里面,放外面,放后面,直接传入变量,先定义函数后执行这些东西结合for循环的变种,反正我感觉我是已经绕 晕了,有点乱答的意思了,然后面试官就问你答案,理由,也不说正确与否,没有反馈,后面觉得反正乱答也说不出理由,干脆就说不会了。

2.react输出题,结合setTimeout,useEffect更改state,判断打印顺序,应该是和闭包陷阱有关(但我当时都没了解过闭包陷阱),乱答。

3.Ts里any和unknown的区别?(如果真不熟悉ts,就别写了,哪怕是了解,但也可能我ts是真菜)

三个都答得稀烂,面试官这时候就有点不想面了,给了个手写题目(忘了,但应该是easy难度的leetcode题目)+反问结束。

后续 一二志愿全挂,不捞。

百度一面挂

1.给一个发送请求函数,用react封装一个暴露 isLoading(是否正在加载),refreshRequest(重发请求),data(请求结果),Request(发送请求),refreshTimes(重发次数),isSuccess(请求是否成功)的钩子。(马马虎虎写出来了,后面提示要加useCallback缓存,但是也暴露了自己前端写的少,很不熟练的弱点,所以感觉应该是挂的原因之一)

2.闭包以及内存泄漏怎么处理?

3.现在有一个音乐播放器,点击播放音乐会新创建一个标签页播放音乐,但当已经有一首在播放时候,再点击播放音乐会再创建一个标签页播放新的音乐,但原来标签页的音乐要停止播放,用什么实现?

我:这个核心应该是实现标签页间的通信(但不知道怎么做?),猜着说用postMessage这种类似的手段实现。

面试官:用localStorage实现,它设置删除值能够有API监听到。

4.对AI使用的理解?

反问,后续毫无意外的挂了。

另一个百度约的面试一面挂,这位面试官的重心是深挖基础。(很多东西不记得了)

1.输入url过程。

2.渲染过程详细讲,主要是阻塞渲染这部分,又涉及到async和defer.

3.重绘重排 ,我提到读取例如offsetHeight,为了防止读取dirtyWord,会强制触发重排,我项目里轮播图的原生实现就用了这个特性实现无缝轮播动画。 面试官追问还读取哪些属性也会触发重排-->读取computedStyle是否触发-->答错了。

4.做一道蛮长的事件循环题目,给出输出顺序。

做的题和下面的有点像,但是比下面的简单,不涉及到resolve(Promise)的Promise透传导致的顺序变化。

我记得原题是掘金上看到过,关键词是:字节 事件循环题? 没找到。

5.作用域链,介绍后给了两个题说结果: Nunber instanceof Number(false) Object instanceof Object(true)

虽然答案对了,但是解释原理错了,面试官后续评价作用域链要加强。

6.js判断变量的方法

其他的忘记了,后续挂了。

京东,还在泡?(京东是学历够就不挂人,全入池子吗?)

京东前端实习面试貌似都比较随意?

1面半小时,介绍+项目+简单八股,印象深的是:几种图片格式的区别,首屏渲染加速的方式。

2面半小时,完全不知道二面为什么是hr面,因为此时还是求职早期,完全没准备过hr面的东西,乱答一通,感觉给人一种说话没逻辑,还处于学生思维的感觉,但是这个问的应该是常规hr问题,例如最大挑战,性格,缺点这些,深刻的是:如果我招你进来,你觉得我培养你最大的困难是什么? 我答的是我性格有点内向,可能一开始融入小组比较慢(确实这个答得有点傻逼)。

3面主管面,介绍自己,介绍项目,然后就问了点TCP UDP的区别和其他很简单的八股,因为2点约的面,感觉这位面试官很疲惫,感觉他都没听我说话,一问完,我开始回答,他立刻仰头靠着小眯一下,真的感觉他超级疲惫。

武汉作业帮 (hr面后说没过,转部门加面,后续流程结束)

这个应该是面试体验让我很无语的,一二面+hr面后,hr面还说我很符合他们的招聘需求(想回武汉,追求转正),结果第二天通知部门没过,换部门加面。

一面:

1.变量提升输出题,考点是变量和函数提升的优先级,这篇博文蛮详细的,https://juejin.cn/post/6933377315573497864

2.事件委托,事件冒泡,事件捕获。

3.你Es6用的多的东西。

4.promise,all,race,any这些。

5.promise.all的返回内容,如果想错误的结果也全部接收怎么办? 我问她是在promise.all上改还是其他方法?她说都可以。

我回答promise.allSettled就可以,那你就手写实现allSettled吧。(成功手写)

6.介绍事件循环,这个可能我没有按照传统的宏任务,微任务答的,我是说任务队列有优先级

微任务- 交互任务-渲染前任务(requestAnimation,IntersectionApi)-延时任务(SetTimeout,interval)--网络请求任务--空闲回调

这个回答可能给了面试官一点惊喜

7.居中方式

8.介绍flex布局,这个好多都问了,我还扯到了grid布局的一些属性,说我grid有时用的多点。

9.会vue吗?(作业帮技术栈是vue) 不会。

10.反问评价,基础不错。

二面

1.项目里虚拟列表怎么实现的?

2.react钩子使用的规则---我答成具体某个钩子使用的规则了----面试官提示不能在逻辑判断中使用,例如if

3.useMemo和useCallback,介绍后答了因为react使用Object.is进行浅比较,如果对象或者函数传参或作为依赖,需要用这两个包裹,才能实现避免重复渲染的效果。

4.react.Memo ---提到除了用上面的缓存钩子包裹,也可以直接在第二个参数写比较函数,实现你想要的深层比较功能。

5.react闭包陷阱,为什么会导致这个。

6.分别用promise 和 async await两种方式实现串行请求。

7.面向对象的理解,多态。

8.学过数据结构,操作系统这些没? 没学过。

9.url输入的过程。

10.渲染过程,重点哪里会堵塞--->async和defer

11.DNS用的TCP还是UDP-->劫持怎么办?-->不会,但是我猜可以用http3

12.bfc

反问我的技术栈是react,不会vue会不会造成蛮大的扣分,面试官答框架都是通的,面试也是有成本的,如果考虑会不会vue,那么也不会放你到二面。第二天约hr面。

hr面

非常轻松愉快,问了评价,还说我很符合他们部门的招聘画像,家在武汉,想回武汉发展,有转正意愿,学历也不错。

结果第二天接到作业帮电话,(当时内心想着一定是通过电话,想着总算有个offer了),结果通知该部门没过,转部门加面,心又跌倒谷底

加面

感觉是KPI面,问的也基本不是前端的东西,中途好几次去关门,关窗,出去一趟这些事情。我回答问题,他是完全没听,我答到一半卡住了2秒,刚想到准备接着回答,他来句好的,那下一个问题。后续反问,说他想考察的是与后端交界这部分的内容,但我虽然确实这方面欠缺,但我也想办法努力回答,但是对方是完全没听。

后面一直催问结果,一周后,前天打电话说不推进了,问什么原因没过,说第一个部门过了,但是怕前面的人毁约所以多放几个进来排序,第二个部门没过。 我是觉得虽然你可以排序,但你没必要放那么多人进hr面排序,二轮技术面排序不好吗?搞得我白高兴一场,而且hr还给我很强烈的我能过的感觉

美团第一次二面挂,第二次二面后泡了很久通过(参考前面的博客,虽然写的很烂)

小厂面试感受

因为美团是3天前才邮件,上一周处于一种没offer又没面试的状态,所以ssob上海投,约了3个小厂面。感觉ssob上还是vue居多,所以大部分也不会推进面试,有面试也是非常简单,甚至有一家说我赌你的学习能力能胜任工作,这部分应该还是学历起了作用。然后给我印象深刻的是富卫保险(外包)的面试,体验不错,感觉他们组内氛围很好,但是后续接到美团offer还是拒绝了。

另外一点就是感觉武汉和广州这边的职位数量还是有蛮大差距的,本来想着大厂去不了,小厂找个实习那干脆回武汉得了,还能顺便回家,结果ssob上武汉前端实习都没几个,而且要求立刻到岗+线下面试,给钱少的夸张(80-130),还是武汉大学生太多了

全部评论
武汉小米吗,多半是我们部门的
2 回复 分享
发布于 04-28 15:46 湖北
另外感觉今年后端应该确实是比前端难的,我和我舍友真的是速成前端最后都能OC,相反身边学后端的同学(还是双9,有ACM经历),面试都约的少,一面都答出来+手撕过了,现在还没着落,如果我走的后端,估计直接洗洗睡了(这点要感谢我舍友研二推荐我转前端#暑期前端实习#
2 回复 分享
发布于 04-26 16:33 广东
上周四到现在
1 回复 分享
发布于 04-28 14:20 贵州
哪个部门呀?
点赞 回复 分享
发布于 05-06 21:00 北京
佬是硕华工吗
点赞 回复 分享
发布于 04-27 11:18 泛播

相关推荐

一、面试基本情况本次面试主要围绕 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道真题和解析
点赞 评论 收藏
分享
05-26 09:49
门头沟学院 Java
点赞 评论 收藏
分享
评论
9
16
分享

创作者周榜

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