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

简介: No48.精选前端面试题,享受每天的挑战和学习

怎么进行站点内的图片性能优化

进行站点内的图片性能优化可以通过以下几个方面来实现:

  1. 选择合适的图片格式: 根据不同的场景选择合适的图片格式,常见的图片格式有 JPEG、PNG 和 WebP。JPEG 适合保存照片或复杂的图像,PNG 适合保存具有透明背景或简单图形的图片,而 WebP 是一种现代化的图片格式,它通常可以在更小的文件大小下提供相同的视觉质量。
  2. 压缩图片文件大小: 使用压缩工具对图片进行无损或有损压缩,以减小图片文件的大小。常用的图片压缩工具有 Photoshop、TinyPNG、ImageOptim 等。注意在压缩过程中要权衡文件大小和视觉质量,避免过度压缩导致图片质量下降。
  3. 适当调整图片尺寸: 根据实际需要,在将图片应用于网站之前,根据显示尺寸要求对图片进行裁剪和缩放。不要使用过大的图片尺寸,以避免不必要的网络传输和浏览器渲染开销。
  4. 使用懒加载技术: 对于长页面或包含大量图片的页面,可以采用懒加载技术。懒加载在用户滚动到可见区域时才加载图片,而不是一次性加载所有图片。这样可以减少首次加载的数据量和加快页面加载速度。
  5. 使用图片 CDN 加速: 使用图片 CDN(内容分发网络)可以将图片资源分发到全球各地的服务器节点,从而实现更快的加载速度。CDN 可以通过就近访问最接近用户的服务器节点来提供图片,减少延迟并提高用户体验。
  6. 使用响应式图片: 对于不同屏幕大小和设备类型,使用适当的响应式图片。通过使用 元素和 srcset 属性,根据不同的屏幕分辨率和设备能力,为用户提供最合适的图片版本,减少不必要的下载和浪费。
  7. 缓存图片: 设置适当的缓存策略,使浏览器能够缓存图片文件,并在下次加载页面时从缓存中读取,减少网络请求和提高页面加载速度。
  8. 使用 CSS Sprites 或 SVG 图标: 将多个小图标合并成一个大图,或者使用矢量图标(如 SVG)来代替大量的图片请求。这样可以减少网络请求和图片文件大小。

总之,通过选择合适的图片格式、压缩图片、调整尺寸、懒加载、使用 CDN、响应式图片、缓存以及使用 CSS Sprites 或 SVG 图标等技术手段,可以有效地优化站点内的图片性能,提升页面加载速度和用户体验。

Blob,ArrayBuffer,Base64 分别有哪些使用场景?

Blob、ArrayBuffer 和 Base64 都是常用的数据格式或处理方式,它们具有不同的使用场景:

  1. Blob: Blob(二进制大对象)可以用来表示任意二进制数据。它常被用于处理文件或媒体数据,如上传文件、下载文件、录音、摄像等。Blob 对象通常与 File API 配合使用,用于在浏览器中读取、操作和传输二进制数据
  2. ArrayBuffer: ArrayBuffer 是一种固定长度的字节缓冲区,它可以存储各种类型的二进制数据。ArrayBuffer 提供了一个类似于数组的内存结构,可以直接对二进制数据进行处理和操作,如读取、写入、修改等。它常用于处理底层的二进制数据,如网络请求、图像处理、音频处理等。
  3. Base64: Base64 是一种将二进制数据编码成 ASCII 字符串的方法。它通过使用 64 个字符(A-Z、a-z、0-9 和 + /)来代表二进制数据的各个字节,从而实现二进制数据的传输和存储。Base64 常用于将二进制数据嵌入到文本格式中,如在 HTML 或 CSS 中嵌入图片、在 JSON 数据中嵌入二进制数据等。

以下是它们的更具体的应用场景示例:

  • 使用 Blob:将用户上传的文件存储为 Blob 对象,使用 File API 中的 FileReader 对象读取 Blob 数据,将图片转换为 Blob 对象后上传到服务器等。
// 创建 Blob 对象
var blob = new Blob([data], { type: 'image/jpeg' });
// 读取 Blob 数据
var reader = new FileReader();
reader.onload = function(event) {
  var data = event.target.result;
  // 处理数据
};
reader.readAsArrayBuffer(blob);
  • 使用 ArrayBuffer:处理音频和视频文件、网络请求、图像处理等场景。
// 创建 ArrayBuffer 对象
var buffer = new ArrayBuffer(16);
// 处理 ArrayBuffer 数据
var view = new DataView(buffer);
view.setInt32(0, 42);
// 将 ArrayBuffer 数据传输到服务器
fetch(url, {
  method: 'POST',
  body: buffer,
});
  • 使用 Base64:在 HTML 或 CSS 中嵌入图片、在 JSON 数据中嵌入二进制数据、通过 Data URL 方式加载图像等场景。
