前端面试题(十四)

news2024/10/10 13:15:02

76. 前端性能优化

  • 前端性能优化有哪些常见方法?
    1. 减少 HTTP 请求

      • 合并 CSS、JavaScript 和图片文件。
      • 使用雪碧图 (Sprite) 减少图片请求数。
    2. 资源压缩和合并

      • 压缩 JavaScript 和 CSS 文件,减少文件体积。
      • 使用工具如 UglifyJS、CSSNano 等来删除注释、空格和未使用的代码。
    3. 使用懒加载

      • 对于图片、视频等资源,只有在用户即将看到它们时才进行加载。
      • 可以使用 IntersectionObserver API 来监听元素是否进入视口并进行懒加载。
    4. 使用浏览器缓存

      • 利用 HTTP 的 Cache-ControlExpiresETag 头来缓存静态资源,减少重复请求。
    5. 内容传输优化

      • 使用 GzipBrotli 压缩传输内容。
      • 使用 CDN 加速内容分发。
    6. 图片优化

      • 使用合适的图片格式,如 SVG、WebP。
      • 图片压缩和裁剪,避免加载不必要的大尺寸图片。

77. 跨域处理

  • 什么是跨域?

    • 跨域 是指浏览器出于安全限制,阻止浏览器向不同的域名、协议或端口发出请求的情况。这种限制称为 同源策略,它防止不同来源的站点之间进行未经授权的数据共享。
  • 跨域问题的解决方案有哪些?

    1. CORS (跨域资源共享)

      • 服务器设置 Access-Control-Allow-Origin 头来指定允许跨域访问的来源。
      • 例如:
        Access-Control-Allow-Origin: *
        Access-Control-Allow-Methods: GET, POST, PUT, DELETE
        Access-Control-Allow-Headers: Content-Type
        
    2. JSONP

      • JSONP 利用 <script> 标签不受同源策略限制的特性,通过动态插入 <script> 标签来实现跨域请求。需要服务器配合输出 JSONP 格式的数据。

      • 缺点:只能使用 GET 请求。

      • 示例:

        function handleResponse(data) {
          console.log(data);
        }
        const script = document.createElement('script');
        script.src = 'https://example.com/api?callback=handleResponse';
        document.body.appendChild(script);
        
    3. 反向代理

      • 在本地服务器上设置一个代理,将请求转发到目标服务器,避免浏览器的跨域限制。常用于开发环境。
      • 例如使用 NginxNode.js 实现反向代理。
    4. PostMessage

      • 通过 window.postMessage API,可以在不同窗口或 iframe 之间进行跨域通信。
      • 例如:
        // 在父窗口中发送消息
        const iframe = document.getElementById('myIframe');
        iframe.contentWindow.postMessage('Hello from parent', 'https://example.com');
        
        // 在 iframe 中监听消息
        window.addEventListener('message', (event) => {
          if (event.origin === 'https://example.com') {
            console.log(event.data); // 输出 'Hello from parent'
          }
        });
        

78. JavaScript 引擎的工作原理

  • JavaScript 引擎是如何工作的?
    JavaScript 引擎(如 V8 引擎)会将 JavaScript 代码解析、编译并执行。以下是引擎的工作流程:

    1. 解析器 (Parser)

      • 将 JavaScript 源代码解析成 抽象语法树 (AST)。首先进行词法分析,将代码拆分为标记 (tokens);然后进行语法分析,构建出语法树。
    2. 解释器 (Interpreter)

      • 解释器根据 AST 执行代码,将其转化为字节码。V8 引擎中的解释器叫 Ignition
    3. 编译器 (Compiler)

      • 编译器会将部分高频使用的代码片段优化成机器代码,以提高执行效率。V8 引擎中的即时编译器叫 TurboFan
    4. 垃圾回收 (Garbage Collection)

      • JavaScript 引擎通过垃圾回收机制自动管理内存,回收不再使用的对象,避免内存泄漏。V8 引擎使用 分代垃圾回收算法 来进行内存管理。

