3、Boss用户分享面试题

您所在的位置:网站首页 vue路由面试题 3、Boss用户分享面试题

3、Boss用户分享面试题

2023-05-14 15:15| 来源: 网络整理| 查看: 265

1、Token身份鉴权

Token 身份鉴权是一种常见的身份验证方式,常用于 API 接口的安全保护。在这种身份验证方式中,用户在登录后会获取一个 Token(令牌),然后在每次请求 API 接口时需要将该 Token 附加在请求头中发送给服务器进行身份验证。

一般来说,Token 身份鉴权包括以下几个步骤:

用户登录:用户在登录页面输入账号和密码,服务器验证账号密码正确性,并生成一个 Token。

Token 传递:将生成的 Token 保存在客户端,例如浏览器的 localStorage 或者 cookie 中。

身份验证:在每次请求 API 接口时,将保存的 Token 附加在请求头中发送给服务器进行身份验证。

身份验证结果:服务器接收到请求后,会解析请求头中的 Token,并与服务器保存的 Token 进行比对,如果验证通过则返回请求数据,否则返回错误信息。

在基于 Token 的身份鉴权中,Token 的生成方式和存储方式是比较关键的。常见的 Token 生成方式包括 JWT(JSON Web Token)、OAuth2 等,这些方式都可以生成一个安全有效的 Token。Token 存储方式也有多种,包括浏览器的 localStorage、cookie、sessionStorage 等,以及服务端的缓存、数据库等。

2、vue动态路由

vue动态路由是vue.js路由系统(Vue Router)的一种功能,用于根据不同的参数渲染不同的组件。动态路由使得开发者可以在一个路由配置中定义一个模式,匹配多个 URL。通过使用动态路由,你可以避免为每个 URL 单独创建一个路由规则,从而实现更简洁的代码和更好的可维护性。

动态路由的实现方式是在路由路径中使用冒号(:)作为前缀,定义一个参数。这个参数可以在匹配到的组件中通过 this.$route.params 访问。

以下是一个动态路由的示例:

    1.定义一个动态路由规则:

上面的代码中,我们定义了一个动态路由规则 /user/:userId。userId 是一个参数,可以在 URL 中动态改变。

    2.在组件中访问动态路由参数:

在这个组件中,我们通过 this.$route.params.userId 访问动态路由参数 userId。然后使用计算属性将其显示在模板中。

现在,当访问 /user/1 或 /user/42 时,都会渲染 UserComponent,并在模板中显示相应的 userId。

3、vue-router如何响应路由参数变化

(1)使用watch来监听

(2)使用beforeRouteUpdate守卫

4、vue优化首页加载速度

Vue中优化首页加载速度可以从以下几个方面入手:

图片压缩和懒加载:优化图片大小和质量,减少页面加载时间,同时使用懒加载技术,在需要时再加载图片。

骨架屏技术:在页面加载时,先显示骨架屏,等待数据加载完成后再渲染页面。这样可以让用户快速看到页面的大致结构,提高用户体验。

路由懒加载:使用Vue Router的懒加载功能,只在需要时加载路由组件,减少页面初始化时的资源开销。

组件懒加载:将组件按需加载,只有当需要使用组件时才进行加载。可以使用Vue的异步组件功能实现组件懒加载。

静态资源CDN加速:将静态资源存放在CDN上,可以减少请求响应时间,提高加载速度。

静态资源缓存:使用浏览器缓存技术,将静态资源缓存在用户的浏览器中,可以减少请求次数,提高加载速度。

代码优化:减少不必要的代码,优化代码结构和性能,可以减少页面初始化时的资源开销。

5、js哪些操作会造成内存泄漏

(1)意外的全局变量(2)未正确的清除定时器(3)闭包(4)没有清理掉的DOM引用(5)没有正确移除事件监听器(6)循环引用,两个或者多个对象相互引用对方。

6、CSS3新特征

