【美团金融】前端实习面经(一二三面)

美团一面

时间:2020/03/22 17:00 50 分钟
形式:牛客网面试间

  1. js 中的数据类型

    • 基本类型和引用类型的区别
  2. 判断类型的方法

  3. bind、call、apply 的区别

  4. 闭包的应用,以及可能出现的问题?

  5. 给了三段代码,问输出结果

    console.log(a);   // undefined
    var a = 10;
    fn('zc')      // TypeError: fn is not a function
    var fn = function(name){
    console.log(name)
    }
    let a = {
       name: "zc",
       say: function(){
           console.log("HI," + this.name)
          }
    };
    a.say() // HI,zc
    let fn = a.say
    fn(); // HI,undefined
  6. css 样式的优先级

  7. 写一下垂直居中布局(flex 布局、table 布局、绝对布局、margin:0 auto

    • margin:0 auto的限制:当父元素的布局方式为 static/relative 且宽高已知
  8. 输入 url,浏览器发生什么

  9. 浏览器缓存机制(强缓存,协商缓存)

  10. 了解 virtual dom 吗?

  11. 知道 React Native 加载 bundle 的机制吗?(不会)

    要实现 RN 的脚本热更新,我们要搞明白 RN 是如何去加载脚本的。 在编写业务逻辑的时候,我们会有许多个 js 文件,打包的时候 RN 会将这些个 js 文件打包成一个叫 index.android.bundle(ios 的是 index.ios.bundle)的文件,所有的 js 代码(包括 rn 源代码、第三方库、业务逻辑的代码)都在这一个文件里,启动 App 时会第一时间加载 bundle 文件,所以脚本热更新要做的事情就是替换掉这个 bundle 文件。

  12. 输入 setState 后发生什么?

  13. 了解 pureComponents 吗?

  14. 智力题(一盘蚊香烧完 60 分钟,你有两盘蚊香,怎么计算出 45 分钟?)
    答:有蚊香 A、B 先同时点燃 A 的两端以及 B 的一端,当 A 烧完时,B 烧了一般时间过了 30 分钟,此时在点燃 B 的另一端,当 B 烧完时,时间又过了 15 分钟。

  15. 算法题

    • 求二叉树最大深度
      • 递归(有没有迭代的算法呢)
      • 迭代(我想到中序遍历,用 queue 做)
    • 数组去重
      • set(空间复杂度高)
      • 两层循环(时间复杂度高)
      • 排序后比较相邻两个(ok,写个快排吧)
    • 手写快排

求二叉树最大深度

最开始写了个递归的方法:

var maxDepth = function(root) {
 if(!root) return 0;
 let left = maxDepth(root.left);
 let right = maxDepth(root.right);
 return Math.max(left, right) + 1;
};

面试官让我写一个迭代的方法:

我根据层序遍历的思路写了一个(

var maxDepth = function(root) {
  if(!root) return 0;
  let res = 0;

  const q = [];
  q.push(root)
  while(q.length !== 0){
      const currentLevelSize = q.length;
      for(let i = 0; i < currentLevelSize; i++){
          const node = q.shift();
          if(node.left) q.push(node.left);
          if(node.right) q.push(node.right);
      }
      res++;
  }
  return res;
};

判断数组中是否有重复的个数

我先写了个 set 去重

function isRepeated(arr){
  return arr.length == [...new Set(arr)].length ? false : true;
}

面试官说空间复杂度太高,我就讲了两层循环的思路:

function isRepeated(arr) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[j] === arr[i]) return true;
    }
  }
  return false;
}

面试官说时间复杂度高

于是我说了先排序,再比较相邻的两个:

function isRepeated(arr) {
  arr.sort((a, b) => a - b);
  for(let i = 1; i < arr.length; i++){
    if(arr[i] == arr[i-1]) return true;
  }
  return false;
}

然后面试官说:既然说到排序,你不妨写个快排吧!


美团二面

时间:2020/03/30 11:00 75 分钟
形式:牛客网面试间

  • 前一个小时都在问项目(根据我的项目发散,提需求场景,问怎么实现。)
    我简历上写的三个项目都详细问了,以万能计算器App为例:
    • 开发的背景?
    • 有考虑浮点数运算怎么处理吗?
    • 用户异常输入怎么处理?
    • 除了计算时抛出错误,计算器有在用户输入时做限制吗?
    • 汇率转换:
      • 汇率转换的接口数据是从哪里拿的?
      • 不同国家的金钱表示符不一样,怎么处理?
      • 不同国家的数字表示法不一样,怎么处理?
      • 你觉得JS会在不同国家的数字表示法做处理吗?
      • 你一般通过什么途径了解JS的API?
      • 如何考虑做i18n?
  • 写一道真实场景题:
    • 进入页面后,调用 KNB (getDeviceInfo,getUserInfo,getRiskInfo等),获取到一堆数据
    • 点击按钮后,出现loading动画
      • 只有获取到 KNB 的数据以后,才能够发送fetchData请求
      • 获取到fetchData的数据后,再结束loading动画

