No19.精选前端面试题,享受每天的挑战和学习

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: No19.精选前端面试题,享受每天的挑战和学习

为什么对登录密码进行MD5加密

对登录密码进行 MD5 加密是为了增加密码的安全性。

MD5(Message Digest Algorithm 5)是一种常见的哈希函数算法,通过将输入的数据转换为固定长度的哈希值来实现加密。MD5 算法生成的哈希值通常是一个 32 位的十六进制数。

使用 MD5 加密密码的好处有:

1. 隐藏原始密码

使用 MD5 加密后,原始密码将被转化成一段看似随机的字符,不容易直接从中获取到用户的真实密码。

2. 防止明文存储

在用户注册时,将密码明文存储到数据库中是不安全的做法。通过对密码进行 MD5 加密后,只将加密后的哈希值存储到数据库,即使数据库泄露也不会直接暴露用户的密码。

3. 抵御彩虹表攻击

彩虹表是一种预先计算好的密码哈希值与对应密码的映射表,攻击者可以使用彩虹表通过查找哈希值的方式快速破解密码。通过对密码进行加盐操作再进行 MD5 加密,可以有效防止彩虹表攻击。

需要注意的是,MD5 加密算法已经存在一些安全问题,如碰撞攻击和彩虹表等。因此,在实际应用中,建议将密码加盐(在原始密码中添加随机字符串)后再进行哈希加密,以提高安全性。另外,还可以选择更安全的哈希算法,如SHA-256或bcrypt等来替代MD5。

Pinia和vuex的区别

下表列出了 Pinia 和 Vuex 之间的几个关键区别:

功能 Pinia Vuex
设计理念 基于 Vue 3 Composition API 针对 Vue 2.x 的全局状态管理器
类型支持 支持 TypeScript 对 TypeScript 支持有限
安装方式 单独安装 Vue CLI 创建的项目中默认集成
模块化 使用插件系统,模块化定义和导出 使用对象进行全局状态的定义和导出
可访问性 提供了强类型支持,更好的 IntelliSense 支持 缺乏强类型支持,IntelliSense 不如 Pinia 完善
性能优化 基于 Vue 3 的响应式系统,具有更高的性能和内存效率 相对于 Vue 2.x,性能较低
插件生态圈 较新,相对较小,正在快速发展 成熟且拥有大量第三方插件
Vuex 迁移成本 需要修改代码以适配新的 API 可以继续使用 Vue 2.x 的代码,但无法充分利用 Composition API
社区支持 相对较小,支持正在增长 大型且活跃的社区,有大量资源和文档

需要根据具体项目需求和技术栈来选择适合的状态管理工具,如果你使用的是 Vue 3,并希望在项目中充分利用 Composition API 的优势,则 Pinia 是一个很好的选择。但如果你使用的是 Vue 2.x 或已有项目中已经使用了 Vuex,并且依赖于 Vuex 的插件和生态系统,那么继续使用 Vuex 可能更加方便。

vue2和vue3对比

下表列出了 Vue 2 和 Vue 3 之间的几个关键区别:

功能 Vue 2 Vue 3
响应式系统 基于 Object.defineProperty 基于 Proxy
组件 API 选项式 API(Options API) 组合式 API(Composition API)
数据追踪 对象属性需要提前声明 自动追踪响应式数据变化,无需提前声明
Teleport 组件 不支持 支持
Fragment 组件 不支持 支持
静态节点提升 不支持 支持
编译器 vue-loader + vue-template-compiler @vue/compiler-sfc
Tree-shaking 有限支持 更好的支持和优化
性能优化 较低的性能 更高的性能,包括更快的渲染速度和更小的bundle大小
TypeScript 支持 有限支持 更好的支持,在类型推断和编辑器支持方面更加强大
插件生态圈 成熟且活跃 正在逐渐发展,但相对较小
反应式 API 不支持 支持
Fragment API 不支持 支持
静态递增(静态属性) 不支持 支持
V-model 修饰符 不支持 支持
过渡和动画 transition 和 transition-group transition 和 animation

