2020前端面试高频问题

1、 vue的核心思想

答:数据驱动、组件化。
数据驱动:传统的交互要用ajax从服务器端获取数据,然后操作dom来改变视图,每次前端交互的时候都要执行一遍,要频繁的进行dom操作,而手动操作DOM是一个繁琐的过程且易出错。Vue,js提供一个基于MVVM的双向数据绑定的JavaScript库,对dom进行了封装,当数据发生改变会通知指令去修改对应的DOM,数据驱动DOM变化,DOM是数据的一种自然映射。就不要繁琐的去操作dom了。数据改变驱动视图更新。
组件化:封装可重用的代码,模块化,逻辑更加清晰,写代码更加快速,简洁。

2、 vue父子组件的传参方式

父组件的值传递给子组件
1.在占位符中 :a=‘msg’ a子组件接收的数据 msg父组件数据
2.在子组件中定义props属性接收a。 props:[‘a’,‘父组件传递的数据’]
3.子组件中可以直接使用a。但一般不建议直接修改a
4.如果需要修改a 定义一个中间变量c 书写a的监听函数this.c=this.a
子组件发送数据给父组件
1.在子组件中定义方法 方法内部书写this.$emit(‘事件名’,所要发送的数据)
2.在子组件中,执行刚刚书写的方法
3.在占位符(父组件)中 @事件名=“父组件接收数据的方法名字,不带括号”
4.在父组件中,定义接收数据方法

3、路由传参的三种方法

(1)路径上传参

	This.$router.push{
		Path:/details/${’id’}
	}

配置路由:

{
	Path:/details/:id
}

子组件获取这个参数:this.$route.params.id
(2)params传参

	This.$router.push{
		Name:’name01’,
		Params:{
			Id:id
		}
}

配置路由:

{
	Path:/details’,
	Name:’name01’,
}

子组件获取这个参数:this.$route.params.id

(3)query传参

	This.$router.push{
		Name:’name02’,
		Query:{
			Id:id
		}
	}

配置路由:

{
	Path:/details’,
	Name:’name02’,
}

子组件获取这个参数:this.$route.query.id
3、 原生ajax请求的五个步骤:
(1)获取请求,创建对象
(2)建立要连接的URL
(3)设置回调函数
(4)打开到服务器的连接
(5)发送请求

4、node.js

Node 是一个让 JavaScript 运行在服务端的开发平台。Node.js既是一个运行环境,同时又是一个库。可以忽略浏览器兼容性问题,编写高性能的web服务项目。

5、 TCP/IP协议族是由一个四层协议组成的系统,这四层分别为:应用层、传输层、网络层和数据链路层

6、 一些常见的http请求方法。

GET: 用于获取数据
POST: 用于将实体提交到指定的资源,通常导致状态或服务器上的副作用的更改
HEAD: 与GET请求的响应相同的响应,但没有响应体
PUT: 用于创建或更新指定资源

7、 http工作的简单过程

(1) 地址解析: 这一步比较重要的是上面的DNS解析
(2) 封装HTTP请求数据包: 把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
(3) 封装成TCP包,建立TCP连接(TCP的三次握手)
(4) 客户机发送请求命令
(5) 服务器响应
(6) 服务器关闭TCP连接

8、 http协议是超文本传输协议。HTTP 是基于 TCP/IP 协议的应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。

9、 ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版。现在的标准是es5

10、 Es6新特性:变量、函数、对象、模块化

变量:变量let 常量const,没有变量提升,会有暂时性死区
函数:箭头函数 this指向,简洁
参数处理(默认值)
模块化:export和import

11、 H5新特性