我React相对熟悉点,就用React写了:

function App(){
    const [data, setData] = useState({});
    const [loading, setLoading] = useState(false);
    let Promise = null;

    useEffect(()=>{
        Promise = Promise.all([//...])
        Promise.then((res) => {
            setData(res)
            Promise = null;
        })
    }, [])

    const fetchData = async () => {
        setLoading(true);
        if(Promise !== null) await Promise;
        fetch('').then(res => {
            console.log(res)
            setLoading(false);
        })
    }

    return (<div>
             {loading ? <div className='loading-animation' /> : null}
             <button onClick={fetchData}></button>
            </div>)
}

美团三面

时间:2020/04/06 11:00 36 分钟
形式:牛客网面试间

前面聊了20分钟怎么做前端埋点,性能监控的方案
然后就是聊聊人生:为什么会选择前端,未来职业规划,对这边实习的设想等等(

#实习##面经##美团##前端工程师#
全部评论
请问楼主三面面试官是男的还是女的呀~
点赞 回复 分享
发布于 2021-05-31 12:53
楼主,时间是2020还是2021呀😂
点赞 回复 分享
发布于 2021-05-26 19:59
楼主北京吗?
点赞 回复 分享
发布于 2021-04-07 15:09
楼主有收到hr面吗
点赞 回复 分享
发布于 2021-04-07 12:55
3面吗
点赞 回复 分享
发布于 2021-04-06 21:59

相关推荐

记录第一次大厂面试面试官很温柔,我说的乱七八糟的他也一直认真听点头,感谢。。。1.自我介绍,说了十分钟,问了一个全栈开发的项目2.AES&nbsp;RSA都是什么,有什么区别,私钥公钥有几对(勉强)3.JWT是什么,全称是什么(勉强)4.React&nbsp;Hooks都是什么,和vue的有什么区别,Reacthooks怎么用(还行)5.JS数据类型都有什么(还可以)6.数组API都有什么,用过哪些(说了一个reduce一个include,之前背的全部忘光)7.前端显示图片的方式,图片可视化的标签都有什么(没复习到说了img)8.canvas是什么,在项目里怎么使用(没复习到)9.如何实现button的渐变效果,比如从深红到浅红的渐变,有几种实现方式(意想不到,说了项目一个kendoUI的实现方法)10.JS数组都有什么,用在哪里,对象数组是什么(还行)11.JS首页渲染怎么实现,也就是浏览器渲染首页流程(复习到了,勉强能说)12.白屏怎么办,懒加载是什么怎么实现(懒加载背完忘了完蛋)13.React状态管理工具怎么用(一开始没想起来React的,说了vuex+pinia,具体地说了vuex,后来突然想起来了,说了redux和组stand和usestate,没敢细说)14.v-if&nbsp;和v-show有什么区别。都是干什么的(说了先if后show,背过忘了)15.手撕:&nbsp;m*n&nbsp;初始化值为0,尽可能简单的写16.开始深挖项目和实习:首页渲染页面性能提升50%怎么做到的之前实习项目的组件是公司自己的还是你自己写的(自己写的)分页是你做的还是后端帮你(后端帮我)项目的数据量有多少之前应用的页面为什么会白屏,闪退,原因是什么知道吗,是搜输入的时候就闪退还是什么...(还有很多聊了20min具体记不太清了)17.平时用ai吗都用什么,让ai写css给他指令怎么给(这能咋给)18.ai使用占比多少,90%?(苦笑着说60%70%吧)19.反问环节,问了面试官这个岗位的业务,自己哪里需要再提升,面试官回答让把技术基础再打牢固一点,技术要全面,项目要清晰地知道每部分的内容,要做好owner的角色(面试官谆谆教诲我一定铭记)感觉问的很基础但是很细,会深挖项目挖挖挖一定要好好准备,我回答的很乱复习非常没到位,手撕代码感觉送分讲了思路面试官提示半天也没撕出来。。fw啊,,面试全程65min,能接到团的面试真的意想不到,双非本能面上已经很感激了,一次宝贵的经历,感谢上苍,将来一定要好好学东西把基础打好啊!
查看23道真题和解析
点赞 评论 收藏
分享
评论
6
46
分享

创作者周榜

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