前端面试题总结

js数据类型 和 判断数据类型的方法

  • 基本数据类型 (es5 字符串、数字、布尔、未定义、空)(es6+ symbol 、bigint )、
  • 引用数据类型(数组、对象、函数)
  • 判断基本数据类型 typeof,除了null以外都可以返回正确的结果值。
  • instanceof 判断引用数据类型,返回值的布尔值

作用域和作用域链(本质)

作用域 : 变量起作用的范围 ,作用域是虚拟的,代码写好作用域就有了。分有:全局作用域、块级作用域 、 函数作用域

作用: 防止作用污染

作用域链 :是真实存在的可以看到的 , 是程序查找变量的过程 ,本质是一个数组 (链表结构)是由内到外的各自执行上下文时变量对象组成的数组

作用域链查找过程 :先在自己找 ,如果有就用 ,没有就在上一层上下文中的父元素身上找 ,有就用,没有就继续向上找,直到找到全局 有就用 ,没有就报错。

在什么时候形成的 : 执行上下文

作用域是虚拟的 是指变量起作用的范围(分有:全局作用域、块级作用域 、 函数作用域) 作用域链是真实存在的 ,是程序查找变量的过程(本质:是由内到外的各个执行上下文中变量对象组成的数组)

原型和原型链

每一个函数身上都有一个属性 prototype 它指向的对象 简称原型对象 也叫显式原型 , 每一个对象身上都有一个属性proto 它和实例它的函数对象指向同一个原型 ,叫隐式原型 简称原型

通过显式原型对象 : 对原型对象进行操作 , 通过隐式原型对象 , 对原型原型进行查找 ,查找的过程承做原型链

原型链查找过程 : 先在自己的身上找 ,找到就返回、找不到就顺着自己的隐式原型(proto)到显式原型对象身上找, 找到就返回找不到

new关键字5件事情。

1、在堆中开辟一个空间 2.、函数内部this 指向改空间 3、执行函数代码 4、添加__proto__ 5、返回this指向的地址

执行上下文,说说常见的this指向

执行上下文全名叫 (执行上下文环境)分两种(全局执行上下文和函数执行上下文)

为什么有执行上下文 : 确保程序正常运行

执行上下文有两阶段 , 创建阶段和执行阶段

全局执行上下文的 创建阶段主要干了3件事

  • 收集变量形成变量对象(包含变量提示(预解析))
  • 2.确定上下文环境this指向 (this是程序执行的时候上下文中存在的东西())
  • 确定当前执行上下文环境的作用域链(每个上下文环境的有自己独立的作用域链)

执行阶段干了一件事情

  • 执行代码 ,根据作用域链查找变量 , 使用变量的值 或者给变量赋值

全局执行上下文和函数执行上下文区别 :函数执行上下文在创建阶段,收集变量数据之前 先给形参赋值形成arguments

  • this指向
    • 在普通函数调用中this指向window
    • 在事件回调函数中this指向事件源
    • 在构造函数中this指向实例化的对象
    • 在一般调用时 this 指向调用着(在方法中this指的是调用者)
    • 在call/apply 中 this指向 第一个参数
    • 在箭头函数中this指向作用域外部上下文中的this

说说闭包

闭包是一个引用关系 , 函数嵌套 、内部函数引用外部函数的局部变量 、 外部函数调用

闭包的作用是 : 延长外部函数局部的生命周期 , 函数的外部能间接操作内部的局部变量

区别闭包的操作:产生闭包 / 使用闭包 / 释放闭包

  • 产生闭包 : 闭包在内部函数创建的时候产生,包含被引用变量的容器
  • 使用闭包 : 执行内部函数 ,也就是说内部函数调用才会用到闭包
  • 释放闭包 : 让内部函数变为垃圾 ,断开所有指向它的引用

闭包的优缺点 : 优点: 延长函数的生命周期,函数外部可以间接操作内部的局部变量。

缺点 : 闭包不会自己释放 多了就造成内存泄漏 ,过多会造成内存移出 。 闭包不能乱用 , 不用了要记得销毁

