上海AI中心记录

ops/2024/12/27 18:56:48/

先谈谈做了什么项目,用了什么技术,有什么亮点和困难,采用什么方案解决的。

1、js事件循环

  • 调用栈(Call Stack)

    • JavaScript 是单线程的,所有的代码执行都是在调用栈中进行的。
    • 当函数被调用时,进入栈中;执行完毕后,从栈中弹出。
  • 任务队列(Task Queue)

    • 当异步操作完成(如网络请求、定时器等)时,回调函数会被放入任务队列中。
    • 这些函数会在调用栈空闲时被执行。
  • 事件循环(Event Loop)

    • 事件循环是一个持续运行的循环,它监测调用栈和任务队列。
    • 当调用栈为空时,事件循环会将任务队列中的第一个任务移入调用栈执行。

下面是一个简单的示例,展示了事件循环的工作原理:

javascript">console.log('Start');setTimeout(() => {console.log('Timeout 1');
}, 0);setTimeout(() => {console.log('Timeout 2');
}, 0);Promise.resolve().then(() => {console.log('Promise 1');
});Promise.resolve().then(() => {console.log('Promise 2');
});console.log('End');// 在全局代码执行完后,事件循环会首先处理微任务队列中的 Promise 回调,然后再处理任务队列中的 setTimeout 回调。
Start
End
Promise 1
Promise 2
Timeout 1
Timeout 2

2、

javascript">// 理解它的执行顺序以及输出结果
setTimeout(function() {console.log(1);
});new Promise(function(resolve, reject) {console.log(2);resolve(3);
}).then(function(val) {console.log(val);
});2
3
1(function test() {setTimeout(function() {console.log(4);}, 0);new Promise(function executor(resolve) {console.log(1);for (var i = 0; i < 10000; i++) {i == 9999 && resolve();}console.log(2);}).then(function() {console.log(5);});console.log(3);
})();console.log('script end');1
2
3
script end
5
4

3、背景:在前端开发中,展示超长列表数据时,如果直接渲染会导致性能问题。为了解决这一问题,需要使用虚拟列表技术。
要求:使用React 实现一个虚拟列表组件。 该组件需要支持以下功能:
自定义列表项的高度。
动态加载数据(模拟异步加载)。
滚动到任意位置时,能正确渲染可视区域内的列表项。
提供简单的示例代码展示组件的用法。

import React, { useState, useEffect, useRef } from 'react';const VirtualList = ({ itemHeight, itemCount }) => {const [data, setData] = useState([]);const [scrollTop, setScrollTop] = useState(0);const listRef = useRef(null);// 模拟异步加载数据useEffect(() => {const loadData = () => {const newData = Array.from({ length: itemCount }, (_, index) => `Item ${index + 1}`);setData(newData);};loadData();}, [itemCount]);const handleScroll = (e) => {setScrollTop(e.target.scrollTop);};const startIndex = Math.floor(scrollTop / itemHeight);const endIndex = Math.min(startIndex + Math.ceil(listRef.current.clientHeight / itemHeight), itemCount);const visibleItems = data.slice(startIndex, endIndex);return (<divref={listRef}onScroll={handleScroll}style={{height: '400px',overflowY: 'auto',position: 'relative',}}><div style={{ height: `${itemCount * itemHeight}px`, position: 'relative' }}>{visibleItems.map((item, index) => (<divkey={index}style={{height: `${itemHeight}px`,position: 'absolute',top: `${(startIndex + index) * itemHeight}px`,lineHeight: `${itemHeight}px`,border: '1px solid #ccc',boxSizing: 'border-box',padding: '0 10px',}}>{item}</div>))}</div></div>);
};// 示例用法
const App = () => {return (<div><h1>Virtual List Example</h1><VirtualList itemHeight={30} itemCount={1000} /></div>);
};export default App;// VirtualList 组件:
接受 itemHeight(每个列表项的高度)和 itemCount(列表项总数)作为 props。
使用 useState 来管理列表数据和滚动位置。
使用 useEffect 模拟异步加载数据。
事件处理:
handleScroll 函数用于更新滚动位置。
计算可视区域内的列表项,并通过 slice 方法获取可见的列表项。
渲染:
计算 startIndex 和 endIndex,根据滚动位置渲染相应的列表项。
使用绝对定位来渲染列表项,以确保它们在正确的位置。


