美团优选

1,381 阅读4分钟

//https://www.nowcoder.com/discuss/647554?channel=-1&source_id=discuss_experience_nctrack
/*1,vue双向数据绑定,vue3.0如何实现的?
2,算法:输入{a:100,b:200,c:300}输出一个数组,按值得大小输出对应得key;
3,节流的实现=》闭包好处坏处
4,为什么其他语言里不存在闭包?小哥哥解释一下,其他语言返回的是基本数据类型......,不大懂,求指点!!!
5,   vue的生命周期
6,算法:将一个树形结构{a:1,b:{b1:1}}根据传入层级拿到不同层级的key;
感觉够呛,第一个算法题写的不简洁,第二个没写出来;
可能是吃饭时间面试,那面不是很安静,美团的小哥人很nice,怕打扰我思路还贴心地闭麦了*/
//1、vue双向数据绑定,vue3.0如何实现的?:https://segmentfault.com/a/1190000021991591
//2、算法:输入{a:100,b:200,c:300}输出一个数组,按值得大小输出对应得key;
let obj={a:100,b:200,c:300}
function so(obj){
    let result=Object.keys(obj).sort((a,b)=>{
        return obj[a]-obj[b]
    })
    return result
}
console.log(so(obj))
//3、节流的实现=》闭包好处坏处
/*闭包的优点
可以重复使用变量,并且不会造成变量污染
全局变量可以重复使用,但是容易造成变量污染。
局部变量仅在局部作用域内有效,不可以重复使用,不会造成变量污染。
闭包结合了全局变量和局部变量的优点。
可以用来定义私有属性和私有方法。

闭包的缺点
比普通函数更占用内存,会导致网页性能变差,在IE下容易造成内存泄露。*/

function throttle(fn){
    let canRun = true
    return function(){
        if(!canRun) return
        canRun = false
        setTimeout(()=>{
            fn.apply(this,arguments)
            canRun = true
        },500)
    }

}
//6、将一个树形结构{a:1,b:{b1:1}}根据传入层级拿到不同层级的key;
/*let obj = {a:1,b:{b1:1}}*/
let obj = {a:1,b:{b1:1},c:{c1:{c2:2}}}
function Obj(obj,num){
    let res = []
    let index = 0
    function re(objnew){
        index++
        if (index >= num) {
            return res.push(Object.keys(objnew))
        }else{
            Object.keys(objnew).forEach((item)=>{
                if (typeof objnew[item] == 'object'){
                    re(objnew[item])
                }
            })
        }

    }
    re(obj)
    return res
}
console.log(Obj(obj,2));


/*
一面9月底。
1.this指向问题。(去MDN上看,秒杀,不要再看其他七七八八的this讲解)
2.JS事件循环。setTimeout不准,怎么做?
   (我答用requestAnimationframe)
3.vue双向绑定。要求手撕简单版。
  (去b站搜尤雨溪的视频看,学会那里面的简易版demo,以后面试就手撕这个demo,保证比你嘴巴强)
4.手写div中的span居中。
  (注意,用vertical-align是个坑,不起作用的!具体原因可以自己查查css,我用定位,flex两个方法实现)
5.算法:全排列。希望我用循环,紧张了,搞了半天没出来。他说最后给你5分钟,直接写递归。OK👌。

2面国庆回来
1.问了一堆双等的结果,比如undefined==null,false==[],
2.匿名函数的打印结果,有个答错了
var a=1;
(function a(){
    a=2;
    console.log(a)
})()
3.算法: 寻找第k大的数,要求空间o(1),时间nlogn。用快排思想就好了。千万别排完返回,那就凉了!

hr面
未来发展规划。
面试中学习到什么
(每次面试完建议反问面试官,对自己的评价,其实如果大体肯定,提出一些缺点,基本过了。如果说了不少问题,也没反转肯定一下,那基本凉了)
*/
//1.this指向问题。(去MDN上看,秒杀,不要再看其他七七八八的this讲解):
// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/this
 //2.JS事件循环。setTimeout不准,怎么做?
// (我答用requestAnimationframe):https://www.bbsmax.com/A/ZOJPGB4Pzv/

//4.手写div中的span居中。
// (注意,用vertical-align是个坑,不起作用的!具体原因可以自己查查css,我用定位,flex两个方法实现)
// https://www.jianshu.com/p/24c00a01da36
//https://www.jianshu.com/p/59f31a1704de

//5.全排列
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permute = function(nums) {
    const res = [];

    const backtrack = (path) => {
        //  递归终点
        if (path.length === nums.length) {
            res.push(path);
            return;
        }
        nums.forEach(n => {
            // 封住死路
            if (path.includes(n)) {
                return;
            }
            backtrack(path.concat(n));
        });
    }
    backtrack([]);

    return res;
};
console.log(permute([1, 2, 3]));

/*1.问了一堆双等的结果,比如undefined==null,false==[],
https://segmentfault.com/a/1190000016555947?utm_source=tag-newest*/
[] toNumber =>0
false toNumber =>0
false==[] //true

/*2.匿名函数的打印结果,有个答错了
var a=1;
(function a(){
    a=2;
    console.log(a)
})()
https://juejin.cn/post/6844903831789109256*/
//1. 判断输出结果,并且解释原因?
var a = 1;
(function a () {
    a = 2;
    console.log(a);
})();
// 输出结果
/*ƒ a () {
    a = 2;
    console.log(a);
}*/
//复制代码这道题,猛地一看,很多人都会觉得,console.log(a) 的值为
/*2,其实不然,立即调用的函数表达式(IIFE) 有一个 自己独立的 作用域,
 如果函数名称与内部变量名称冲突,就会永远执行函数本身;
 所以上面的结果输出是函数本身;如果将函数名字改一下,比如改为 xvar a = 1;*/
(function x () {
    a = 2;
    console.log(a);
})();
// 2


//3.算法: 寻找第k大的数,要求空间o(1),时间nlogn。用快排思想就好了。千万别排完返回,那就凉了!