哔哩哔哩2020校园招聘前端笔试题(卷一)

  • Post author:
  • Post category:其他


1.

下面哪几个和

[http://store.company.com/dir/page.html]


符合同源策略?

( )

A. http://store.company.com/dir2/other.htm

B. https://store.company.com/dir/secure.html

C. http://store.company.com:81/dir/etc.html

D. http://news.company.com/dir/other.html


答案:A

同源表明,同协议,同域名,同端口号

端口号:http默认为80/8080/3128/8081/9080,https默认443

2.

关于DOMContentLoaded和load事件说法正确的是?


A. DOMContentLoaded事件比load事件更早执行

B. load事件比DOMContentLoaded事件更早执行

C. 按监听代码从上到下先后执行

D. dom文档完全加载完后执行load事件

答案:A


在任何情况下,DOMContentLoaded的触发不需要等待图片等其他资源加载完成。当HTML部分被完全加载以及解析时,DOMContentLoaded事件会被触发,而不必等待样式表,图片或者子框架完成加载。

页面上所有资源(图片,音频,视频等)被加载以后才会触发load时间。

3.

如何在 div 容器里展示

这几个字符?

A.

B.

C. document.querySelector(‘div’).innerText = “



D. document.querySelector(‘div’).innerHTML = “

sssssss

答案:C

innerHTML:设置或获取标签所包含的HTML与文本信息。(不含标签本身);

innerText:设置或获取标签所包含的文本信息。(不含标签本身)

outerHTML:设置或获取标签本身以及所包含的HTML与文本信息。(包含标签本身)

outText:设置或获取标签本身以及所包含的文本信息。(包含标签本身)

4.

以下是哪一组全是块级元素?

A. div i h2 li

B. div p h1 ul

C. li ul h3 span

D. p h4 canvas em

答案: B

在这里插入图片描述

5.


<div class="box box1 box2" style="color:#222">hello</div>

,


这个div里面最终的字体颜色是什么?


.box{


color:#999;

}

.box{


color:#333 !important;

}

.box2{


color:#666

}

A. #999

B. #222

C. #333

D. #666

在这里插入图片描述

6.

以下不是box-sizing的属性是?

A. border-box

B. auto

C. content-box

D. inherit

答案: B

在这里插入图片描述

7.

以下不是CSS伪类选择器的是?

A. :first-child()

B. :before

C. :center

D. :after

正确答案: C

在这里插入图片描述

在这里插入图片描述

8.

‘-1 >>> 32 的值为( )’


A. -1

B. 1

C. 0

D. 2^32-1

正确答案: D

这个是带符号右移

这个是无符号右移

无符号右移运算符(>>>)

按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移(>>) 相同,但是对于负数来说不同。

正数

例:20 >> 2

1、首先转化为二进制,20的二进制为0001 0100

2、将二进制数向右移两位,高位补符号位(0),得到0000 0101

3、最后将二进制数转化成十进制数,0000 0101转化为十进制为5

所以,20 >> 2 = 5

负数

例:-20 >> 2

1、首先转化为二进制,20的二进制为1110 1100 //取反加1 20的二进制为0001 0100 取反得到1110 1011 加1后得到1110 1100

2、将二进制数向右移两位,高位补符号位(1),得到1111 1011

3、最后将二进制数转化成十进制数,1111 1011转化为十进制为-5 //取反 0000 0100 加1 0000 0101 因为是负数,也就是1000 0101也就是2的2次方加2的零次方 等于-5

所以,-20 >> 2 = -5

9.

[1 < 2 < 3, 3 < 2 < 1] ( )

A. [true, true]

B. [true, false]

C. [false, true]

D. [false, false]

正确答案: A

[1 < 2 < 3, 3 < 2 < 1]

1<2 => true

true < 3 => true // true自动转换为1

3<2 => false

false < 1 => true //false 自动转换为0

answer: [true, true]

10.

[‘1’, ‘2’, ‘3’].map(parseInt) ( )

A. [1, 2, 3]

B. [0, 1, 2]

C. [NaN, NaN, NaN]

D. [1, NaN, NaN]

正确答案: D

[‘1’, ‘2’, ‘3’].map((item, index) => {


return parseInt(item, index)

})

parseInt(‘1’, 0) // 1 默认十进制的1

parseInt(‘2’, 1) // NaN 1进制没有2

parseInt(‘3’, 2) // NaN,2进制逢2进1

ps 啥是parseInt

parseInt(‘11’,2) //二进制的11 转换成十进制应该是 3

ppppps

[‘10’,‘10’,‘10’,‘10’,‘10’].map(parseInt); // [10, NaN, 2, 3, 4]

意思是0(默认0是十进制)进制的十转换成十进制是多少 1进制的十转换成十进制是多少 二进制的10转换成十进制是多少

11.

let a = { c:1 }

let b = a

a = 1

b.c = 2

a.c = (?)

A. 1

B. 2

C. undefined

D. NaN

正确答案: C

let a = { c:1 } //a的作用域指向 {c:1} 这个地址

let b = a //b的作用域指向 {c:1} 这个地址

a = 1 // a指向的作用域发生改变,指向1,但是{c:1} 这个地址还存在

b.c = 2 //改变{c:1} 这个地址中c的值为2

a.c = (?) //a指向的地址已经发生改变,没有c这个变量,所以返回undefined

12.

console.log(1);

setTimeout(() => {console.log(2)}, 0);

console.log(3);

Promise.resolve(4).then(b => {


console.log(b);

});

console.log(5);

A. 1 2 3 4 5

B. 1 3 5 4 2

C. 1 4 2 3 5

D. 1 3 5 2 4

正确答案: B

console.log() -> 同步

promise -> 异步,微任务

setTimeout -> 异步,宏任务

执行顺序: 同步 > 异步,微任务 > 异步,宏任务

13.

Math.abs(-6.666) 的结果是多少?

A. -6.666

B. 6

C. -6

D. 6.666

正确答案: D

Math.abs(x) 返回x的绝对值

Math.pow(x, power) 返回x的power次幂

Math.pow(…nums) 返回nums中每个数平方和的平方根

Math.sign(x) 返回表示x符号的1、0、-0或-1

Math.trunc(x) 返回x的整数部分,删除所有小数

Math.sqrt(x) 返回x的平方根

Math.cbrt(x) 返回x的立方根

Math.acos(x) 返回x的反余弦

Math.asin(x) 返回x的反正弦

Math.atan(x) 返回x的反正切

Math.cos(x) 返回x的余弦

Math.sin(x) 返回x的正弦

Math.tan(x) 返回x的正切

1.丢弃小数部分,保留整数部分

js:parseInt(7/2)

2.向上取整,有小数就整数部分加1

js: Math.ceil(7/2)

3,四舍五入.

js: Math.round(7/2)

4,向下取整

js: Math.floor(7/2)

14.

替换字符串 bilibili 替换字符串中所有的b变成大写B

A. ‘bilibili’.delete(‘b’, ‘B’)

B. ‘bilibili’.replace(/b/g, ‘B’)

C. ‘bilibili’.replace(‘b’, ‘B’)

D. ‘bilibili’.toUpperCase()

正确答案: B

replace()第一个参数可以是正则表达式

/b/g的意思是:匹配所有的b字符

字符串 stringObject 的 replace() 方法执行的是查找并替换的操作。它将在 stringObject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。

replacement 可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。

15.

[1,2,3,4,5] 的数组的基础上 删除第一个 和 最后一位

A. [1,2,3,4,5].replace(1, -1)

B. [1,2,3,4,5].reverse(1,-1)

C. [1,2,3,4,5].toString(-1,1)

D. [1,2,3,4,5].slice(1, -1)

正确答案: D

slice(1,-1) slice不会操作原数组,会返回一个新数组 。 表示从索引为0开始截取,-1表示截取到倒数第二个,并将这个新数组返回。

16.

function setname(name){


this.name = name

}

setname.prototype.printName = function(){ console.log(this.name) }

let a = new setname(“cc”)

a.name = “dd”

a.

proto

.name = “ee”

a.

proto

.printName() // ?

a.printName() // ?

A. ee dd

B. cc dd

C. ee cc

D. ee Error

正确答案: A

首先定义了一个函数 setname()接下来定义了一个方法printname

调用new 方法生成对象传参 “cc” 此时a对象上面的name属性为cc

在这里插入图片描述

接下来通过a.name修改属性 此时a对象的name属性为 dd

在这里插入图片描述

最后修改通过a修改构造函数中的属性 –proto–

在这里插入图片描述

17.

const players = [ {name: ‘UZI’, team: ‘RNG’, position: ‘ADC’},

{name: ‘theshy’, team: ‘IG’, position: ‘TOP’},

{name: ‘Metoer’, team: ‘BLG’, position: ‘Jungle’},

{name: ‘ADD’, team: ‘BLG’, position: ‘TOP’},

{name: ‘Scout’, team: ‘EDG’, position: ‘Middle’},

{name: ‘iBoy’, team: ‘EDG’, position: ‘ADC’},

{name: ‘Baolan’, team: ‘IG’, position: ‘Support’},

{name: ‘Xiaohu’, team: ‘RNG’, position: ‘Middle’}]

获取列表中战队名是BLG 位置上路的 选手对象?

A. players.filter(x=> x.position === ‘TOP’ && x.team === ‘BLG’)

B. players.get(position=‘TOP’, team=‘BLG’)

C. players.find(position=‘TOP’, team=‘BLG’)

D. players.findOne(position=‘TOP’, team=‘BLG’)

正确答案: A

players.filter(item=>item.position === ‘TOP’ && item.team === ‘BLG’)

[{name: “ADD”, team: “BLG”, position: “TOP”}]

players.find(item=> item.position===‘TOP’ && item.team === ‘BLG’)

{name: “ADD”, team: “BLG”, position: “TOP”}

18.

找出有序数组(从小到大排列)中和为sum的两个数,要求复杂度为O(n),找到一组即可

答案:

function solve (arr, target) {
  let i = 0;
  let j = arr.length - 1;
  let first, last;
 
  while (i < j) {
    first = arr[i];
    last = arr[j];
    const sum = first + last;
    if (sum === target) return [first, last]else if (sum > target) j--;
    else i++;
  }
 
  return null;
}

19.**判断由”()[]{}”6种括号组成的字符串是否合法

  1. 所有括号必须闭合
  2. 左括号必须在正确的位置闭合**

1.利用 map 实现一一对应

2.利用栈

function IsValue(str) {
    let map = new Map([
        ['(',')'],
        ['{','}'],
        ['[',']']
    ])
    let stack = [];
    for(let i = 0 ; i < str.length ; i ++) {
        if(map.has(str[i])) { // 在左边
            stack.push(str[i])
        } else { // 在右边
            if(stack.length == 0) return false;
            let top = stack[stack.length - 1]; // 栈顶元素
            if(map.get(top) == str[i]) {
                stack.pop()
            } else {
                return false;
            }
        }
    }
    return true;
}
 
while(line = readline()) {
    var str = line;
    print(IsValue(str))
}

不利用其他函数,直接判断,简单容易理解

var str = readline();
var n = str.length;
var arr = [];
var j=0;
for(var i=0;i<n;i++){
    switch(str[i]){
        case '(':
            arr[j++] = '(';
            break;
        case '[':
            arr[j++] = '[';
            break;
        case '{':
            arr[j++] = '{';
            break;
        case ')':
            if(arr[j-1]=='('){
                j--;
            }else{
                i=n;//跳出
            }
            break;
        case ']':
            if(arr[j-1]=='['){
                j--;
            }else{
                i=n;//跳出
            }
            break;
        case '}':
            if(arr[j-1]=='{'){
                j--;
            }else{
                i=n;//跳出
            }
            break;
    }
}
if(j==0){
    console.log("true");
}else{
    console.log("false");
}

20.

有n级台阶,每一步可以走1级或2级,问一共有多少种走法

使用数组保存变量。比使用递归节省时间。。。

   function NumberOf1(number) {
      // write code here
      var arr = [1, 2]
      for (var i = 2; i < number; i++) {
        arr[i] = arr[i - 1] + arr[i - 2]
      }
      return arr[number - 1]
    }

就是一道斐波那契数列的经典问题,学习算法基础递归的时候老师都有讲。

while (line = readline()) {
    var n = parseInt(line);
    var res = fibonacci(n);
    print(res);
}
 
function fibonacci(n) {
    // 递归基
    if (n <= 1) {
        return 1;
    }
 
    // 递归计算实例
    return fibonacci(n - 1) + fibonacci(n - 2);
}

共n个楼梯,第一次跳1阶,后面还有n-1,有n-1种跳法;第一次跳两个台阶,后面还有n-2,有n-2种跳法。所以递归方式是f(n-1)+f(n-2)

function getStairs(stair) {
    if(stair <= 0) {
        return0
    }
    if(stair === 1) {
        return1
    }
    if(stair === 2) {
        return2
    }
  
    return getStairs(stair - 1) + getStairs(stair - 2)
}
  
conststair = parseInt(readline())
console.log(getStairs(stair))



版权声明:本文为qq_42459832原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。