// 将图片以 Base64 编码格式嵌入到 HTML 或 CSS 中
<img src="data:image/png;base64,iVBORw0KG...">
// 将二进制数据编码为 Base64 字符串
var base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(arrayBuffer)));
// 将 Base64 字符串解码为二进制数据
var arrayBuffer = Uint8Array.from(atob(base64String), c => c.charCodeAt(0));

综上所述,Blob、ArrayBuffer 和 Base64 在不同的场景下具有不同的用途和优势,正确地选择和使用它们可以更高效地处理二进制数据。

TCP和HTTP请求之间有什么关系?

TCP(传输控制协议)和 HTTP(超文本传输协议)是互联网中的两个不同的协议,它们在网络通信中扮演了不同的角色,具有以下关系:

  1. TCP 提供传输服务: TCP 是一种可靠的传输层协议,负责在网络中提供可靠的数据传输服务。它通过建立连接、分组传输、流量控制、拥塞控制等机制来确保数据的可靠性和顺序性。
  2. HTTP 基于 TCP 进行通信: HTTP 是一种应用层协议,用于在客户端和服务器之间传输超文本数据。HTTP 建立在 TCP/IP 协议栈之上,利用 TCP 协议提供的可靠传输服务,以传输 HTTP 请求和响应信息。
  3. HTTP 请求通过 TCP 连接发送: 在 HTTP 请求过程中,客户端首先与服务器建立 TCP 连接。建立连接后,客户端通过该 TCP 连接向服务器发送 HTTP 请求信息,请求中包含了请求方法(如 GET、POST)、URL、头部信息、可选的请求体等。
  4. TCP 进行可靠传输和流量控制: HTTP 请求被划分为多个数据包,并由 TCP 负责将这些数据包按序传输给服务器。TCP 使用序号和确认机制,确保数据的完整性和顺序性。同时,TCP 还通过流量控制和拥塞控制机制,动态调整发送数据的速率,以适应网络的状况,保证网络的稳定性和可靠性。
  5. HTTP 响应通过 TCP 连接返回: 服务器接收到 HTTP 请求后,根据请求进行处理,并生成对应的 HTTP 响应。服务器通过 TCP 连接将响应信息分割成多个数据包,按序发送给客户端。客户端接收到 TCP 数据包后,将其组装成完整的 HTTP 响应,并进行相应的处理。

总之,TCP 提供了可靠的传输服务,而 HTTP 则是在 TCP 的基础上定义了具体的应用层协议,用于在客户端和服务器之间传输超文本数据。通过 TCP 连接,HTTP 请求和响应可以在网络中进行可靠的传输,从而实现了 Web 页面的加载、数据交互等功能。

HTTP2中,多路复用的原理是什么?

HTTP/2 的多路复用是其核心特性之一,它通过共享同一个 TCP 连接来并发处理多个请求,提高了网络传输的效率。下面是 HTTP/2 多路复用的原理:

  1. 二进制分帧层: HTTP/2 将传输的数据分割为一个个的帧(Frame),每个帧都有一个唯一的标识符(Stream ID)。
  2. 多个流共享一个连接: HTTP/2 通过在同一个连接上创建多个独立的流(Stream)来处理多个请求和响应。每个流都有一个唯一的 Stream ID,并与一个或多个帧相关联。
  3. 并行处理和无序交付: 在 HTTP/2 中,多个流可以同时在同一个连接上进行并行处理。这意味着浏览器可以同时发送多个请求,服务器也可以并行返回多个响应。由于每个流都有自己的标识符,它们会被乱序发送,但通过 Stream ID 可以将它们正确地组装回原始的请求和响应。
  4. 头部压缩: 为了减少传输的开销,HTTP/2 使用了 HPACK 压缩算法对头部信息进行压缩。由于多个请求和响应共享同一个连接,相同的头部信息可以只发送一次,并通过索引表进行引用。

通过以上机制,HTTP/2 实现了多路复用的效果:

  • 在同一个连接上,多个请求和响应可以并行发送和接收,无需等待前一个请求完成。
  • 每个流都有独立的流 ID,保证了请求和响应的正确组装。
  • 头部压缩减少了冗余的头部信息,进一步提高了传输效率。

多路复用显著提高了网络性能,减少了延迟,尤其在高延迟、高丢包的环境下效果更为明显。它允许浏览器同时发送多个请求,服务器也可以同时返回多个响应,从而更高效地利用网络带宽资源。

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

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

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

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