http://www.ppmy.cn/ops/145455.html

相关文章

postman去除更新

一、关闭自动更新目前有两种方案&#xff1a; 1.Hosts文件配置以下地址屏蔽连接&#xff1a; 以下配置粘贴到文件中&#xff0c;文件位置&#xff1a;C:\Windows\System32\drivers\etc 0.0.0.0 dl.pstmn.io 0.0.0.0 sync-v3.getpostman.com 0.0.0.0 ge…

代码随想录day28 贪心2

题目&#xff1a;122.股票买卖最佳时机II 55.跳跃游戏 45.跳跃游戏II 1005.K次取反后最大化的数组和 需要重做&#xff1a;全部 122.买卖股票的最佳时机II 思路&#xff1a;只获取正利润&#xff0c;即prices[i]-prices[i-1]。只有大于0的时候加到res 注意&#xff1a;还…

Monorepo pnpm 模式管理多个 web 项目

Monorepo pnpm 模式管理多个 web 项目 Monorepo pnpm 模式管理多个 web 项目 项目地址git flow 工作流程pnpm workspace.npmrc初始化项目架构引入Husky规范git提交配置eslint和prettier eslint 配置prettier 配置 配置lint-staged创建项目 创建shared项目全局安装 vue在 packag…

PDF书籍《手写调用链监控APM系统-Java版》第12章 结束

本人阅读了 Skywalking 的大部分核心代码&#xff0c;也了解了相关的文献&#xff0c;对此深有感悟&#xff0c;特此借助巨人的思想自己手动用JAVA语言实现了一个 “调用链监控APM” 系统。本书采用边讲解实现原理边编写代码的方式&#xff0c;看本书时一定要跟着敲代码。 作者…

【RabbitMQ】【Laravel】【PHP】Laravel 中使用 RabbitMQ

在 Laravel 中使用 RabbitMQ,通常需要安装 RabbitMQ 客户端库,并在 Laravel 项目中进行适当配置。php-amqplib 是常用的 PHP RabbitMQ 客户端库,Laravel 也有一些扩展包,方便集成 RabbitMQ。下面是如何在 Laravel 中使用 RabbitMQ 的详细步骤: 1. 安装所需的扩展包 在 L…

命名空间与模块化概述

本文我们要聊一聊 命名空间 和 模块化&#xff0c;这两个在 TypeScript 中非常重要的概念。无论你是正在开发大型应用还是维护已有的项目&#xff0c;这两个概念都会对你的代码组织和管理起到非常重要的作用。 什么是命名空间&#xff1f; 首先&#xff0c;咱们从 命名空间 开…

电脑出现 0x0000007f 蓝屏问题怎么办,参考以下方法尝试解决

电脑蓝屏是让许多用户头疼的问题&#xff0c;其中出现 “0x0000007f” 错误代码更是较为常见且棘手。了解其背后成因并掌握修复方法&#xff0c;能帮我们快速恢复电脑正常运行。 一、可能的硬件原因 内存问题 内存条长时间使用可能出现物理损坏&#xff0c;如金手指氧化、芯片…

Delphi WebBrowser 基本操作与常见问题的解决方案

前言 WebBrowser 作为Delphi 常见的网络浏览控件&#xff0c;我这里整理了一些它的基本操作&#xff0c;遇到了一些问题&#xff0c;我梳理了一下并给出解决方案 基本操作 WebBrowser1.GoHome; //到浏览器默认主页 WebBrowser1.Refresh; //刷新 WebBrowser1.GoBack; //后退 Web…