需要根据具体项目需求和迁移成本来选择使用 Vue 2 还是 Vue 3。如果你正在开始一个新项目或者准备对现有项目进行升级,并且希望使用更好的性能、TypeScript 支持和更强大的组合式 API,那么选择 Vue 3 是一个很好的选择。但如果你的项目已经在 Vue 2 上运行并且没有迫切需要升级,或者项目依赖于 Vue 2 上的一些特性和插件,那么继续使用 Vue 2 也是可行的。

使用axios封装一个底层请求拦截器

以下是使用 Axios 封装一个底层请求拦截器的示例代码:

import axios from 'axios';
// 创建一个 Axios 实例
const instance = axios.create({
  baseURL: 'https://api.example.com', // 设置基础 URL
  timeout: 5000 // 设置超时时间
});
// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 在发送请求之前做一些处理,比如添加请求头等
    config.headers['Authorization'] = 'Bearer token'; // 设置请求头 Authorization
    return config;
  },
  error => {
    // 处理请求错误
    console.error('请求拦截器发生错误:', error);
    return Promise.reject(error);
  }
);
// 响应拦截器
instance.interceptors.response.use(
  response => {
    // 对响应数据进行处理,可以根据需要进行统一处理或者解析数据
    return response.data;
  },
  error => {
    // 处理响应错误
    console.error('响应拦截器发生错误:', error);
    return Promise.reject(error);
  }
);
export default instance;

在上述代码中,我们使用 Axios 的 create 方法创建了一个实例,然后通过 interceptors 属性分别设置了请求拦截器和响应拦截器。在请求拦截器中,我们可以对请求配置进行修改,比如添加请求头等;而在响应拦截器中,我们可以对响应数据进行处理,比如统一处理错误信息或者解析返回的数据。

你可以根据实际需求对拦截器进行扩展和定制,比如添加错误处理、身份验证等功能。使用封装好的实例发送请求时,拦截器会自动起作用,方便统一管理和处理请求与响应。

相关文章
|
1月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
43 0
|
18天前
|
前端开发 开发者 C++
独家揭秘:前端大牛们如何高效学习新技术,保持竞争力!
【10月更文挑战第31天】前端技术飞速发展,如何高效学习新技术成为关键。本文通过对比普通开发者与大牛们的策略,揭示了高效学习的秘诀:明确目标、主动探索、系统资源、实践应用和持续学习。通过这些方法,大牛们能更好地掌握新技术,保持竞争力。示例代码展示了如何通过实践加深理解。
36 4
|
1月前
|
算法 前端开发 Java
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
这篇文章总结了单链表的常见面试题,并提供了详细的问题分析、思路分析以及Java代码实现,包括求单链表中有效节点的个数、查找单链表中的倒数第k个节点、单链表的反转以及从尾到头打印单链表等题目。
33 1
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
|
27天前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
62 1
|
1月前
|
Java 应用服务中间件 程序员
JVM知识体系学习八:OOM的案例(承接上篇博文,可以作为面试中的案例)
这篇文章通过多个案例深入探讨了Java虚拟机(JVM)中的内存溢出问题,涵盖了堆内存、方法区、直接内存和栈内存溢出的原因、诊断方法和解决方案,并讨论了不同JDK版本垃圾回收器的变化。
30 4
|
2月前
|
Web App开发 前端开发 Linux
「offer来了」浅谈前端面试中开发环境常考知识点
该文章归纳了前端开发环境中常见的面试知识点,特别是围绕Git的使用进行了详细介绍,包括Git的基本概念、常用命令以及在团队协作中的最佳实践,同时还涉及了Chrome调试工具和Linux命令行的基础操作。
「offer来了」浅谈前端面试中开发环境常考知识点
|
1月前
|
JavaScript 前端开发 Java
VUE学习四:前端模块化,ES6和ES5如何实现模块化
这篇文章介绍了前端模块化的概念,以及如何在ES6和ES5中实现模块化,包括ES6模块化的基本用法、默认导出与混合导出、重命名export和import,以及ES6之前如何通过函数闭包和CommonJS规范实现模块化。
88 0
VUE学习四:前端模块化,ES6和ES5如何实现模块化
|
1月前
|
前端开发 JavaScript 小程序
前端新机遇!为什么我建议学习鸿蒙?
【10月更文挑战第4天】前端新机遇!为什么我建议学习鸿蒙?
113 0
前端新机遇!为什么我建议学习鸿蒙?
|
1月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
133 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
1月前
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题
下一篇
无影云桌面