拼多多前端笔试题目-2018/8/30

本次拼多多的监考力度加大了,弄了个小程序,手机扫描,然后得全程打开程序页面,否则判作弊。

但我还是想吐槽,我鼠标只不过不小心移到了谷歌浏览器搜索栏旁边的一个小按钮上就被记了一次。

题型:

    一、 选择题(34分)

    二、简答题(主要是编程题,以简答题的形式作答)(66分)

下面题目详细内容。

一、选择题:

    (1)考察时间复杂度计算:

       题目具体记不清楚了。不过大概是两层for循环的计算。

     (2)考察css  :在标题前插入图像(利用before、after等属性) 如在

标题前

     (3)关于作用域的问题。具体记不清了。

      (4)下列哪个表达式会返回true.

         A、'0'    B、1+'0'===1  C、undefined  D、1+‘0’ ===‘1’

        (5)关于 && 和 || 的运算

        (6)当表单上传文件时enctype应该设置为什么?

     enctype有以下几种取值:

  • application/x-www-form-urlencoded在发送前编码所有字符(默认)(空格被编码为’+’,特殊字符被编码为ASCII十六进制字符)
  • multipart/form-data 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
  • text/plain 空格转换为 “+” 加号,但不对特殊字符编码。

         (7)考察的是JS中数组的长度及其特性  (数组是可变的)

         (8)‘5’+3 和‘5’-3的结果

           

         (9)关于promise的用法:

  

  const promise =new promise((resolve,reject)=>{
        console.log("a");
        resolve();
        console.log("b");
  });
      promise.then(()=>{

        console.log("c");
    })
     console.log("d");

             (10)主要考察Math的相关方法,截取小数的整数部分的方法:Math.floor(): 即将小数向下取整。

           (11)主要考察 typeof的用法:console.log(typeof null)  :object   

            (12) 考察变量作用域。

var a="aaaa";
(function(){
    console.log(a);
    var a ="bbbb";
})();

          输出的结果为 undefined.     

         (13)本题涉及到函数作用域、闭包、setTimeout()

for(var i=0;i<5;i++){
    setTimeout(function(){
        console.log(i);
    },1000);
}

//输出55555


for (var i = 0; i < 5; i++) {
    setTimeout(function(a) {
        console.log(a);
    }(i),1000);
}

//0.1.2.3.4.5

      本题  两个疑点:

      1、延迟的时间同样为0,为何先执行下面的for循环呢?

       答:函数后加()表示是一个立即执行函数,在setTimeout函数执行调用时就被执行了,而不是等到定时器到点后被执行;而setTimeout(fn,0)并不是立即执行,只是表示下一次事件循环到达时可以马上执行 
备注:setTimeout绑定的回调函数只是往Javascript的事件循环机制中注册了一个定时器,这个定时器只可能在当前事件循环的下一次事件循环中才有可能被执行。

      2、为何循环1处的for循环输出结果都是5,循环2处的for循环是0,1,2,3,4,5呢?

    因为在循环1处,var声明的变量提升了,作用于函数作用域,函数中变量i指向for之前处声明的变量,在for循环结束后i的值就是5,所以setTimeout执行时,其中的变量i值已经是5,为此输出结果均是5

  (14)有关于margin-bottom:-5px  会有什么效果?

     经验证:尚未发现有啥作用(欢迎指教)

 (15)具体原理:

var a={};
   var b={key:'b'};
   var c={key:'c'};
   a[b]=123;
   a[c]=456;
   console.log(a[b]);//456
   console.log(a[c]);//456
   console.log(a);//{'[object Object]':456}

 (16)关于点击鼠标后的顺序

所有浏览器中,当用户通过鼠标操作触发 click 事件时,事件触发顺序: 
1、MouseDown 事件 
2、Focus 事件 
3、MouseUp 事件 
4、Click 事件 

二、简答题(共七道题)

1、涉及到数组的push().unshift(),shift(),concat()等

 var arr=[1,2,3,4];
 arr.push(1);
 arr.unshift(2);
 arr.shift();
var ss=arr.concat([1,2,3]);
console.log(ss);

2、输出字符串中所有排列的可能,如 var str="abc",输出“abc,acb,bac,bca,cab,cba”;

3、数据格式转化:

var  obj1=[
{id:1,name:"a",parent:null},
{id:2,name:"b",parent:1},
{id:3,name:"c",parent:2}];

var  obj2={

           {id:1,

            name:"a",

            child:{

                 id:2,

                 name:"b",

                 child:{

                  id:3,

                  name:"c"
 
                   }

               }

            }
        }

     4、编写程序找出数组中重复的元素

         var    arr1=[1,2,3,1,3,4,5,4,6];

       输出:arr2=[1,3,4]

     5、当var   a =new  A('testa')会发生什么?

      6、浅谈JS的继承,编写一个继承方法。

      7、关于日志的输出并添加前缀:形如:

    log(hello world)=>log((aaaaa)hello world);

   log('hello','world') =>log((aaaaa)hello world);

      8、关于原生JS实现dom的知识点:

         

        拼多多,拼的多

       

你可能感兴趣的:(前端面试总结)