当前位置: 首页 > news >正文

前端面试每日三题 - Day 23

今天,我们将深入探讨 WeakSetWeakMap 在 JavaScript 中的应用与底层机制,分析它们如何有效管理内存。接下来,我们会探索 React 18 中的 Server-Side Rendering (SSR) Static Site Generation (SSG),了解它们如何提升网站性能和 SEO。最后,我们将学习如何设计一个高效的分布式日志收集系统,解决大规模应用中的日志数据处理问题。

通过今天的学习,你将提升对高级 JavaScript 和 React 技术的理解,同时掌握构建高效系统的能力,助力你的面试准备和职业发展。

✅ 题目1:JavaScript - 深入理解 WeakSet 与 WeakMap 的底层机制和实际应用

📘 解析说明

WeakSet 和 WeakMap 是 JavaScript 中相对较少使用但非常强大的数据结构,它们主要用来解决内存管理的问题。

  • WeakSet:与 Set 类似,但它只允许对象作为元素,并且这些元素是“弱引用”的。换句话说,当某个对象没有其他引用时,WeakSet 会自动将其垃圾回收,从而避免内存泄漏。
  • WeakMap:与 Map 类似,但它的键必须是对象,并且这些键是“弱引用”的。WeakMap 允许你存储任意对象作为键,而这些键在没有其他引用时,会被自动垃圾回收。

📎 示例代码

// WeakSet 示例
let obj1 = {};
let obj2 = {};
const weakSet = new WeakSet([obj1, obj2]);console.log(weakSet.has(obj1)); // true
obj1 = null;  // obj1 被垃圾回收
console.log(weakSet.has(obj1)); // false// WeakMap 示例
let obj3 = {};
const weakMap = new WeakMap();
weakMap.set(obj3, 'value');
console.log(weakMap.get(obj3)); // 'value'
obj3 = null;  // obj3 被垃圾回收
console.log(weakMap.has(obj3)); // false

⚠️ 常见用法与适用场景

  • WeakSet: 用于跟踪对象的状态(如事件监听器)并防止内存泄漏。例如,监听 DOM 事件时,使用 WeakSet 来存储监听器对象。
  • WeakMap: 用于缓存某些对象的数据,避免缓存数据导致对象无法被垃圾回收。适用于存储 DOM 元素与其附加数据的场景。

🧠 脑图建议

WeakSet 和 WeakMap
WeakSet
WeakMap
弱引用对象
适用场景: 存储对象
弱引用键
适用场景: 缓存数据

✅ 题目2:React - 探索 React 18 中的 Server-Side Rendering (SSR) 与 Static Site Generation (SSG)

📘 解析说明

React 18 引入了许多新特性,其中包括 Server-Side Rendering (SSR) 和 Static Site Generation (SSG),这两者在提升性能和 SEO 上起到了至关重要的作用。

  • SSR (Server-Side Rendering):在服务器端生成 HTML 内容,并将其发送到浏览器。这使得页面在加载时就能显示内容,从而提高 SEO 和用户体验。
  • SSG (Static Site Generation):在构建时预渲染 HTML 内容,生成静态文件。这些文件可以被快速加载,并且适合于内容不频繁更新的页面。

📎 典型示例

// React 18 SSR 示例
import React from 'react';
import ReactDOMServer from 'react-dom/server';const App = () => <div>Hello, React SSR!</div>;const html = ReactDOMServer.renderToString(<App />);
console.log(html); // 输出渲染后的 HTML// React 18 SSG 示例 (使用 Next.js)
import { useEffect, useState } from 'react';export async function getStaticProps() {// 预渲染数据const data = await fetch('https://api.example.com/data').then(res => res.json());return { props: { data } };
}function Page({ data }) {return <div>{data.title}</div>;
}export default Page;

💼 工作原理

  • SSR: 服务器在接收到请求时会运行 React 组件,生成 HTML 页面并返回给客户端。这对 SEO 非常重要,因为搜索引擎可以直接爬取页面内容。
  • SSG: 在构建时,React 会预渲染所有页面,生成静态 HTML 文件。每次用户访问时,直接加载这些静态文件,速度非常快。

