(完整版)前端面试题及答案2019
前端面试题及答案2019

前端面试题及答案20191. HTML5 新增的表单元素有哪些?- 答案: HTML5 新增的表单元素包括:`<date>`、`<email>`、`<month>`、`<number>`、`<range>`、`<search>`、`<tel>`、`<time>`、`<url>`、`<week>`。
2. 请解释 CSS 中的 Flexbox 布局。
- 答案: Flexbox 是一种CSS3布局模式,它允许容器内子元素在不同屏幕和设备上动态地调整大小和位置。
Flexbox 布局通过设置容器的 `display` 属性为 `flex` 来启用。
它提供了两个轴:主轴(main axis)和交叉轴(cross axis),以及多种属性来控制子元素的排列方式。
3. JavaScript 中 `var`、`let` 和 `const` 的区别是什么?- 答案:- `var` 是函数作用域或全局作用域的变量声明关键字,可以被重新声明和赋值。
- `let` 是块级作用域的变量声明关键字,不能被重新声明,但可以重新赋值。
- `const` 也是块级作用域的常量声明关键字,声明后不能被重新赋值或重新声明。
4. 解释 JavaScript 中的闭包是什么?- 答案:闭包是一个函数和声明该函数的词法环境的组合。
即使在其原始作用域之外,闭包也可以访问其作用域链上的变量。
闭包常用于创建私有变量和函数,以及实现模块模式。
5. 如何实现深拷贝和浅拷贝?- 浅拷贝:复制对象的引用,而不是对象本身。
可以使用`Object.assign()` 或展开运算符 `...` 来实现。
- 深拷贝:递归复制对象的属性,包括嵌套的对象。
可以使用`JSON.parse(JSON.stringify(obj))`(但有局限性,例如不能拷贝函数和循环引用),或者使用第三方库如 `lodash` 的`_.cloneDeep()` 方法。
2019年百度前端工程师面试题(附答案)

2019年百度前端⼯程师⾯试题(附答案)⼀、单选题(共25题,每题5分)1.该正则可以匹配下列哪个字符串? /^sjm/A、absjmB、phpsjmC、sjmphpD、phpsimd参考答案:C答案解析:该正则匹配以sjm开头的字符串2.新窗⼝打开⽹页,⽤到以下哪个值()。
A、_selfB、_blankC、_topD、_parent参考答案:B答案解析:在html中通过标签打开⼀个链接,通过标签的 target 属性规定在何处打开链接⽂档。
如果在标签中写⼊target属性,则浏览器会根据target的属性值去打开与其命名或名称相符的框架或者窗⼝.在target中还存在四个保留的属性值如下,### 属性值值描述\_blank在新窗⼝中打开被链接⽂档。
\_self默认。
在相同的框架中打开被链接⽂档。
\_parent在⽗框架集中打开被链接⽂档。
\_top在整个窗⼝中打开被链接⽂档。
*framename*在指定的框架中打开被链接⽂档。
这些 target 的所有 4 个值都以下划线开始。
任何其他⽤⼀个下划线作为开头的窗⼝或者⽬标都会被浏览器忽略,因此,不要将下划线作为⽂档中定义的任何框架 name 或 id 的第⼀个字符。
上⾯这段出⾃w3c。
3.如果⼀个HTML⽂档内含有阿拉伯⽂,则应该?A、使⽤utf-8编码B、将阿拉伯⽂转为图⽚并嵌⼊到⽂档内C、使⽤GBK编码D、使⽤iso-8859-2编码参考答案:A答案解析:UTF-8(8-bit Unicode Transformation Format)是⼀种针对Unicode的可变长度字符编码,⼜称万国码。
UTF-8⽤1到6个字节编码UNICODE字符。
⽤在⽹页上可以同⼀页⾯显⽰中⽂简体繁体及其它语⾔(如英⽂,⽇⽂,韩⽂)。
GBK是汉字编码,是双字节码,可表⽰繁体字和简体字。
```ISO8859-2 字符集,也称为 Latin-2,收集了东欧字符。
```4.以下哪个选项不是块级元素()A、divB、spanC、pD、h1参考答案:B答案解析:常见的内联元素:、**、、*、*、**、、、、、` `******常见的块级元素:、、、、、、、、> 、窗体顶端窗体底端常见的内联块级元素:![]()、5.下⾯关于⼆叉树的说法正确的是?A、满⼆叉树就是完全⼆叉树B、满⼆叉树中有可能存在度数为1的节点C、完全⼆叉树就是满⼆叉树D、完全⼆叉树中某个节点可以没有左孩⼦,只有右孩⼦参考答案:A答案解析:满⼆叉树的任意节点,要么度为0,要么度为2.换个说法即要么为叶⼦结点,要么同时具有左右孩⼦。
web前端开发面试题及答案