防抖和节流

全称 : 函数防抖 和 函数节流

函数节流 : (节流就是多次变少次)在列表三级联动时 ,鼠标滑过会发现卡顿现象 这时候我们就要用函数节流 设置节流后结果和没有设置是一样的但是自己设置的一个是卡顿现象

函数防抖 : (防抖就是在一段时间内只触发一次) 在秒杀的时候, 设置10点秒杀 ,就只有10点点击的那一下可以,而之前点击的都不计入。

优点: 可以避免给后台造成没必要的压力造成宕机。

深浅拷贝

拷贝 全程是数据拷贝,必须在堆中开辟一个新的空间才叫拷贝

浅拷贝:浅拷贝拷贝的是基本数据类型或是由基本数据类型组成的对象 ,如果是对象拷贝的是地址值,我们使用的时候要改变地址值(方法:. . . 扩展运算符进行拷贝 ,使用对象的静态方法 assign()进行拷贝 , 使用)

深拷贝:深拷贝拷贝的是复杂数据类型 , 对象内部包含对象的这种结构。他是使用递归的方式来实现深拷贝的,会对属性中所有引用类型的值进行遍历,遍历到都是基本数据类型的值为止,我使用的是lodash库里面的cloneDeep方法实现深拷贝的

es5和es6的区别

数组的方法

数组方法 分为对原数组有影响的 和对原数组没有影响的

一、对原数组有影响的

  • (1) push()
    • 功能 :从末尾添加一个或者多个 ;
    • 参数:添加的元素;
    • 返回值:数组的新长度;
  • (2) pop ()
    • 功能 :从数组的末尾删除一个;
    • 参数:无 ;
    • 返回值:删除的那个元素;
  • (3)unshift ()
    • 功能 从数组头部添加一个或者多个 ;
    • 参数:添加的元素;
    • 返回值:数组的新长度;
  • (4)shift ()
    • 功能 从数组头部删除一个;
    • 参数:无;
    • 返回:删除的那个元素;
  • (5)sort()
    • 功能 对数组进行排序
    • 参数 如果不写,默认吧每个元素小转换为字符串进行排序,按照Unicode码排序。 如何要按照升序或者降序去排序,需要传一个参数是函数,这个函数有两个形参。
    • 返回值 : 排好序的原数组
  • (6)reverse ()
    • 功能 翻转数组;
    • 参数: 无;
    • 返回值: 翻转后的原数组;
  • (7)splice() 增删改一体化
    • 删除 (两个 参数, 第一个:表示从那开始 , 第二个:表示删除几个) 返回 : 删除元素组成的新数组
    • 删改 (最少三个参数 , 第一个:表示从那开始 , 第二个:表示删除几个 , 后面表示新增的元素)返回 : 删除的元素组成的新数组
    • 增加 (最少三个参数 , 第一个:表示从那开始 , 第二个:参数为0表示删除0个 , 第三个:表示新增的元素 ) 返回 : 删除的元素组成的新数组(空数组 新增删除0个)

二、对原数组没有影响的

  • (1.) join()
    • 功能 :以指定字符串为连接符 ,将数组元素连接成一个字符串
    • 参数 :如果不传,默认以逗号为连接符,将元素连接成字符串 。 如果传的是正常字符串 , 那么以这个字符串为连接符将元素连接成字符串。 如果传的是空串,那么直接将字符串连接成字符串,中间没有任何连接
    • 返回值 :返回连接好的字符串
  • (2.)indexOf()
    • 功能:通过元素查找下标
    • 返回值:如果有就返回下标,没有就返回-1
    • 参数:需要查找的下标
  • (3.)concat()
    • 功能 : 合并数组
    • 参数 :可以不写,相当于复制一个数组 。 可以写一个或者多个值,吧这些值拼接到数组结尾。 可以写数组,会先吧数组拆分开, 然后吧元素拼接到之前数组末尾。
    • 返回值 : 返回拼接好的新数组
  • (4.)slice()
    • 功能 : 在数组中截取部分元素形成新数组
    • 参数 : 和字符串方法slice 一致 ,起始位置和结束位置,不包含结束位置的元素 。 如果只传一个代表起始位置到结束,两个位置都可以使用负数。
    • 返回值 : 返回截取部分组成的新数组
  • (5.)valueOf()
    • 功能 : 获取数组对象基本值, 数组实例对象
    • 参数 : 无
    • 返回值 : 返回原数组 ,因为数组是非包装对象,所以没有基本值
  • (5.)toString()
    • 功能 : 将数组对象转化为字符串
    • 参数 : 无
    • 返回值 : 去除数组中括号, 其余加引号形成字符串返回

