小米 前端实习生 一面(凉经)

彼此自我介绍,问了下能实习的时间

项目及VUE

1、IM在线聊天系统实现了哪些内容,怎么实现的群聊

2、websocket断开连接了怎么处理(答了轮询,但实际没去实现)

3、开发人才管理系统遇到的难题(答的权限)

4、为什么选择使用路由的懒加载(用的import)

5、了解路由中的addRouters吗(只知道,没有用过。下来看了资料知道可以用addRouters实现前端权限分配)

6、vue2的双向绑定

7、data中定义的属性如果没有在template中使用的话是响应式的吗(正确答案:不是)(开始答错了,然后给面试官给我讲解了只有使用了才会对他响应式处理)

8、路由的常见模式,有了解原理吗,history模式打包后打开页面为空白是个怎么回事(只说了hash模式跟history模式,以及他们在路由样式的区别,具体原理并不是很清楚,空白页说的是因为打包后路径有问题,需要我们在设置中对路径进行修改,常见方法是 / 改为 ./ )

9、watch与computed的区别(面试官给我补充了下watch除了data中的属性可以监听,还可以对props、$route、$emit、computed等内容进行监听)

10、父子组件传值,兄弟组件传值

11、了解vuex吗(不怎么了解,只知道结构😅)

JS

12、手写实现instanceof(当时写的有问题,但思路对的)

正确代码:

function myInstanceOf(left, right) {
    let prototype = right.prototype
    left = left.__proto__ 
    while (true) { 
        if (left !== prototype) return false  
        if (left === prototype) return true 
        left = left.__proto__
    }
}

13、事件循环打印题(当时反复问我确认结果吗,还改动吗。哈哈哈哈还好没改)
(因为不太确定then的输出时机,面试管顺带问了事件循环,回答了下宏任务微任务、同步代码异步代码,整个的执行顺序

console.log('1');
setTimeout(function () {
    console.log('2');
    new Promise(function (resolve) {
        console.log('3');
        resolve();
    }).then(function () {
        console.log('4');
    });
});
new Promise(function (resolve) {
    console.log('5');
    resolve();
}).then(function () {
    console.log('6');
});
setTimeout(function () {
    console.log('7');
    new Promise(function (resolve) {
        console.log('8');
        resolve();
    }).then(function () {
        console.log('9');
    });
}); 

正确答案:1、5、6、2、3、4、7、8、9

then是微任务所以在Prmoise的内容执行完后执行

14、一道有些难度的for in输出判断,面试官顺带说了下for of,以及其他遍历方法

Object.prototype.a = 10;
var s = Symbol()
var obj = {
  [s]:20,
  b:30
}
Object.defineProperty(obj,'c',{
      value:40
})
for(let val in obj){
  console.log(val)
}
// console.log(Object.keys(obj));//b
//console.log(Object.getOwnPropertyNames(obj));//b、c
// console.log(Reflect.ownKeys(obj))//b、c 、symbol

正确输出:b,a
解释:for in 遍历输出的是对象自身的属性以及原型链上可枚举的属性(不含Symbol属性)(Object.defineProperty需在内设置enumerable:true才可使其为可枚举),原型链上的属性最后输出说明先遍历的是自身的可枚举属性,后遍历原型链上的。

Object.keys()
遍历对象返回的是一个包含对象自身可枚举属性的数组(不含Symbol属性)。
Objcet.getOwnPropertyNames()
输出对象自身的可枚举和不可枚举属性的数组,不输出原型链上的属性
Reflect.ownKeys()
返回对象自身的所有属性,不管属性名是Symbol或字符串,也不管是否可枚举。
15、算法
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词(用for循环实现)。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例 1:

输入: s = "anagram", t = "nagaram"
输出: true
示例 2:

输入: s = "rat", t = "car"
输出: false

    function words(stra,strb){
        if(stra===strb)return true
        if(stra.length!==0 && strb.length===0)return false
        if(stra.length===0 && strb.length!==0)return false
        let map=new Map()
        for(let i=0;i<stra.length;i++){
            if(map.has(stra[i])){
                map.set(stra[i],map.get(stra[i])+1)
            }else{
                map.set(stra[i],1)
            }
        }
        for(let j=0;j<strb.length;j++){
            if(map.has(strb[j])){
                map.set(strb[j],map.get(strb[j])-1)
            } else{
                return false
            }
        }

        // for (let [key, value] of map.entries()) {
        //     if(value!==0)return false
        // }
        map.forEach(function (key,val){
            if(val!==0) return false
        })
        return true
    }

现在下来了想了下,可以把他们变成数组,排序之后一次循环比较就可以。

反问:
小组技术栈和小组负责内容:vue,react都有,负责手机端画报部分前端以及电脑软件的前端部分
给我的建议:对不熟悉的地方去掌握了解下(估计是对我eventloop那里不太自信提出的建议),前端重要的还是把基础要掌握熟悉。

整个下来一个小时多点,总来说答得还算七七八八,但是代码方面就还是感觉自己明显的欠缺,并且还是要把基础搞牢哇😣😣

#小米面试##前端##面试题目##小米#
全部评论
学习了 收藏了 谢谢了
点赞 回复 分享
发布于 2022-01-16 11:50

相关推荐

02-11 12:20
门头沟学院 Java
面试中的青提很胆小:我不信有比我们学校更逆天的,计算机专业就业第一位是我们学校二餐厅的打印店
点赞 评论 收藏
分享
只写bug的程序媛:才15,我招行20多万,建设银行50多万,说放弃就放弃
点赞 评论 收藏
分享
评论
7
20
分享

创作者周榜

更多
牛客网
牛客企业服务