1、行内元素有哪些?块级元素有哪些?空元素有哪些?
行内元素:、、、、、...
块级元素:、1、、、、、...
行内块元素:、(可以设置宽高)
空元素:、、、、
涉及元素之间的转换:属性
2、和@的区别
是的标签,@是的样式规则。
能加载样式文件、图片等资源,@只能加载引用样式
与引入的被同时加载(并行),@页面后加载(串行)。
后者兼容性差。
3、与1,与的区别,与的区别
是网页标题,1是内容。网站(网站搜索优化)层面上,级别更高
加粗:语义化区别,只是加粗,且有强调(阅读器)作用。
倾斜:多用在做图标,也有强调作用。
4、的和属性的区别
:鼠标移入图片时显示。
:图片不加载时显示。
5、、、的区别
:适合大图片,同样的图片相对用体积更小。(失帧)
:适合小图标,同样的图片体积更大。(失帧小)
:动态图
6、作用
是一种文档类型,它的目的是告诉浏览器(解析器)应该以什么样(或)的文档类型定义来解析文档。它必须在⽂档的第⼀⾏。
浏览器渲染页面的两种模式:标准模式和怪异模式。
7、标签的理解
标签由和属性组成,用来描述网页文档的属性。
,用来描述文档的编码类型。
:、、
8、和的区别
是单行文本框,通过属性限制字符长度,可以设置宽高,但始终是一行。
是多行文本输入框,使用和规定尺寸。
9、和的区别
:的缩写,直接加载出引入的资源。、、、。
当浏览器解析到该元素时,会暂停其他资源的下载和处理,进行资源请求。
:建立与外部资源的连接通道。、。
10、语义化标签
语义化就是用合适的标签用在最恰当的内容上。
1、没有样式情况下,语义化标签呈现清晰结构,方便机器和工作人员阅读代码。
2、有利于,提高关键字权重,使爬虫抓取更多有效信息,提高搜索引擎名次。
3、方便盲人阅读器等设备渲染页面。
11、5新增标签
:网页头部,:网页底部,:网页导航,:区段
:内容,:侧边栏。
12、5新特性——
1、各种新增表单类型:、、、、、、
、:选择表单
2、音视频——、
=""用户控制音乐, =""循环播放, =""自动播放。
3、画布——+
:画布,位置发生改变会重新绘制。——
:可缩放矢量图,基于。
4、本地存储——、
5、可编辑属性:
广泛应用在用在网页编辑器、编辑状态。在标签内部加入=“”
5、
在执行脚本时,页面的状态是不可相应的,直到脚本执行完成后,页面才变成可相应。
6、拖放事件
7、地理位置
13、是什么?怎么使用?
是可伸缩矢量图形,图形在放大或者改变尺寸的情况下图形质量不会损失。
画图:(矩形),(多边形)、(圆形,和定圆心)、(椭圆)
结合的产生动画效果。
14、是什么,怎么使用?
添加标签,设置、宽度和高度
通过获得标签,使用确定图片类型。
1、盒子模型
盒子模型:标准盒子模型、盒子模型
标准:+++。
:+(、、)
盒子模型转换:-:-(标准),-(盒子)
1、盒子塌陷与解决方案
盒子塌陷:内部盒子跑到父盒子的外部
原因:内部盒子脱离文档流
解决:清楚内部盒子浮动、父亲盒子高度写死。
2、-和的区别
-:每行文字的高度,如果文字换行则整个盒子高度增大(行数每行高)
:盒子的纯高度。
-:值,文字垂直居中。
3、选择器有哪些?哪些属性可以继承
通配符选择器(),选择器(#),类选择器(.),标签选择器。
相邻选择器(+匹配一个,~匹配多个),后代选择器(空格),并集选择器(,),子元素选择器(>),
属性选择器([])
可继承样式:字体系列,文本-、、-,-。
不可继承:、、、
3、伪类选择器和伪元素选择器
伪类
状态伪类:
否定选择器::()选中出来除了括里的其他元素
其他::- :- :-() :--(锁定类型)
伪元素
::
::
:: 设置选中文本的样式
4、优先级算法
!>内联样式>选择器>类选择器(属性、伪类)>标签选择器(伪元素选择器)>通配符
权重: 1000 100 10 1 0
5、画三角形(用)
和设置为0
一个边设置为:100 颜色
另外三个边框设置为:100 (透明)。
6、水平垂直居中
:-;:0 (水平居中)
1、用布局给父元素设置:
:;
-:;
-:
2、布局:
父::
-:
-:
或者直接写-:
3、用定位动画给自己设置
:;
:50%;
:50%;
:(-50%,-50%)
4、-
: -;
-: ;
-: ;
布局
弹性布局,
父元素:
子元素:
:排列顺序
:2 相当于 :2 1 0%。-为2,-为1(可伸缩),-为0
布局
--: 200 200 200;三列宽度
--: (3,200);
-: 5;每个单元格间距
定义区域,子元素-匹配
7、
:块级格式化上下文,就是将这容器变成完全的个体,不会影响到外面的元素。
可以触发的条件有:
不为,
不为,
:-,-
为、。
常用::
8、清除浮动影响的方式
1、触发,例如用:
2、:{
:;
:"";
:
}
9、定位
:默认值,不定位。
:相对定位,相对于原来自己进行定位。(对其他元素不太影响,不脱离文档流)
:绝对定位,相对于已定位的父元素进行定位(没有的话就是浏览器大框)。
:固定定位,相对于浏览器大框进行定位。
:粘性定位,在屏幕范围()时该元素的位置并不受到定位影响(设置是、等属性无效),当该元素的位置将要移出偏移范围时,定位又会变成,根据设置的、等属性成固定位置的效果。(页面变化++)
边偏移属性::100(向下100),,,。
(如果有上下左右,只要上和左的,则全有)
10、双飞翼布局(左右200宽,中间自适应,先加载中间)
1、中左右顺序设置模块,给左设置-:-100%,给右设置-:-200
2、子项目设置-属性,0为固定,1为可伸缩,自适应的设置:1
11、什么是
.,是一个文件,重置样式。
例如还有.,同样也是。
12、 是什么?优缺点?(雪碧图、精灵图)
是把多个小图标合并成一个大图片。
使用:或者第三方工具
优点:减少请求次数,提升了性能。
缺点,维护性比较差(如果内容更改)
13、进程和线程
进程:一个进程就是一个程序运行,启动程序,系统会为它创建一个内存,程序的一个运行任务会在一个线程,任务所在的大运行环境叫做进程。
线程:程序执行的最小单位。
线程依附于进程
进程的任意一个线程执行出错,都会导致整个进程的崩溃,其他线程不能运行。
一个大程序有多个进程,其中一个崩溃不影响其他的
浏览器进程:浏览器每一个页签都是一个的进程,进程内的线程只会影响自己。
渲染进程:将、、渲染成网页,浏览器回为每一个标签创建要给渲染进程。(包括渲染线程、线程,定时器线程)
13、浏览器渲染线程
根据,通过网络请求,得到服务器传来的代码,返回文本文件,浏览器将文件转成。
根据解析器对文件解析根据节点生成树,
根据解析器对文件解析生成。
将和整合形成 (计算布局数据)
根据 开始绘画渲染(重绘)、布局展示(回流)
(布局进行分层,每个图层生成绘制列表,图层分成块,光栅化图块转换成位图)
分层为了提高渲染性能,例如动画渲染不影响其他图层。
光栅化目的是将不需要的图块不做渲染。
提升图层:-:
遇到、时,去请求响应文件。
文件最好写在最后,不然会阻塞渲染,
14、:和:的区别。
:,隐藏后不占用原位置。产生重绘与回流。
:,隐藏后占用原位置。产生重绘,不会回流。
宽高都设置为0
原理:浏览器渲染过程↑ +重绘与回流(重排)↓
14、隐藏某个内容的方法
1、:0;
2、:;
3、:
15、重绘与回流(重排)
回流(重排):当 的元素改变了自身的宽高、布局、显示或隐藏,或者文字结构改变,产生回流。
重绘:只是改变各元素的外观(颜色等),产生重绘
回流必有重绘。
优化,避免回流:
不要使用 代码对 元素设置多条样式,选择用一个 代替之。
定位使用或者脱离文档流。
代替 , ,-, -... 这些位移属性。
16、透明:与的区别
都是实现透明的效果。
:取值0-1,0表示完全透明,1表示完全不透明。会继承给子元素
:(,,,透明度取值0-1),不会继承。
17、、、和的优先级
:/优先级最高,有他们在时,不起作用,值需要调整。 或者定位的元素,只能是块元素或表格。
18、解决上下重合的问题
在其中一个盒子外包一个,并对其触发
19、伪元素,:: 和 :中双冒和单冒有什么区别?解释一下这2个伪元素的作用
3规范使用双冒,单冒是等伪类。
3新特性
-、、、、
渐变::-
20、实现动画
常见属性
-:设置的属性名如
-:过渡时间
-:延迟时间
--:速度变化,默认(缓冲)
(四个可以合并使用。)
缺点:一次性,不能重复发生。需要事件出发,不能在网页加载时自动发送。只能定义在一个对象上。只有开始和结束状态。
可以实现上面缺点
除了上方四个属性,还有:
-:给动画起名字
--:循环次数
结合@ { }使用。
21、实现图(加载图),四分之三圆并旋转。
1、设置-:50%产生一个圆,再设置其中一条为透明色。
2、动画:为设置的四分之三圆设置旋转动画,用设置无限循环
22、布局
父级:
-:主轴方向
-:主轴上对齐方式(水平)
-:侧轴上对齐方式
-:是否换行
子级:
-:子元素在侧轴对齐方式
:排序,越小越靠前
:-(占比几份)、-(0固定、1自适应)、-()
23、、、、、区别
:像素单位
:-的大小,默认1=16,会继承。值对-变化而变化。决定部分
:根据根的-大小决定。1=16。值固定,可以调整整体文字。决定所有
、:宽高的1%
24、让超出宽度的文字显示省略
-:。设置为不换行
:超出隐藏
-:显示...
25、瀑布流布局
:+++:100
:(100%/)
26、
提供了一系列插件,对内容进行转换,后配置各种官方提供的属性插件,比如可以加浏览器前缀来兼容不同浏览器。
27、-失效情况
父元素设置为,子元素-失效。(解决:父元素改为)
设置,该元素-失效
28、是什么
浏览器自带,用于执行连续的动画,减少页面卡顿,提高动画性能。
实现动画通常是调整元素结合定时器。但是动画多,会卡顿,因为定时器是异步任务(要等主线程任务完成)。而且好像会有丢帧现象(刷新频率)
执行动画的时间由系统的刷新频率决定。传参是函数。
1、延迟加载有哪些方式
延迟加载:、(无论的位置在哪里)
两者区别:
:异步加载,此时的下载和的解析一起走,但不确定的执行顺序。
(最好): 异步加载并推迟执行,再执行文件代码,顺次执行脚本。
2、数据类型有哪些?
基本数据类型:、、、、、、
引用数据类型:(、)
数据类型转换:
()转化成字符串。
()转换成数字。有一个字符不是数值就返回
()转化成数字。第一个字符不是数字就返回
()转化成布尔值
2、和
:
可以给对象设置一个私密属性,别人访问不到。属性值不会被改写或者覆盖。
1 = ('');同一个变量生成的值也不相等。
和.都访问不到,可以用访问
:
大整数、提供一个表示大于2^53-1的整数。
只能支持-2^53-1到2^53-1的数,超过就会失去精度,被四舍五入。
= ("")
2、如何判断一个数是整数
1、+正则
2、结果与原值比较
3、.()
4、对1取余是否为0
2、数据类型判断:数据类型的判断_在寒夜等候光明的博客-博客_判断数据类型的方法
:判断类型, , , , ,(对象或者)
:一般用来判断引用数据类型的判断,如:,,,,等。原理:右边变量的 在左边变量的原型链上。
:当一个函数被定义时,会为函数添加原型,然后再在上添加一个属性,并让其指向的引用。
...()精准判断
3、和的区别
作者先设计的,后设计的。但是==,===,===
是“空”,是“未赋值”。
()结果是,()为0。
()为 ,()为
== 是,因为会被转化为数字: 被转化为 0, 被转化为 。
4、==和===的区别
==:比较的是值
其中原理是原型的隐式转换,在内部自动调用,不会显式改变。
===:比较的是值和数据类型。
4、隐式转换和显式转换
隐式转换:自动转换数据类型(转换了但是不显示),==判断、运算
显示转换:强制转换。()、()、()
5、的执行机制。
是单线程的语言,前一个任务执行完执行下一个任务。
同步任务:主线程上排队执行的任务。
异步任务:不进入主线程,进入任务队列。主线程任务完成,执行异步任务。
代码执行顺序是:同步任务=》进入任务队列的异步任务进行事件循环(微任务全部完成=》宏任务)
同步:,循环,紧跟着的代码。
微任务:.,的。
宏任务:,请求
6、关于作用域、变量提升:函数作用域 - 前端工程师面试题讲解_哔哩哔哩_
只有函数才会有作用域,循环可没有。
作用域分为全局作用域、局部作用域、块级作用域。
函数内部可以访问外部的变量,但是外部不能访问内部的变量。
优先查找内部的变量,内部没有,再去外部找。(作用域链)
的有提升,函数也会提升,函数的提升高于变量的提升。
7、对象考题
1、对象是出来的,所以相同对象不相等。【1,2,3】==【1,2,3】结果是。
2、对象是引用数据类型,数据在堆内存的一个共同的内存地址中。
3、对象的值都是字符串类型。
4、对象查找属性/方法的顺序:
对象自身——构造函数自身——对象原型——构造函数原型——
7、的有哪些
.(,,属性描述符)
直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
.()
返回给定对象的自身可枚举属性的数组
.()
返回给定对象的自身可枚举属性值的数组
.()
返回给定对象的自身可枚举属性和属性值的双层数组
.(1,2)
合并对象
.()
读取对象的原型对象
7、面向对象的三个特征
封装:可以隐藏实现细节,使得代码模块化
继承:可以扩展已存在的代码模块,为了代码重用
多态:相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。
7、模块化的和6的区别
都是模块化、
,前者是.+方式的模块化,输出的是一个模块的拷贝,运行时加载
,后者是 、( )方式的模块化,输出的是模块的引用,编译时加载
:异步加载模块
7、6新特性
、关键字
箭头函数
模板字符串
扩展运算符
解构赋值
数组方法
字符串方法
8、如何判断变量是不是数组?有几种办法?
方法一:.()
方法二:
实现原理: 在左边变量的原型链上
方法三:原型:..().
方法四:构造函数:..().("")>-1
9、和是干嘛的,是否会改变原数组
是切片,截取。
.(,):参数是开始索引,参数是结束索引。没有参数就一直到最后。
返回的是截取出来的数组。
:数组插值
.(,,):参数是开始索引,参数是选择个数,,参数是要替换的内容。
返回的是删除掉的元素。
两者都会改变原数组。
10、数组去重
1、+扩展运算符(使用于数组对象字符串)
2、循环+(新数组中-1时推到新数组)
3、+当前元素等于当前索引
11、操作符具体做了什么?
1、创建了一个空的对象
2、使空对象的原型指向构造函数的原型。
3、改变指向,指向该对象实例
4、对构造函数的做出判断。若一个基本类型则无影响,对象会改变为这个对象。
12、闭包
有全局变量和局部变量,函数内部可以访问函数外部的变量,但是函数外部无法读取函数内部的局部变量。
但是闭包可以做到,闭包是定义在一个函数内部的子函数,有权访问这个函数作用域中的变量。
我的理解闭包是函数内部和函数外部连接起来的桥梁。
优点:函数外访问函数内的值,可以封装对象的私有属性和私有方法。避免变量被垃圾回收。
缺点:变量会驻留在内存中,造成内存损耗。(解决:数据设置为)
原理:基本数据类型在栈内存,用完就销毁,引用数据类型在堆内存,有引用地址。
12、内存损耗的几种情况
闭包
未被清空的定时器
未被销毁的事件监听
引流
13、原型和原型链
所有的函数都有属性(原型),数组和对象没有,上可以设置属性和方法来继承给实例。实例对象都有____属性,对象的__指向构造函数的。逐层深入直到对象的原型,这样就形成了原型链。
对象查找属性/方法的顺序:
对象自身——构造函数自身——对象原型——构造函数原型——
13、、和
三个方法都是用来改变指向,
、可以立即执行,不会立即执行,可以赋值给一个对象。
和的第二个参数和后面参数依次写,的参数是数组。
14、浅拷贝和深拷贝
都是的意思
浅拷贝:只引用地址,不真正的值。要改变一起改变。
场景1: =[1,2,3] 2=
场景2:.()和.()
场景3:引入库,使用方法
场景4:.()类数组转为真数组。
深拷贝:真正的值。
场景1:2=.(.(1))
场景2:2=[...1]和.(对象来说,一层是深拷贝,多层是浅拷贝)
场景3:库的()方法
15、、、的区别
都是在客户端存储数据
:当前浏览器关闭,永久保存,设置的数据()也会存在。存储不能超过5
:当前浏览器关闭,设置的数据也会消失。存储不能超过5
:可以设置过期时间,过期前一直保存。存储不能超过4
16、、、、区别
和:在用户登录后,服务器会创建一个对象,存储用户的登录状态和一些用户信息。然后,服务器会给客户端发送一个包含 的。当客户端再次发送请求时,会自动带上这个,服务器就可以通过 找到对应的对象,从而识别用户。
和:是一种基于令牌的身份验证方式,它可以在客户端和服务器之间传输,用于验证用户的身份。( )是一种特殊的,它是一种基于的开放标准( 7519),用于在各方之间安全地传输信息。由三部分组成:头部()、载荷()和签名()。头部通常包含类型()和加密算法;载荷包含数据;签名是对头部和载荷进行加密的结果。前端请求头传
16、怎么让支持小于12的文字?
的默认字体是16,
可以通过将元素设置属性
(行内块并进行动画缩放。)
17、端:如何禁止&长按时触发系统菜单、长按时下载图片、用户选中文字
禁止端长按时触发系统菜单:
全局设置:
禁止端长按时下载图片:
全局设置:
禁止端用户选中文字:
全局设置:
18、自适应(不同手机型自适应内容)
引用端
引入淘宝无限适配的文件
布局单位使用
19、响应式、媒体查询
响应式就是一个可以适配端和端中调整。
语法结构:
关键词::只支持媒体查询的浏览器
:设备
-丨- -丨-
响应式图片:对图片尺寸进行优化。使用标签(可替换他图片)
20、布局方案
使用响应式布局的情况:
数据不是很多,用户量不是很大的展示类页面
例如:官网、专题页面
大网站若采用大量响应式,会造成网页加载缓慢。
+双端网站使用的布局:
是一个,会加入一些响应式。
端是另一个,会使用自适应的布局方式。
21、、、的区别
三者都是用来变量。
区别1:有变量提升,和没有。
区别2:可以覆盖同一变量,和会报错。
区别3:和的变量可以改变,的常量不可修改。
区别4:和会产生块级作用域,没有。
21、暂时性死区
和会有他们所在的作用域,进入作用域时,的变量已经存在了,但是不可获取,只有等到变量的那一行时,才可以获取和使用变量。
提升,所有没有暂时性死区,未达到时为。
22、箭头函数和普通函数的区别
1、指向:
箭头函数指向=该箭头函数外层第一个普通函数的,且不可修改
普通函数或方法:谁调用指向谁
匿名函数的:匿名函数具有全局性,指向
2、箭头函数不能(不能当做构造函数)
3、箭头函数没有。
4、箭头函数没有。
22、关于的相关问题
函数传参时,会把所传的参数全部存到一个名为的类数组对象中。
有了这个对象我们以后写函数的时候,就不用给所有的形参指定参数名,直接使用对象来获取实参。
23、回调函数和回调地狱
回调函数:作为实参进入另一个函数,并在此函数中被调用。解决异步问题。
回调地狱:多个回调函数嵌套的话,使代码看起来很混乱,不利于维护。
24、、的区别( , )还有和呢?
:是一组不重复数据的,可以用于数组去重。
(两个空对象不重复,是两个值,因为内存地址不同。)
方法:可以遍历(.()),长度,添加,判断是否有
:(类似的字典)是存放键值对的,键和值都可以是任意数据类型
通过实例.()的方法给添加键值对。
可以遍历,方法、等。
:对象的,成员都是对象。
不能遍历,方法有
:键名只能为对象,不能遍历,对象只作为键、不被引用的话自动清除,不计入垃圾回收机制,上同。方法有
25、什么是函数的柯里化?怎么解决?
柯里化:把一个多参数的函数转化成单参数函数的方法,多参数各分一个函数。
核心:函数里面返回函数
作用:参数依次延迟执行。
实例:中经常使用的,实现的机制就是
26、数组和伪数组(类数组)的区别
数组是特殊对象,有各种从原型中继承的数组方法。
类数组是简单对象,有属性,但不能调用数组方法。(对象、等获得的),对象也算是伪数组。
类数组转换成真数组:
1、.()
2、[...伪数组]
3、..()。属性遍历并组成新的数组
26、各种数组方法:常用的数组方法__的博客-博客_数组常用方法
增删、、循环、、、、、、、
27、了解6的吗?
,代理。产生对象前,对其拦截包装操作
28、继承
1、原型继承:父类的实例作为子类的原型。
缺点:引用类型改变后会被共享。
2、构造函数继承, = ()
缺点:子类不能访问父类原型上的属性
3、上面两个组合继承。
缺点:调用两份一样的父类的属性方法。影响性能。
4、寄生组合继承:
5、6的类继承:+
29、图片懒加载:实现图片懒加载原理_的博客-博客_图片懒加载
图片按需加载,如果页面没到该图片,则不加载
实现办法:
加载完页面,使用-存储每个标签的值。
获取图片上边界().和浏览器可视高度,并比较
通过把-的值赋值给的属性。
然后生效。
最简单方法:设置属性=""
30、原生操作
创建新节点::创建一个具体元素。
添加:()
移除:()
替换:()
插入:()
克隆:()
设置和获取属性:("属性名","属性值"),("属性名")
30、是什么?
浏览器对象模型。也就是浏览器操作
:()、()、(1、-1)
:
:属性:地址、域名、端口、路径、参数
、、
30、事件冒泡和事件捕获
事件冒泡:事件向上传导。子事件的点击事件被触发,祖先元素的点击事件依次会被触发。
事件捕获:与冒泡相反,从父到子。
,第三个参数默认冒泡
.()组织冒泡
.()阻止默认事件
@.=
30、内置对象
、、、、、、、。
31、对于的了解
是一种数据交换格式,采用键值对,键值都是字符串。
32、的垃圾回收机制(主要是堆内存)
垃圾回收:找到不再使用的变量,释放掉其占用的内存。
标记清除:函数中的变量被标记,当函数执行完,将变量的内存释放,其他的先进空闲区域。
引用计数:内存变量被引用就+1,变量用完-1,直到0释放。
=1;
=100,1的空间不用了,垃圾回收。
32、避免内存泄露的方式
导致内存泄露有:定时器未清除、闭包、脱离引用
尽可能少地创建全局变量(因为一直在,不会被垃圾回收)
手动清除定时器
少用闭包
清除引用
使用弱引用和(垃圾回收时不会将创建的键值考虑进去)
33、严格模式
使用:
概念:消除语法中的不合理、不严谨、不安全的地方,减少怪异行为,保证代码正常运行
限制:全局下的指向。
构造函数必须加。
函数不能有重名的参数。
34、和的理解?
:模型-视图-控制器
传送指令到
完成逻辑后,通知改变状态
发送新数据给,完成视图更新。
:--
:数据访问、数据存储
:界面
:和的信息转换
35、异步编程的实现方式
1、回调函数
2、事件监听
3、
4、
和函数名之间有星
内部使用 定义不同状态,类似于
5、、
35、谈谈对的理解
是异步编程的一种解决方案,可以解决回调地狱。
有三种状态:(啥也没发生的初始状态、进行中),(完成),(失败)
有、两个结果,分别传递对应两种参数。
继续用链式调用,异常用,还有。
.():等待机制,所有成功再执行,是数组,返回结果也是数组。
传参数组为空,立即执行
.():赛跑机制,有一个操作完成就可以执行。
传参数组为空,不会执行。
36、什么是和?
将函数标记为异步函数,返回的是对象
实现异步函数同步执行
承接一个实例,直接得到.成功的结果,遇到具体值,就是.(这个值)
第一个之前的代码会同步执行。之后的代码会异步执行(后执行)。
37、和的区别
可以写在标签中,只能写在代码中。
只能绑定点击事件,可以绑定各种事件。
绑定多个事件会覆盖,不会。
第三个参数是冒泡事件,是捕获事件。
38、事件对象
事件对象:当事件对应的函数触发时,浏览器都会将事件的相关信息传递给响应函数
事件对象包括的信息:鼠标坐标(.、.)、键盘键位、滚轮方向……
.:返回触发事件的对象
.:阻止默认行为
.:阻止冒泡
:元素可视区域宽度,宽度+边距+边框。:加上滚动条
:元素可视区域高度。
:垂直滚动距离
:元素上边框宽度。
:元素左边框的宽度。
39、实现页面跳转
..=" "
.()
.(-1)
.()
40、.(,)?
合并:实现对象的合并
覆盖:如果已有属性重名,覆盖。
:的是属性值,即引用地址,(浅拷贝)。
41、 和
适合遍历数组, 适合遍历对象。
遍历对象会报错。
遍历的是数组的索引,对象的属性,以及原型链上的属性。
42、小知识点
!!双重取反,不为布尔值时为。??是合并运算符,当左边不为和时,返回左边,否则返回右边判断对象是否有某个属性, 返回布尔值,()高阶函数:将函数作为输入或返回值的函数。.是发生事件的元素或触发事件的元素。()函数可以接受一个字符串作为参数,并把此当做一段代码去执行运算会忽略掉求值的结果,直接返回 、.() 方法返回一个给定对象自身可枚举属性的键值对数组。数组方法.(),返回的元素。数组方法.(元素),判断数组是否有某个元素。数组扁平化:(2或):递归深度遍历数组,并合并成新数组(多层变一层)。(会移除空的项)判断字符串是否以某个字符串开头或者结尾:、.(1,2,3)=[1,2,3],将传入值变成数组,装饰器,扩展类型的属性和方法
43、手写前端面试手撕题整理(自用)_笔经面经_牛客网
手写一个的
手写并封装一个请求
手写
44、大文件上传
45、、、、
:元素可视区域宽度,宽度+边距+边框。:加上滚动条
:元素可视区域高度。
:垂直滚动距离
:元素上边框宽度。
:元素左边框的宽度。
46、单点登录
47、
浏览器是一个线程,而且只有一个主线程。如果有一些复杂计算,主线程执行会很慢。
于主线程。允许可以在浏览器后台线程中运行代码,不影响页面的响应。
可以进行图形处理、复杂数据计算。
但是无法访问和,不能访问本地存储。
需要使用和结合使用
使用:
一种脚本运行在于主线程的背景下,提供了一种方式来拦截和处理网络请求,实现离线缓存、消息推送等功能。 使得者能够以更精细的方式控制缓存,是构建 ()的关键技术之一
是什么
将网页作为应用程序安装在智能设备上的技术。
48、.
再浏览器创建3图形。
三要素:场景、相机、渲染器
场景:要显示在3的对象。 .()创建场景实例,并设置属性(颜色等)
相机:视角和范围
渲染器:结合场景和相机
添加物体
添加光源:.,在.
1、生命周期有哪些?
1、系统自带的八个有:
、、、、、、、。
2、进入页面,执行的生命周期有:
、、、。
3、产生数据(有@),开始挂载(有@),组件初始化完毕,数据可以使用。
4、当有-时,多两个生命周期:、
当有-时,第一次进入组件执行的生命周期:
、、、、
当有-时,不是第一次进入组件执行的生命周期:
只执行
在-组件激活之后当隐藏缓存组件时触发
-组件的使用
- 可以使被包含的组件保留状态,缓存组件,避免被销毁。
原理:写了要给函数存储需要缓存的组件数据,再路由函数获取数据。
组件的为什么必须是一个函数?
对象中,写成一个函数实际就是形成一个闭包。
数据出来,相当于每个组件实例都有自己的私有属性。
如果不写成对象,一个的某个值改变,其他组件的也会受影响。
2、谈谈你对-的了解
-是系统自带的一个组件,切换组件时,把切换出去的组件保留在内存中。
防止重复渲染,提升性能。
(组件被包裹在-标签中。)
3、-和-的区别
- 为时,此节点直接消失。
-为是,依然存在,样式改为:。
-更高的消耗。-适合频繁切换。
-和-的优先级
在源码里,-比-先进行判断,所以-的优先级更高。
写在一个标签里会报错,
解决:外层包裹一层或者加上-。
4、干嘛用的?
在()中的数据修改后,页面中无法获取修改后的数据。
使用$时,当中的数据修改后,可以获得实时的渲染页面。
(是页面渲染后执行的函数)
(后面用箭头函数,指向)
使用场景:想要获取、更新列表后的高度。
5、和的优先级谁高?
>
6、、有什么区别
:监听属性,监听一个已经存在的属性,值改变时,会调用对应的方法。无缓存
:计算属性,根据已有的属性改变时,计算出一个新的属性。有缓存。
7、事件修饰符和按键修饰符有哪些
事件修饰符
@.=“事件名” ,阻止默认行为
@.=“事件名” ,阻止冒泡
:只触发一次
按键修饰符
@.="事件名",键触发事件
@.13="事件名",空格键触发事件
表单修饰符
-.=
-.=
-是什么,它的用途?
的
文件的一个加载器,将、、转换成模块。
用途:可以写6、样式
的作用
作为每一个元素的唯一标识,来区别不同,同时通过算法更新时更加高效。
如果以为值,逆序删除时可能会导致渲染。可以用唯一性作为比如手机。
算法和虚拟
虚拟:框架会根据结构创建虚拟节点树,状态改变时,算将两个虚拟进行对比,根据对比结果计算出变化然后应用到真实中。
算法根据 复用 节点,通过节点而不是创建新节点来减少 操作。(双指针),比较两个虚拟树
对于每个新的 ,在旧的 中根据 查找一下,如果没查找到,那就新增 节点,如果查找到了,那就可以复用。
复用的话要不要要判断下下标,如果下标在 之后,就不需要,因为本来就在后面,反之就需要。
最后,把旧的 中在新 中没有的节点从 树中删除,
形成新的虚拟。
的双向数据绑定如何实现的?试题-实现数据双向绑定的原理是什么? - 校招
(对于表单元素,-绑定数据+触发相应函数,使数据更新。)
实现一个监听器,用来劫持并监听所有属性,如果属性发生变化,就通知订阅者;
实现一个订阅者,用来收到属性的变化通知并执行相应的方法,从而更新视图;
实现一个解析器,用来解析每个节点的指令,对模板数据和订阅器进行初始化;
响应式原理
的响应式是通过.()方法(2)或者方法(3)实现的,通过.()或劫持各个数据属性的和。当数据变动时会发布消息给订阅器,触发相应的监听事件渲染视图。
.(,,属性描述符)
直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
,代理。产生对象前,对其拦截包装操作
为什么.()不可以监听数组,可以
1、 方法允许你定义或修改一个对象的属性,并且可以对这些属性进行枚举和配置。然而,这个方法只能作用于对象的具体属性,而不能作用于整个对象,尤其是不能递归地作用于对象的子属性,比如数组的元素。
2、 可以让你拦截并定义特定操作的自定义行为,可以在数组上工作,递归地代理对对象或数组的操作。
(单页面应用)和(多页面应用)的区别及缺点
指只有一个主页面的应用,浏览器一开始就加载所有的、、,所有的页面内容都在这个主页面中,写的时候还是分开写。单页面的页面跳转只刷新局部资源。
:一个应用的资源分布在不同页面,页面跳转就整页刷新。
优缺点:
优点:不用重新加载用户体验好。不用整个刷新服务器压力小。
缺点:前进后退导航不可用。第一次加载资源过多
解决首屏加载慢
例如项目首屏加载
1、路由动态写成箭头函数,动态加载,
2、静态资源本地缓存。以后请求直接拿缓存。
3、按需引入组件库
4、压缩图片资源
中事件绑定加括和不加括的区别
@=“”
不带括、不写实参的默认传 (事件对象)
@=“()”
只要加括,无论是否传值,都属于传实参给函数, (事件对象)就接收不到。
@=“($, )”
如果需要实参、又需要
改变深层数组
.(对象名,属性,属性值)、.(数组名、索引、值)
也可以使用数组方法等
-实现原理
-双向绑定实际上做了两步动作:
1、绑定数据
2、触发输入事件;也就是说,-等同于:
为什么要加个
标签中添加 属性后, 就会为当前组件中的 元素添加唯一的一个自定义属性 --。防止样式冲突。
混入
局部混入,
在 外部命名变量对象(里面写语法),再在里引入
全局混入,(可以写插件)
过滤器
.用于文本格式化、数据转换,3移除。
父子组件传数据
8、(子传父)
父:
9、 (父传子)
父:
子:
10、 (子给父)
子:
父:
兄弟组件传数据
12、全局事件总线
() {..$ = //安装全局事件总线},
$.$给
$.$拿
$.$
13、-插槽
父组件写插入给子组件。
默认插槽:父里写,子里写来接受
具名插槽:里写属性=,子里写=
作用域插槽:携带数据用于中,父组件接受数据:-:名=""或者#名=""
14、脚手架的目录的文件夹和文件的作用?
放静态资源,放组件,放路由相关配置,.是应用主组件
.是入口文件。
祖孙组件传值:和
函数,数据。结构类似
:['']
3:
('',)
=('')
和服务端渲染
服务端生成解析内容发送到客户端、提高首屏渲染速度,提高。
以为例,主要依赖--为例,在控制器配置插件属性。
1、有哪些属性?
()、()、()、
:.$.
:方法参数为,.$.("方法名",参数)
:方法参数为,.$..计算属性名
:方法参数为,.$.()
-
1、两种模式是什么?区别、原理
:会显示#,回车刷新会加载到对应页面
原理:(标签触发锚点使值变化,浏览器事件监听值的变化,来改变页面内容,中有#)
:无#,回车刷新会404
原理:.和方法传参,添加历史记录而不会触发页面重新加载,中无#
2、怎么定义-的动态路由?怎么获取传过来的值
在目录下的.文件中,对属性加上/:。 使用对象的.
3、-的路由守卫有哪些?
全局:
前置守卫:((,,)=>{})
后置守卫:
路由内:
组件内:
作用:对于路由跳转进行拦截并操作。
4、如何配置404页面
5、路由跳转有哪些方式?
式:- -
编程式:.
6、$ 和$有什么区别?
$:的总实例,;路由器对象,有很多属性和子对象。
$:当前的路由信息,只有、、、(当前路由信息参数)等属性。
3相比2发生了哪些变化?
1、响应式
2的响应式是基于.来监听数据对象的变化,但监听不到对象属性的增删、数组元素和长度的变化。(通过设置)
3采用了代理来代替,可以做到监听对象属性的增删和数组元素和长度的修改,还实现了惰性的监听。
2、组合式,2是
3用的是组合式,函数式编程,代码集中化,方便去梳理,组合式就是一个函数,组件的变量、方法、、、生命周期函数都在中
3、3函数式编程。和变成了函数形式
4、3体积更小,等属性,用到了才会打包。
3带来了好处?
1、性能提升,包括打包速度、内存占用、渲染速度
2、使用代替实现响应式
3、支持
4、组合式——都用引入,对渲染友好。方法和写在一起容易维护。可以单独封装复用。
如何实现
是采用数据劫持结合发布者-订阅者模式的方式实现的。
2通过.()来劫持各个属性的。
、在数据变动时发布消息给订阅者,触发相应的监听回调,对视图进行更新。实现一个监听器,用来劫持并监听所有属性,如果有变动,就通知给订阅者。实现一个订阅者,可以收到属性的变化通知并执行相应的更新函数,从而更新视图实现一个解析器,可以扫描和解析每个结点的相关指令,并初始化模板数据以及初始化相应的订阅器
组合式有哪些?有什么作用?
(定义响应式基本数据类型,取值)
(定义复杂数据类型)
(对象中的某个属性单独提供给外部使用时)
(可以批量创建多个 对象)
:
:监听特定的响应式引用或计算属性,接受两个参数,分别是监听数据和执行的回调
:直接接受一个回调函数,跟踪和监听任何变化
3生命周期函数有哪些
、、、、、、、
3新组件
1、
2组件必须有一个根标签,
3组件可以没有根标签,内部会将多个标签包含在一个虚拟元素中。
好处:减少标签层级,减小内存占用。
2、
是一种能够将我们的组件结构到指定位置的技术。
3、
处理异步组件,等待异步组件或者异步数据时。会出现一个加载指示。
什么是
是内容网络分发,根据用户位置请求最近的节点来请求对应网站的内容。
解决了跨地域访问资源的问题,降低延迟。提高访问速度
是什么?怎样使用它?
的是一种基于的异步请求库,安装 -- 即可使用,请求中包括,,, ,等五种请求方式。
+
(异步请求)
核心是的(->->->)
请求步骤:
1、创建对象 =
2、设置请求 .(‘方法’,‘路径’)
3、发送请求 .(参数)
4、监听成功后的响应数据。 .=(){(.==4&&.==200)}
(判断是否等于4,代表数据是否响应完成,)
获取:
请求
完全和和没关系,他是的升级版分,更加简洁易用。原生+
(,参数对象).(=>.())
参数对象:
{
:、
:{}请求头
:传参
}
预处理器——、的异同
和都是预处理器,他们可以进行变量赋值、混入、嵌套、运算、函数等。
区别:
定义赋值是用@,用的是$
性能优化的手段有哪些?
1、减少请求数量
图片处理——雪碧图(精灵图,定长宽+定位图片内容位置来“裁剪”)、字体图标、64代替图片。
不使用@ (会造成额外的请求)
避免使用空的和,如和
静态资源使用引入
图片懒加载
2、优化资源加载
服务器端渲染,内容在服务器生成,浏览器直接显示
尽可能将文件外链引入,文件写在底部,
使用或异步加载标签。
3、减少重绘回流
不使用布局
不要使用 代码对 元素设置多条样式,选择用一个 代替之。
定位使用或者脱离文档流。
代替 , ,-, -... 这些位移属性。
防抖与节流
4、打包优化
压缩代码
压缩代码
压缩图片、文件
防抖与节流
防抖:输入框实时搜索,定时器时间内不触发第二次。
解决:+判断
节流:窗口滚动,通过判断间隔时间来决定是否触发事件
正则表达式
常用限定符:
^:匹配字符串的起始位置
$:匹配字符串结束位置
?:匹配0或1次字符
:匹配0或多个字符
+:重复1次或多次
{2,6}:匹配2到6次之间
():匹配在一起的
:匹配或者
[-]:匹配所有单个小写字母
[-]+:匹配所有小写字母字符串
括的^:取反
元字符:
.:任意字符
:任意字母、数字、下划线、汉字。(取反,下同)
:任意空白符
:数字
七层模型
应用层
应用层:
表现层:
会话层:
之间:、
传输层
传输层:、
网络层
网络层:、
数据链路层
数据链路层
物理层
和有什么区别?
有证书(第三方机构的安全认证证书),一般没有,
默认端口是80,默认端口是443
是超文本传输协议,无状态协议,信息是明文传输,则是另外具有协议提供安全基础
协议:对称加密(加解密都是一个密钥)、非对称加密(一个公钥一个私钥。)
通常是两者结合的混合加密
1.0和2.0有什么区别?
主流是1.1连接
1.0一个一个请求,每次请求/响应结束后都会关闭连接,都要经历握手和挥手
1.1长连接,一个多个请求(但是要排队一个个进行,容易队头阻塞),
2.0多用复路和二进制分帧,不会互相影响:减少连接次数,解决了传输数据慢问题。
多路复用的方式消除队头阻塞的问题():客户端可以发送多个请求。
客户端的不同的请求分成多个帧,同一请求的帧的相同。
响应根据相同的帧合并为一条完整数据,同时按照优先级(例如>图片)
浏览器根据将数据给请求位置。
更多优化
1.1:添加新的请求方法,、。引入更多缓存头控制缓存
2.0:服务器可主动推资源给客户端。另外,请求文件时,一并响应回和
2.0:头部压缩,第一次发送所有头部字段,后续请求之发送差异数据。
和的区别?
请求时,表示要获取内容,不会修改服务器的数据。对数据类型和数据类型有限制,参数携带在上,会被缓存,服务器响应200。
请求时,表示要提交内容,会修改服务器的数据。数据长度和类型没有限制,参数写成对象,不会被缓存,更安全(因为参数不会被显示在且不会保存在浏览器历史)。(浏览器先发送,服务器响应100,再发送,服务器响应200。)
从输入到渲染的全过程从输入到页面渲染的整个过程 - 个人笔记_公孙元二的博客-博客_从输入到页面渲染全流程
输入了一个域名。
浏览器解析,提取的信息(协议、域名、端口、路径)
查询(先检查缓存有没有,没有则向操作系统查询,仍然没有就查询服务器)找到这个域名对应的服务器地址(),
通过请求建立链接服务(三次握手),
发送请求通过服务器()返回数据,
浏览器渲染,根据返回数据构建树、树,构建 进行布局和渲染,遇到下载并执行脚本。
关闭连接(四次挥手)。
常见的状态码有哪些?
100:响应继续
200:请求成功
301:网页被永久转移到气他
302:临时
304:未修改。(协商缓存,请求的网页没有变化)
400:客户端请求的语法错误。
401:需要用户的身份认证。
404:请求的网页不存在,找不到资源
500:内部服务器错误
504:超时
505:服务器不支持该版本。
三次握手(建立连接)、四次挥手(断开连接)
三次握手(在吗-在-好的)
客户端发送报文,= 给服务器
服务器发送和报文,=,并确认序列+1
客户端发送报文,=,并确认序列+1
为什么三次挥手:
为了客户端和服务器建立连接,但是网络有延迟,保证客户端未超时,防止客户端没有接收到数据。但是次数过多还会造成浪费。
四次挥手(我走了-好的+拜拜-拜拜)
客户端发送报文,=,并停止再发数据,关闭连接。
服务器发送报文,并确认+1
服务器发送报文,=
客户端发送报文,=+1
为什么:
确保数据完成发送、完整性,防止网络原因的防止错误关闭。
头部字段有哪些?
常见请求头:
:可接受的内容类型。
:- 长连接
-:表示发起访问的是什么浏览器,不写的话就判定爬虫,直接拒绝。
:用户登录信息。用户登录,服务器将登陆信息存储在客户端
:请求的来源点。
:请求的域名来源
常见响应头:
-:缓存机制,例如- 防止从缓存中获取过期资源
-:资源文件的类型
-:响应的大小
---: 允许跨域
---:允许访问的方法(??)
的。
写入,.=
如果写入,代表只能通过协议来访问,不能被脚本修改(上面那行),防止攻击,安全。
强缓存和协商缓存
(首次访问都会返回文件,不会考虑缓存)
都是对返回资源进行浏览器缓存
强缓存
响应头返回-
-=(),缓存的内容在该时间后失效。
- :对比文件,不变的话返回304(未修改)
-:彻底禁用缓存
:所有都被缓存(客户端+代理服务器)。
:只缓存客户端,不缓存在代理服务器。
协商缓存
(优先级高)——1.1
缓存过期时,若响应头有,则请求头带上--去服务器的标识对比,若文件相同返回304
- ——1.0
缓存过期(-)时,若响应头有-,则请求头带上--与-对比,对比的是修改时间。
和的区别
:面向连接(有三次握手四次挥手)、效率低、字节流、全双工(两个方向)可靠、文件传输、局域网(电话)
:面向无连接、效率高、报文、不可靠易丢包、视频、广域网()
风格
接口命名规范,资源/版本/执行的操作。/1/。
获取用,新增用,修改用,删除用。
响应体用格式返回。
双向实时通信,不需要客户端主动请求。
前提:
轮询:客户端定期发送请求的服务器
长轮询:客户端发送请求,保持连接打开,等待数据返回后停止。
优点:连接只需要建立初始的那一次。同时可以降低延迟请求更快。
过程:
首先发送一个常规的请求,请求头加上:
前端:
心跳机制:客户端和服务器直接通过心跳包(定期发送空数据)维持连接,防止长时间没有数据传输而断开。
限制:本身没有加密,需要加设安全措施。兼容性差,不支持老浏览器。较多消耗后端资源
解决跨域
跨域产生原因:同源策略拦截跨域
跨域:请求地址和当前地址的协议、域名、端口不同
浏览器允许发起跨域请求,也会返回数据,但是,返回的数据会被浏览器拦截,无法被页面获取到。
(前端解决跨域)
原理:通过标签的属性,请求跨域的接口,并通过?=回调函数接收接口响应的数据。 标签可以跨域加载外部脚本文件。
需要后端将数据传参给该回调函数。
缺点:只支持请求,不支持请求
(通过和,只需要请求中加:"")
(后端解决跨域)
是一个 3 标准,全称是"跨域资源共享",
解决跨域问题,就是在服务器端给响应添加头信息
5的,通过方法,用监听事件
代理服务器
常见的(版本管理)工作流程
初始化:
新增文件的命令:
将需要进行版本管理的文件放入暂存区域:
将暂存区域的文件提交到仓库:
管理的文件有三种状态:已修改(),已暂存(),已提交()
团队内部协作的流程
首先在上创建一个项目,然后为小组成员添加权限,给小组长搭好框架,把本地项目上传到远程项目 ,新建一个分支,所有成员都切换到分支中,在分支中进行,最后小组长将分支合并到分支上,并解决一些冲突。
冲突怎么解决
微信小程序原理
利用、、三种技术,本质是单页面,所有页面渲染和事件处理都是在一个页面内进行,但又可以调用各种微信提供的原生接口。
微信小程序的双向绑定和有什么不一样
小程序直接用.的属性是不可以同步到视图上的,必须调用接口明确指定同步哪些值到视图层才会触发。
是通过对数据对象使用-或者进行监听,只要属性值更改就会立即触发视图的更新。
和和正常的有哪些不同?
的尺寸单位是,是响应式像素,可以根据屏幕宽度自适应。
不支持:-、:,没有、等,不支持动画。
的、、等标签都成龙、。成了
微信小程序页面之间传递数据
1、在文件中定义全局变量,放入存储的信息。使用()拿到数据。
或者2、使用 与 的时候,可以将部分数据放在 里面,并在新页面 的时候初始化。
微信小程序的生命周期
()、()、()、()、()
如何实现下拉刷新
首先在全局 中的 配置 在 中定义 钩子函数,到达下拉刷新条件后,该钩子函数执行,发起请求方法请求返回后,调用 停止下拉刷新
和的区别是什么?
相同点:两者都是点击事件
区别:会阻止事件冒泡。
条件编译-的条件编译_与宇宙对视的博客-博客_ 条件编译
# - 写代码 # :仅平台编译的代码
# 5 写代码 # :除了5,其他平台都可编译出
# -5 写代码 # :
获取地理位置的
.
如何监听页面滚动
事件
如何让图片宽度不变,高度自动变化,保持原图宽高比不变?
给标签添加=""
和原生相比的优缺点
用的是语法,小程序组件、标签和生命周期(小程序单页面),两者结合便于。有自己的和各种插件可以直接饮用,更加便捷支持、,原生不支持
的作用和工作原理
是打包工具,把一切都视为模块:不管是 、、 还是 都可以互相引用,通过定义 .,对所有依赖的文件进行跟踪,将各个模块通过 和 处理,然后打包在一起。
:,(生产环境会压缩代码)
打包过程
1、初始化:解析..配置文件,读取合并参数
2、加载模块:加载所有配置的插件
3、编译构建:从入口()开始,调用对模块进行编译,并根据递归找到依赖模块继续编译。得到编译模块和依赖关系。
4、输出:根据依赖关系,对编译后的组合成
5、写入文件:根据配置把文件内容写入文件系统。
?有哪些?
默认只能打包文件,配置里的的数组配置了一组规则,要有处理,告诉 在遇到哪些文件时使用哪些 去加载和转换打包成。去处理转换各种文件。
-,转换6到标准
-读取 合并 文件,
-把 内容注入到 里,
- 解析文件
-和-一样,处理图片或其他文件
?有哪些?
配置再里,是插件扩展器,解决无法实现的事,可以打包优化、资源管理,需要引入。
自动在打包结束后生成文件,并引入.
打包自动删除上次打包文件
:抽离压缩文件。
运行在打包文件之前,再整个编译周期都起作用。
什么是、什么是、什么是?
:是由打包出来的文件
:是指在进行模块依赖的时候,生成的中间文件,代表模块
:是中的单个模块
:之配置_的博客-博客_
用于过程中实时查看和调试应用。
多种配置
自动刷新
代理请求,避免跨域。
热更新。
热更新
不用每次都打包编译。自动实时更新效果。
:{:}
优化打包速度/性能优化
优化打包速度:
:
在一些较大的前面加上-,进行缓存
-,消除死代码,里,通过配置.为来启用 ,只包含使用的代码,减小体积。
插件:
减少不必要的插件的引入。
使用插件来压缩代码,减小体积。
使用插件压缩代码,减小体积。
引入插件,将一些文件(第三方库)进行打包成单独的文件,避免重新打包。
合理使用(会减慢速度)
来性能优化
包括以上打包速度优化,
使用 插件来生成 的模板时候,通过配置属性优化
图片压缩
压缩,里配置:{:,:80}
压缩,配置:{:}
压缩,:{:80}
为了保证报错的行数和源代码的行数保持一致
在同级别写 :‘--’
生产环境下要省略选项,防止原始代码通过 的形式暴露给用户。
最佳实践: 环境():设置:‘--’’
生产环境() :设置:‘--’
和的区别和比较,还有
两者都是现代化打包工具
打包方式:
:各模块之间依赖→编译打包→服务器渲染出打包结果。问题:模块增多,体积大,热更新速度慢。:启动服务器=》按需动态编译模块显示(请求某个模块时再对该模块进行实时编译)。:更轻量级,专注于库的打包,更快,优化体积,内置-去除未使用代码
优点:
打包快,因为启动时不需要打包,不懂编译默认支持热更新,热更新也更快,因为按需编译。
但是生态没有完善
和的区别,为什么要使用,好处是什么?
难以维护,没有泛型、接口、枚举等工具,不利于大型项目。所有有效的 代码都是有效的 代码,将 . 文件重命名为 . 不会改变任何内容。
原因:因为写的代码很多如果不运行,就会有很多语法错误。类型控制,让编译的时候就能发现并避免错误。而且有类型定义、接口规范,使代码结构更清晰,和保持一致性。
重要语法
有三种原始数据类型,、、
定义变量:拥有多个类型: : ,任意类型 :
定义数组: :[]=[1,23,3,4] :[]=[1,2,""](约束数组的参数)
定义函数:可以结合接口进行数据类型限制,
和:都是任意类型,但彻底放弃类型检查,的变量实例只能赋值给和的变量。
和:表示函数返回值为空(和),代表不会有返回值
元组(,类似列表): 1:[,?,];1=["",3]
枚举(,各种情况的语义化),互相映射,可以做常量:
类(对象携带属性和方法):数据结合带上数据类型写。继承。,(类和子类可以访问)、修饰符属性
泛型: 一个代理的泛称,代码更加灵活,
接口: 用于对对象的形状进行描述(一种事先约束)。
(可选属性加?。任意属性[:]:表示属性名和属性值都是任意类型)
自定义类型: 类型名=类型内容。
数组和元组有什么区别
数组可以有多个类型,但元组虽然有不同类型,但类型和顺序是固定的。
数组可以变化、增删改。但元组长度固定,数量不可变,
数组定义 :[]=[1,2],元组定义: :[,]=[1,'2']
对类型断言的理解
两种写法:尖括语法和语法
它可以让我们在编译时指定变量的类型,以便在运行时避免出现类型错误
的和的区别
对类型的定义。
主要定义对象的结构和规范,支持接口合并、接口继承和扩展,可以被类实现。
只是给类型起别名。可以描述多种类型,包括对象、联合类型、交叉类型等。
关键字,控制成员可见性的方法
关键字
:都能访问
:受保护。自己和子类可访问
:私有,只有自己能访问
抽象类
关键字进行。抽象类可以包含抽象方法、普通方法和属性
不能直接实例化,只能被继承。可以包含抽象方法、普通方法和属性。抽象方法必须在派生类中实现。
前端网络安全
攻击:跨站请求伪造
过程:用户登录漏洞网站(恶意网站)时,攻击者盗用身份信息(等),以此名义发送进行恶意操作(危险服务器携带模拟用户请求接口)
防范:
1、验证 字段,可知请求来源,来拒绝未知的跨域请求
2、添加(客户端令牌)验证:第一次登录后,服务器生成一个给客户端,客户以后带上请求数据。(如果客户端带的和服务器的不一致,则拒绝请求)
3、验证码,类似2
攻击:跨站脚本攻击
过程:用户通过表单提交一段脚本给服务器,服务器处理后会影响网页,形成漏洞
危害:网页布局和运行受影响、被盗取、恶意跳转
防范:
1、浏览器有筛选器
2、对输入的、、标签进行过滤
3、对符进行转换编码。
4、写入
点击劫持攻击
过程:用户点击一些“虚伪”链接或按钮,但其实链接上方有一个通过-设置的“透明”的小组件,例如可以是“点赞”按钮或链接,以达到网站非法目的。
防范:
1、服务器添加--响应头
2、判断.和.是否一致,不一致不允许操作(也可以用作防止其他网站嵌套自己的)
注入
输入里插入代码,操作数据库。
设计模式
设计模式:对软件设计过程中反复出现的某类问题的通用解决方案,框架底层设计。
工厂模式
简单工厂模式:
写多个小产品类(方法),在大工厂类中通过实例在判断逻辑中选择具体产品类。
优点:因此客户端只需要知道具体参数即可。
缺点:增加了系统的复杂度和理解难度,一旦增加新产品就不得不修改逻辑。
单例模式
单例模式:
定义且只使用一个实例。
指的是创建的总是同一个实例,使用类创建的实例始终是相同的。唯一性
需要使用,每次的是同一个对象
外观模式
外观模式:
解决兼容性问题
适配器模式
适配器模式:
调节使用(转换器),对格式或者接口进行转换。
发布订阅模式(观察者模式)(村长通知村民)
观察者模式:例如订阅主播,会有内容更新的推送。当观察对象状态改变时,通过调用观察者的某个方法将这些变化通知到观察者。
观察者模式所做的工作就是在解耦,让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响到另一边的变化。
策略模式:会员折扣机制。存储。通过匹配执行任务
代理模式:,代理操作。+
和2的区别
前者通过回调函数的方式处理异步,后者是通过/的方式处理处理异步
前者的中间件是线性模型(一个接一个),后者是洋葱模型()
前者自带和,后者需要安装
的使用
的模块
文件的读写,常用方法:读取,写入,拷贝,创建目录
读取:.,默认读成,异步读取.
写入:.,异步写入同理如下
追加写入:
拷贝:
创建目录:
什么是路由?中如何管理路由
路由是服务器中,对用户的请求进行分发,交给对应的业务处理函数进行业务受理的一种操作模式。的路由为了将代码逻辑更加清晰。
中包含了入口模块中的主路由(),以及模块化拆分后的子路由对象.(),创建的子路由对象使用固定语法()函数完成子路由的注册和使用。
使用:放一起的用./.正常写,在路由里面引入并用.()传参引入
什么是中间件,中有哪些不同的中间件
中间件是工作在客户端和服务器之间的中间组件,主要用于拦截请求和响应,对请求和响应进行功能扩展的中间组件。
主要包含三种中间件,分别是内置中间件、第三方中间件以及自定义中间件。