🍪前端笔试系列 | 小米2020校招前端工程师笔试题

简介: 🍪前端笔试系列 | 小米2020校招前端工程师笔试题

🔥 Hi,我是啊呜。这里是前端笔试系列,除此之外还不定期更新前端成长路线笔记 & 博客,欢迎跟着啊呜一起成长。
点赞关注,不再迷路~你的支持对我意义重大!


考点一:正则表达式


(不定项选择)以下哪些正则会匹配字符串"b"?


A. /^b$/

B. /^b\b/

C. /(^|)b/

D. /[\b]*b/


/^b$/    匹配str开头和str结尾中间的b,即只有一个b字符的情况` 
/^b\b/   匹配str开头和单词结尾中只有b的情况
/(^|)b/   括号表示以开头或者null的整体,后跟随一个b,也就是一个单独的b
/[\b]*b/  方括号表示一个退格符,但是加上*后就表示0或n个退格符,所以无视就好。意思就是匹配一个b
故正确答案:A、B、C、D
复制代码


正则表达式真的是学一次忘一次,主要还是自己很少用到这个😅


可参考链接:前端表单验证常用的15个JS正则表达式


考点二:事件捕获,事件冒泡


(定向选择)以下前端代码的运行结果是?


<div id="box1">
  <div id="box2">
    content
  </div>
</div>
<script>
const $ = document.querySelector.bind(document);
const box1 = $('#box1');
const box2 = $('#box2');
box1.addEventListener('click', () => {
  console.log('box1 true');
}, true);
box1.addEventListener('click', () => {
  console.log('box1 false');
}, false);
box2.addEventListener('click', () => {
  console.log('box2 true');
}, true);
box2.addEventListener('click', () => {
  console.log('box2 false');
}, false);
</script>
复制代码


A. box1 true, box2 true, box2 false, box1 false

B. box1 true, box2 false, box1 false, box2 true

C. box2 false, box2 true, box1 false, box1 ture

D. box1 true, box1 false, box2 true, box2 false


addEventListener的第三个参数true和false分别代表时间发生在“捕获阶段”和“冒泡阶段”
对与box1里包含box2来说,点击box2的内容:
1.  触发box1的捕获阶段
1.  触发box2的捕获阶段
1.  触发box2的冒泡阶段
1.  触发box1的冒泡阶段
故正确答案:A
复制代码


这题考察的点主要就是事件和addEventListener的第三个参数了。


可参考链接:MDN-EventTarget.addEventListener()方法


考点三、Web API-存储相关知识


(不定项选择)以下关于 localStorage 和 cookie 描述正确的是?


A. 与服务器通信时,localStorage 会携带在 HTTP 请求头中

B. cookie 有大小限制,并且只能在浏览器端生成

C. 在现代浏览器中,cookie可以在跨域请求中被携带在请求头中

D. localStorage 被设置后,除非被清除,否则永久有效


localStorage只在客户端存储,不参与服务器通信
cookie有存储大小,cookie一般由服务器端生成,最大为4KB,localStorage也有存储大小,最大为5M
cookie可以在跨域请求中被携带在请求头中
localStorage数据会永久存储,除非代码或手动删除
sessionStorage数据只存在于当前会话,浏览器关闭则清空
故正确答案:C、D
复制代码


这题考察Web API-存储的知识,主要有三个,cookie,localStorage,sessionStorage


可参考链接:cookie,localStorage,sessionStorage区别及使用方式


考点四、 加法操作符


(定项选择)以下 Javascript 代码的运行结果是?


console.log('5' + 3, 5 + '3')


A. 8 8

B. 53 8

C. 53 53

D. 8 53

加法操作符用于求两个数的和。
如果有一个操作数是字符串,则要应用如下规则:
- 如果两个操作数都是字符串,则将第二个字符串拼接到第一个字符串后面。
- 如果有一个操作数是字符串,则将另一个操作数转换为字符串,再将两个字符串拼接在一起。
故正确答案:C
复制代码


考点五、CSS基础-margin及padding


(定向选择)设置以下 CSS 代码后,右外边距是?


padding: 5px 10px 15px 20px;

margin: 2px 4px 6px;

A. 6px

B. 10px

C. 20px

D. 4px


margin和padding设置一个参数时:上右下左都对应这个参数
margin和padding设置两个参数时:上下对应第一个参数,左右对应第二个参数
margin和padding设置三个参数时:上对应第一个参数,左右对应第二个参数,下对应第三个参数
margin和padding设置四个参数时:上对应第一个参数,右对应第二个参数,下对应第三个参数,左对应第四个参数
故正确答案:D
复制代码


这题主要考察CSS基础知识


可参考链接:w3school-margin外边距


考点六、CSS基础-隐藏元素的几种方式和区别


(非定向选择)以下关于 CSS 中 display:none、visibility:hidden、opacity:0 描述正确的是?


A. 三者都会隐藏对应的元素

B. display:none 对应的元素还会在文档流中占据空间

C. opacity:0 对应的元素的事件监听器还会触发

D.visibility:hidden 对应的元素的不会在文档流中占据空间


三者都起到隐藏效果
display:none 对应的元素不会在文档流中占据空间
visibility:hidden 虽然元素隐藏,但是对应的元素的会在文档流中占据空间
opacity,以透明度隐藏,仍然可以监听
故正确答案:A、C
复制代码


可参考链接:w3school-display与visibility属性

w3school-display与visibility比较实例


考点七、CSS基础-CSS组合器


(定向选择)以下哪个选择器,能够匹配到和 div 相邻的下一个兄弟节点 p 元素?


A. div p

B. div > p

C. div + p

D. div ~ p


组合器是解释选择器之间关系的某种机制。
CSS 选择器可以包含多个简单选择器。在简单选择器之间,我们可以包含一个组合器。
一共有四种组合器:
-   后代选择器 (空格)
-   子选择器 (>)
-   相邻兄弟选择器 (+)
-   通用兄弟选择器 (~)
这里相邻选择器和通用兄弟选择器解释一下
相邻兄弟选择器匹配所有作为指定元素的相邻同级的元素。兄弟(同级)元素必须具有相同的父元素,
“相邻”的意思是“紧随其后”。
通用兄弟选择器匹配属于指定元素的同级元素的所有元素。
故正确答案:C
复制代码


考点八、前端工程化


(非定向选择)以下哪些工具可用来打包构建前端项目?


A. gulp

B. grunt

C. webpack

D. rollup


六种常见的前端构建工具: npm script , grunt, gulp, fis3, webpack, rollup(专注于es6)!
还有最近流行起来的Vite(尤大佬亲手缔造),相较于WebPack,Vite具有以下突出优势
1、快速冷启动
2、即时的模块热更新
3、真正的按需编译
笔者有使用Vite构建过项目,是真滴快,如果说webpack启动服务的速度是汽车的速度,那么Vite启动服务的速度好比是火箭🤣
故正确答案:A、B、C、D
复制代码


可参考链接:gulp官网grunt官网webpack官网roolup官网Vite官网


考点九、数据结构-队列


(定向选择)以下哪个数据结构遵循的是 FIFO 原则?


A. 栈

B. 队列

C. 最大优先队列

D. 最小优先队列


FIFO(First In First Out)先进先出故对应的数据结构是队列
正确答案:B
复制代码


考点十、 数据结构-二叉树基础


(定向选择)某棵满二叉树有 1000 个节点,则从根节点到最深节点的最长路径的节点数是?


A. 9

B. 10

C. 11

D. 12


完全二叉树节点总数(2^n)-1,n代表深度,例如n=2代表共有2层
而2^10=1024,2^9=512说明10层未满,所以最大就是10层
二叉树基础扩展:
1.第n层的节点数最多为2^n个节点
2.n层二叉树最多有20+...+2n=2n+1-1个节点
3.第一个非叶子节点:length/2
4.一个节点的孩子节点:2n、2n+1
故正确答案:B
复制代码


考点十一、数据结构-二叉树遍历


(定向选择)已知一棵二叉树的前序遍历为 CABEFDHG,中序遍历为 BAFECHDG,那么它的后序遍历是?


A. BFEACHDG

B. BFEAHGDC

C. BEFACHDG

D. BEFAHGDC


前序遍历:根-左-右
中序遍历:左-根-右
后序遍历:左-右-根
故根据给出的两个遍历结果分析之后得出二叉树的结构如下:
              C
      A               D
 B       E       H           G
      F
故正确答案:B
复制代码


可参考链接:二叉树的三种遍历


考点十二、查找算法-二分查找


(定向选择)某排好序的数组有 1000 个各不相同的整数,如果对该数组进行二分查找(binary-search),在最坏的情况下,需执行多少次比较?


A. 1000

B. 10

C. 100

D. 500


二分查找,又称为折半查找
假设每次查找都没找到,则查找10次后,可以覆盖2^10=1024个值,1000>2^9=512
所以10次
故正确答案:B
复制代码


可参考链接:动画:二分查找(上) | 面试官问我如何在 1 亿数据中快速查找某一整数?


考点十三、算法-排序算法的时间复杂度


(定向选择)以下哪种排序算法的最坏时间复杂度可以做到 O(n * log(n))?


A. 归并排序

B. 快速排序

C. 冒泡排序

D. 插入排序


325494f0a8a44ea58e3db5940ab1b64a_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.jpg


故正确答案:A
复制代码


参考链接:JS实现各种排序


考点十四、代码的时间复杂度


(定向选择)下面代码的时间复杂度是?


int i, j, k = 0;
for (i = n / 2; i <= n; i++) {
    for (j = 2; j <= n; j += j) {
        k = k + n / 2;
    }
}
复制代码


A. O(n)

B. O(n*log(n))

C. O(n^2)

D. O(n^2*log(n))


for(i = n / 2; i <= n; i++) --------从n/2开始到n,i++,时间复杂度n
for (j = 2; j <= n; j += j)---------从2开始,j+=j,所以(2;2+4;2+4+8;)倍增,时间复杂度log(n)
循环嵌套:O(n * log(n))
故正确答案:B
复制代码


可参考链接:时间复杂度与空间复杂度


考点十五、Linux


(定向选择)Linux 操作系统的 Cron 服务用于?


A. 负责文件在网络中的共享

B.管理打印子系统

C. 跟踪管理系统信息和错误

D. 管理系统日常任务的调度


Cron 
计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在Linux中,
我们经常用到 cron 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的任务。
故正确答案:D
复制代码


考点十六、TCP、UDP与HTTP


(定向选择)以下关于 TCP/IP、UDP、HTTP 描述正确的是?


A. UDP 是面向无连接的,不可靠的数据报服务

B.TCP 是面向连接的,可靠的字节流服务

C. HTTP 是应用层协议

D. TCP 连接在建立时需要经过 3 次握手,断开时经过 3 次挥手


1.  应用层(HTTP、FTP、SMTP、telnet、DNS、tftp)
1.  传输层(TCP、UDP)
1.  网际层(IP)
1.  网络接口层(网络接口协议)
UDP相当于“广播”,面向无连接
TCP相当于“握手对话”,面向连接
TCP连接3次握手、断开4次挥手
故正确答案:A、B、C
复制代码


可参考链接:TCP与UDP比较


考点十七 HTTP状态码


(定向选择)HTTP 协议中,请求永久重定向的状态码为?


A. 301

B. 302

C. 304

D. 401


301:永久重定向
302:临时重定向
304:资源未改变
401:没有访问权限,需要身份认证
故正确答案:A
复制代码


HTTP状态码扩展:


e9f2be48bbfc47d9b5d28ded529a8169_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

考点十八、Git操作命令


(定向选择)使用 git 不小心 commit 了,如何恢复到上一状态?


A. git checkout --

B. git reset --hard HEAD^

C. git reset --soft HEAD^

D. git revert HEAD


git reset HEAD --soft 回撤提交到暂存区
git reset HEAD --hard // 回撤提交 放弃变更 (慎用)
git checkout 分支名 // 检出分支
git revert HEAD //撤销最近一次提交 ,git revert 命令意思是撤销某次提交。
它会产生一个新的提交,虽然代码回退了,但是版本依然是向前的
故正确答案:C
复制代码


本题主要考察GIt操作,版本管理的基础知识还是要掌握的,毕竟程序员的工作就会接触到这些,拉取代码,提交代码,这是每个程序员的必备技能。 可参考链接:我在工作中是如何使用git的


考点十九、作用域与闭包代码分析


(定向选择)以下 Javascript 代码的运行结果是?


var j = 0;
for (let i = 0; i < 2; i++, j++) {
  setTimeout(function() {
    console.log(i, j);
  }, 1000);
}
复制代码


A. 0 0 , 1 1

B. 0 2, 1 2

C. 2 1, 2 2

D. 1 1, 1 1


知识点1:let是块级作用域,var是全局作用域
知识点2:setTimeout(func,time)函数,延迟运行函数.将func函数添加到“执行队列”中,当主程序完成后,再按照执行队列运行.
对于这道题,for循环会先执行完,然后再根据time执行console.log(i, j);
注意:此时执行队列中var变量会延续循环后所变更的var值,也就是2;let变量会被**绑定**到对应的闭包函数(setTimeout中的func)中
故正确答案:B
复制代码


可参考链接:for循环中的setTimeout


考点二十、this指向


(定向选择)以下 Javascript 代码的运行结果是?


var person = {
  age: 18,
  getAge: function() {
    return this.age;
  }
};
var getAge = person.getAge;
console.log(person.getAge(), getAge());
复制代码


A. 18 18

B. 18 undefined

C. undefined 18

D. undefined undefined


person.getAge() 其中this指向person   所以为18
getAget  this指向 window 没有定义
故正确答案:B
复制代码


可参考链接:this指向以及call,apply,bind解析这篇文章真的把this问题讲的很清楚了,推荐大家阅读~


最后


⚽本文梳理小米前端校招笔试题所考察的知识点~

⚾如果这篇文章对你有帮助的话,麻烦点赞收藏哟~

相关文章
|
6月前
|
前端开发 Java 数据库连接
JDBC是什么,2024年前端笔试题总结
JDBC是什么,2024年前端笔试题总结
|
存储 数据采集 移动开发
经典的前端 面试笔试题(一)
经典的前端 面试笔试题
176 0
|
6月前
|
前端开发 小程序 JavaScript
2022前端面试笔试题及答案
2022前端面试笔试题及答案
188 0
|
存储 Web App开发 缓存
经典的前端 面试笔试题(二)
经典的前端 面试笔试题
162 0
|
存储 缓存 前端开发
记录一套新鲜的前端笔试题
本套笔试题真实(2019.10.9),做题时间要求:四十分钟。 可供自测(初级前端),按需取用。
|
前端开发 JavaScript
前端面试笔试题目-JS专项练习(进阶)
前端面试笔试题目-JS专项练习(进阶)
122 0
前端面试笔试题目-JS专项练习(进阶)
|
前端开发 容器
前端面试笔试题目-CSS专项练习(进阶)(下)
前端面试笔试题目-CSS专项练习(进阶)(下)
122 0
前端面试笔试题目-CSS专项练习(进阶)(下)
|
JavaScript 前端开发 测试技术
前端面试笔试题目-JS专项练习(基础)(上)
前端面试笔试题目-JS专项练习(基础)
214 0
前端面试笔试题目-JS专项练习(基础)(上)
|
前端开发
前端面试笔试题目-CSS专项练习(基础)
前端面试笔试题目-CSS专项练习(基础)
370 0
前端面试笔试题目-CSS专项练习(基础)
|
移动开发 前端开发 数据安全/隐私保护
前端面试笔试题目-HTML专项练习(基础)
前端面试笔试题目-HTML专项练习(基础)
189 0
前端面试笔试题目-HTML专项练习(基础)