(1)圆角、阴影效果、渐变、过渡、动画、自定义字体、伸缩布局、网格布局、媒体查询、多列布局、背景大小、RGBA颜色模式、伪类和伪元素、计算属性值(calc)、2d转换、3D转换、视口单位。

7、多维数组扁平化去重

(1)多维数组扁平化去重可以使用递归和Set对象来实现。

8、axios常用请求方式

get\post\put\delete\patch

9、ajax技术体系组成部分

(1)js、XMLHttpRequest、css、html、DOM、json。(通过将这些部分相互配合,实现页面与服务器通信)

10、数组去重的方法有哪些

set、filter、reduce

数组的reduce方法会遍历数组的每个唯一元素推入新数组。

11、Vue导航守卫

vue导航守卫是一组用于控制路由跳转的钩子函数,主要用于在路由切换前后进行一些操作,如验证用户登录、判断用户权限。

beforeEach(路由切换前调用)、beforeResolve(组件被解析后调用)、afterEach(路由切换后调用)。

beforeEach(to, from, next):在路由切换前调用,可以用来进行一些验证操作,比如检查用户是否已经登录。如果验证不通过,可以调用 next(false) 取消路由跳转,或者调用 next('/login') 跳转到登录页面。

beforeResolve(to, from, next):在所有组件内守卫和异步路由组件被解析之后调用。这个钩子在全局守卫和路由独享守卫之后被调用。这个钩子函数的主要作用是确保异步路由组件被解析完毕后,再进行导航。

afterEach(to, from):在路由切换后调用,可以用来进行一些页面的操作,比如页面滚动到顶部、埋点等。这个钩子没有 next 函数,因为导航已经完成了。

12、常用的伪元素有哪些

::before、::after、::first-letter、::first-line、::selection、

::before:在元素内容前面插入一个伪元素。

::after:在元素内容后面插入一个伪元素。

::first-letter:为元素内容的第一个字母创建一个伪元素。

::first-line:为元素内容的第一行创建一个伪元素。

::selection:用于选择被用户选中的文本部分。

::placeholder:用于设置表单元素的占位符样式。

::marker:用于设置列表标记的样式。

::backdrop:用于为 元素创建一个半透明的遮罩层。

除了这些,还有一些不太常用的伪元素,如 ::before-page 和 ::after-page 用于在打印页面前后添加内容。伪元素可以使用 content 属性来设置它们的内容,并可以使用 CSS 属性为其添加样式。

13、本地存储有哪些,区别

localStorage、sessionStorage、cookie、IndexedDB、Web SQL

14、vue登录拦截

用户在进行某操作之前,需要验证用户是否已经登录,如果未登录,需要跳转到到登录页面进行登录操作。

15、vue3相对于vue2来说,有以下几个区别

(1)性能优化。vue3中通过重写虚拟DOM和编译器升级,提升渲染性能。

(2)Composition API。Composition API是一种新的API风格,可以更灵活的组织代码,支持更好的代码复用。不是按照生命周期函数进行组织,使代码更清晰,易于维护。

(3)Typescript支持。vue3对ts支持更加完善。

(4)响应式系统。vue3对响应式系统进行了升级。

(5)Tree-shaking。vue3支持Tree-shaking,可以更好的优化打包体积。

(6)vue3新增了,setup()函数和watchEffect()函数。

16、setup语法中,组件导入之后就可以直接使用,不需要再使用components进行局部注册。

17、js中作用域

javascript中作用域就是变量的可访问范围。

18、判断一个变量是否是数组

(1)Array.isArray()方法。(2)instanceof运算符

19、判断一个变量是否是对象

(1)typeof运算符(2)Object.prototype.toString.call() (3)instanceof运算符。

20、js中对象常用的方法

(1)Object.keys(),Object.values()、Object.assign()、Object.entries、Object.create()。

1.Object.keys():返回对象的所有属性名组成的数组。

2.Object.values():返回对象的所有属性值组成的数组。

3.Object.entries():返回对象的所有属性名和属性值组成的二维数组。

4.Object.assign():将多个对象合并为一个对象。

21、js中创建一个空数组或者空对象有哪几种方法?

