MST

星途 面试题库

面试题:TypeScript生成器的高级定制与优化

设计一个复杂的TypeScript生成器,它可以根据传入的不同策略(例如随机数生成、斐波那契数列生成等)生成一系列数据。并且,要考虑生成器的性能优化,比如如何避免内存泄漏和提高生成效率,给出完整的实现代码及优化思路。
30.9万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

实现代码

// 定义策略接口
interface GeneratorStrategy {
    generate(): number;
}

// 随机数生成策略
class RandomStrategy implements GeneratorStrategy {
    generate(): number {
        return Math.random();
    }
}

// 斐波那契数列生成策略
class FibonacciStrategy implements GeneratorStrategy {
    private a = 0;
    private b = 1;
    generate(): number {
        const next = this.a + this.b;
        this.a = this.b;
        this.b = next;
        return this.a;
    }
}

// 生成器类
class ComplexGenerator {
    private strategy: GeneratorStrategy;
    constructor(strategy: GeneratorStrategy) {
        this.strategy = strategy;
    }

    *generateSequence(count: number) {
        for (let i = 0; i < count; i++) {
            yield this.strategy.generate();
        }
    }
}

// 使用示例
const randomGenerator = new ComplexGenerator(new RandomStrategy());
const randomSequence = randomGenerator.generateSequence(5);
for (const value of randomSequence) {
    console.log(value);
}

const fibonacciGenerator = new ComplexGenerator(new FibonacciStrategy());
const fibonacciSequence = fibonacciGenerator.generateSequence(10);
for (const value of fibonacciSequence) {
    console.log(value);
}

优化思路

  1. 避免内存泄漏
    • 使用生成器函数 *generateSequence,它不会一次性生成所有数据,而是按需生成。这样在处理大量数据时,不会将所有数据都存储在内存中,从而避免因数据量过大导致的内存泄漏。
    • 在策略类(如 RandomStrategyFibonacciStrategy)中,确保没有引用不必要的外部对象,避免形成无法释放的引用链。如果有需要清理的资源,可在生成器结束时(例如通过 return 语句)进行清理操作。
  2. 提高生成效率
    • FibonacciStrategy 中,使用简单的变量 ab 来存储前两个斐波那契数,避免了递归调用带来的栈开销,从而提高了计算效率。
    • 对于随机数生成,Math.random() 本身是高效的,但如果有更特定的随机数需求(如指定范围),可以优化生成逻辑。
    • 生成器函数 generateSequence 使用 yield 关键字逐个返回数据,而不是一次性生成整个数组,减少了中间数据存储的开销,提高了生成效率。