web前端开发面试题及答案Web前端开发是互联网行业中一个非常热门的领域,涉及到网页设计、开发和用户体验等多个方面。
在面试过程中,面试官通常会提出一系列问题来评估应聘者的专业知识和技能。
以下是一些常见的Web前端开发面试题及答案:1. HTML相关问题- 问:HTML5有哪些新特性?- 答:HTML5引入了新的语义元素如`<header>`, `<footer>`,`<article>`, `<section>`等,增强了表单控件,如`<inputtype="date">`,`<input type="range">`等,支持多媒体内容,如`<video>`和`<audio>`,以及提供了绘图功能`<canvas>`。
2. CSS相关问题- 问:CSS选择器有哪些类型?- 答:CSS选择器主要有以下几种类型:元素选择器、类选择器(如`.class`)、ID选择器(如`#id`)、属性选择器(如`[type="text"]`)、伪类选择器(如`:hover`, `:first-child`)和伪元素选择器(如`::before`, `::after`)。
3. JavaScript相关问题- 问:JavaScript中的闭包是什么?- 答:闭包是指一个函数能够记住并访问其创建时的环境,即使该环境的外部上下文已经执行完毕。
闭包通常用于创建私有变量和方法,或者在回调函数中使用外部变量。
4. 响应式设计相关问题- 问:如何实现响应式网页设计?- 答:实现响应式网页设计主要依赖于CSS媒体查询(Media Queries),通过不同的屏幕尺寸和设备特性来应用不同的样式规则。
同时,使用流体布局(使用百分比而非固定像素)和可伸缩的图片和媒体元素也是关键。
2019前端面试题

2019前端⾯试题1.什么是⾯向对象?什么是⾯向过程?1)⾯向对象的重点是对象。
当解决⼀个问题的时候,⾯向对象会把事物抽象成对象,也就是说这个问题包含哪些对象,然后给这些对象赋⼀些属性和⽅法,让每个对象执⾏⾃⼰的⽅法,问题得到解决。
2)⾯向过程的重点是过程。
解决⼀个问题的时候,⾯向过程会把问题拆分成⼀个个的函数和数据(⽅法的参数)。
然后按照⼀定的顺序执⾏这些⽅法,执⾏完这些⽅法,问题得到解决。
2.什么是⾯向对象程序设计?答:将计算机需要处理的问题都抽象成对象,在抽象成类,帮助⼈们实现对现实世界的抽象与数字建模。
⾯向对象的程序设计更加符合⼈的思考逻辑和对事物的处理。
3.什么是对象?什么是类?答:对象是由类实例化出来的,类的实例称为对象。
类是具有相同特征和功能的对象的抽象。
类和对象的关系就好⽐模具和铸件的关系,类的实例化结果就是对象,⽽对象的抽象就是类。
4.什么是继承?在⾯向对象的编程中,当两个类具有相同的特征(属性)和⾏为(⽅法)时,可以将相同的部分抽取出来放到⼀个类中作为⽗类,其他两个类继承这个⽗类。
继承后的⼦类⾃动拥有了⽗类的部分属性和⽅法。
通过继承创建的新类被称为“⼦类”或“派⽣类”被继承的类称为“基类”、“⽗类”或“超类”⽐如:狗{吠;}牧⽺⽝继承狗{放⽺;}上⾯的例⼦中,狗类是⽗类,牧⽺⽝类是⼦类。
牧⽺⽝类通过继承获得狗类的吠的能⼒,同时增加了⾃⼰独有的放⽺的能⼒。
JS中的继承主要是通过原型链实现的每个构造函数(constructor)都有⼀个原型对象(prototype),原型对象都包含⼀个指向构造函数的指针,⽽实例(instance)都包含⼀个指向原型对象的内部指针如果试图引⽤对象(实例instance)的某个属性,会⾸先在对象内部寻找该属性,直⾄找不到,然后才在该对象的原型(instance.prototype)⾥去找这个属性5.谈谈你对前端性能优化的理解1)请求数量,合并脚本和样式表,拆分初始化负载2)请求带宽,精简JavaScript,移除重复脚本,图像优化,将icon做成字体3)页⾯结构:将样式表放在顶部,将脚本放在底部,尽早刷新⽂档的输出6.为什么使⽤框架?使⽤框架的优势?1)重复应⽤的外部JS:使⽤框架后我们可以把这些⽂件写在⼊⼝⽂件中,⼀劳永逸2)组件化:组件是前端框架⾥⾮常强⼤的功能之⼀,它可以扩展你的HTML,封装可以重⽤的代码块,⽐如你的轮播图、tab切换、页⾯头部、页⾯底部等等。
解析前端面试题2019年小米工程师面试题(附答案)