(1)使用字面量语法(2)使用构造函数(3)使用Object.create()方法(4)使用Array()构造函数的参数

22、哪些遍历方式会改变原始数组

(1)forEach() 方法(2)map()方法(3)filter()方法

23、Set和Map各是什么

Set 和 Map 都是 ES6 中新增的数据结构,它们可以用来存储数据。

Set 是一种类似于数组的数据结构,它可以存储任何类型的唯一值,不允许重复。Set 中的值是按插入顺序排列的,可以快速地判断一个值是否存在于集合中。Set 有以下特点:

1.Set 中的值是唯一的,不允许重复。

2.Set 中的值是按插入顺序排列的。

3.Set 中的值可以是任何类型的值,包括原始类型和对象。

4.可以使用add() 方法向 Set 中添加新的值。

5.可以使用delete() 方法删除 Set 中的某个值。

6.可以使用has() 方法判断 Set 中是否存在某个值。

7.可以使用clear() 方法清空 Set 中的所有值。

下面是一个使用 Set 存储数据的例子:

Map 是一种类似于对象的数据结构,它可以存储键值对,其中键和值可以是任何类型的值,不允许重复的键。Map 中的键是按插入顺序排列的,可以快速地根据键获取对应的值。Map 有以下特点:

1.Map 中的键是唯一的,不允许重复。

2.Map 中的键和值可以是任何类型的值,包括原始类型和对象。

3.可以使用set() 方法向 Map 中添加新的键值对。

4.可以使用get() 方法根据键获取对应的值。

5.可以使用delete() 方法删除 Map 中的某个键值对。

6.可以使用has() 方法判断 Map 中是否存在某个键。

7.可以使用clear() 方法清空 Map 中的所有键值对。

下面是一个使用 Map 存储数据的例子:

24、介绍下promise

promise是一种异步编程解决方案,提供了一种更优雅的方式来处理异步操作,避免了回调地狱的问题。Promise是ES6新增的语法,其核心是一个对象,用于表示异步操作的最终完成状态以及结果值。

Promise有三种状态:

Pending:初始状态,既不是成功,也不是失败状态。

Fulfilled:意味着操作成功完成,Promise 对象的 then() 方法可以被调用,返回操作的结果。

Rejected:意味着操作失败,Promise 对象的 catch() 方法可以被调用,返回操作失败的原因。

25、如何改变函数的上下文

js中函数上下文是函数执行时所在的环境。可以使用call()、apply() 、bind()方法指定函数的上下文。

26、call和apply有什么区别

call和apply方法类似,可以指定函数执行上下文。但是apply的参数要求以数组的形式传递。

27、302、301状态码

302是HTTP协议中的一个状态码,表示该资源原本存在,但是已经被临时改变了位置。

301永久重定向,表示网页永久性转移到另外一个地址。

28、for...of语句循环遍历可迭代对象的值。

29、 ^是javascript的异或运算符,将两个数字的二进制表示逐位进行比较。

30、javascript中Set对象用法

javascript中Set是一种集合类型,可以存储不重复的值。

Set有下面几种用法:(1)set.add(value)向Set中添加元素。

(2)set.delete(value)从Set中删除元素

(3)set.has(value)判断set中是否包含某个元素。

(4)set.size获取Set中元素的数量。

31、javascript中的pop、push、join等方法

(1)pop方法:用于从数组的末尾移除一个元素。不接收任何参数。

(2)push方法:用于向数组末尾添加一个或多个元素。

(3)join方法:用于将数组中的所有元素连接成一个字符串。

29、javascript的split()方法

实现把一个字符串分割成字符串数组。

30、javascript的splice方法

splice方法用于添加或删除数组中的元素。

31、什么情况加不会造成回流

(1)CSS3的transform属性不回触发回流。

(22)CSS的position:fixed或position:absolute可以将元素从文档流中移除,不会触发回流。

32、HTML规定连续的空白字符视为单个空白字符。

使用

注意:&读(amd表示和的意思)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3