面试题答案
一键面试代码示例
假设我们有以下三个函数,分别完成数据验证、数据转换和数据存储功能。以JavaScript为例:
// 数据验证函数
function validateData(data) {
if (typeof data === 'number' && data > 0) {
return true;
}
return false;
}
// 数据转换函数
function transformData(data) {
return data * 2;
}
// 数据存储函数
function storeData(data) {
console.log('Data stored:', data);
}
// 组合函数
function compose(...funcs) {
return function (arg) {
return funcs.reduceRight((acc, func) => func(acc), arg);
};
}
// 组合业务逻辑
const complexLogic = compose(storeData, transformData, validateData);
// 测试
const testData = 5;
complexLogic(testData);
优化思路
- 性能优化:
- 缓存中间结果:对于一些计算成本较高的转换函数,可以使用记忆化(Memoization)技术缓存计算结果。例如,如果
transformData
函数的计算很复杂且相同输入可能会多次出现,可以使用如下方式优化:
- 缓存中间结果:对于一些计算成本较高的转换函数,可以使用记忆化(Memoization)技术缓存计算结果。例如,如果
function memoize(func) {
const cache = new Map();
return function (arg) {
if (cache.has(arg)) {
return cache.get(arg);
}
const result = func(arg);
cache.set(arg, result);
return result;
};
}
const memoizedTransformData = memoize(transformData);
const optimizedComplexLogic = compose(storeData, memoizedTransformData, validateData);
- **减少不必要计算**:在`validateData`函数验证失败时,直接返回,避免后续`transformData`和`storeData`函数的不必要调用。可以在`compose`函数实现中进行改进:
function compose(...funcs) {
return function (arg) {
return funcs.reduceRight((acc, func) => {
if (acc === false) {
return false;
}
return func(acc);
}, arg);
};
}
- 代码结构优化:
- 函数拆分与模块化:将每个功能函数(验证、转换、存储)放在单独的文件中,便于维护和复用。例如,
validateData
函数放在validation.js
文件,transformData
函数放在transformation.js
文件,storeData
函数放在storage.js
文件。 - 使用类型系统:在JavaScript中可以使用TypeScript来明确函数参数和返回值的类型,提高代码的可读性和可维护性。例如:
- 函数拆分与模块化:将每个功能函数(验证、转换、存储)放在单独的文件中,便于维护和复用。例如,
// 数据验证函数
function validateData(data: number): boolean {
if (typeof data === 'number' && data > 0) {
return true;
}
return false;
}
// 数据转换函数
function transformData(data: number): number {
return data * 2;
}
// 数据存储函数
function storeData(data: number): void {
console.log('Data stored:', data);
}
// 组合函数
function compose<T, U>(...funcs: ((arg: T) => U)[]): (arg: T) => U {
return function (arg: T) {
return funcs.reduceRight((acc, func) => func(acc), arg);
};
}
// 组合业务逻辑
const complexLogic = compose(storeData, transformData, validateData);
// 测试
const testData: number = 5;
complexLogic(testData);