TS
ts readonly
被 readonly 标记的属性只能在声明时或类的构造函数中赋值。
只读属性
ts 所有属性变成可选
?
Partial
ts泛型
泛型可以理解为宽泛的类型,通常用于类和函数
泛型可以用于类和构造器
泛型可以用于普通函数
ES6及以上
es6新特性
1.let和const命令2.变量的解构赋值3.Symbol4.Set和Map数据结构5.Proxy6.Reflect7.Promise对象8.Interator和for...of循环9.Generator函数10.async await11.Class
实现两个请求链式调用
Promise的then调用是一个链式调用
箭头函数和普通函数的区别
一.外形不同:箭头函数使用箭头定义,普通函数中没有二.箭头函数都是匿名函数,普通函数可以有匿名函数,也可以有具体名函数, 但是箭头函数都是匿名函数。三.箭头函数不能用于构造函数,不能使用new四.箭头函数中this的指向不同在普通函数中,this总是指向调用它的对象,如果用作构造函数,this指向创建的对象实例。 1.箭头函数本身不创建this 2.结合call(),apply()方法使用 3.箭头函数不绑定arguments,取而代之用rest参数…解决
可选说
(1).箭头函数不能Generator函数,不能使用yeild关键字。 (2).箭头函数不具有prototype原型对象。 (3).箭头函数不具有super。 (4).箭头函数不具有new.target。
this指向
1.普通函数调用,此时 this 指向 window2.构造函数调用, 此时 this 指向 实例对象3.对象方法调用, 此时 this 指向 该方法所属的对象4.通过事件绑定的方法, 此时 this 指向 绑定事件的对象5.定时器函数, 此时 this 指向 window
async&await函数依赖执行怎么写
async&await
Promise的理解
Promise是异步编程的一种解决方案,它是一个对象,可以获取异步操作的消息,他的出现大大改善了异步编程的困境,避免了地狱回调,它比传统的解决方案回调函数和事件更合理和更强大
Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。
Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。
Promise的实例有三个状态:
Pending(进行中)
Resolved(已完成)
Rejected(已拒绝)
Promise的实例有两个过程:
pending -> fulfilled:[fʊlˈfɪld] : Resolved:[rɪˈzɒlvd] (已完成)
pending -> rejected: [rɪˈdʒektɪd]:Rejected:(已拒绝)
注意:一旦从进行状态变成为其他状态就永远不能更改状态了。
Promise
class中的constructor的super
super
其他
跨域方式
1.CORS(Corss origin resource sharing) access-control-allow-credentials: true access-control-allow-origin: https://main.m.taobao.com access-control-expose-headers: x-eagleeye-id access-control-allow-methods: GET,POST,OPTIONS2.JSONP 主要就是利用了 script 标签的src没有跨域限制来完成的。只能是get请求3.代理 本地webpack的Proxy(vue和react的代理方式) 线上nginx/apache的反向代理
JSONP
new做了几件事
(1) 创建一个新对象;(2) 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象) ;(3) 执行构造函数中的代码(为这个新对象添加属性) ;(4) 返回新对象。
new
数组去重
数组去重
数组排序
1.冒泡排序法:将数组中的相邻两个元素进行比较,将比较大(较小)的数通过两两比较移动到数组末尾(开始),执行一遍内层循环,确定一个最大(最小)的数,外层循环从数组末尾(开始)遍历到开始(末尾)。**(冒泡排序:比较两个相邻的元素,将值大的元素交换到右边)2.选择排序法:将要排序的数组分成两部分,一部分是从大到小已经排好序的,一部分是无序的,从无序的部分取出最小的放到已经排序的最后面。**(选择排序:首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。)3.插入排序法:将要排序的数组分成两部分,每次从后面的部分取出索引最小的元素插入到前一部分的适当位置**(插入排序:从数组里面找到最小值和它的前面比较将一个记录插入到已经排好序的数组中,从而一个新的、记录数增 1 的有序表)4.快速排序法:快速排序法号称是目前最优秀的算法之一,实现思路是,将一个数组的排序问题看成是两个小数组的排序问题,而每个小的数组又可以继续看成更小的两个数组,一直递归下去,直到数组长度大小最大为2。**(快速排序:首先设定一个中间值,数组分成左右两部分。将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。)
排序方法
浅拷贝和深拷贝
拷贝其实就是对象复制,为了解决对象复制是产生的引用类型问题。区别: 浅拷贝只是增加了一个指针指向已存在的内存地址,仅仅是指向被复制的内存地址,如果原地址发生改变,那么浅复制出来的对象也会相应的改变。深拷贝是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存。实现深拷贝: JSON.parse(JSON.stringify), [...], {...} slice, concat, lodash, _cloneDeep实现浅拷贝: Object.assign
观察者模式
发布订阅模式
搭建项目的过程
搭建项目
浏览器存储
Cookie LocalStorage SessionStorage
cookie localstorage sessionstorage 的区别
区别
gitlab合并分支
gitlab有一个主分支main分支,每个人都有自己的分支,先在自己的分支git pull origin 别人的分支名。再git add . 再git commit -m "名字"提交代码,再git push origin 自己的分支名,再切换到main分支,再git merge 自己的分支名,把自己的代码合并到主分支上。再git add .再git commit -m "名字" 再git push origin main 然后代码就合并好了。
合并时遇到冲突怎么办
解决冲突啊
常见的Http状态码
http
history和hash模式的区别
history和hash模式的区别
浏览器缓存
浏览器缓存
websocket的概念及使用方式
服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。websocket的客户端的API1.WebSocket 构造函数 var ws = new WebSocket('ws://localhost:8080');2.webSocket.readyState readyState属性返回实例对象的当前状态,共有四种。 CONNECTING:值为0,表示正在连接。 OPEN:值为1,表示连接成功,可以通信了。 CLOSING:值为2,表示连接正在关闭。 CLOSED:值为3,表示连接已经关闭,或者打开连接失败。3.webSocket.onopen 实例对象的onopen属性,用于指定连接成功后的回调函数。4.webSocket.onclose 实例对象的onclose属性,用于指定连接关闭后的回调函数。5.webSocket.onmessage 实例对象的onmessage属性,用于指定收到服务器数据后的回调函数。6.webSocket.send() 实例对象的send()方法用于向服务器发送数据。7.webSocket.bufferedAmount 实例对象的bufferedAmount属性,表示还有多少字节的二进制数据没有发送出去。它可以用来判断发送是否结束。8.webSocket.onerror 实例对象的onerror属性,用于指定报错时的回调函数。
axios怎么进行封装的?
封装axios
请求拦截器和响应拦截器的功能?
请求拦截器的作用是在请求发送前进行一些操作响应拦截器的作用是在接收到响应后进行一些操作
单页面应用的优缺点
单页面应用的优缺点
刷新页面数据丢失怎么解决
把数据存到合适的浏览器存储里面
.env.production和.env.development的作用
不同环境下的配置不一样.env.development 开发环境下的配置文件.env.production 生产环境下的配置文件
JQuery
JQuery
AJAX 的理解
Ajax 是通过js的异步通信,从服务器中获取XML文档从中提取数据,在更新
当前页面的对应部分,而不用刷新整个页面
创建AJAX 请求的步骤
创建一个HMLHttpRequest对象
在这个对象上使用 open 方法创建一个 HTTP 请求,open 方法所需要的参数
是请求的方法、请求的地址、是否异步和用户的认证信息。
在发起请求前,可以为这个对象添加一些信息和监听函数。
当对象的属性和监听函数设置完成后,最后调用 sent 方法来向服务器发起请求,
可以传入参数作为发送的数据体。
AJAX
箭头函数和普通函数的区别
箭头函数个普通函数区别
箭头函数的特性
特性
不能作为构造函数,不能使用new
不能使用argumetns,取而代之用rest参数…解决
不绑定this,会捕获其定义时所在的this指向作为自己的this。由于在vue中自动绑定 this 上下文到实例中,
因此不能使用箭头函数来定义一个周期方法。箭头函数的this永远指向上下文的this,call、apply、bind也无法改变
箭头函数没有原型对象
常见的端口名
http 80 https 443 ftp 21smtp 465SSH 22websokect 2120
跨站请求伪造 跨站脚本攻击
csrf (Cross-site request forgery)XSS (corss-site scripting)
跨站请求伪造 跨站脚本攻击
Http
disk cache 硬盘缓存 第一次请求走disk
memory cache 内存缓存 会话进程结束内存释放
http 缓存不会缓存接口 一般会缓存静态资源文件(某一段时间不会变化的资源)
http2.0 cache-control 强缓存 max-age 最大缓存时间 相对第一次请求时间
http1.0 expires GMT 时间字符串 绝对时间 9.8 容易出现时间误差
协商缓存有两个方法:
etag 设置版本号
last-modifed 比较文件最后一次修改时间
https为什么比http安全
https为什么比http安全HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。HTTPS并不算是一个新协议,是将HTTP协议通信接口部分用SSL和TLS协议代替。SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。也就是说HTTP加上加密处理和认证以及完整性保护后即是HTTPS。
https用的什么加密(对称非对称)
对称和非对称相结合
对称加密:这种方式加密和解密同用一个密钥。加密和解密都会用到密钥。
非对称加密:公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,另一把叫做公开密钥。
https在交换密钥环节使用非对称加密方式,之后的建立通信交换报文阶段则使用对称加密方式。
谈谈对CDN理解
内容分发网络(Content Delivery Network,简称CDN)CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。基本就是通过外地部署的外地服务器来分流内容,让主服务器不会有那么大的工作量。
项目做过那些优化
项目优化减少 HTTP 请求数减少 DNS 查询使用 CDN避免重定向图片懒加载减少 DOM 元素数量减少DOM 操作压缩 JavaScript 、 CSS 、字体、图片等使用 iconfont字体裁剪多域名分发划分内容到不同域名尽量减少 iframe 使用避免图片 src 为空把JavaScript放在页面底部
Tcp三次挥手 四次握手
三次握手:
发送端发送一个SYN标志的数据包,询问是否能收到请求
接收端接收后返回一个SYN/ACK标志的数据包表示,我能收到,并询问请求端是否能收到
最后发送端再发送一个ACK标志的数据包代表我能收到,可以建立连接
四次挥手:
Client发送一个FIN,用来关闭Client到Server的数据传送
Server收到FIN后,发送一个ACK给Client
Server发送一个FIN,用来关闭Server到Client的数据传送
Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server
TCP协议
Get 和 post 的请求 区别
GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。GET 方法的参数应该放在 url 中,POST 方法参数应该放在 body 中GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。不同浏览器和服务器会对请求有不同的URL的长度和传输的数据大小的限制POST的安全性要比GET的安全性高。
浏览器什么时候引起重绘和重排
重排:浏览器下载完页面中的所有组件(HTML、JavaScript、CSS、图片)之后会解析生成两个内部数据结构(DOM树和渲染树),DOM树表示页面结构,渲染树表示DOM节点如何显示。重排是DOM元素的几何属性变化,DOM树的结构变化,渲染树需要重新计算。重绘:重绘是一个元素外观的改变所触发的浏览器行为.浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。由于浏览器的流布局,对渲染树的计算通常只需要遍历一次就可以完成。(1)页面渲染初始化时;(2)浏览器窗口改变尺寸;(3)元素尺寸改变时;(4)元素位置改变时;(5)元素内容改变时;(6)添加或删除可见的DOM 元素时。
怎么减少重绘和重排
分离读写操作
样式集中改变
尽量避免style的使用
不要经常获取同一个元素,可以第一次获取元素后,用变量保存下来,减少遍历时间
不要使用Table布局
批量修改元素时,可以先让元素脱离文档流,等修改完毕后,再放入文档流。
点击地址栏回车事件会触发什么事件
在浏览器中获取输入的域名,例如www.sixseven.xyz,搜索自身的DNS缓存
DNS缓存:指的是DNS返回正确的IP后,会把这个结果临时存储起来,并且会为缓存设置一个失效时间(N小时),在这N小时之内,当再次访问该网站时,
系统会直接从电脑本地的DNS缓存中把结果返回,而不必去请求DNS服务器,从而加速域名的解析
搜索浏览器操作系统的DNS缓存
读取本地的HOST文件
浏览器向DNS请求,将域名解析为外网的IP地址,并缓存起来
客户端的浏览器打开连接,与服务器进行连接(web服务默认端口号为80),进行TCP的三次握手,从资源库中返回相应的资源
建立TCP连接后,浏览器发出HTTP请求,请求内容
服务器通过HTTP响应,网站可能会有负载均衡设备来平均分配所有用户的请求,分配到多个操作单元上执行,将首页发送到浏览器
浏览器解析HTML代码,并请求相应的图片,CSS,JS资源.看是否是长连接来决定是不是断开TCP连接
TCP连接释放(四次挥手)
浏览器解析服务端发送的首页文件,并进行解析渲染,将web页面展示给用户点击地址栏回车事件会触发什么事件
小程序
vconsole dataset
如何判断dom元素在dom树中
javascript contains方法是在IE浏览器
compareDocumentPosition()compareDocumentPosition
better-scroll组件实现了什么功能 怎么封装的
上拉刷新 下拉加载
怎么维持登录态
利用Cookie机制实现 http方式 sessionID存到Cookie中。
用户名和密码
token方式 提交账号和密码给服务端,服务端根据定义的的策略生成一个token token有时效,过期了
token怎么传送到后端
header请求头中
传送token时为什么用post请求
post请求用于修改服务器上的资源,对所发的信息没有限制
登录带的token算是修改资源,get一般用来获取数据
怎么给多项dom元素绑定事件
数组循环
线上跨域怎么解决 除了nginx
jsonp cors
图片懒加载怎么实现
img标签的src属性
可视区域的判断
document.documentElement.clientHeight //获取屏幕可视区域的高度
element.offsetTop//获取元素相对于文档顶部的高度
document.documentElement.scrollTop//获取浏览器窗口顶部与文档顶部之间的距离,也就是滚动条滚动的距离
如果:offsetTop-scroolTop< clientHeight,则图片进入了可视区内,则被请求。
loader执行顺序
一般情况下,loader的执行顺序为从右往左,从下往上
webpack插件生命周期
工程化代码规范
ESLint
Find Problems。ESLint 通过静态代码分析可以快速发现代码中的问题。
ESLint 可以运行在大多数文本编辑器中,并且也可以在工作流中接入 ESLint
Fix Automatically。ESLint 发现的很多问题都可以自动修复
Customize。可以定制 ESLint 检查规则
sourcemap放到什么地方
Source map就是一个信息文件,里面储存着位置信息。也就是说,
转换后的代码的每一个位置,所对应的转换前的位置。
package.json中的字段与作用
package.json
发npm包
先登录npm login
再发包npm publish
webpack的打包流程
webpack