79. CSS 布局

  • CSS 有哪些常见布局方式?
    1. 块级布局 (Block Layout)

      • 默认情况下,块级元素会从上到下依次排列,占据容器的整行。
    2. 浮动布局 (Float Layout)

      • 通过 float 将元素从文档流中移除,通常用于文字环绕图片的布局。但由于 float 带来的一些副作用,现在使用较少。
    3. 弹性布局 (Flexbox)

      • Flexbox 是一种一维布局系统,适用于沿主轴方向的排列(水平或垂直)。通过设置父容器的 display: flex 来启用弹性布局。
      • 例子
        .container {
          display: flex;
          justify-content: center;
          align-items: center;
        }
        
    4. 网格布局 (Grid Layout)

      • Grid 是一种二维布局系统,适合构建复杂的布局。通过 display: grid 来启用网格布局,并可以通过 grid-template-columnsgrid-template-rows 来定义网格的结构。
      • 例子
        .container {
          display: grid;
          grid-template-columns: repeat(3, 1fr);
          grid-gap: 10px;
        }
        
    5. 绝对定位 (Absolute Positioning)

      • 元素通过 position: absolute 从普通文档流中脱离,并相对于最近的已定位祖先进行定位。常用于固定位置的元素,如悬浮按钮或对话框。
    6. 响应式布局

      • 通过 媒体查询 (media queries)弹性单位(如 rem%)来构建能够适应不同屏幕尺寸的布局。
      • 例子
        @media (max-width: 600px) {
          .container {
            grid-template-columns: 1fr;
          }
        }
        

80. 前端安全

  • 常见的前端安全问题有哪些?
    1. XSS (跨站脚本攻击)

      • XSS 攻击是指攻击者在网页中注入恶意脚本,通常是通过不安全的输入和输出处理。XSS 攻击可以用来窃取用户的 cookie,或者执行恶意操作。
      • 防御措施
        • 对用户输入进行严格的过滤和转义。
        • 使用 CSP (内容安全策略) 限制脚本执行来源。
    2. CSRF (跨站请求伪造)

      • CSRF 是一种攻击,攻击者诱导用户在已认证的会话中执行未授权的操作。常见场景如伪造用户的表单提交。
      • 防御措施
        • 使用 CSRF Token 来验证每次请求的合法性。
        • 使用 SameSite Cookie 标记,防止第三方网站携带用户的 Cookie 发送请求。
    3. 点击劫持 (Clickjacking)

      • 点击劫持是通过在一个透明的 iframe 中嵌入目标网站的方式,诱导用户在不知情的情况下点击一些隐蔽的按钮。
      • 防御措施
        • 使用 X-Frame-Options 头部禁止页面嵌入 iframe。
        • 使用 CSP 规则,限制允许页面嵌入的来源。

81. WebSocket 和 HTTP/2

  • 什么是 WebSocket?

    • WebSocket 是一种全双工通信协议,它允许客户端和服务器之间建立一个持久的连接,并进行实时数据传输。与传统的 HTTP 请求-响应模型不同,WebSocket 是双向的,一旦连接建立,服务器可以随时向客户端发送数据。

    • 使用场景

      • 实时聊天应用、股票行情推送、游戏服务器等需要实时通信的场景。
    • WebSocket 示例

      const socket = new WebSocket('wss://example.com/socket');
      
      // 当连接打开时执行
      socket.onopen = function () {
        console.log('WebSocket connection established');
        socket.send('Hello Server');
      };
      
      // 当接收到消息时执行
      socket.onmessage = function (event) {
        console.log('Message from server:', event.data);
      };
      
      // 当连接关闭时执行
      socket.onclose = function () {
        console.log('WebSocket connection closed');
      };
      
      // 当发生错误时执行
      socket.onerror = function (error) {
        console.log('WebSocket error:', error);
      };
      
    • WebSocket 的优点

      1. 双向通信:与传统 HTTP 请求的单向通信不同,WebSocket 允许服务器和客户端之间的实时双向数据传输。
      2. 减少延迟:因为 WebSocket 是持久连接,不需要为每次通信建立新的连接,所以减少了延迟和带宽开销。
    • WebSocket 的缺点

      1. 兼容性问题:虽然现代浏览器普遍支持 WebSocket,但一些老旧设备可能不支持。
      2. 复杂性:维护 WebSocket 连接(如心跳检测、断线重连等)比传统的 HTTP 更为复杂。
  • HTTP/2 的特点

    • HTTP/2 是 HTTP 协议的一个重大升级版本,它通过多路复用、头部压缩等机制优化了网络传输效率。
    1. 多路复用 (Multiplexing)

      • 在同一个 TCP 连接上,HTTP/2 允许同时发送多个请求和响应,解决了 HTTP/1.1 中的队头阻塞问题,大幅提升了传输效率。
    2. 头部压缩 (Header Compression)

      • HTTP/2 通过 HPACK 算法压缩请求和响应的头部,减少了重复头部字段的传输,降低了带宽消耗。
    3. 服务器推送 (Server Push)

      • 服务器可以在客户端请求之前主动推送资源(如 CSS、JavaScript 文件)给客户端,进一步提高性能,减少资源加载延迟。
    4. 二进制传输

      • HTTP/2 使用二进制格式进行数据传输,而不是 HTTP/1.1 的文本格式。二进制格式更高效,便于解析和传输。
    • HTTP/2 的优点

      1. 性能提升:通过多路复用、头部压缩等技术,显著减少了请求的延迟和带宽占用。
      2. 低延迟:在同一连接上并行传输多个请求和响应,降低了延迟。
    • HTTP/2 的使用场景

      • 适用于需要加载大量静态资源的网页,比如现代的 Web 应用和单页应用(SPA)。它能够提升页面的首屏加载速度,减少白屏时间。
    • HTTP/2 示例
      HTTP/2 是默认支持的,只要服务器配置了 HTTP/2 协议,浏览器就会自动使用它。常见的 Web 服务器如 Nginx 和 Apache 都支持 HTTP/2。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2202079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AD的多边形覆铜挖空

