面试题
项目
介绍一下之前的监控告警是怎么做的;如果没做过那么你会怎么处理;
1. 数据收集
2. 数据处理
3. 告警
4. 数据展示
介绍一下项目埋点;如果没做过那么你会如何埋点;
项目上线流程
项目打包优化
项目行性能优化
处理跨域问题;同源策略是什么;
git代码如何回滚;
如何实现页面鉴权、数据鉴权
如何限制重复请求
用户登录失效时,多个接口401,只提示一次
项目更新,缓存以及提示
包版本控制
^1.2.5:主要版本不变,更新次要版本和补丁版本
~1.2.5:主要版本和次要版本不变,更新补丁版本
1.2.4:使用确切版本,即版本号固定不更新
Jvascript
请解释一下JavaScript中的instanceof
操作符。
instanceof操作符用于判断一个对象是否属于某个构造函数的实例。
通过使用instanceof操作符,可以确定一个对象是否与某个原型链相关联。
请解释一下JavaScript中的for...in
和for...of
循环的区别。
for...in循环用于遍历对象的属性,而for...of循环用于遍历可迭代对象的元素。
for...in循环会遍历对象的属性名,而for...of循环会遍历对象的属性值。
请解释一下JavaScript中的事件委托。
在JavaScript中,事件委托是指将事件处理程序绑定到父元素上,而不是每个子元素上。
这样可以减少内存消耗,并提高性能。
Promise.all .race .allSettled .any
Promise.all方法用于并行执行多个Promise对象,并等待它们全部完成后再继续执行。
Promise.allSettled方法用于并行执行多个Promise对象,并返回一个包含所有Promise对象结果的数组。
Promise.race方法用于并行执行多个Promise对象,并返回第一个完成的Promise对象的结果。
Promise.any方法用于并行执行多个Promise对象,并返回第一个成功的Promise对象的结果。
数组方法
JavaScript
arr.forEach()
arr.map() //返回结果组成的数组
arr.filter() //将值为真的元素返回
arr.every() //若所有返回值都为true则结果为true,否则为false
arr.some() //若返回值中存在true则结果为true,全为false时结果才为false
arr.reduce() //第一个值为上一次的返回值,第二个值为迭代传递的元素
arr.push()
arr.pop() //删除数组尾部元素,原数组改变
arr.shift() //删除数组头部元素,原数组改变
arr.unshift() //删除数组头部元素,原数组改变
arr.concat() //将一个或多个数组拼接到尾部,原数组不变
arr.join() //将数组转化为字符串并返回
dom操作
JavaScript
//若需要循环大量创建节点,则可先把创建的节点添加进fragment,最后再将fragment添加进父节点
var fragment = document.createDocumentFragment();
文件上传;
如何实现的文件上传
是否使用过前端直传(oss、七牛云);
前端读取文件后拿到的数据类型是什么;
如何实现大文件分片上传;文件切分成了什么数据类型;
列举你所了解的常见 HTTP 头部字段,并简要说明它们的作用。
Content-Type:指示请求或响应中的实体的媒体类型。
Content-Length:表示请求或响应中实体主体的长度(以字节为单位)。
Authorization:包含用于对请求进行身份验证的凭证信息。
User-Agent:标识客户端应用程序的名称、版本、操作系统等信息。
Cache-Control:指定缓存机制在请求/响应链中的行为。
Cookie:包含发送到服务器的 cookie 数据。
Set-Cookie:向客户端设置一个或多个 cookie。
事件轮询,微任务宏任务,requestAnimationFrame
深拷贝
JSON.parse(JSON.stringify(obj)) 递归
扩展运算符(...)、可选链运算符(?.)、空值合并运算符(??)、空值赋值运算符(??=)
JavaScript
let b = 'hello';
let a = 0
b ??= a; // b = “hello”
let c = null;
let d = '123'
c ??= d; // c = '123'
防抖和节流
取消默认事件、阻止事件冒泡
JavaScript
// 取消默认事件
e.preventDefault(); //w3c
e.returnValue = false; //IE
// 阻止事件冒泡
e.stopPropagation(); //w3c
e.cancelBubble = true; //IE
状态码有哪些
websocket方法有哪些
模块系统
CommonJS是同步加载,ES Modules是异步加载
module.exports = xxx; exports.xxx = xxx; require('xxx')
export default xxx; export const xxx = xxx; import {xxx} from "xxx"
CommonJS模块是运行时加载,ES6模块是编译时输出接口
CommonJS模块输出的是一个值的拷贝,ES6模块输出的是值的引用
ES Module引入的模块对象使用的是引用方式,即多个文件引用同一个模块,都指向同一个地址,且为只读引用
在ES Module中,最外层this不允许使用,且指向的是undefined
vue3
请解释一下Vue3中的computed
和watch
。
在Vue3中,computed
和watch
是两个常用的响应式数据处理方法。通过使用computed
,可以创建一个计算属性,该属性会根据依赖项的变化自动更新。通过使用watch
,可以监听数据的变化,并在变化时执行相应的操作。
请解释一下Vue3中的watchEffect
。
在Vue3中,watchEffect
是一个新的响应式数据处理方法,它类似于watch
,但不需要手动指定要监听的数据。通过使用watchEffect
,可以自动追踪依赖项,并在依赖项发生变化时执行相应的操作。
组件通信
请解释一下Vue3中的provide
和inject
。
在Vue3中,provide
和inject
是两个常用的组件间通信方法。通过使用provide
,可以向所有子组件注入一个依赖项,而使用inject
,可以在子组件中访问注入的依赖项。