解析前端⾯试题2019年⼩⽶⼯程师⾯试题(附答案)⼀、单选题(共24题,每题5分)1.关于XSS的说法,错误的是A、script,js,vbscript,flashB、分类:反射,存储C、是浏览器端代码注⼊,恶意的script,css,html代码被浏览器解析D、PHP相关漏洞参考答案:D答案解析:是浏览器端代码注⼊,恶意的script,css,html代码被浏览器解析。
分类:反射,存储 script,js,vbscript,flash2.关于JSONP使⽤的说法错误的是:A、可以实现跨域通信B、基于 json 格式数据,兼容性好,简单易⽤C、只⽀持跨域HTTP请求这种情况,不能解决不同域的两个页⾯之间进⾏JavaScript调⽤的问题D、可以完美⽀持POST请求参考答案:D3.HTML页⾯中有如下结构的代码,下列选项所⽰jQuery代码,不能够让汉字“四”的颜⾊变成红⾊的是?A、 $("#header ul li:eq(3)").css("color","red");B、 $("#header li:eq(3)").css("color","red");C、 $("#header li:last").css("color","red");D、 $("#header li:gt(3)").css("color","red");参考答案:D答案解析:注意是选择不能4.下⾯哪⼀种属于“creational”的设计模式?A、FaçadeB、SingletonC、BridgeD、CompositeE、上⾯都不是参考答案:B答案解析:总体来说设计模式分为三⼤类:创建型模式,共五种:⼯⼚⽅法模式、抽象⼯⼚模式、单例模式、建造者模式、原型模式。
前端面试题2019年网易工程师面试题及答案解析

前端⾯试题2019年⽹易⼯程师⾯试题及答案解析⼀、单选题(共19题,每题5分)1.CSS 盒⼦模型中()是透明的,这部分可以显⽰背景()A、paddingB、marginC、borderD、content参考答案:A答案解析:- **Margin(外边距)** - 清除边框外的区域,外边距是透明的。
- **Border(边框)** - 围绕在内边距和内容外的边框。
- **Padding(内边距)** - 清除内容周围的区域,内边距是透明的。
- **Content(内容)** - 盒⼦的内容,显⽰⽂本和图像。
- Margin --------margin清除周围的元素(外边框)的区域。
margin没有背景颜⾊,是完全透明的Padding(填充) ------------- 当元素的 Padding(填充)(内边距)被清除时,所"释放"的区域将会受到元素背景颜⾊的填充。
2.通常我们在浏览器内容区看到的内容,都是放⼊在 () 之间A、<!doctype html>B、<html></html>C、<head></head>D、<body></body>参考答案:D答案解析:A答案是声明⽂档类型。
B答案是整个html⽂件。
C答案是⽹页标题,在浏览器顶部显⽰、D答案是⽹页的主体部分,即浏览器的内容区域。
所以答案是D。
html⽂件结构如下>⽹页名称,头部⽹页主体内容,浏览区域3.关于HTML语义化,以下哪个说法是正确的?A、语义化的HTML有利于机器的阅读,如PDA⼿持设备、搜索引擎爬⾍;但不利于⼈的阅读B、Table 属于过时的标签,遇到数据列表时,需尽量使⽤ div 来模拟表格C、语义化是HTML5带来的新概念,此前版本的HTML⽆法做到语义化D、header、article、address都属于语义化明确的标签参考答案:D答案解析:关于html语义化的⼀些参考</http:>4.以下位于head 间的代码⽚段是做什么⽤的?A、使得页⾯编码合乎要求B、表⽰⽀持响应式设计C、⽀持正常的绘制和缩放D、表⽰针对滚屏进⾏适当的适配参考答案:B答案解析:5.下列定义的css中,哪个权重是最低的?A、#game B、#game .nameC、#game divD、#game .name span参考答案:C答案解析:最⾼赞的答案并不准确。
2019vue面试题大全附答案.doc

