这是我为准备前端/全栈开发工程师面试整理的第十二天每日三题练习,涵盖了:
解析:
节流(throttle) 和 防抖(debounce) 是前端开发中控制高频事件触发的常见方式。
特性 | 节流 (throttle) | 防抖 (debounce) |
---|---|---|
执行频率 | 固定间隔执行一次 | 停止触发一段时间后执行 |
适用场景 | 页面滚动、resize、input 实时校验等 | 搜索框输入、按钮点击防止重复提交等 |
代码实现:
// 防抖
function debounce(fn, delay) {
let timer = null;
return function (...args) {
clearTimeout(timer);
timer = setTimeout(() => fn.apply(this, args), delay);
};
}
// 节流
function throttle(fn, delay) {
let last = 0;
return function (...args) {
const now = Date.now();
if (now - last >= delay) {
fn.apply(this, args);
last = now;
}
};
}
实战场景:
window.addEventListener("resize", debounce(() => {
console.log("窗口调整完毕");
}, 500));
document.addEventListener("scroll", throttle(() => {
console.log("滚动中");
}, 300));
记忆脑图建议:
解析:
React 的 lazy()
和 Suspense
组合使用,实现组件级按需加载,减少首屏体积,提升性能。
基本用法:
import React, { lazy, Suspense } from 'react';
const LazyComponent = lazy(() => import('./MyComponent'));
function App() {
return (
Loading...
Suspense
仅支持动态 import()
的组件fallback
属性必须设置(用户体验保障)记忆脑图建议:
解析:
任务调度系统在爬虫、定时任务、消息通知、推送系统中都有应用。面对高并发任务调度需求,设计需具备:
任务生产端 --> 消息队列 --> 任务调度中心(时间轮/优先级队列) --> Worker执行集群
↑
状态持久化/日志系统
const queue = [];
const MAX_WORKERS = 3;
function scheduleTask(task) {
queue.push(task);
}
function startWorkers() {
let running = 0;
setInterval(() => {
if (running < MAX_WORKERS && queue.length > 0) {
const task = queue.shift();
running++;
task().finally(() => running--);
}
}, 100);
}
// 模拟任务
scheduleTask(() => new Promise(res => setTimeout(() => {
console.log("任务完成"); res();
}, 1000)));
startWorkers();
记忆脑图建议:
题目 | 知识点 | 重点关键词 |
---|---|---|
JavaScript 节流与防抖 | 高频事件优化 | debounce、throttle |
React Suspense 与 lazy | 组件懒加载 | fallback、lazy、Suspense |
高并发任务调度系统设计 | 系统设计 | 消息队列、调度中心、Worker |
坚持每日三题,未来更进一步!如果你也在准备面试,欢迎一起刷题打卡!