针对多层板中没有网络的焊盘&#xff0c;需要覆铜挖空&#xff0c;避免与GND连接。同时&#xff0c;大多数情况下&#xff0c;我们的板子上都有定位孔&#xff0c;如果覆铜边界和定位孔边界距离过近&#xff0c;当拧螺丝时&#xff0c;螺丝会压在覆铜上&#xff0c;甚至在螺丝旋…

漫途以产品为导向,为集成商客户提供稳定、可靠的物联网终端设备!

无锡漫途科技有限公司成立于2014年8月至今已经十年有余&#xff0c;在这期间公司始终把“1344”战略作为核心指导方向。 “1”代表只做一件事&#xff0c;即以“物联网基础大数据服务商”为主要业务定位&#xff0c;围绕中国制造 2025&#xff0c;推动中国工业智能化转型升级&…

安卓投屏工具:QtScrapy

QtScrcpy可以通过USB(或通过TCP/IP)连接Android设备&#xff0c;并进行显示和控制。不需要root权限。   项目地址https://gitee.com/leihongping/QtScrcpy

Onebound代购系统丨系统建站丨返海淘系统用途

Onebound代购系统、系统建站以及返海淘系统的用途&#xff0c;可以详细阐述如下&#xff1a; Onebound代购系统 Onebound代购系统主要用于连接海外消费者与中国电商平台&#xff08;如1688、淘宝、天猫、京东等&#xff09;&#xff0c;为消费者提供商品搜索、下单、支付、物…

学习threejs,网格深度材质MeshDepthMaterial

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️网格深度材质MeshDepthMate…

Vert.x,Web - Router

Vert.x-Web简介 Vert.x-Web是用于构建Web应用程序的一系列模块&#xff0c;可以用来构建经典的服务端Web应用&#xff0c; RESTful应用&#xff0c; 实时的(服务端推送)Web应用&#xff0c;或任何您所能想到的Web应用类型。Vert.x Web的设计是强大的&#xff0c;非侵入式的&am…

电影选票选座系统|影院购票|电影院订票选座小程序|基于微信小程序的电影院购票系统设计与实现(源码+数据库+文档)

电影院订票选座小程序 目录 基于微信小程序的电影院购票系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户功能实现 2、管理员功能实现 &#xff08;1&#xff09;影院信息管理 &#xff08;2&#xff09;电影信息管理 &#xff08;3&#xff09;已完成…

ComfyUI 使用 LoRA 极简工作流

前言 ComfyUI的LoRA工作流相信大家都不陌生。开发者提供了大量基于默认节点功能搭建的工作流&#xff0c;其中就包括了如何使用LoRA。 仅仅使用一个LoRA也许还比较简单。只需要在基本工作流的基础上&#xff0c;再添加一个LoRA加载器的节点即可。如果要添加多个LoRA&#xff…

[C++ 核心编程]笔记 3 引用做函数参数

2.1 引用的基本使用 作用: 给变量起别名 语法: 数据类型 &别名 原名 2.2 引用注意事项 引用必须初始化引用在初始化后&#xff0c;不可以改变 #include<iostream> using namespace std;int main() {//引用基本语法int a 10;//创建引用int& b a;cout <&…