2019 VUE 前端面试题1、active-class 是哪个组件的属性?嵌套路由怎么定义?答:vue-router 模块的router-link 组件。
2、怎么定义vue-router 的动态路由?怎么获取传过来的动态参数?答:在router 目录下的index.js 文件中,对path 属性加上/:id 。
使用router 对象的params.id3、vue-router 有哪几种导航钩子?答:三种,一种是全局导航钩子:router.beforeEach(to,from,next) ,作用:跳转前进行判断拦截。
第二种:组件内的钩子;第三种:单独路由独享组件4、scss 是什么?安装使用的步骤是?有哪几大特性?答:预处理css,把css 当前函数编写,定义变量,嵌套。
先装css-loader 、node-loader 、sass-loader 等加载器模块,在webpack-base.config.js 配置文件中加多一个拓展:extenstion ,再加多一个模块:module 里面test 、loader4.1 、scss 是什么?在vue.cli 中的安装使用步骤是?有哪几大特性?答:css 的预编译。
使用步骤:第一步:用npm 下三个loader(sass-loader 、css-loader 、node-sass)第二步:在build 目录找到webpack.base.config.js ,在那个extends 属性中加一个拓展.scss第三步:还是在同一个文件,配置一个module 属性第四步:然后在组件的style 标签加上lang 属性,例如:lang= ”scss”有哪几大特性:1、可以用变量,例如($变量名称= 值);2、可以用混合器,例如()3、可以嵌套5、mint-ui 是什么?怎么使用?说出至少三个组件使用方法?答:基于vue 的前端组件库。
npm 安装,然后import 样式和js,e(mintUi)全局引入。
(完整)vue面试题及答案,推荐文档

