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. 未完待续...

猜你喜欢

转载自www.cnblogs.com/YiNongLee/p/9344878.html