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

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

Webpack原理,以及常用插件

Webpack是一个功能强大的模块打包工具,它可以将应用程序所依赖的多个模块打包成一个或多个静态资源文件。以下是Webpack的基本原理及常用插件:

原理:

  1. 入口(Entry):指定应用程序的入口文件,Webpack从该文件开始构建依赖关系图。
  2. 模块(Module):将应用程序中的每个文件视为一个模块,根据配置的加载器(Loaders)对不同类型的文件进行处理。
  3. 加载器(Loaders)Webpack通过加载器对不同类型的文件进行预处理,例如转换ES6代码为ES5、对CSS进行处理、对图片进行压缩等
  4. 插件(Plugins)Webpack插件可以执行更广泛的任务,例如优化打包输出、代码压缩混淆、提取公共模块等
  5. 输出(Output):指定Webpack的输出目标,包括输出文件名、输出文件路径、生成通过CDN访问的文件等。

常用插件:

  1. HtmlWebpackPlugin:生成HTML文件,并自动引入打包后的资源文件,同时还可以配置模板、压缩HTML代码等。
  2. MiniCssExtractPlugin:将CSS从打包文件中抽取出来,生成单独的CSS文件,可以配合CSS压缩插件使用。
  3. UglifyJsPlugin:对打包后的JavaScript代码进行压缩和混淆,减小文件体积,加快加载速度。
  4. CleanWebpackPlugin:在每次打包前清理输出文件夹,确保只有最新的文件存在。
  5. OptimizeCSSAssetsPlugin:对打包后的CSS文件进行压缩和优化。
  6. DefinePlugin:定义全局变量,可以在代码中使用这些全局变量,例如设置环境变量等。
  7. CopyWebpackPlugin:将指定的文件或文件夹复制到打包输出目录中,通常用于复制静态资源文件。
  8. BundleAnalyzerPlugin:可视化分析Webpack打包结果,展示模块依赖关系和打包文件大小等信息,帮助优化打包结果。

此外,还有许多其他常用的Webpack插件,用于实现各种功能,如代码拆分、按需加载、缓存优化等。根据具体需求,可以选择适合的插件来增强Webpack的功能和灵活性。

聊一下https,说下数字签名

HTTPS(Hypertext Transfer Protocol Secure)是在HTTP基础上加入了加密和认证机制,通过使用 SSL/TLS 协议(Secure Sockets Layer/Transport Layer Security)来保护通信的安全性。其中,数字签名是HTTPS中实现身份验证和数据完整性的重要机制之一

数字签名是一种基于公钥密码学的技术,用于验证消息或数据的发送者身份以及数据是否在传输过程中被篡改。以下是数字签名的基本过程和原理:

  1. 密钥生成:发送方生成一对密钥,包括私钥和公钥。私钥用于生成数字签名,公钥用于验证数字签名。
  2. 消息摘要生成:发送方使用哈希函数(如SHA-256)对要传输的消息进行计算,生成消息摘要。摘要是一个固定长度的唯一字符串,代表了原始消息的信息。
  3. 数字签名生成:发送方使用自己的私钥对消息摘要进行加密操作,生成数字签名。数字签名是一段与原始消息不可逆的数据,具有唯一性。
  4. 数字签名传输:发送方将数字签名与原始消息一起发送给接收方。
  5. 数字签名验证:接收方使用发送方的公钥对接收到的数字签名进行解密操作,得到消息摘要。
  6. 消息摘要计算:接收方对接收到的原始消息进行哈希函数计算,生成新的消息摘要。
  7. 摘要比较:接收方比较计算得到的消息摘要与解密得到的摘要是否一致。如果一致,说明消息的完整性没有被篡改。

数字签名的原理是基于公钥密码学中的非对称加密算法,发送方使用私钥对消息摘要进行加密生成签名,而接收方使用发送方的公钥对签名进行解密验证完整性。由于私钥只有发送方拥有,其他人无法伪造数字签名,从而保证了数据的可靠性和身份验证。

在HTTPS中,服务器使用数字证书来证明自己的身份,并使用数字签名来保护服务器发送的数据的完整性和安全性。客户端使用服务器预装的公钥验证证书的有效性,确保与服务器建立安全连接。这样,HTTPS可以保护用户隐私、防止信息泄露和网络攻击。

img标签为什么没有跨域问题

在 Web 开发中,浏览器有一个同源策略(Same-Origin Policy)的安全机制,限制了跨域访问资源。根据同源策略,浏览器默认只允许在同一个域名、协议和端口的页面间进行跨域请求

然而,在使用标签加载图片时,由于图片本身是无法执行代码的静态资源,浏览器对标签的跨域请求做了一些特殊处理,不会受到同源策略的限制