三、数组循环方法

  • (1.)for(){}
    • 数组遍历
  • (2.)for in
    • 数组遍历 (对象遍历的方法),定义的是下标 , 通过数组变量中括号拿到值arr[ index ]
  • (3.)for of
    • 迭代器对象 拿到元素的内容(数组内容) 只有数组有迭代器 , 对象没有
  • (4.)forEach()
    • 功能 :遍历数组 , 一旦开始遍历就停不下来
    • 参数:回调函数 (有三个形参 :item、index、arr)
    • 返回值 : undefined(没有返回值)
  • (5.)map()
    • 功能 : 循环遍历数组, 对遍历到的元素进行加工操作
    • 参数:回调函数 (有三个形参 :item、index、arr)
    • 返回值 : 返回一个新数组 (每一个元素都是回调函数的结果)
    • 应用场景 : 对数组中的每一项数据进行操作 ,如给数组中的每一项添加相同的样式
  • (6.)find()
    • 功能 :遍历查找,返回值是查找到的值,且后面元素不会在遍历。找不到返回undefined
    • 参数:回调函数 (有三个形参 :item、index、arr)
    • 返回值 :查找到的值 或 返回undefined
  • (7.)findIndex()
    • 功能 :遍历查找,返回值是查找到的下标,且后面元素不会在遍历。找不到返回-1
    • 参数:回调函数 (有三个形参 :item、index、arr)
    • 返回值 :查找到的下标 或 返回-1
  • (7.)filter ()过滤器
    • 功能 : 循环遍历数组 , 对每一项元素进行判断,符合要求的过滤到新数组中, 返回出去。都不符合返回一个空数组
    • 参数:回调函数 (有三个形参: item、index、arr)
    • 返回值 : 新数组
    • 应用场景 :根据条件过滤数组中的数据
  • (8.)some()
    • 功能 : 遍历查找,遍历数组 如果符合条件就会停止遍历 ,并且返回true 。遍历结束后发现都不符合 条件,返回 false。
    • 参数:回调函数 (有三个形参: item、index、arr)
    • 返回值 :是一个布尔值(Boolean)
    • 应用场景 :条件成功后不在执行( 用户注册名称时,之前注册过就不能在注册了)
  • (9.)every()
    • 功能 : 筛选每一个,遍历数组 如果有一个不符合条件就会停止遍历,返回false。遍历结束后发现都符合条件,返回true。
    • 参数:回调函数 (有三个形参: item、index、arr)
    • 返回值 : 是一个布尔值(Boolean)
    • 应用场景 : 某一地区健康码是否都为绿码
  • (10.)reduce()
    • 功能 :累计
    • 参数 :有两个参数 1、回调函数 (有四个形参 :上一次返回的值 pre 、item、index、arr)2、上一次的默认值(一般设置为0)
    • 应用场景 : 累加和的计算

四、数组方法扩展

1、Array数组对象的方法(静态方法)

  • from()
    • 作用:伪数组变为真数组
  • of()
    • 将数字转为数组