(1) 语义标签。使得页面的内容结构化。
Header。头部
Footer。尾部
Nav。导航
Section。某一部分的节
Aside。侧边栏
(2) 增强型表单,有多个新的表单input输入类型。提供更好的输入控制和验证。
Tel。定义输入电话号码字段
Email。包含e-mail地址的输入域
Number。数值的输入域
Date。从一个日期选择器选择一个日期
Month。选择一个月份
Time。选择一个时间
(3)视频和音频。Audio 音频mp4 Ogg video 视频 mp4 Ogg
Autoplay。为true的话是自动播放
音频:control 属性供添加播放、暂停和音量控件。
视频:control 提供了 播放、暂停和音量控件来控制视频。
(4)Canvas绘图。标签只是图形容器,必须使用脚本来绘制图形。
(5)SVG绘图。SVG是指可伸缩的矢量图形
(6)地理定位。获取用户的定位
(7)拖放API。拖放是一种常见的特性,即抓取对象以后拖到另一个位置。
拖放的源对象(可能发生移动的)可以触发的事件——3个:
dragstart:拖动开始
drag:拖动中
dragend:拖动结束
整个拖动过程的组成: dragstart1 + dragn + dragend*1

12、 盒子模型分为两种:

一种是W3c标准的盒子模型(标准盒子模型) 大小 = content + border + padding + margin
第二种是IE标准的盒子模型(怪异盒子模型) 大小 = width ( content + border + padding ) + margin

13、 box-sizing可选值有三个:

content-box: 默认值,border和padding不算到width范围内,可以理解为是W3c的标准模型(default)
border-box: border和padding划归到width范围内,可以理解为是IE的怪异盒子模型
padding-box: 将padding算入width范围
14、 Vue.js是一个JavaScript前端框架,Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

15、 Get和post的区别

(1) get是向服务器获取数据的,post是向服务器发送数据的。
(2) get是可以缓存在浏览器中的,如果客户端再次请求,可能拿到的数据是缓存在浏览器中的数据,post不会缓存在浏览器中
(3) get的安全性低,post的安全性高,如果post重新提交的话,会有一个弹框提示的
(4) 携带数据不一样。Get是在URL上的,用户可以看见这个过程,而post是放置HTML header上的,用户看不到这个过程

16、 css百分比。

Width和height:相对父级的宽和高
Padding和margin:相对于块的宽度
font-size:父级的font-size
line-height:自身的font-size来参照
bottom、left、right、top:left和right是参照包含块的宽度,bottom和top是参照包含块的高度
Border-radius:横轴上的百分比参考的是元素自身的宽度,纵轴上的百分比参考的是元素自身的高度,负值是无效的

17、 MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

18、 浏览器兼容性问题,怎么解决?

(1)不同浏览器的标签默认的外补丁和内补丁不同 100%
问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。
解决方案:css里 {margin:0;padding:0;}
备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的css文件开头都会用通配符
来设置各个标签的内外补丁是0。
(2)块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大 90%
问题症状:常见症状是ie6中后面的一块被顶到下一行
解决方案:在float的标签样式控制中加入 display:inline;将其转化为行内属性
备注:我们最常用的就是div+css布局了,而div就是一个典型的块属性标签,横向布局的时候我们通常都是用div float实现的,横向的间距设置如果用margin实现,这就是一个必然会碰到的兼容性问题。
(3)设置较小高度标签(一般小于10px),在ie6,ie7,遨游中高度超出自己设置高度 60%
问题症状:ie6、7和遨游里这个标签的高度不受控制,超出自己设置的高度
解决方案:给超出高度的标签设置overflow:hidden;或者设置行高line-height 小于你设置的高度。
备注:这种情况一般出现在我们设置小圆角背景的标签里。出现这个问题的原因是ie8之前的浏览器都会给标签一个最小默认的行高的高度。即使你的标签是空的,这个标签的高度还是会达到默认的行高。
(4)行内属性标签,设置display:block后采用float布局,又有横行的margin的情况,ie6间距bug(类似第二种) 20%
问题症状:ie6里的间距比超过设置的间距
解决方案:在display:block;后面加入display:inline;display:table;
备注:行内属性标签,为了设置宽高,我们需要设置display:block;(除了input标签比较特殊)。在用float布局并有横向的margin后,在ie6下,他就具有了块属性float后的横向margin的bug。不过因为它本身就是行内属性标签,所以我们再加上display:inline的话,它的高宽就不可设了。这时候我们还需要在display:inline后面加入display:talbe。
(5)图片默认有间距 20%
问题症状:几个img标签放在一起的时候,有些浏览器会有默认的间距,加了问题一中提到的通配符也不起作用。
解决方案:使用float属性为img布局
备注:因为img标签是行内属性标签,所以只要不超出容器宽度,img标签都会排在一行里,但是部分浏览器的img标签之间会有个间距。去掉这个间距使用float是正道。

