美团到店一面

面试官人真的超级好,感觉面试就是在聊天,面试官全程笑咪咪,还认真听我说话,超级喜欢啊啊啊啊,最近面的最舒服的一场了,挂了也值了

1.自我介绍,有实习经历吗?
2.为什么想要开发组件库?是自己实现的吗?
3.有发布npm上吗?
4.怎么在自己的项目上面用自己写的组件库?有文档吗?
5.项目产物是什么?
6.为什么要做组件库?组件库的价值是什么?
7.如果要使用这个组件库是要把全部文件都下载下来吗?(按需引入)
8.使用umd吗?知道umd吗?
9.聊到了项目里面的虚拟滚动组件(给自己挖坑了,细问回答不清楚,而且自己实现也有问题,这块需要再看看)。一屏渲染多少个?后端分页?一次性获取后端传过来的大量数据吗?怎么样知道实际渲染高度呢?怎么初始化?
10.问了我会什么?(哈哈哈哈哈哈哈哈哈)
11.那你说说浏览器渲染原理?
12.说到了重排重绘,它们的区别?
13.聊到了transform不会引起重排,问了absolue会不会引起重排?
14.问了position哪几种?relative会不会引发重排?为什么?
15.浏览器的存储方式?我说了cookie/localstorage/sessionstorage,面试官让我打开浏览器康康还有什么?
16.cookie/localstorage/sessionstorage存储容量?
17.vue如何减少重排重绘?(虚拟DOM对象)
18.数据加一怎么更新到页面?或者说点击页面的一个按钮之后页面消失,vue做了什么?
19.说说浏览器的事件循环机制?微任务宏任务有哪些?
20.说说await async?
21.不小心说到了undefined,问了null和undefined区别?

面完尸体暖暖的,发现了很多自己的问题,感谢面试官,面试体验特别好,我打算以后多用团子点外卖
反问学习建议和对校招生要求
全部评论
暑期实习面试吗?为什么是线下面?
1 回复 分享
发布于 2024-04-19 15:24 广东
佬 请问你的项目是开发组件库吗?
点赞 回复 分享
发布于 2024-05-21 13:14 重庆
什么部门捏 兄弟
点赞 回复 分享
发布于 2024-04-18 23:02 上海

相关推荐

