美团点评-餐饮SaaS 前端四面总结(已拿offer)
一面、二面和HR面之前面完写过一次,没想到又加了一轮,索性整合到一起方便大家查阅
时间轴
笔试(3.12) ==> 一面3.18(基础面 1h30min) ==> 二面 3.23 (业务面 36min)
==> 三面 3.24(HR面,1h)==>加面3.31(主管面,2h)==>谈薪资(4.2)
美团点评(一面)1h30min
自我介绍(先是 自我介绍 讲了一下自己学习前端的经历,实习期间做的事,看了什么书)
CSS position属性,区别
CSS可继承的属性值(font-size,line-hight)
px、em、rem的区别(em根据当前字体大小转换成px,rem根据根节点html字体大小计算)
- vw、vh的用法(按视窗的百分比计算,1vw为窗口的1%,100vw撑满,MDN)
font-size ,line-height判断
/* CSS */ <style> .p1 {font-size: 16px; line-height: 32px;} .p1-1 {font-size: 2em;} .p1-2 {font-size: 2em; line-height: 2em;} .p2 {font-size: 16px; line-height: 2;} .p2-1 {font-size: 2em;} .p2-2 {font-size: 2em; line-height: 2em;} </style> <div class="p1"> <div class=“p1-1">1</div> <div class=“p1-2">1</div> </div> <div class="p2"> <div class=“p2-1">1</div> <div class=“p2-2">1</div> </div>
- css作用域(选择器)权重(id>class>标签>通配符)怎么计算(按位统计,id,1;class,3;p,1=> 1310)
- 条件选择器(否定选择器),有没有单独的权重?(不了解)(权重应该类似于伪类选择器)
- 权重相同的情况呢?(后者覆盖前者,两个都是绿色)
<div class="red"> <div class="green"> <p>1. 颜色是?</p> </div> </div> <div class="green"> <div class="red"> <p>2. 颜色是?</p> </div> </div> .red p { color: red; } .green p { color: green; }
了解JS的继承吗?ES5继承与ES6继承的区别?
- 原型链继承、构造函数继承、组合继承、寄生继承、组合寄生继承
- Object.create()做了什么(
function f(){};f.prototype=obj;return new f();
) - new操作做了什么,返回什么?(
var obj = {};var res = func.call(obj);return typeof res === "object"?res:obj
) - ES5组合继承时先有子类对象还是先有父类对象?(先有子对象,因为new操作符会先生成一个空对象然后再调用构造函数)
- ES6的呢?(应该是反着的)(阮一峰的ES6入门)
令对象不可新增属性,但是可以修改当前属性用什么?(object.seal和freeze)(应该是用Object.preventExtend)
- Object.seal与Object.freeze的区别(freeze冻结对象)(preventExtensions < seal < freeze;)
- Object.freeze是冻结对象是彻底冻结吗?(不是,只冻结一层,如果属性是对象,该属性的属性可以修改。彻底冻结需要递归)
Vue双向绑定原理(数据劫持 Object.defineProperty,事件监听 eventBus)
- 从defineProperty到Proxy的原因(属性遍历劫持VS对象劫持,支持数组操作)
- Vue2.0怎么处理数组方法(通过替换数组原型,劫持原型链方法)
Vue与React的路由怎么实现
- history与hash方式的原理(不晓得)(看这个)
React的生命周期?父组件与子组件串起来的是什么样的(对React不太熟)
- 会看框架源码吗?(看的Vue)
Vue 的nextTick怎么用?怎么保证在任务执行前执行(
就是node的nextTick)感谢@俺也想要一个offer的指正作者:俺也想要一个offer
链接:https://www.nowcoder.com/discuss/387152
来源:牛客网vue的nextTick和node中process.nextTick没关系,一个是在浏览器执行,一个是在node环境下,他依次检测(如果检测到就用)promise,mutationOberserve,setInterval,setTiemout,其实主要作用是可以在created生命周期以后访问data,可以立马异步获取渲染数据
- node事件循环(六个阶段,每阶段结束后都会检查nextTick队列并执行)
- 浏览器的时间循环(微任务与宏任务)一个宏任务清空一次微任务队列
- 哪些属于微任务(Promise.then(),Object.observe)
浏览器JS标签的加载顺序(从上到下,阻塞DOM;另外还有defer和async模式)
- 讲一下defer与async(defer在页面加载完之后执行,async获取js时不阻塞,获取完成之后立即执行并阻塞)
- 分别用在哪种场景(defer用在需要操控DOM元素的,async用于与DOM无关的)
浏览器在跨域(CORS)时会进行检查(检查响应头的origin,不匹配就拒绝掉)
- 什么时候发起预检(Option)请求(非简单请求:方式:非get、post||类型:JSON格式||有自定义请求头)
- 前后端跨域的cookie怎么传递(设置withCredentials,传递的是后端对应的cookie)
页面监控,捕获报错(try...catch)(window.onError)
- 监听DOM元素的改变的接口,节点变化的检测(不记得了,直接说不清楚)(MutationObserver、脏值检测、数据劫持)
Vue模板到可被浏览器解读的文件的过程(转抽象语法树然后输出)面试官不太满意,评论区等大佬补充
CSS z-index还会有什么属性影响(position不为static)
- 如果postion都是relative;display:inline,block,float对z-index的影响(不清楚)(待测试后补充)
对象属性遍历(for...in,会获取到原型链上的属性,用hasOwnProperty过滤)
- Object.keys知道吗?(也可以遍历对象的)能拿到原型链吗?(不能)
- JSON.stringify与前面的有什么区别?(序列化的时候遇到undefined和函数的时候都会跳过)
CSS的计数器(没听过)(MDN跟伪元素搭配使用,可以用于构造列表的自定义序号)
CSS三角形(border,三边透明,用border宽与盒子的宽高比来控制三角形形状)
浏览器事件模型(先捕获后冒泡)
- 添加***的第三个参数(useCapture为true是在捕获阶段,默认false)
- 第三个参数还可以是option对象,对象的属性passive是干什么的?(不知道)(MDN上解释passive使preventDefault失效)
JS隐式转换规则:null与undefined转换成数字(转成0吧,然而不对)(null=>0,undefined=>NaN)
浮点数的精度问题(二进制转换精度丢失)
- 怎么解决?(转换成整数计算再转换回去)
编程题(打算用两层循环遍历,没做出来)参考
var list = [['热', '冷', '冰'], ['大', '中', '小'], ['重辣', '微辣'], ['重麻', '微麻']]; // 输出所有维度的组合,如 [['热', '冷''], ['大', '中']] => 热+大,热+中,冷+大,冷+中 function compose(list) { console.log('hello world'); } compose(list); //当时没有写出来,后面在网上看到的解答后修改了一下 function compose(list){ var res = list.reduce( (result, property) => { return property.reduce( (acc, value) => { return acc.concat(result.map( ele => [].concat(ele, value))); }, []); }); return res.map(arr=>arr.join('+')) }
- 有什么问题想问的吗?
- 笔试跟面试的占比(主要看面试,笔试只做参考)
- 公司用的技术栈(React、Vue比较多,Angular、node比较少)
面试时间这么长是因为中间视频总是卡,一会就要重连一次,后来直接用电话沟通的。牛客的视频面试系统稳定性还是有待加强啊,
美团点评(二面)36 min
在小米实习过?介绍一下实习的工作
- 做的事情,遇到的需求、用的技术……
主要是PC还是M端上的?(都有)
用的技术栈是一样的吗?(是的)
- 为什么用jQuery ?(入职前公司就是用的这个)
- 补充了一下正在用React做重构
做了哪些页面,简单介绍一下(mi-note-10,滚轮动画,印度tv55)
滚动动画怎么实现
监听滚轮位置,动画盒子与滚轮盒子相互配合,动画盒子固定定位展示动画,滚轮盒子撑起高度与滚动距离,将滚轮滚动距离配合动画长度,转成百分比控制进度
遇到的问题
半屏动画时,动画的下一块会被滚轮盒子挤开,需要加上fixed同时算入滚轮盒子的高度中
动画内容怎么实现,用的jQuery的动画库
js添加类名,提前设置好样式与更新,配合 CSS 动画
PC与移动端两套代码吗?(移动端动画会简化)
动画的资源很多,怎么页面性能优化
上传前压缩,非首屏内容懒加载
怎么懒加载?
src置空,添加data-src或者用image对象配合canvas画图
达到的效果?(加载时间减少2秒左右)
- 怎么看的加载时间(本地看,lighthouse)
Lighthouse有哪些优化的建议
缩减JS的关键路径、白屏时间、首次渲染时间、CPU空闲时间,转换资源格式,区分首屏资源与非首屏资源
CSS动画与Canvas动画的区分,选择的原因(加载图片量的大小)
- 替换图片的src也可以实现,为什么要用canvas呢?(控制图片加载时间,可以不用等图片替换后再请求资源)
除了产品展示之外还接触了什么?(框架重构)
讲一下重构
- SAP对SEO的支持不太好,用SSR配合SAP处理
为啥要重构(架构升级、页面层次结构优化)
每一个产品都有一个页面,不同产品的开发效率怎么样(分复杂度,纯图片半天、静态页一天、加动画三天)
有什么积累(动画效果组件,拖拽式建站)
你开发过组件吗?(本来是有的,后面没来得及就离职了)
除了这个还做了什么业务?(其他业务只做了解,没有机会操作)
技术上的难点(轮播图组件功能不足,查源码,自己封装api)
有没有看过竞争者的产品展示(vivo、华为、苹果)
文字上浮、滚轮动画
看完有啥收获(设计起来做的很巧妙,有些地方完全没想到)
苹果的airpods动画,canvas不撑满整个屏幕,用transform缩放,canvas绘制区域越大性能消耗越多,scale配合高分辨率也能达到相同效果
怎么发现的?(开发者工具,看源码)
源码看起来很奇怪,脱敏
这种功能怎么实现(webpack插件)
插件怎么实现(生命周期钩子加上处理函数)
写过插件吗?(冒油,只了解原理)
还有其他的项目吗(Vue聊天室开发)
这个到实习之间在做什么呢?(本专业的技术java、C#、数据库之类的课)
前端框架有什么了解(Vue框架,看源码)
写过什么项目(自己封装提示符组件之类的)
小米的站点用vue重构(按块封装组件,按结构分成几种类型的组件,固定的内容直接封组件,用组件)
手上有啥offer(有两个……)
未来的职业规划(两年之内,自身技能提高)
工作地点(上海,不想异地)
对美团有什么想了解的?
- 团队做的事情,提升的机会(餐饮Sass……,半年一次考评)
美团点评(HR面 1h)
太长不看版
- 为什么选择上海、有没有打算留下来
- 参与的项目的质量、个人学习能力与总结能力
- 为什么选择前端这个行业?
- 实习做的内容,质量、收获
- 个人对需求的思考、优化改进思路(自我提升意识)
- 面对困难的处理方式
- 与人沟通的能力,是否容易起冲突
- 抗压能力,加班的接受程度
- 个人爱好
- 对公司的了解程度、是什么吸引了你
- 有什么想问的
详细内容
自我介绍(学习前端的经历、小米实习的内容,学习方法)
实习期结束了吗(12月离职的)
人在武汉吗?情况怎么样?能自由通行吗(在荆州,只能县内通行)
为什么要去上海(女票在上海读研,不想异地)
- 如果女朋友留在武汉,你就会留在小米转正吗?(女票比我高一届,本来就没打算留小米,实习时就在找上海工作)
- 之后打算在上海长期发展吗(是的,她算留上海,我爸妈也支持我在上海发展)
讲讲前端训练营(讲了一下学校跟360的合作培训模式)
- 报名有什么要求吗?(有考试,中期有中期考核,最后项目实战)
- 一年下来有什么感受(搭建起前端相关的知识体系了,知识的系统性)
看你的经历里也学了后端,为什么会选前端(前端离用户更近,工作成果更明显,成就感更足)
说说小米的实习经历吧
- 站点迁移与维护是什么(同一件商品不同国家站之前需要进行文件修改,调整,页面出了BUG需要修复)
- 看了一下你简历里面放的链接,加载有点慢(海外站点服务器在海外,页面图片比较多)
- 这个页面哪些是你做的,讲一讲(页头、导航栏、页尾的网站地图是统一的,其他都是自己做的)
- 外国的官网与小米中国的官网有什么区别,开发起来有啥不一样(文字长度会波动,文字会撑开挡住背景,埃及文字从右向左)
- 有什么解决方案(文字居中定位,埃及的手工调整文字方向)
- 埃及站如果需求很多,你有什么比较好的方式(自动化构建插件、抽离公用样式)
- 国内跟国外视觉上的区别(海外的比较重图片的视觉冲击,国内的文字展示为主)
- 然后扯到多端适配,不同分辨率下的显示区别,响应式布局、媒体查询
- 怎么发现这个问题的呢?(业务开发中会跟运营跟产品合作,电脑大小不一样)
说说在小米实习的收获吧(实践能力的提高、兼容性与响应式、性能优化,合作工作流程,方式)
遇到的比较大的挑战(mi-note-10d的实现滚轮动画的需求,怎么实现的动画,怎么学的)
有什么挑战比较大的问题吗(miui11的动画,做了几版效果,巴拉巴拉)
是自己想到的解决方案吗(产品提需求,然后自己实现)
有问过产品的需求吗?正常不是放个视频自动播放的吗(这个是产品要求的,本来也是放动画,后面看了苹果的AirPods的页面展示,发现用帧动画交互更好,视频达不到这种效果)
动画实现的好像有一些小缺陷(这个动画效果跟我做的有点不一样,可能是离职后被别人改过了)
有需要跟其他部门的协作吗(跟产品和运营人员的的沟通)
如果产品态度比较强硬呢(看需求的合理性,举了一下上面那个note-10的过程中遇到的矛盾,以及解决方式PS.搞不定了找组员沟通,再不行跟组长反馈)
有没有想过两难的事,可以通过技术上解决(是呀,已经从技术上改进过了,已经是当时的最佳的实现了)
后面有没有想过有什么提升方向吗(把动画中的图片抽帧,之前的动画帧数实际上是不需要那么多,然后就能减少请求的资源总量)
为什么动画会有300多张图呢?(是把一段视频按帧提取的 ,产品改需求)
没有发生什么不愉快的吧(可能对方言辞上有些激烈,但没有吵起来,都是慢慢沟通的)
组内有多少人(二十多个吧,然后海外商城有3到4个左右)
看得出来这个项目还是很关键的,有师傅带你吗?还是直接参与进来的(之前也做过一些比较复杂的页面实现,反响都很好,才参与到这次的项目里)
工作压力大吗?(两段时间压力比较大,一个是印度站三个需求堆在一起,一个就是note10平时都是7点到8点下班,弄note10每天9点多才下班,印度的有一天弄到凌晨2点)
这个程度还行吗,hold住吗(还好,搞得定)
- 工作如果需要加班的话,你能接受吗(可以啊,还年轻)
- (笑)你平时什么时候睡?(现在都是12点睡,大二期间比较晚1点多才睡)
- 为啥大二那么晚睡(课程压力大,同时培训营也有很多作业)
有什么爱好(跑步、打球、看书、偶尔玩玩手游)
看什么书(技术书籍、科幻小说)
对美团期待(想锻炼自己的技术水平与实战能力)
对美团的了解(忠实用户,外卖、住宿、景点门票、电影票,你想问什么?)
有没有了解过美团的企业文化和其他吸引你的地方(了解过、大概说了一下美团的发家史。师兄说福利待遇也挺好,健身房、房补之类的)
跟前两轮面试官聊得怎么样(聊得很开(jian)心(nan),简单了解一下团队——餐饮SaaS的业务)
有什么想了解的
- 餐饮SaaS的前景和大概情况(公司重点部门、做的什么事)
- 新人培训机制(导师制、内部培训、内部学院)
美团四面 3.31(主管面 1h40min)
好像面试官也是临时得到通知,要加面,然后上来就先自我介绍,接着聊了会天,说了一下前端的发展方向(估计是在拖时间找题目),后面的面试基调也差不多是这样,整体感觉交流的成分比较多,
对前端的理解(基础:三剑客,提升:框架+性能+网络、自动化构建之类的,再就是大前端,全栈)
- 面试官说了他对
nodejs
看法,现在都是一些小规模的应用(我说听淘宝的师兄说他们有用node做服务器的全栈开发环境)然后开始说全栈的优点,聊得很开心,跑题了,哈哈。
- 面试官说了他对
了解我们团队吗(餐饮
SaaS
,具体的不是很清楚)- 面试官就说了餐饮
SaaS
的应用场景,涉及到的业务、服务项目,做这个的意义。然后又展开说团队的氛围,在做的事。
- 面试官就说了餐饮
怎么学习前端的(技术书籍,掘金、
segmentfault
技术文章,Google)在小米实习过程中做的事(把之前说的重复了一遍)
- 滚动动画具体说一下(动画块固定,插入高度盒子用于滚动,滚轮位置转换为动画进度,修改样式、类名,或者操作canvas)
在小米做的都是页面展示的工作有没有一些组件积累(有一个组件库,动画库,正在做可视化建站的平台项目,贡献了一个动画)
- 面试官就讲了一下对组件化开发的理解,以及美团在组件化开发上的实践(好像他们正在做一个统一的架构或者说解决方案)
- 了解antd吗(阿里的一个开源UI组件库)然后说antd只是一个ui层面的框架,还介绍了umijs,涵盖UI后面的路由框架和逻辑框架,可插拔式的应用,又说了一会。
好了,偏题了,来问你几个问题
mvvm了解吗(说了什么事mvc框架,mvvm则是把controlor层变成了viewmodel层,因为前端涉及到的逻辑主要都是model到view的映射)
来个基础题
async function async1() { console.log('async1 start'); await async2(); console.log('async1 end'); } async function async2() { console.log('async2'); } console.log('script start'); setTimeout(function () { console.log('setTimeout'); }, 0); async1(); new Promise(function (resolve) { console.log('promise1'); resolve(); }) .then(function () { console.log('promise2'); }); console.log('script end'); /* script start async1 start async2 promise1 script end async1 end promise2 setTimeout */
说了一下 async、promise、setTimeout的运行机制,然后走了一遍流程,面试官表示OK,基础不错(注意一下宏任务微任务执行顺序就好)
知道数据双向绑定吗?实现一下(具体实现就不献丑了,思路就是就写一个
Object.defineProperty
循环遍历属性实现数据劫持,然后在写一个eventEmit实现事件的发布订阅,然后注册回调函数,修改数据时触发事件)了解ES6吗?(了解一些,块级作用域,箭头函数,解构析构,剩余参数,Set和Map,promise,generate,async,class、module)
- 好了,你基础应该蛮扎实的我就不问你这个了(笑)
未来的职业规划呢?有想过往哪个方向发展吗?或者说两三年内的目标(想在技术上进一步的提升,暂时不考虑转岗)
- 考研呢?有想过吗(我觉得相比读研搞学术发文章或者跟老师干项目,在公司里面锻炼学到的更多,就没有考研)
- 你说的没错,不过其实读研还是有用的,可以提升眼界,以后好转型,总不能一直都写代码吧,我们很多的同事都有读一个在职研究生。(嗯嗯,我会考虑的)
对团队氛围有什么要求吗?(我觉得搞技术的团队气氛应该都蛮好吧,工作时间之类的有硬性指标吗)
- 早上10点上班,晚上没啥事7点多就可以走了,有紧急需求可能会晚点,不过一般都是8点后下班有餐补
有啥想问的吗?(之前看了一些美团技术博客上的文章,想了解一下里面的机制,是怎么运行的)
- 每个月都会放一个主题,觉得感兴趣就写文章,然后上交评审会,审核通过后月底一起发。(这个是自发的吗?还是有规定)
- 每个人自己定的OKR,规划要发几篇就自己去实现。(还不错的呀)
再给你介绍一下团队吧,然后说了一下上海厦门两个分部,分别负责不同的部门,上海比较偏财务类,做的事前面也说过了,也是美团的核心部门巴拉巴拉的。
总体感觉这一轮面试考核的成分不是很大,应该是已经过了然后加的一轮。所以聊起来还是蛮轻松的
谈薪资 4.2
4月2号上午收到HR打来的电话,
- 手上的offer情况(已拿字节教育的offer)
- 期望的薪资(看了一下offershow,然后拿字节的offer跟她argue了一下,不算加班工资比字节少2k)
当天晚上就收到薪资确认电话了,argue成功(早知道多要一点了)
然后问了一下其他的福利待遇,五险一金,餐补房补之类的。
HR问我是否接受,我说还要考虑一下,然后加了微信,确认要收offer就跟她联系。
现在是在选美团和字节选一个,有点纠结。开了个offer比较贴,来投个票呀。
还有一个百度云的4月1日面完主管面,不想等了,后面有空会整理一下前面三轮的面经发出来供大家参考。
#美团面经##美团##前端工程师##校招##面经##春招#