2、Array数组原型身上的方法(原型方法)

  • copyWithin()
    • 功能:数组复制
    • 参数:有三个参数
      • 第一个 数组开始改变的位置
      • 第二个 数组开始复制的位置
      • 第三个 数组复制结束的位置
    • 会影响原数组
  • fill()
    • 功能:数组填充
    • 参数:有三个参数
      • 第一个 填充的内容
      • 第二个 填充开始的位置
      • 第三个 填充结束的位置
  • entries()
    • 功能:循环 需要next调用 value值前面是下标 , 后面是内容
    • done变true循环结束
  • values()
    • 功能:循环 需要next调用 value值是数组元素
    • done变true循环结束
  • keys()
    • 功能:循环 需要next调用value值是数组下标
    • done变true循环结束
  • find()
    • 功能:查找(筛选)
    • 参数:函数 (使用返回值查找是否存在 , 通过item对比查找元素 , 有就返回这个元素 ,没有返回undefined)
  • includes()
    • 功能:查找 判断是否包含某个元素
    • 返回值:是布尔值 , 有就返回true , 没有返回false
  • includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回 false
  • flat()
    • 功能:将多维数组降维 ,
    • 参数:要拉几层传几
    • 返回值 : 降维后的数组

字符串方法

  • indexOf()
    • 作用:根据字符查下标
    • 参数:当前要查找的元素
    • 返回值:查找到了返回查到元素的下标,没有返回-1
  • charAt()
    • 作用:根据下标查字符
    • 参数:需要查找的下标
    • 返回值:查找下标对应的字符
  • slice ()
    • 作用:字符串截取
    • 参数:开始下标和结束下标,(参数可以是负数,从最后一位数向前数,-1开始)
    • 返回值:截取到的所有字符
  • substring()
    • 作用:字符串截取
    • 参数:开始下标和结束下标(没有负值)
    • 返回值:通过下标截取到的所有字符
  • split()
    • 作用:字符串转数组
    • 参数:可写可不写
      • 不写:字符串转为一个数组元素
      • 写一个空串(“”):字符串中的每个字符都是一个数组元素
      • 写一个参数:根据该参数对应的字符,分割字符串,转换成数组
    • 返回值:截取到的数组
  • toUpperCase()
    • 作用:字符串字母全转大写
  • toLowerCase()
    • 作用:字符串字母全转小写

字符串新增方法

1、去空格

  • trim()
    • 作用:去除两端所有空格
  • trimStart()
    • 作用:去除开头空格
  • trimEnd()
    • 作用:去除结尾空格

2、判断 (结果是一个布尔值 , repeat结果是复制后的字符串)

  • srartsWith()
    • 作用:判断按是否以某个字符开头
  • endWith()
    • 作用:判断是否以某个字符串结尾
  • includes()
    • 作用:判断是否包含该字符串
  • repeat()
    • 作用:重复当前字符串,
    • 参数:需要复制的遍数
    • 结果值:复制后的字符串

3、补充字符(有两个参数 , 长度 和 补充的内容)

  • padStart()
    • 作用:在开头补充内容到对应的长度
  • padEnd()
    • 作用:在结尾补充内容到对应的长度

事件循环机制(js单线程异步的原理)

js是通过事件循环机制, 来完成js单线程异步的 ,分为两部分(jui页面渲染 , js引擎 执行js代码)

因为js是单线程执行的, 但是浏览器是多线程执行的, 当js主线程执行代码时, 需要一行一行执行同步代码,遇见异步代码,会将异步代码给到浏览器分线程管理模块进行管理,而他只有通知的权力, 没有执行的权力 ,

所以等到特定的时间触发,将异步的代码存放到队列中去排队 ,

而队列分为宏队列(script(整体代码),setTomeOut(定时器),Ajax , Dom(事件监听))和微队列(Promise ,asynch/await),

先执行script宏任务,依次执行同步代码,遇见微任务存到浏览器分线程微任务模块中, 遇见宏任务存到浏览器分线程宏任务模块中,等到特定的时间触发,存放到微队列和宏队列中, 同步代码执行完毕, 清空微队列中的微任务,也是先执行同步代码,遇见微任务或者宏任务先存放到浏览器分线程中,等到特定时间触发,存放到微队列和宏队列中,直到微任务清空 ,(页面更新),在去宏队列中执行第一个宏任务,以次循环,直到宏队列清空,而这个过程叫做js事件循环机制

let const和var的区别

