zoukankan      html  css  js  c++  java
  • 2018 CVTE 前端校招笔试题整理

    昨天晚上(7.20)做了CVTE的前端笔试,总共三十道题,28道多选题,2道编程题 。做完了之后觉得自己基础还是不够扎实,故在此整理出答案,让自己能从中得到收获,同时给日后的同学一些参考。

    首先说一下两道肥肠简单的编程题:

    1.请实现这样一个函数,输入参数为一个长度为2n的整数数组,以两个整数一组的方式将数据分组,并使每组数组最小值相加为最大,输出这个最大值。

    输入[1,4,3, 2],输出为4
    输入[1,5,7,9, 4, 12],输出为15

    思路:把数组按大小排序然后相邻两项分为一组,取每组较小的一个数相加即可。

    function arrApart(arr){
        arr.sort( function(a,b){return a-b} );
        var len = arr.length;
        var result = 0;
        for(i = 0 ; i < len ; i=i+2){
            result += arr[i];
            console.log(arr[i]);
        }
        return result
    }
    
    console.log("result: "+arrApart([3,1,4,7,2,12,6,8]))  //result: 18

    2. 用flex实现一个三栏布局,左右定宽,中间自适应。这个就很简单了。

    <style>
    body{
      margin: 0;
      padding: 0;
    }
    .box{
      display: flex;
    }
    .left{
      width: 200px;
      height:400px;
      background: red;
    }
    .middle{
      flex-grow:1;
      height:400px;
        background: yellow;
    }
    .right{
      width: 120px;
      height:400px;
       background: blue;
    }
    </style>
    </head>
    <body>
    <div class="box">
      <div class="left"></div>
      <div class="middle"></div>
      <div class="right"></div>
    </div>
    </body>

    下面是部分小题:

     1. 以下代码输出啥?

    for(var i={j:0};i.j< 5;i.j++){
    (function(i){
        setTimeout(function(){console.log(i.j)},0);
        })(JSON.parse(JSON.stringify(i)));
    }
    输出啥?//0,1,2,3,4

    for循环体内创建了一个自执行的匿名函数,立即把每一个 i 以 JSON.parse(JSON.stringify(i)) 处理之后按值传递给匿名函数的参数。这里的每个i是个对象,JSON.stringify()是从一个对象中解析出字符串,即JSON.stringify(i) === '{"j": 0 }',而JSON.parse()是从一个字符串中解析出json对象,即JSON.parse('{"j": 0 }') === { j : 0 }, 一波操作之后传的其实还是i,然后再一个个把i.j 的值打印出来,结果是0,1,2,3,4

    2. 已知一算术中缀表达式为A-(B+C)*D+F/G ,则可算出后缀表达式为( )

    所谓前缀、中缀、后缀表达式,它们都是对表达式的记法,因此也被称为前缀记法(波兰式)、中缀记法和后缀记法(逆波兰式)。它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后缀同理。

    变换步骤如下:a. 先按优先级给每个表达式加括号: (A-(((B+C)*D)+(F/G)))   b. 将每个括号内的运算符丢到括号后面:((A-((B+C)*D))+(F/G))    c. 去掉括号:ABC+D*-FG/+   (中缀变前缀就是把运算符丢到括号前面)

    3. Web Workers:Web Worker是HTML5提供的一个JavaScript多线程解决方案,其实就是在Javascript单线程执行的基础上,开启一个子线程,进行程序处理,而不影响主线程的执行,当子线程执行完毕之后再回到主线程上,在这个过程中并不影响主线程的执行过程。但是子线程完全受主线程的控制,切子线程不能操作DOM,只有主线程可以操作DOM,关于web workers的使用可以参考这篇文:https://segmentfault.com/a/1190000012528806

    4. 生成器函数Generator :https://www.cnblogs.com/wangfupeng1988/p/6532713.html

    5. 以下代码输出啥?

    var Func = () => console.log('a');
    setTimeout(Func,0);
    console.log('change');
    Func = () => console.log('another a');

     依次输出:change、a 。原因:【JS运行机制】JS代码先执行同步代码,将第二行的setTimeout中的异步任务放进异步队列,等待同步任务执行完了再推入event loop执行,故先输出第三行的“change”,而后为何输出“a”而不是“another a”呢? 我理解的是,第二行放入异步队列里的是包括Func的函数体的要执行的代码,切断了Func变量和它的引用关系,所以即使第四行已经改变了Func函数的函数体也不会对异步队列中的代码产生影响。(纯个人理解,如果有误烦请指出)

    6. 

    var setPerson = function(person) {
      person.name = 'kevin';
      person = {name:'rick'};}
      var person = {name:'alan'};
      setPerson(person);
      alert(person.name);  //"kevin"

    在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部;当在函数内部重写引用类型的形参时,这个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立即被销毁。

     7.未完待续。。

  • 相关阅读:
    简单实现 C# 与 Javascript的兼容
    如何写好CSS系列之表单(form)
    D3、openlayers的一次尝试
    如何写好css系列之button
    mockjs,json-server一起搭建前端通用的数据模拟框架
    AIX中的/etc/inittab文件
    AIX中crontab和at 定时任务
    AIX中的服务管理
    AIX系统的备份和恢复
    AIX中磁带设备的使用
  • 原文地址:https://www.cnblogs.com/YiNongLee/p/9344878.html
Copyright © 2011-2022 走看看