上海AI中心记录

server/2024/12/27 11:19:20/

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

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/server/153605.html

相关文章

SpringBoot的MVC接口增加签名

一、确定签名策略 HMAC&#xff08;Hash-based Message Authentication Code&#xff09;&#xff1a;使用对称密钥。RSA&#xff1a;使用非对称密钥对&#xff08;公钥/私钥&#xff09;。OAuth&#xff1a;用于第三方授权和签名。 二、创建签名工具类 1、HMAC 签名工具类 …

Lambda、Stream流、线程(池)、IO

文章目录 LambdaStream流线程&#xff08;池&#xff09;IO Lambda 使用前提 必须存在一个接口接口中有且只有一个抽象方法 格式 : ( 形式参数 ) -> { 代码块 } 形式参数&#xff1a;如果有多个参数&#xff0c;参数之间用逗号隔开&#xff1b;如果没有参数&#xff0c;留空…

React Hooks

React Hooks React Hooks 是 React 16.8 版本中引入的一种新功能&#xff0c;它允许在不编写类的情况下使用状态和生命周期等特性。 在 Hooks 出现之前&#xff0c;React 里的函数式组件也被称为无状态组件。 函数组件和类组件的区别&#xff1f; 类组件必须要注意this指向…

08. 基于docker-compose部署LNMP架构

目录 前言 1、docker 1.1 任务要求 1.2 关闭防火墙 1.3 安装docker 1.4 配置镜像加速下载 2、Nginx 2.1 建立工作目录并进行相关操作 2.2 准备 nginx.conf 配置文件 3、Mysql 3.1 建立工作目录并进行相关操作 3.2 编写 my.cnf 配置文件 4、PHP 4.1 建立工作目录并…

使用Python实现量子计算应用:走进量子世界的大门

量子计算作为一种全新的计算范式&#xff0c;正在逐步改变我们的计算方式。与经典计算机依赖比特&#xff08;bits&#xff09;进行信息处理不同&#xff0c;量子计算机使用量子比特&#xff08;qubits&#xff09;进行计算&#xff0c;这使得量子计算在处理某些复杂问题上具有…

批量识别工作表中二维码信息-Excel易用宝

今天一大早&#xff0c;我们老板心急火燎的找到我&#xff0c;说是这个表格中的商品编码都不见了&#xff0c;问我能不能通过商品二维码还原商品编码&#xff0c;做好了中午给我加个鸡腿。 哎呀&#xff0c;这活不简单啊&#xff0c;我勉为其难的说&#xff0c;我先试试吧。 等…

docker oracle一些报错处理--失败记录

个人学习记录 1. 修改实例服务名称 [oracle3fe959481973 ~]$ sqlplus /nologSQL*Plus: Release 11.2.0.1.0 Production on Thu Nov 14 15:37:02 2024Copyright (c) 1982, 2009, Oracle. All rights reserved.SQL> connect /as sysdba; Connected. #查看当前服务名称 SQL&…

OpenEMMA: 打破Waymo闭源,首个开源端到端多模态模型

导读&#xff1a; OpenEMMA&#xff0c;它是首个基于多模态大型语言模型的开源端到端框架。通过结合思维链推理过程&#xff0c;它在利用多种多模态大型语言模型时&#xff0c;相较于基线取得了显著改进。此外&#xff0c;它在各种具有挑战性的驾驶场景中展示了有效性、泛化能力…