一共有4种区别 :

  • 1、let 和 const有块级作用域
  • 2、const不允许重复声明
  • 3、let 和 const 没有变量提升
  • 4、let、const 的全局变量不会添加window属性

promise

promise 是一个对象,它有状态和结果值 , 用来标识异步操作完成的结果值


为什么要有promise : 在有promise之前,异步仍然是要用的, 当时只能用纯回调解决异步操作,但是纯回调有缺点,只能在发请求时指定回调,不够灵活,一旦形成回调地狱就代码可读性差,给人体验不好。

优点 : 指定回调函数时非常灵活, 可以在请求前,请求时 ,请求后。 它是一个链式解构,提高了代码可读性。

promise 有三种状态 : pending(即将处理) , resolved(成功) , rejected(失败)
两种变量:pending (即将处理) ——》 resolved(成功) ; pending(即将处理) ——》 rejected(失败); 注意 : 一旦变化就不可逆 ,并且只能变化一次。

promise里面的Api

  • Promise.prototype.then()
    • 返回一个新的promise,新promise的结果由then指定回调函数结果决定。
      • 返回值是一个非promise值 ,结果永远是成功的
      • 返回值是promise值 ,结果需要判断
        • 返回初始状态 ,值为pending状态
        • 返回成功状态,值为 resolved状态
        • 返回失败状态,值为rejected状态。
  • Promise.prototype.catch()
    • 点catch里面走失败的回调
  • Promise.all()
    • 参数 :是一个数组 ;
    • 功能 : 一次性发送多个异步请求 。
    • 返回值 : 是一个新的promise对象 。
    • 新promise对象的值由参数中所有所有的promise实例对象来决定。
      • 都成功新promise对象就成功
      • 如果有一个失败 ,新promise对象就失败
      • 返回值是失败的promise对象值 。 如果有多个失败 ,值就是参数中失败的第一个。
  • Promise.allSettled()
    • 参数 : 是一个数组;
    • 功能 :一次性发多个请求 ,可以接收所有的请求结果哪怕是失败的请求结果
    • 返回值 : 返回一个新的promise对象
    • 只要状态发生改变。新promise就是成功, 他的结果值如果是包含了所有的异步请求,里面的一个个对象,对象中包含了状态,如果是成功就是数据,如果是失败就是失败的原因。
  • Promise.race()
    • 参数 :是一个数组 ;
    • 返回值是:数组中 第一个执行完成promise状态结果就是最终promise返回的状态结果(它是成功状态就是成功,值就是成功的值 ; 它是失败状态就是失败,值就是失败的值)
  • Promise.resolved()
    • 参数是回调函数 ,
    • 返回值是:成功的回调 ;
    • 注意:不是一定成功,也有可能会失败 ,比如抛出错误,返回一个失败的promise
  • Promise.rejected()
    • 参数是回调函数 ,
    • 返回值是:失败的回调 ;
    • 注意 : 失败的回调只能是失败
  • 终止promise链的方法
    • 只有一种方法使用pending状态的promise中断 return new Promise(() =>{})

async和await是做什么的

同步代码实现异步效果 ,它可以简化promise对象的使用 ,不用在使用.then.catch指定回调。 用try…catch来捕获异常,await后面的代码相当于是.then的回调,catch里面的代码相当于是.catch的回调

哈希路由和history的区别

  • 形式上
    • History(BorwserRouter)路由:格式比较清晰 , 优雅 如:localhost:3000/home
    • Hash路由 :格式比较怪异 ,如:localhost:3000/#/home
    • 总结:一个路由上有锚点(#),一个路由上没有锚点
  • 兼容性
    • History(BorweserRouter)路由:兼容IE9以上
    • Hash路由:兼容IE8以上
  • 项目部署
    • History(BorwserRouter)路由:项目打包编译之后,必须有后台人员更改服务器配置,才可以运行
    • HashRouter路由:项目打包编译后,可以直接放在服务器上运行。
    • 哈希路由:URL中包含哈希,看起来可能不够美观。
    • 历史路由:URL更加干净和美观,更符合用户期望的URL结构。

本地存储

localstoreage

永久性存储,刷新浏览器页面还存在 ,需要手动清除才可以清除。一般用来存储 token【用户的唯一标识】

setItem (存储)、getItem)(读取)、removeItem(删除)、

