美团一面(凉)
2021.8.30下午三点面试 时长大概45分钟
投了上海笔试因为编译器版本问题心态炸了 北京捞的(反正也面不过 哪里不都无所谓么…… )
首先自我介绍
1、上来就是算法题
m元钱,饮料的单价是n, 收集k个瓶盖可以换一瓶饮料,问一共可以喝到多少瓶
样例10,2,3
此外用递归再写一次。
var m=10;
var n=2;
var k=3;
//function solve(m,n,k){
var tmp_k=0;
var rest_k=0;
var num=0;
tmp_k=parseInt(m/n);//本次可以买的饮料
num+=tmp_k;//总计买的饮料
rest_k=tmp_k;
function solve(rest_k,all_num){
console.log(rest_k,all_num)
if(rest_k>=k){
rest_k=rest_k-k;
rest_k++;
all_num++;
solve(rest_k,all_num);
}else{
return all_num;
}
}
console.log(solve(rest_k,num));本来看上去很简单,上去就写,结果磕磕巴巴了很久,编译器还坏了,只能本地慢吞吞,提示说钱数是无所谓的,改了半天
然后递归……破防了,递归我是真的不会。草,我明明都学过我明明都会写,我只想说个草,还是不能忽视忘记的重要性啊,草,不会个p,我只是会忘而已
仔细分析后递归我会了,只是少了返回值而已。
加上return (solve(rest_k,all_num));
这样就行了,前面也是直接if(rest_k<k)return all_num;
自己画个图就能理解……
emmm…… 看上去很简单但是我就几乎没有思考就直接写但实际上这也是我的弱点吧=。=
虽然写了也没用,但还是要说:
① 先想清楚思路,再做,是最好的,越简单越要这样
② 变量名写清楚。
2、代码题,输出什么,为什么入参不会有影响。
function fn(a){
console.log(a);
var a=123;
console.log(a);
function a(){}
console.log(a);
var b = function(){}
console.log(b); // function,这个没啥可说的,就忽略了
}
fn(1)
关于函数形参相关的提升,如果有形参传入,那么形参赋值是在变量提升之前
比如形参var a=1,然后var a提升,再打印a就是1,等到a赋值了才是又赋值后的n
就会这样
(左至右遇见var a,则编译器会询问作用域是否已经存在叫a的变量了,如果不存在,则招呼作用域声明一个新的变量a,若已经存在,则忽略var 继续向下编译)
var a=1
var a这个也没有问题的,但是a不是undefined吗
这个问题不复杂,思路不要搞错了,提升什么的弄出来再找。
相当于是
function fn(a){
var a;
function a(){};
console.log(a); // function
a=123;
console.log(a); // 123
console.log(a); // 123
}
fn(1)
3、new的时候发生了什么 √ 如果不new直接写会怎么样?
- 首先定义空对象,然后连接原型链,call改变指向,执行构造函数,然后返回对象
- (1) array和object加不加是一样的
(2)String(),不加new将参数格式化为字符串,加new则返回的是String对象。(number的这种也是,date不加new是字符串加了是date对象)
(3)最典型的构造函数中,加new是作为构造函数,不加就只是普通函数,没有返回值,会return undefined,函数里的属性都被加到window上了function Man(age){ this.sex="male"; this.age=age; } m1=Man(20); m2=new Man(21);
m1就是函数Man()执行的返回值,也就是undefined. 在函数执行过程中,属性被加到全局作用域或者Man方法所属的对象上了。执行之后window.sex=="male"
而m2是Man的实例,Man {sex:"male",age:21}
4、手写继承不用es6(忘记了)
function A(t) {
this.t=t
}
function B(t,s){
}
5、手写防抖节流 &概念
除了防抖和节流又弄混了,以及没有return一个function(return function才是闭包的灵魂)
如果可以自己尝试调用的话就好了
function throttle(fn,seconds){
var timer=null;
return function() {
if(timer!=null){
return;
}
timer=setTimeout(function(){
fn();
timer=null;
},seconds);
}
}
var fff=function (){console.log('222');}
var f=throttle(fff,10);
f();
f();
f();防抖
function debounce(fn,delay){
var timer=null;
return function(){
if(timer)clearTimeout(timer);
timer=setTimeout(()=>{
fn();
},delay);
// if(timer)return;
// timer=setTimeout(()=>{
// fn();
// timer=null;
// },delay)
}
}
var f=function(){
console.log('qwq');
}
var ff=debounce(f,2000);
ff();
ff();
ff();
vuex里的纯函数是否了解 不了解
$nextTIck是否了解,随便说了堆
面完难受了好久。几乎不给什么提示,写个点啥就不停的怀疑的口吻问为什么,搞得他好像什么都不知道一样,不说是对是错就一直疑问句往下问,给我整自闭了。。
面试时还戴口罩
总结只能说八股文课是非常有必要的。虽然不深,但好歹真的能对付大部分了,关键是自己听课的时候也有一些偏差自己没有补,才造成一些漏洞
已收到感谢信。
#美团##笔经#
查看8道真题和解析