一天面五场,感觉身体被掏空。(下)一天面了五场,面下来整体感觉良好,但是喉咙冒烟、腰酸背痛,没办法只能硬着头皮上了。一天
一天面了五场,面下来整体感觉良好,但是喉咙冒烟、腰酸背痛,没办法只能硬着头皮上了。
Promise的静态方法和实例方法
- Promise 的实例方法
这些方法是在 Promise 对象实例上可用的方法。
then(),catch(),finally()
-
Promise 的静态方法
这些方法直接在 Promise 构造函数上可用。
Promise.resolve(value) 如果value不是一个Promise实例,则返回一个fulfilled的Promise对象,如果是一个Promise实例则直接返回Promise
Promise.reject(reason) 创建一个被rejected的Promise对象并带有指定的拒绝原因,返回一个新Promise对象
// 在a和b都执行完成之后才执行c
Promise.all([a(), b()]).then(() => {
c();
})
// 在 a b中 快的执行完毕之后才执行c
Promise.race([a(), b()]).then(() => {
c();
})
如何实现v-model
v-model指令实际上是一个语法糖,它由v-on和v-bind共同组合。
v-model的实现
< input type="text" v-bind:value="message" v-on:input="handleInput" />
当页面中如果有几万条数据的列表你会怎么渲染
- 分页,每次只显示一页的内容
- 虚拟滚动,每次只渲染当前可视区域内的项目,而不是整个列表,随着列表的滚动组件会被动态地加载和卸载 vue-virtual-scroller
- 如果数据不会经常变动,可以放在本地存储中,localStorage和IndexDB
瀑布流布局的简单实现原理
先规定每一行放多少张照片,然后在第一行先放一行照片,然后维护一个数组表示该列的高度,每次找到高度最小的那一列也就是数组中最小的那个数的下标,然后再把另外一张照片给插入到这个位置然后再重新更新这一列的高度,重复这个过程直到所有照片处理完毕。
HTTP状态码
- 1xx 信息性状态码
这类状态码表示接收的请求正在处理中。
- 2xx 成功状态码
这类状态码表示请求已被成功接收、理解,并被接受。
- 3xx 重定向状态码
这类状态码表示需要客户端采取进一步的动作才能完成请求。
- 4xx 客户端错误状态码
这类状态码表示请求包含语法错误或无法完成请求。
- 5xx 服务器错误状态码
这类状态码表示服务器遇到了意料之外的情况,无法完成请求。
如果一个改动点一不小心被commit了怎么回退
回退最近的一次提交(未推送) 如果你刚刚提交了一个你不希望保留的改动,并且这个提交还没有被推送到远程仓库,你可以使用 git reset 或 git revert 来回退这个提交。 如果你想彻底撤销这次提交,可以使用 git reset 命令。
函数中的get set访问器属性
-
get
访问器get value()
定义了一个只读的 getter 方法,当尝试访问对象的value
属性时,会执行这个方法并返回当前存储的value
。
-
set
访问器set value(val)
定义了一个 setter 方法,当尝试设置对象的value
属性时,会执行这个方法,并将新值赋给val
。这里它返回了传入的新值val
,但实际上这个返回值在设置操作中通常不会被使用。
function constValue(value) {
return {
get value() {
return value;
},
set value(val) {
return val
}
};
}
const myConst = constValue(42);
console.log(myConst.value); // 42
console.log(myConst.value = 43); // 43
如何实现类似const这样一个功能
可以使用一个函数来包装值,并返回一个只读的封装对象。
使用get,set访问器
function constValue(value) {
return {
get value() {
return value;
},
set value(val) {
throw new Error("TypeError: Assignment to constant variable.");
}
};
}
const myConst = constValue(42);
console.log(myConst.value); // 42
myConst.value = 43 // 报错
路由缓存的优缺点
优点:
- 性能提升,可以减少组件的重新创建保持组件的状态
- 节约资源,可以减少网络请求
- 改善用户体验,可以在短时间内快速响应,可以保留用户的进度,再切换到其他页面再回来后不会丢失数据
缺点:
- 会占用内存,导致内存泄漏
- 数据更新的问题,因为组件是处于缓存状态,用户看不到最新的数据
常见的内存泄漏问题
- 闭包没有被及时的清除掉
- 定时器没有被清除(setTimeout,setInterval)
- 没有释放的引用
- 路由缓存
- Pina和Vuex状态管理没有适当地清理
WebSocket
WebSocket是一种网络通信协议,它提供了一个持久的、全双工的通信通道,允许客户端和服务器之间进行双向数据通信。
WebSocket 的主要特点包括:
持久连接:一旦建立,连接保持开放,直到任一方主动关闭连接。
全双工通信:客户端和服务器都可以随时发送数据给对方。 低延迟:相比传统的轮询机制,WebSocket 提供了更快的响应时间。
高效数据传输:使用二进制格式传输数据,减少数据包的大小。 安全性:可以通过 TLS/SSL 加密(WSS)确保数据传输的安全。
WebSocket 在现代浏览器中得到了广泛的支持,适用于各种实时通信应用,如在线聊天、实时游戏、协作编辑工具等。
http和https
- 相同点
基础协议: HTTP 和 HTTPS 都是基于 TCP/IP 协议栈的应用层协议,用于在客户端和服务器之间传输数据。
请求/响应模型: 两者都采用了请求/响应模型,客户端发送请求到服务器,服务器处理请求后返回响应。
URL 结构: URL 的基本结构相似,都包含协议、主机名、端口号(通常省略)、路径和查询字符串等部分。
状态码: 两者使用相同的 HTTP 状态码来表示请求的结果。 方法: 都支持相同的 HTTP 方法,如 GET、POST、PUT、DELETE 等。
- 不同点
加密: HTTP 不对传输的数据进行加密,数据以明文形式在网络上传输。 HTTPS 使用 TLS/SSL 协议对数据进行加密,保护数据免受窃听、篡改和伪造。
端口号: HTTP 默认使用端口 80。 HTTPS 默认使用端口 443。 安全性: HTTP 不提供数据加密,容易受到中间人攻击。 HTTPS 提供了加密通信,增加了数据的保密性和完整性,增强了安全性。
性能: HTTP 的性能通常优于 HTTPS,因为加密和解密数据会带来额外的计算负担。 HTTPS 在现代浏览器和服务器中通过硬件加速和协议优化(如 HTTP/2 和 HTTP/3)来减轻加密带来的性能影响。
证书验证: HTTPS 要求服务器拥有数字证书,客户端可以验证证书的有效性,从而确保与之通信的服务器身份可信。 HTTP 没有证书验证机制。
浏览器行为: HTTP 网站可能被浏览器标记为不安全。 HTTPS 网站通常被视为更安全,可以解锁更多功能,如保存密码、支付信息等。
Process.nextTick可以是微任务也可以是宏任务
判断Process.nextTick是不是微任务其实取决于浏览器的版本,如果浏览器的版本比较低的话Process,nextTick底层用的就是setTimeot({},0)去实现这样就会被当成宏任务。
在Vue2中尝试修改数组什么情况下会丢失响应式
当我们直接通过索引赋值给数组元素时,Vue的数组会丢失响应式,比如arr[0] = newValue 不会触发视图更新 还有像sort()和reverse()这些方法。
为了不丢失响应式可以使用:push、pop、shift、unshift、splice这些方法来操作数组
最后
一天面了五场,信息量太大了,分成了三篇文章来记录,希望对大家能有所帮助。
如果觉得本篇文章对你有所还请点赞+收藏+评论,谢谢大家。
转载自:https://juejin.cn/post/7402431315785957410