seaionstoreage

会话存储,浏览器页面刷新内容就会被清除

请求拦截器和响应拦截器

axios二次封装

import axios from 'axios'
import NProgress from 'nprogress';
import 'nprogress/nprogress.css'
import { isUserTempId, dqToKen } from '@/utils/auth'
const instance = axios.create({
  baseURL: '/sph', //默认域名
  timeout: 5000   // 请求的超时时间
});

// 添加请求拦截器
instance.interceptors.request.use(config => {
  // 获取token ,携带token
  config.headers.token = dqToKen()
  // 携带临时id
  config.headers.userTempId = isUserTempId()
  // 开启进度条
  NProgress.start()
  // 返回config
  return config;
});

// 添加响应拦截器
instance.interceptors.response.use(response => {
  NProgress.done()

  // 响应返回数据
  switch (response.data.code) {
    case 200:
      return response.data.data;
    case 201:
      return "响应拦截器提示:参数错误!";
    case 208:
      //提示
      Message.error("未登录,请先登录!");
      //跳转
      router.push("/login");
      //返回 一个 失败状态的promise
      return Promise.reject();
    default:
      //必须返回 response  完整的响应体
      return response.data;
  }

}, error => {
  NProgress.done()


  //提示错误
  alert(error)

  // 对响应错误返回一个错误的promise
  // return Promise.reject(error);

  // 或 中断promise链 统一在这里处理
  return Promise(() => { })
});

//暴露出去
export default instance

axios二次封装的主要目的是想在发请求前,和响应到数据后统一做一些操作

如:

  • 1、配统一的请求头,解决跨域的问题。
  • 2、在请求拦截器中
    • 携带token
    • 携带临时id
    • 开启进度条
  • 3、在响应拦截器中
    • 判断不同状态码返回不同数据
    • 统一处理失败响应

同源问题

同源 : 协议、域名、端口、都一致就是同源

跨域:协议、端口、域名、有一个不一致就会形成跨域

解决跨域

jsonp(html标签自带跨域功能)

json : 前后台数据通信的格式

jsonp : 前后台通讯的方式

src 不受跨域限制 , 那么 a、link、scr

通过src发请求路径携带一个函数名,后台拿到请求路径,可以过滤出我们的函数名 ,并且把我们需要的数据整理成json格式

CROS 后台解决跨域

代理服务器原理 (配代理解决跨域)

浏览器向服务器发送请求会有同原策略要求, 但是服务器向服务器发送请求是没有同源需求的,这时候我们可以配代理服务器(临时的中间间)来解决跨域问题, 让浏览器向我们的本机服务器发送请求,本机服务器在向后台服务器发送请求, 当后台服务器接受到请求,处理后响应给本机服务器, 本机服务器在响应给浏览器 , 这样就解决跨域问题了

// 配代理
  devServer:{
    proxy: {
      '/api': {  //跨域前缀
        target: 'https://m.maoyan.com',  //目标服务器
        ws: true,  //支持 wedscoket
        changeOrigin: true, // 是否开始跨域
        pathRewrite:{'^/api':""} //重写api地址,去掉跨域前缀标识
      },
  }
}

谈谈对token的理解

  • 1、token只有在登录时才会生成
  • 2、token是用户身份的唯一标识
  • 3、tokn必须存储到本地内存 localStorage 中 (可以实现自动登录)
  • 4、token在退出登录时销毁 , 或 ,不支持多用户登录时,第一次登录的 token 会被销毁, 或 ,token到了过期时间也会被销毁

import Typt 引入 的是有关 Ts 接口 或 类型的 。主要功能是做一个区分

import 引入 包 和 组件 等 ,如果家加Type 引入会报错

Vue

vue2的响应式方法

