美团前端实习面试记录

前半小时问了很多项目相关的问题,问得很详细,包括功能逻辑,实现细节,例如项目分页功能是前端还是后端实现的?数据过多时可以考虑怎么优化?等等

然后问了一些vue2、js、css的问题,如下:

(1)vuex有哪些组成部分,在实际项目中,有哪些使用场景?

vuex具有State、Getters、Mutations、Actions、Module等组成部分……在大型项目、多组件共享状态、状态逻辑复杂等场景下比较常用。

(2)v-for、v-if为什么不推荐放在一起使用?怎么解决?

v-for 的优先级高于 v-if。当它们出现在同一节点时,Vue 会先进行 v-for 循环,遍历数组中的每一项,然后对每一项再执行 v-if 指令判断是否渲染。这意味着即便某些元素根据 v-if 的条件不需要渲染,Vue 仍然会对其进行循环迭代,做了许多不必要的计算,降低了渲染效率。

可以使用计算属性过滤数据,将 v-if 的判断逻辑提前到计算属性中,在计算属性里对数组进行过滤,返回一个只包含需要渲染元素的新数组,然后再使用 v-for 对新数组进行渲染。这样可以避免不必要的循环,提高渲染效率。

(3)组件间通信方式有哪些?详细说明。

  • 父向子通信,使用props 传递数据。
  • 子向父通信:方法一:子组件通过 $emit 触发自定义事件,并传递数据;父组件在使用子组件时监听该事件,并定义相应的回调函数来处理数据。方法二:父组件可以给子组件添加 ref 属性,然后通过 $refs 访问子组件的实例,进而调用子组件的方法或访问其数据。
  • 非父子组件间通信:事件总线Event Bus,使用 $emit 触发事件,使用 $on 监听事件、Vuex等。

(4)v-if和v-show的区别,开销,使用场景

v-if 是真正的条件渲染,它会根据表达式的值来动态地插入或移除 DOM 元素。当表达式的值为 true 时,元素会被插入到 DOM 中并渲染;当表达式的值为 false 时,元素会从 DOM 中移除。 v-show 只是简单地通过修改元素的 display CSS 属性来控制元素的显示与隐藏。无论表达式的值是 true 还是 false,元素始终会存在于 DOM 中。

v-if 切换开销较高,v-show切换开销较低。

v-if 适用于在运行时条件很少改变的场景。例如,在用户登录后根据用户角色显示不同的菜单选项,用户角色在登录后通常不会频繁改变,此时使用 v-if 可以在初始渲染时就根据条件决定是否渲染相应的菜单元素,避免不必要的 DOM 元素存在。

v-show 更适合需要频繁切换显示状态的场景。比如在一个电商页面中,商品详情页的展开和收起功能,用户可能会多次点击展开或收起按钮,使用 v-show 可以在不频繁操作 DOM 的情况下实现元素的显示与隐藏,提升用户体验和页面性能。

(5)vue2的生命周期有哪些?create和mounted谁先谁后?分别做了什么?

beforeCreate 、 created、beforeMount、 mounted、beforeUpdate 、 updatedbeforeDestroydestroyed

created 先于 mounted 执行。created 阶段主要完成了数据和方法的初始化,开发者可以在这个阶段进行数据的获取和处理,为后续的渲染做准备。而 mounted 阶段则是在 DOM 渲染完成后执行,适合进行一些依赖于 DOM 的操作,因为此时页面上已经可以看到渲染后的内容,能够确保操作的 DOM 元素是存在的。

(6)父组件与子组件在创建、更新、销毁时的生命周期是怎么交叉的?

创建阶段:父组件 beforeCreate -> 父组件 created -> 父组件 beforeMount -> 子组件 beforeCreate -> 子组件 created -> 子组件 beforeMount -> 子组件 mounted -> 父组件 mounted

更新阶段:父组件 beforeUpdate -> 子组件 beforeUpdate -> 子组件 updated -> 父组件 updated