具体原因如下:

  1. 标签是用于下载并显示图片的,浏览器认为图片不包含可执行的脚本代码,因此不会对其跨域请求进行限制。
  2. 由于标签仅用于加载图片,而不是与页面进行交互,因此在安全性方面的风险相对较低。

这就意味着,即使标签的src属性指向不同域名的图片资源,浏览器也会正常加载显示这些图片,不会触发跨域安全问题。这为开发者提供了灵活使用外部图片资源的便利性。

需要注意的是,如果通过 JavaScript 动态修改标签的src属性时,仍然需要遵守同源策略。在这种情况下,如果要加载跨域的图片资源,可以使用跨域资源共享(CORS)或服务器代理的方式来解决跨域访问问题。

写一个事件触发器(on/emit/off/once)

下面是一个简单的事件触发器实现,包括 on(绑定事件)、emit(触发事件)、off(解绑事件)和 once(绑定一次性事件)方法:

class EventEmitter {
  constructor() {
    this.events = {};
  }
  // 绑定事件
  on(eventName, callback) {
    if (!this.events[eventName]) {
      this.events[eventName] = [];
    }
    this.events[eventName].push(callback);
  }
  // 触发事件
  emit(eventName, ...args) {
    const eventCallbacks = this.events[eventName];
    if (eventCallbacks) {
      eventCallbacks.forEach((callback) => {
        callback.apply(null, args);
      });
    }
  }
  // 解绑事件
  off(eventName, callback) {
    const eventCallbacks = this.events[eventName];
    if (eventCallbacks) {
      this.events[eventName] = eventCallbacks.filter(
        (cb) => cb !== callback
      );
    }
  }
  // 绑定一次性事件
  once(eventName, callback) {
    const onceCallback = (...args) => {
      callback.apply(null, args);
      this.off(eventName, onceCallback);
    };
    this.on(eventName, onceCallback);
  }
}

使用示例:

const emitter = new EventEmitter();
const callback1 = () => {
  console.log("Event 1 is triggered");
};
const callback2 = (data) => {
  console.log(`Event 2 is triggered with data: ${data}`);
};
emitter.on("event1", callback1);
emitter.on("event2", callback2);
emitter.emit("event1"); // 输出: Event 1 is triggered
emitter.emit("event2", "Hello!"); // 输出: Event 2 is triggered with data: Hello!
emitter.off("event1", callback1);
emitter.emit("event1"); // 未触发回调,没有输出
emitter.once("event3", () => {
  console.log("Event 3 is triggered once");
});
emitter.emit("event3"); // 输出: Event 3 is triggered once
emitter.emit("event3"); // 未触发回调,没有输出

这是一个简单的事件触发器实现,你可以根据自己的需要进行扩展和改进。

附录:「简历必备」前后端实战项目(推荐:⭐️⭐️⭐️⭐️⭐️)

Vue.js 和 Egg.js 开发企业级健康管理项目

带你从入门到实战全面掌握 uni-app

相关文章
|
12天前
|
Web App开发 前端开发 Linux
「offer来了」浅谈前端面试中开发环境常考知识点
该文章归纳了前端开发环境中常见的面试知识点,特别是围绕Git的使用进行了详细介绍,包括Git的基本概念、常用命令以及在团队协作中的最佳实践,同时还涉及了Chrome调试工具和Linux命令行的基础操作。
「offer来了」浅谈前端面试中开发环境常考知识点
|
2天前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
12 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
2月前
|
存储 XML 移动开发
前端大厂面试真题
前端大厂面试真题
|
1月前
|
网络协议 算法 数据库
|
2月前
|
前端开发 Java 编译器
【前端学java】如何从前端视角快速学习Maven
【8月更文挑战第12天】如何从前端视角快速学习Maven
44 2
【前端学java】如何从前端视角快速学习Maven
|
2月前
|
前端开发 JavaScript API
前端框架Vue------>第二天学习(1)插槽
这篇文章介绍了Vue框架中插槽(slot)的概念和用法,以及如何在组件中使用自定义事件进行父子组件间的通信。
前端框架Vue------>第二天学习(1)插槽
|
2月前
|
前端开发 算法 网络协议
如何学习计算机基础知识,打好前端和网络安全的基础
如何学习计算机基础知识,打好前端和网络安全的基础
39 4
|
2月前
|
存储 前端开发 JavaScript
44 个 React 前端面试问题
【8月更文挑战第18天】
40 2
|
2月前
|
存储 JavaScript 前端开发
2022年前端js面试题
2022年前端js面试题
31 0
|
2月前
|
存储 前端开发 JavaScript
44 个 React 前端面试问题
44 个 React 前端面试问题

热门文章

最新文章