【2021】小米秋招前端方向第一场笔试

单选题

1.关于HTML 的语义,下列描述正确的是?

A、在HTML 中,元素、元素的属性和属性的值都是有语义的

B、HTML 语义是供搜索引擎爬虫理解页面用的,除此之外,并无其他作用

C、title 元素的语义是段落的标题

D、head 元素不显示,所以没有语义

HTML 语义是供搜索引擎爬虫理解页面用的, 也可体现页面的结构、便于开发

title 元素的语义是文档的标题 h(1-6) 元素的语义是段落的标题

多选题

2.下面关于Promise说法正确的是(注意“返回结果”的意思包含成功或者失败)

A、Promise.all在所有给定的promise都fulfilled后才返回结果

B、Promise.race在给定的promise中,某个fulfilled后才返回结果

C、promise.then的回调函数中,可以返回一个新的promise

D、对于一个向后台获取数据已经产生结果的promise:p1,再次调用p1.then,不会去重新发起请求获取数据

1、Promise.all()

const p=new Promise([p1,p2,p3])

p的状态由p1、p2、p3决定,分成两种情况。

(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。

(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

2、Promise.race()

const p = Promise.race([p1, p2, p3]);

上面代码中,只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的Promise实例的返回值,就传递给p的回调函数。

3、Promise.then()参考阮一峰es6对于链式调用的描述

4、Promise对象的特点
(1)对象状态不受外界干扰,Promise代表一个异步操作

(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果

3.在Linux 系统中,下列哪些操作可以把一个普通用户变为管理员?

A、su

B、passwd

C、usrchmod

D、修改/etc/passwd 文件

  • su(英文全拼:switch user)命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。
  • passwd命令用来更改使用者的密码
  • chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令

4.下面对于Vue 与 React 的描述正确的是

A、Vue 采用双向数据流,React 采用单向数据流

B、JSX 是由 React 推出的,所以在 Vue 中不能使用

C、Vue 和 React 不需要配合 NPM 也能使用

D、在Vue 中可以自定义指令

A、Vue和React都是单向数据流,即只支持父组件向子组件传参但不支持子组件修改props

B、在Vue中使用JSX语法可具体参考Vue文档-可复用性&组合-渲染函数&JSX一章

5.关于HTTPS 协议,描述正确的是?

A、HTTPS 协议同时用到了对称加密和非对称加密

B、HTTPS 实现内容完整性的手段主要是摘要算法

C、数字签名是私钥对内容摘要的加密

D、建立HTTPS 连接的过程,不会有明文传输

A、HTTPS 采用共享密钥加密(对称加密)和公开密钥加密(非对称加密)两者并用的混合加密机制。

B、TLS 的基本格式就是 密钥交换算法 - 签名算法 - 对称加密算法 - 摘要算法 组成的一个密码串。摘要算法保护数据的完整性,哪怕文件中改变一个标点符号,增加一个空格,生成的文件摘要也会完全不同。

C、“数字签名:结合使用公钥与散列算法”:发件人将一种散列算法应用于数据,并生成一个散列值(数据摘要)。 发件人使用私钥将散列值(数据摘要)转换为数字签名(即对摘要进行加密和签名)。 然后,发件人将数据、签名及发件人的证书发给收件人。

D、HTTPS加密请求(一次握手)过程:客户端发起握手请求,以明文传输请求信息,包含版本信息,加密-套件候选列表,压缩算法候选列表,随机数,扩展字段等信息。

6.下面可以声明数字的js代码是

A、const a = 0xa1

B、const a = 076

C、const a = 0b21

D、const a = 7e2

0x. 16进制 0 八进制 0b 二进制 里面只能有,0和1故c错误 e 指数

7.下面哪些数组方法会改变原数组

A、push

B、concat

C、splice

D、map

8.关于闭包,下列说法正确的是?

A、在闭包对应的函数销毁后,闭包依然在内存中,不会被回收

B、C 语言中也有闭包的概念

C、闭包是一种语言特性,很多函数是一等公民的语言在设计时都会选择

D、函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起构成闭包(closure)

闭包对应的函数被销毁,词法环境的引用也就不存在了,内存里就更不会存在闭包了。

9.关于cookie和session描述错误的是

A、通常下cookie比session安全

B、cookie数据存放在客户的浏览器上,session数据放在服务器

C、session是有有效期的,而cookie则没有有效期

D、session可以在多个服务器之间共享

cookie 可以被盗用,所以不安全

cookie 可以设置过期时间

cookie 可以多个服务器共享

10.下列哪些HTTP 响应码表示发生了错误?

A、202

B、304

C、401

D、500

1xx(临时响应)
表示临时响应并需要请求者继续执行操作的状态代码。

代码 说明
100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。

2xx (成功)
表示成功处理了请求的状态代码。
代码 说明
200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
201 (已创建) 请求成功并且服务器创建了新的资源。
202 (已接受) 服务器已接受请求,但尚未处理。
203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。
206 (部分内容) 服务器成功处理了部分 GET 请求。

3xx (重定向)
表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

代码 说明
300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

4xx(请求错误)
这些状态代码表示请求可能出错,妨碍了服务器的处理。

代码 说明
400 (错误请求) 服务器不理解请求的语法。
401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403 (禁止) 服务器拒绝请求。
404 (未找到) 服务器找不到请求的网页。
405 (方法禁用) 禁用请求中指定的方法。
406 (不接受) 无法使用请求的内容特性响应请求的网页。
407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
408 (请求超时) 服务器等候请求时发生超时。
409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。
411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
415 (不支持的媒体类型) 请求的格式不受请求页面的支持。
416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
417 (未满足期望值) 服务器未满足"期望"请求标头字段的要求。

5xx(服务器错误)
这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

代码 说明
500 (服务器内部错误) 服务器遇到错误,无法完成请求。
501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

11.以下属于CPU 内部结构的是哪些?

A、存储器

B、寄存器

C、运算器

D、控制器

cpu :寄存器 控制器 运算器 时钟

12.修改下列哪个CSS 属性会可能触发回流?

A、background-color

B、outline-width

C、border-width

D、transform

一个 DOM 元素的几何变化,常见的几何属性 width、height、padding、margin、left、top、border 等等

使 DOM 节点发生 增减 或 移动。

读写 offset ,scroll  和 client 属性的时候,浏览器为了获取这些值,需要进行回流操作。

调用 window.getComputedStyle 方法。

回流过程:由于 DOM 的结构发生了改变,所以需要从生成 DOM 这一步开始,重新经过 样式计算、生成布局树、建立图层树、再到 生成绘制列表 以及之后的显示器显示这一整个渲染过程走一遍,开销是非常大的。

13.var a = []; typeof a 的结果是?

A、array

B、object

C、null

D、function

typeof 返回值

Undefined => "undefined"

Null => "object"    // js默认规则

Boolean => "boolean"

Number => "number"

String => "string"

Symbol => "symbol" // ES5新增

Function => "function"

其他任何对象 => "object"

除 Function 外的所有构造函数的类型都是 'object'

例:var str = new String('String');

        typeof str; // 返回 'object'

正则表达式:某些浏览器不符合标准

        typeof /s/ === 'function'; // Chrome 1-12,不符合 ECMAScript 5.1

        typeof /s/ === 'object'; // Firefox 5+,符合 ECMAScript 5.1

例外:所有浏览器都暴露了一个类型为 undefined 的非标准宿主对象 document.all

        typeof document.all === 'undefined';

14.下列关于HTTP 协议的描述错误的是?

A、HTTP 是无状态的

B、HTTP 是传输层协议

C、HTTP 的可扩展性强

D、HTTP 是文本协议

HTTP为超文本协议,Hyper Text Transfer Protocol。

1.HTTP是无状态的,意味着每次链接都是重新的链接,服务器也不知道是谁发起的请求,所以需要借助cookie和session
2.HTTP是应用层的协议
3.HTTP可拓展性强,如HTTPS=HTTP + ssl
4.HTTP1.1之前都是文本协议,http2.0会将所有传输信息被分解成不同的帧,并对它们采用二进制格式的编码将其封装,并以流(stream)的形式传输

15.当你刚刚提交完成代码,发现提交信息中有错误,应该如何改正呢?

A、git stash -P

B、git revert HEAD -e

C、git rebase

D、git commit --amend

  1. git stash -P 应用某个stash,并把其从stash list中清除掉(pop),默认应用第一个。
  2. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit
  3. git rebase命令在另一个分支基础之上重新应用,用于把一个分支的修改合并到当前分支。
  4. git commit --amend :如果提交仅存在于您的本地仓库中,尚未推送到GitHub.com,您可以使用 git commit --amend 命令修改提交消息

16.下面关于flex描述错误的是

A、flex可以单行布局

B、flex可以单列布局

C、flex可以多行布局,但是多行布局时候,会遇到space-around属性值导致多行元素对不齐的情况

D、flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间就放大

1、flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

2、flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。负值对该属性无效
3、flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。

17.下面哪项不可以判断arr是空数组?

A、Array.isArray(arr) && arr.length === 0

B、arr === []

C、JSON.stringify(arr) === '[]'

D、arr instanceof Array && arr.length === 0

18.下列哪个不是浏览器支持的锚(anchor)伪类?

A、a:visited

B、a:hover

C、a:disabled

D、a:active

锚伪类:

  • 未访问状态(a:link)
  • 鼠标悬停状态(a:hover)
  • 活动状态(a:active)
  • 已访问状态(a:visited)

19.下列文件中,包含了主机名到IP 地址的映射关系的文件是

A、/etc/hosts

B、/etc/iptable

C、/etc/networks

D、/etc/ips

  1. /etc/iptable存放的是管理***规则的工具,可用于添加、编辑和移除规则。; Linux内核集成的IP信息包过滤系统,linux的包过滤功能,即linux***,它由netfilter和iptables两个组件组成。
  2. /etc/networks  ---配置网关

20.在使用mkdir 命令创建新的目录时,在其父目录不存在时先创建父目录的选项是 ?

A、-m

B、-d

C、-f

D、-p

mkdir [选项] 文件夹名

选项:

-m:设置权限。

-p:如果路径中不存在相关目录,自动创建文件夹。

-v:每创建一个目录就打印一次消息。

-Z:将SELinux 安全上下文 设置为所创建文件夹的默认类型。

编程题

大佬代码:

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

const LL mod = 1000000007;

int main()
{
    int n;
    while (cin >> n) {
        vector<int> arr(n + 1, 0);
        vector<LL> dp(n + 1, 0);
        for (int i = 1, x; i <= n; cin >> x, arr[i++] = x) {}
        if (n == 1) {
            cout << "1" << endl;
            continue;
        }
        for (int i = 1; i <= n; i++)
            dp[i] = (2 * dp[i - 1] % mod - dp[arr[i] - 1] + 2) % mod;
        cout << dp[n] % mod << endl;
    }
    return 0;
}

 

 个人代码:

function multiply(a, b) {
    var c = a + '',
        d = b + '';
        var count=0;
    if (c.split(".").length > 1) {
        while (c.split(".").length > 1) {
            a = a * 10;
            count++;
            c = a + '';
        }
    }
    if (d.split(".").length > 1) {
        while (d.split(".").length > 1) {
            b = b * 10;
            count++;
            d = b + '';
        }
    }
// 通过乘10进位将a和b都转化为整数。count记录进位次数
    if (count == 0) return a * b;
    else {
        var ret = '0.';
        for (let i = 1; i < count; i++) {
            ret = ret + 0;
        }
        ret = ret + a * b;
    }
// a和b整数相乘得到的结果根据count退位补0还原为小数
    return ret -'';
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值