销毁阶段:父组件 beforeDestroy -> 子组件 beforeDestroy -> 子组件 destroyed -> 父组件 destroyed

(7) 数组的常用方法有哪些?在开头和结尾的添加/删除分别是哪个方法?

unshift(在开头添加)、shift(在开头删除)、push(在末尾添加)、pop(在末尾删除)、sort、map、forEach、reduce、set等。

(8)map方法会对原数组进行修改吗?

不会,map的主要作用是创建一个新数组。

(9)怎么实现用户权限管理? 

用户登录时,后端需验证用户身份并返回该用户所拥有的权限信息,前端使用localStorage 将这些信息存储在本地。在页面访问权限控制上,利用前置路由守卫router.beforeEach进行拦截,可以在这个守卫中获取用户的权限信息,与目标路由所需的权限进行比对。如果用户没有相应权限,就。阻止路由跳转

(10)关于css的问题:如果想要实现一个功能,左边是输入的文字,右边是一个按钮,怎么实现随着文本变长,不会把按钮挤走,多余的文字以省略号的形式体现?

文本框与按钮的父容器使用flex布局 display: flex;

文本框设置flex: 1; white-space: nowrap;overflow: hidden; text-overflow: ellipsis;

按钮设置 white-space: nowrap;

(11)在前端学习和开发中遇到的最大的问题是什么?

面试官特别喜欢问的一个问题。可以平时积累一点,回答的有深度一点。

例如,在……优化过程中遇到了什么困难,在数据量太大时遇到了……问题,等等。

两道代码题,难度与之前面的其他厂相比要容易一点。

一道是查找嵌套的树状数组里面的元素,返回查找路径。面试官提示可以采用递归。

一道是给定一个数组和一个值,例如:nums=[1,2,5,6],target=3,返回相加得到target的数组下标[0,1]。

### 美团前端开发工程师面试题准备资料 针对美团前端开发工程师职位的面试,可以从多个方面来准备。以下是详细的准备方向: #### 1. 测试相关问题 对于项目中的具体模块测试方法,应当能够清晰描述所参与项目的架构以及个人职责所在。例如,在回答关于如何测试特定模块时,应该提及使用的工具和技术栈,如Jest、Mocha等自动化测试框架的应用[^1]。 #### 2. 对于“什么是测试”的理解 测试不仅限于软件领域,它广泛存在于日常生活中用于验证事物的功能性和可靠性。在编程语境下,特别是Web应用程序中,良好的测试实践能显著提升产品质量并减少潜在缺陷的发生率。以钉钉系统的短暂崩溃为例,这表明即使是最成功的平台也可能因未充分进行压力或负载测试而出现问题[^2]。 #### 3. JavaScript异步机制深入探讨 了解JavaScript事件循环的工作原理至关重要,尤其是当涉及到宏任务(Macro-task)与微任务(Micro-task)的区别及其处理顺序。通过分析一段包含setTimeout和Promise的代码片段可以帮助候选人展示其对该主题的理解程度。例如,给定的一段脚本展示了不同类型的回调是如何被安排执行的,这对于编写高效响应式的前端应用非常重要[^3]。 ```javascript console.log('Script start'); setTimeout(() => console.log('Macro task'), 0); Promise.resolve().then(() => { console.log('Micro task') }); console.log('Script end'); // 输出: // Script start // Script end // Micro task // Macro task ``` #### 4. 继承模式的选择 掌握不同的面向对象设计原则也是必不可少的一部分。组合继承虽然实现了属性共享但是存在重复调用父级构造函数的问题;相比之下寄生式组合继承则提供了一种更为优雅高效的解决方案,避免了不必要的实例化操作[^4]。 #### 5. 实际案例分享 参考其他成功应聘者的经验总结往往能让求职者获得宝贵启示。一位大三大学生分享了自己的美团前端实习面试经历,其中涵盖了HTML/CSS/JS基础知识考察、算法逻辑思维训练等多个维度的内容[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值