19、Vue和React相同点

(1)利用虚拟DOM实现快速渲染
(2)轻量级
(3)响应式组件
(4)服务器端渲染
(5)易于集成路由工具,打包工具以及状态管理工具
(6)优秀的支持和社区

20、Vue和React不同点:

(1)Vue:1.模版和渲染函数的弹性选择
2.简单的语法及项目创建
3.更快的选软速度和更小的体积
(2)React: 1.更适用于大型应用和更好的可测试性
2.同时适用web端和原生App
3.更大的生态圈带来更多的支持和工具

21、VUE的特性

(1)轻量级的框架
(2)双向数据绑定
(3)指令
(4)插件化

22、vue优点

(1)组件化开发
(2)单页面路由
(3)丰富的Api方法
(4)双向的数据绑定
(5)单向数据流
(6)易于结合其他第三库
(7)简单易用
(8)灵活渐进式
(9)轻量高效 (3-1)、压索之后20KB大小 (3-2) 、虚拟DOM 4、
(10)MVVM (4-1)、数据驱动视图 (4-2)、常规的操作方式都是DOM (4-3)、普通的javascript数据
(11)组件化
组件化优点 提高开发效率 方便重复使用 简化调试步骤 提升整个项目的可维护性 便于协同开发

23、vue的缺点

(1)Vue 不缺入门教程,可是很缺乏高阶教程与文档。同样的还有书籍。
(2)VUE不支持IE8
(3)生态环境差不如angular和react
(4)社区不大
(5)可扩展性稍差

24、代码基本命名规范与格式规范

(1)HTML命名规范及格式规范
1、html代码中所有的标签和属性应该都是小写(虽然大写不会错,但w3建议都是小写)
2、在html代码中id多个单词要用下划线_连接,例如:reader_info
3、在html代码中clss多个单词用中划线-连接,例如:reader-info
4、如果仅仅是给js调用的class那么就在class的属性前加上js,例如:js-active
5、不管是id还是class都使用父子关系来表示(引入父节点的拼接子节点的)

<div id="reader">     
<div id="reader_introduce" class="reader-introduce"></div> </div>1 2 3    

6、如果元素包含子元素,那么首位就要单独占一行(常见a标签里面套img)

<!--不推荐--> <ul><li>第一个</li></ul>
<!--推荐使用--> <ul>     <li>第一个</li> </ul>1 2 3 4 5 6     

7、适当的添加点注释,注释要占一行
8、全部使用双引号
(2)关于css的命名规范及格式规范
1、类名关键字之间连接用中划线-拼接
2、为了避免class命名的重复,命名时候取父元素的class作为前缀
3、多个选择器生命,每一个css选择器都单独占一行 h2, h3, h4 { color: #ddd; }1 2 3 4 5
4、合理的使用注释 头部注释包括文件的版本、版本信息、作者、时间等 模块注释要有开始有结束 解释性注释要单独占一行 三、关于javascript的命名规范及格式规范 1、局部变量命名才用驼峰式命名 2、如果是jQuery的变量使用$为前缀 3、在for循环和if语句中左边的大括号应该在行的结束位置,不应该单独一行 4、在javascript中字符串可以使用单引号与双引号,但是建议是用单引号
5、合理的分号作为结束符 当有换行符(包括含有换行符的多行注释)会自动加上分号 当有}时,如果缺少分号,会补分号 当程序源代码结束时,如果缺少分号,会补分号 6、如果只有一行注释就使用单行注释,多行的就使用多行注释

25、flex布局原理

就是通过给父盒子添加flex属性,来控制子盒子的位置和排列方式。
Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。

26、vue的生命周期分为八个阶段:

beforeCreate(创建前)
created(创建后)
beforeMount(载入前)
mounted(载入后)
beforeUpdate(更新前)
updated(更新后)
beforeDestroy(销毁前)
destroyed(销毁后)

27、生命周期钩子就是在某个生命周期中执行的函数

欢迎留言指出错误之处

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值