PHP智慧餐饮新风尚点餐系统

智慧餐饮新风尚点餐系统 —— 美食与科技的完美碰撞 &#x1f37d;️ 开篇&#xff1a;智慧餐饮的崛起 在快节奏的现代生活中&#xff0c;智慧餐饮正逐渐成为我们日常的一部分。随着科技的飞速发展&#xff0c;餐饮行业也在不断创新&#xff0c;力求为顾客提供更加便捷、高效…

中国象棋,Android小游戏开发

中国象棋&#xff0c;Android小游戏开发 A. 项目描述 本项目设计并开发了一款易于上手又富有挑战性的中国象棋应用。 用户界面与体验&#xff1a; 简洁与直观的设计&#xff0c;确保无论是新手还是老手&#xff0c;都能轻松使用。象棋主界面展示清晰的棋盘和操作选项&#x…

什么是DHCP Snooping?到底工作在第几层?

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 中午好&#xff0c;我的网工朋友 对于企业和机构而言&#xff0c;保证内部网络的安全稳定运行不仅是日常运营的基础&#xff0c;更是防止敏感信息…

ChinaER:重塑跨境互联新体验

中国联通国际公司产品之 ChinaER&#xff1a;打造高效、安全的微软 Azure 云跨境互联服务 在全球化的数字时代&#xff0c;企业对于云计算的需求日益增长&#xff0c;尤其是跨境互联服务&#xff0c;成为企业拓展海外市场、实现全球业务协同的关键。中国联通国际公司&#xff…

整合Ollama实现本地LLMs调用

前言 近两年AIGC发展的非常迅速&#xff0c;从刚开始的只有ChatGPT到现在的很百家争鸣。从开始的大参数模型&#xff0c;再到后来的小参数模型&#xff0c;从一开始单一的文本模型到现在的多模态模型等等。随着一起进步的不仅仅是模型的多样化&#xff0c;还有模型的使用方式。…

JavaScript 第2章 基本语法

第二部分&#xff1a;基本语法 第2章&#xff1a;基本语法 变量声明&#xff1a;let, const, var 变量声明 var&#xff1a;全局或函数级作用域&#xff0c;可重复声明同名变量。let&#xff1a;块级作用域&#xff0c;不可重复声明同名变量。const&#xff1a;块级作用域&…

WGCNA加权基因共表达网络多步法分析学习

之前笔者介绍过一步法的分析的流程&#xff1a; WGCNA加权基因共表达网络一步法分析学习 https://mp.weixin.qq.com/s/2Q37RcJ1pBy_WO1Es8upIg 建议先看一下之前的推文&#xff0c;了解一下WGCNA的基础原理。 这次就来介绍一下多步法 分析步骤&#xff1a; 1.导入 rm(list…

安全工具 | 搭建带有 Web 仪表板的Interact.sh

介绍 Interactsh 是一个用于检测带外交互的开源工具。它是一种旨在检测导致外部交互的漏洞的工具。本文将主要介绍在子域上设置私有 Interact.sh 服务器以及部署其 Web 应用程序。只需一个 AWS EC2 或 VPS 实例和一个域。 要求 •具有静态IP的AWS EC2 / VPS •拥有自己的域…

A CXL-Powered Database System: Opportunities and Challenges——论文阅读

ICDE 2024 Paper CXL论文阅读笔记整理 背景 Compute Express Link&#xff08;CXL&#xff09;是处理器和设备&#xff08;如内存缓冲区&#xff09;之间的开放式行业标准互连协议&#xff0c;基于CXL的内存架构如图1所示&#xff0c;拥有高带宽、低延迟以及对一致性和内存语…

Java 的数据结构整理(整合版)

Java 的数据结构整理&#xff08;整合版&#xff09; 一、数据输入输出 https://www.runoob.com/java/java-scanner-class.html 这部分是为了预防 leetcode 刷习惯了&#xff0c;忘记怎么处理输入输出的问题 数据输入 Java的数据输入和 C 相比非常繁琐&#xff0c;因此大多…

双十一有哪些不容错过的电子产品?看完不信你还不心动!

2024年双十一购物庆典即将上演&#xff0c;各大电商将携众多精品数码产品亮相&#xff0c;涵盖最新智能手机、笔记本、平板及智能手表等。这些产品集时尚外观与高端性能于一身&#xff0c;旨在满足用户多元化需求&#xff0c;如提升工作效率、享受娱乐时光、优化出行体验等。为…