🧠 脑图建议

React 18 SSR 和 SSG
SSR
SSG
服务器渲染
适用场景: 动态页面
构建时渲染
适用场景: 静态页面

✅ 题目3:系统设计 - 设计一个高效的分布式日志收集系统

📘 解析说明

分布式日志收集系统是现代应用中不可或缺的一部分,尤其是对于大规模分布式系统而言,日志管理至关重要。设计一个高效的日志收集系统时需要考虑以下几个方面:

  1. 日志采集:通过日志代理(如 fluentd 或 logstash)收集各个服务的日志。
  2. 日志存储:使用分布式数据库(如 Elasticsearch)存储日志,支持快速检索和分析。
  3. 日志处理:支持实时数据流处理(如使用 Apache Kafka)来传输和处理日志数据。
  4. 查询与分析:通过 Kibana 等工具提供可视化的日志分析界面,帮助开发人员快速定位问题。

✨ 关键组件

  • 日志代理:负责从应用和服务器中采集日志数据。常见的工具包括 fluentd、logstash 等。
  • Kafka:作为日志的消息中间件,提供高效的日志流传输,支持高并发。
  • Elasticsearch:存储日志数据,并提供强大的搜索功能,支持高效的日志查询。
  • Kibana:提供日志数据的可视化界面,帮助开发人员分析和调试。

🏠架构图示

+------------+    +------------+    +----------------+    +-------------+
| Log Agent  | --> | Kafka      | --> | Elasticsearch  | --> | Kibana      |
| (fluentd)  |    | (Broker)   |    | (Storage)      |    | (Dashboard) |
+------------+    +------------+    +----------------+    +-------------+

🧠 脑图建议

日志收集系统
消息队列 Kafka/Redis
日志调度中心
任务优先队列
Worker 执行集群
任务执行与状态上报
监控与持久化

📅 明日预告:

  • JavaScript - 深入理解 Promise.all()、Promise.race() 和 Promise.allSettled() 的实际应用和性能差异
  • React - 解析Concurrent Rendering 和 useTransition API。
  • 系统设计 - 设计一个高并发的在线支付系统架构

相关文章:

  • 多数据源动态切换
  • HTML简介
  • ​​信息泄露:网站敏感文件泄漏的隐形危机与防御之道​
  • 高性能架构设计-高可用
  • 专为焦油介质打造:煤焦油专用气动硬密封调节 V 型球阀(带手动)的卓越特点-耀圣
  • C#VisionMaster算子二次开发(非方案版)
  • 在Java项目中实现本地语音识别与热点检测,并集成阿里云智能语音服务
  • 考研408《计算机组成原理》复习笔记,第二章计算机性能
  • 第2章 创建独立的 Anaconda 环境
  • 基于机器学习的心脏病数据分析与可视化(百度智能云千帆AI+DeepSeek人工智能+机器学习)健康预测、风险评估与数据可视化 健康管理平台 数据分析与处理
  • 网格不迷路:用 CSS 网格生成器打造完美布局
  • 0902Redux_状态管理-react-仿低代码平台项目
  • FramePack部署(从PyCharm解释器创建和使用开始)保姆级教程
  • C++ 抽象工厂模式详解
  • NuttX 与 PX4 系统开发全流程详解
  • 多协议 Tracker 系统架构与传感融合实战 第四章 IMU 与 UWB 传感融合框架
  • Qt SQL 核心类说明文档
  • Chromium 134 编译指南 - Android 篇(八):开始编译
  • 【RabbitMQ】 RabbitMQ快速上手
  • java面向对象编程【高级篇】之特殊类
  • 江苏淮安优化村级资源配置:淮安区多个空心村拟并入邻村
  • 工人日报关注跟着演出去旅游:票根经济新模式兴起,让过路客变过夜客
  • 今年五一档电影票房已破7亿
  • 五一上海楼市热闹开局:售楼处全员到岗,热门楼盘连续触发积分
  • 马克思主义理论研究教学名师系列访谈|金瑶梅:教师需要了解学生的现实发展,把握其思想发展动态
  • 商务部:外贸优品中华行活动采购意向超167亿元