2019 VUE前端面试题1、active-class是哪个组件的属性?嵌套路由怎么定义?答:vue-router模块的router-link组件。
2、怎么定义vue-router的动态路由?怎么获取传过来的动态参数?答:在router目录下的index.js文件中,对path属性加上/:id。
使用router对象的params.id3、vue-router有哪几种导航钩子?答:三种,一种是全局导航钩子:router.beforeEach(to,from,next),作用:跳转前进行判断拦截。
第二种:组件内的钩子;第三种:单独路由独享组件4、scss是什么?安装使用的步骤是?有哪几大特性?答:预处理css,把css当前函数编写,定义变量,嵌套。
先装css-loader、node-loader、sass-loader等加载器模块,在webpack-base.config.js配置文件中加多一个拓展:extenstion,再加多一个模块:module里面test、loader4.1、scss是什么?在vue.cli中的安装使用步骤是?有哪几大特性?答:css的预编译。
使用步骤:第一步:用npm 下三个loader(sass-loader、css-loader、node-sass)第二步:在build目录找到webpack.base.config.js,在那个extends属性中加一个拓展.scss第三步:还是在同一个文件,配置一个module属性第四步:然后在组件的style标签加上lang属性,例如:lang=”scss”有哪几大特性:1、可以用变量,例如($变量名称=值);2、可以用混合器,例如()3、可以嵌套5、mint-ui是什么?怎么使用?说出至少三个组件使用方法?答:基于vue的前端组件库。
npm安装,然后import样式和js,e(mintUi)全局引入。
在单个组件局部引入:import {Toast} from ‘mint-ui’。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于上面的应用场景发现promise可以有三种状态,分别是pending、Fulfilled、Rejected。
Pending Promise对象实例创建时候的初始状态
Fulfilled可以理解为成功的状态
Rejected可以理解为失败的状态
构造一个Promise实例需要给Promise构造函数传入一个函数。传入的函数需要有两个形参,两个形参都是function类型的参数。分别是resolve和reject。
beforeMount:接下来开始找实例或者组件对应的模板,编译模板为虚拟dom放入到render函数中准备渲染,然后执行beforeMount钩子函数,在这个函数中虚拟dom已经创建完成,马上就要渲染,在这里也可以更改数据,不会触发updated,在这里可以在渲染前最后一次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取
6vue怎么实现双向数据绑定
vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的。其实主要是用了Es5中的Object.defineProperty;来劫持每个属性的getter,和setter。这也正是Vue不兼容IE8以下的原因。
发布者-订阅者模式:订阅是请求在某些事件(event)到达时可以通知它并执行对应的动作(action),而发布则相对的是向订阅告知事件(event)已经到达,你可以执行对应的动作(action)了。
Promise上还有then方法,then方法就是用来指定Promise对象的状态改变时确定执行的操作,resolve时执行第一个函数(onFulfilled),reject时执行第二个函数(onRejected)
当状态变为resolve时便不能再变为reject,反之同理。
基本api
(1)new Promise
//在子组件中可以使用$route.params.id来获取传递的参数值。
(4)PromiseObj.resolve()将一个值,数字,字符串...转换为Promise对象
(5)Promise.reject(reason)方法返回一个用reason拒绝的Promise。你可以这样理解,返回的这个promise对象在初始化的时候,什么都没有做,直接给reject(‘your reject reson’)
8es6的了解
es6是一个新的标准,它包含了许多新的语言特性和库,是JS实质性的一次升级。
新增模板字符串` `(为JavaScript提供了简单的字符串插值功能)
箭头函数(操作符左边为输入的参数,而右边则是进行的操作以及返回的值Inputs=>outputs。)
for-of(用来遍历数据—例如数组中的值。)
get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。安全
get请求只能进行url编码,而post支持多种编码方式编码方式
get请求会浏览器主动cache,而post支持多种编码方式。
get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。保存
GET和POST本质上都是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
分为三个阶段:初始化、运行中、销毁。
beforeCreate:实例、组件通过new Vue()创建出来之后会初始化事件和生命周期,然后就会执行beforeCreate钩子函数,这个时候,数据还没有挂载呢,只是一个空壳,无法访问到数据和真实的dom,一般不做操作
Created:挂载数据,绑定事件等等,然后执行created函数,这个时候已经可以使用到数据,也可以更改数据,在这里更改数据不会触发updated函数,在这里可以在渲染前倒数第二次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取
Mounted:接下来开始render,渲染出真实dom,然后执行mounted钩子函数,此时,组件已经出现在页面中,数据、真实dom都已经处理好了,事件都已经挂载好了,可以在这里操作真实dom等事情...
beforeUpdate:当组件或实例的数据更改之后,会立即执行beforeUpdate,然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染,一般不做什么事儿
2存储大小限制也不同,cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识。sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
3数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。
Vue有五个核心概念,state, getters, mutations, actions, modules。
state =>基本数据==data
getters =>从基本数据派生的数据==computed
mutations =>提交更改数据的方法,同步!==methods
actions =>像一个装饰器,包裹mutations,使之可以异步。
7promise的简述
Promise是异步编程的一种解决方案,通俗的来讲Promise是一个许诺、承诺,是对未来事情的承诺,承诺不一定能完成,但是无论是否能完成都会有一个结果。
应用场景
1解决回调地狱比如我们经常可能需要异步请求一个数据之后作为下一个异步操作的入参
2promise可以实现在多个请求发送完成后再得到或者处理某个结果
this.$router.push({
path: `/describe/${id}`,
})
//方案一,需要对应路由配置如下:{
path: '/describe/:id',
name: 'Describe',
component: Describe
}//很显然,需要在path中添加/:id来对应$router.push中path携带的参数。
* next(‘/’)或者next({ path: ‘/’ }):跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。
10vue路由传值(主要使用三种方法)$router.push/name+params/path+query
方案一
getDescribe(id) {
//直接调用$router.push实现携带参数的跳转
for (let index of ['a', 'b'].keys()) {
console.log(index);
}
arguments对象可被不定参数和默认参数完美代替。
ES6将promise对象纳入规范,提供了原生的Promise对象。
增加了let和const命令,用来声明变量。增加了块级作用域。let命令实际上就增加了块级作用域。ES6规定,var命令和function命令声明的全局变量,属于全局对象的属性;let命令、const命令
class命令声明的全局变量,不属于全局对象的属性。
还有就是引入module模块的概念
9路由拦截
主要是利用vue-router提供的钩子函数beforeEach()对路由进行判断。
* to: Route:即将要进入的目标路由对象\$route (常用)
* from: Route:当前导航正要离开的路由
--------------------------------------面试题-----------------------------------------
1 vuex的五个状态
VueX是一个专门为Vue.js应用设计的状态管理架构,统一管理和维护各个vue组件的可变化状态(你可以理解成vue组件里的某些data )。
(这种方式目前使用的最多)
2利用Cookie实现
APP登录成功后,服务器创建一个包含session_id和Expires两个属性值的Cookie,存储在服务器中,并发送给APP。
后续APP发送请求时,都要带上一个包含此session_id的Cookie,每次服务器端收到请求时,都要验证session_id和有效期,session_id数值对且在有效期内,服务器返回所需要的结果,否则返回错误信息,提示用户重新登录。
3cookie、localstroge、localSeesion的区别
共同点:都是保存在浏览器端,且同源的。
区别:安全性、大小、有效期、作用域பைடு நூலகம்
1cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。
5你是如何操持登录
1利用Token实现
APP登录成功后,服务器以某种方式,如随机生成N位的字符串作为Token,同时设置一个有效期,存储到服务器中,并返回Token给APP。
后续APP发送请求时,都要带上该Token,每次服务器端收到请求时,都要验证Token和有效期,Token数值对且在有效期内,服务器返回所需要的结果,否则返回错误信息,提示用户重新登录。
* next: Function:一定要调用该方法来resolve这个钩子。执行效果依赖next方法的调用参数。
* next():进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是confirmed(确认的)。