飞书前端一面面经:从基础到实战的技术碰撞一、面试初印象这次飞书前端一面给我的整体感受是节奏紧凑且直击技术核心。面试官风格沉稳,问题由浅入深,既考察基础能力,又注重解决实际问题的思维,是一次很有价值的技术交流。二、面试问题复盘1. CSS 基础考察面试官开场便询问我 CSS 基础掌握程度,我坦诚表示“不是很好”,随后进入具体问题:如何实现三列布局,要求两边宽度固定,中间宽度自适应。我首先提到可以用 JavaScript 监听窗口变化动态调整宽度,但面试官希望用纯 CSS 方案。我迅速想到 Flex 布局,并详细解释了实现思路:.container {display: flex;}.left, .right {width: 200px; /* 固定宽度 */}.center {flex: 1; /* 自动分配剩余空间 */}接着,面试官追问 calc() 函数是否了解,由于平时使用较少,我仅简单说明了它能进行四则运算,用于动态计算 CSS 属性值,比如 width: calc(100% - 400px); 可以配合实现响应式布局。2. 项目与性能优化探讨当被问到 项目中的性能优化经验 时,我如实反馈:目前实习项目和个人项目经验较少,尚未深入接触性能优化模块。面试官没有追问,而是迅速切入算法题环节。3. 算法与代码实现题目1:封装 Promise 重试函数要求实现一个函数,传入请求的 Promise 和请求次数,请求失败时自动重试,达到次数上限后不再发起请求。我给出如下代码:function retryPromise(promise, times) {let count = 0;return new Promise((resolve, reject) => {const run = () => {promise.then(resolve).catch((error) => {if (count < times - 1) {count++;run();} else {reject(error);}});};run();});}题目2:实现对象深拷贝我先写出基础版本:function deepClone(obj) {if (typeof obj!== 'object' || obj === null) {return obj;}let result = Array.isArray(obj)? [] : {};for (let key in obj) {if (obj.hasOwnProperty(key)) {result[key] = deepClone(obj[key]);}}return result;}面试官进一步要求 考虑边界情况,我补充说明:若对象属性为数组,需递归处理数组元素;若属性为函数、正则等特殊类型,需特殊处理。例如,对于函数可直接返回原函数,对于正则可创建新的正则实例。三、反问环节我向面试官提出疑问:“为什么在前端面试中如此看重 CSS 基础?”面试官耐心解答:“CSS 是前端页面布局和视觉交互的基石,良好的 CSS 能力能确保页面高效渲染和兼容性,是支撑复杂业务开发的基础,所以我们会重点考察。”四、面试结果与总结幸运的是,面试结果显示 已通过一面。回顾过程,坦诚承认自身不足并积极思考问题,以及在算法题中清晰的逻辑表达是关键。后续准备二面时,我将重点补足 CSS 知识盲区,积累项目实战经验,尤其关注性能优化相关技术,同时加强对 JavaScript 细节和边界场景的理解。这次面试也让我深刻认识到,扎实的基础和灵活的思维永远是技术面试的核心竞争力。
查看5道真题和解析
点赞 评论 收藏
分享
字节跳动前端二面失败面经:复盘与反思一、面试整体感受本次字节跳动前端二面的考核强度明显提升,面试官从计算机基础、CSS 知识,到 JavaScript 核心概念与实践应用层层深入,虽然最终遗憾未通过,但这次经历让我清晰认识到自身知识体系的薄弱环节。二、面试问题回顾与解析1. CS 基础与 CSS 考察• 实现父容器一半大小的正方形:我第一反应是使用 vw 单位,将子容器的 width 和 height 都设置为 50vw。但面试官的意图更倾向于基于父容器尺寸的相对计算,正确思路应该是通过百分比结合 padding-bottom 实现等比例正方形(如 width: 50%; padding-bottom: 50%;),并利用 position 或 flex 布局定位到父容器内。• CSS 盒模型:我准确回答了 标准盒模型(content-box) 和 怪异盒模型(border-box) 的区别,重点说明了 box-sizing 属性对尺寸计算的影响。2. JavaScript 核心概念与 BOM 考察• BOM(浏览器对象模型):当被问到 BOM 相关知识时,我对 window 对象的属性(如 location、history)和方法(setTimeout、addEventListener 等)掌握不够熟练,回答较为模糊,暴露出日常学习中对浏览器环境底层知识的忽视。• 事件委托:面试官询问事件委托原理时,我错误地将其等同于事件冒泡。实际上,事件委托是利用事件冒泡机制,将子元素的事件处理委托给父元素,从而减少内存占用和提高性能。例如,在列表项点击事件中,可将点击事件绑定在列表容器上,通过判断事件源 event.target 处理具体逻辑。3. 代码实战环节• 实现 JavaScript 链式调用并支持 bind 功能:题目要求实现类似 i.initial(5).add(5).minus(3).plus(5).result 的链式调用,并能使用 bind 修改内部状态。我顺利完成了基础的链式调用逻辑,通过返回 this 实现连续调用,并维护一个内部变量记录计算结果:function Chain() {this.value = 0;this.initial = function (num) {this.value = num;return this;};this.add = function (num) {this.value += num;return this;};this.minus = function (num) {this.value -= num;return this;};this.plus = function (num) {this.value += num;return this;};this.result = function () {return this.value;};}但在实现 bind 功能时,由于对 bind 改变函数 this 指向的原理理解不足,未能完成。正确思路是通过 Function.prototype.bind 方法创建一个新函数,在新函数中调用原始方法,并传入绑定的参数和 this 值。• 封装安全的 React Hook:需求是处理可能失败的异步请求,并确保数据安全。我通过 useState 和 useEffect 实现了一个简单的 fetch 请求钩子,在 catch 块中处理错误,并添加了加载状态和错误信息的状态管理:import { useState, useEffect } from'react';const useSafeFetch = (url) => {const [data, setData] = useState(null);const [loading, setLoading] = useState(true);const [error, setError] = useState(null);useEffect(() => {const fetchData = async () => {try {const response = await fetch(url);const result = await response.json();setData(result);} catch (err) {setError(err);} finally {setLoading(false);}};fetchData();}, [url]);return { data, loading, error };};• 手写 JSONP 函数:要求传入 URL、成功回调、失败回调和超时时间。由于对 window 对象动态创建 script 标签、onerror 和 onload 事件,以及 clearTimeout 等原生方法不够熟悉,最终未能完整实现。正确实现思路如下:function jsonp(url, successCallback, errorCallback, timeout) {const script = document.createElement('script');const callbackName = `jsonp_callback_${Date.now()}`;window[callbackName] = (data) => {clearTimeout(timer);document.body.removeChild(script);successCallback(data);};script.src = `${url}&callback=${callbackName}`;script.onerror = () => {clearTimeout(timer);delete window[callbackName];errorCallback(new Error('JSONP request failed'));};document.body.appendChild(script);const timer = setTimeout(() => {document.body.removeChild(script);delete window[callbackName];errorCallback(new Error('JSONP request timed out'));}, timeout);}三、总结与反思此次面试失败暴露出我在 BOM 细节、事件机制、函数绑定原理 等基础知识上的不足,以及 复杂场景下代码实现能力 的欠缺。未来准备面试时,需更深入理解 JavaScript 原型链、作用域、this 机制等核心概念,同时加强手写代码的练习,尤其是对原生 API 的熟练运用。希望我的经历能为大家提供参考,避免踩坑!
查看7道真题和解析
点赞 评论 收藏
分享
评论
7
16
分享

创作者周榜

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