对象 : 对象是通过object.defineproperty对对象添加了get()读取方法,set()修改方法进行劫持(监视/拦截)

数组:通过重写数组更新数组一系列更新元素的方法来实现元素修改(pop、push、shift、onshift、splice、sort 、severse)

出现的问题:
1、添加个删除不是响应式的 , 需要使用方法

2、直接通过下标添加/替换元素或更新length,界面不会更新

vue3实现响应式数据

通过Proxy(代理):拦截对打他任意属性的任意操纵(13种)包括,读、写、添加、删除、等…

通过Reflect(反射):动态对代理对象的相应属性进行特定的操作

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy

1、数据代理

数据驱动试图

什么是数据代理

通过一个对象代理对另一个对象的操作(读,写)

vue中的数据代理是怎么来实现的

object.defineProterty()

程序员需要在data中定义数据

定义的数据被vue内部进行接收

然后将数据放到实例的_data位置

_data身上的数据放到了vm实例身上

数据劫持

vue 为什么需要数据劫持

vue内部需要监听数据是否发生了改变

在改变以后,驱动试图更新

this.name = ‘jerry’

在将vm身上的数据修改后,会触发set()

在set中会将_data身上的数据进行改变

数据劫持 , 就是vue监听_data身上的数据有没有发生变化

object.defineProperty()

Vue3中为什么使用Proxy 替换object.defineProperty()

object.befineProperty 只有get和set两个方法

配置对象

键名不变, 键值改变

请求拦截器

干了两件事情 1、添加额外功能 (打开进度条)2、修改请求报文( 在配置项中添加token)

响应拦截器

干了三件事情1、添加额外功能(关闭进度条) 2、修改响应报文 (返回数据直接打点data)3、处理错误(接收错误,处理)

vux ,中拿东西, 效率比 本地中拿效率要高

错误类型有4种

1、类型错误 2、引用错误3、语法错误4、范围错误

面试hr的问题

  • 自我介绍,
  • 过往经历,
  • 目前的职业规划,
  • 之前的工作经历都不在西安为什么来西安,
  • 啥时候开始面试的,
  • 期望薪资现在的面试啥情况,
  • 前两家面过的咋不去,那两家薪资咋样,
  • 你对我们公司的了解是怎么样的,
  • 你的竞聘岗位的优势是什么,举个例子说明自己的学习能力,
  • 之前公司的公司的工作强度,最大的困难是什么,
  • 来西安的个人规划,家庭情况,在学校情况,兴趣爱好,
  • 还有什么其他的问题,
  • 上家薪资多少薪资几号放发,
  • 有没有绩效考核,
  • 五险一金缴纳比例和标准是多少,
  • 目前你的期望薪资说多少,
  • 还有没有其他问题要问的

离职原因(公司搬离原本地方、孵化新部门失败,我不原因去其他部门(具体原因)、公司长时间没有招标到项目,一直在维护老项目)

你在之前公司都遇见了哪些问题?怎么解决的

职业规划 :1-3年内先提升自己,后面想着要学习后台的语言做一个全栈开发

前几家过了为什么不去,根据现在的公司去说(如:项目技术没有这家新,或你家是自言公司,之前的是外包)

对公司的了解:去企查查看

你的优势是什么

5险1金缴纳标准 : 有缴纳过1、社保账号2、公积金比例5% ~12%

你的要问的问题:如 :是否加班、几薪是否有年终奖、绩效考核难度、通勤

简历模板 要求

石梦瑶_前端开发工程化_3年

基础信息

姓名 :石梦瑶 年龄:25 学历:专科 毕业时间:2021.7

联系方式 :158XXXXXXXX 电子邮箱 : 不要QQ邮箱 籍贯:

教育背景

2018 ~ 2021 西京学院

欢迎转载,请注明来源!

评论

  1. 2 年前
    2023-6-02 23:17:14

    您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar

  2. Maxwell
    Android Chrome
    2 年前
    2023-6-03 0:36:16

    hello word!

    • 博主
      Maxwell
      Windows Chrome
      2 年前
      2023-6-03 0:46:17

      hello

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