168. 面试官:浏览器有哪几种缓存,各种缓存的优先级是什么样的?

168期题目

1. 浏览器有哪几种缓存,各种缓存的优先级是什么样的?
2. canvas 和 webgl 有什么区别?
3. 说说你对函数式编程的理解,以及优缺点?

上面问题的答案会在第二天的公众号(程序员每日三问)推文中公布

也可以小程序刷题,已收录500+面试题及答案a8efcc4b6c6aabcacca7c7af70d46301.jpeg

167期问题及答案

1. 什么是Typescript的方法重载?

在 TypeScript 中,方法重载是指在同一个函数名下定义多个函数类型,以根据传入参数的不同类型或数量来决定具体调用哪个函数。这在提高代码的灵活性和类型安全性方面非常有用。

下面是一个简单的 TypeScript 方法重载的示例:

function greet(person: string): string;
function greet(person: string, age: number): string;

function greet(person: string, age?: number): string {
    if (age !== undefined) {
        return `Hello, ${person}! You are ${age} years old.`;
    } else {
        return `Hello, ${person}!`;
    }
}

// 调用示例
console.log(greet("John")); // 输出: Hello, John!
console.log(greet("Jane", 25)); // 输出: Hello, Jane! You are 25 years old.

在这个例子中,我们首先定义了两个函数签名(overloads),一个接收一个字符串参数,另一个接收一个字符串参数和一个可选的数字参数。接着,我们实现了这两个函数签名的具体实现。

调用时,TypeScript 编译器会根据传入的参数类型和数量选择正确的函数签名进行调用。这样,我们既能够灵活地处理不同类型的输入,又保证了类型的安全性。

这种方法重载的方式使得函数的使用更加清晰和可维护,同时提供了良好的类型检查。

2. 请用TS实现一个JS数组的reduce方法?

当我们用 TypeScript 实现一个简单的 reduce 方法时,我们可以考虑使用泛型来保留数组元素的类型。以下是一个基本的 TypeScript reduce 方法的实现:

function customReduce<T, U>(array: T[], callback: (accumulator: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U {
    let accumulator: U = initialValue;

    for (let i = 0; i < array.length; i++) {
        accumulator = callback(accumulator, array[i], i, array);
    }

    return accumulator;
}

// 示例用法
const numbers = [1, 2, 3, 4, 5];

// 计算数组总和
const sum = customReduce(numbers, (acc, curr) => acc + curr, 0);
console.log(sum); // 输出: 15

// 连接数组元素为字符串
const concatenatedString = customReduce(numbers, (acc, curr) => acc + '-' + curr.toString(), '');
console.log(concatenatedString); // 输出: "1-2-3-4-5"

在这个实现中,customReduce 接受三个参数:数组 array、回调函数 callback 和初始值 initialValue。回调函数负责对累加器进行更新,包括当前元素的处理。

这个实现中使用了泛型 <T, U>,其中 T 表示数组元素的类型,而 U 表示累加器的类型。这使得我们在使用时可以保持类型的一致性。

请注意,这个实现是一个简化版,可能不涵盖 reduce 方法的所有特性和边界情况。在实际项目中,可以根据需求进一步扩展和优化。

3. tsconfig.json有什么作用?

tsconfig.json 是 TypeScript 的配置文件,用于指定 TypeScript 编译器的行为和项目的编译选项。通过配置 tsconfig.json,你可以定义项目中的编译规则、指定输出目录、配置模块系统等。

以下是一些 tsconfig.json 的主要作用和配置选项:

  1. 编译选项配置: 通过 compilerOptions 属性,你可以配置 TypeScript 编译器的各种选项,例如目标 JavaScript 版本、模块系统、是否启用 strict 模式、输出目录等。

    {
      "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "strict": true,
        "outDir": "./dist"
      }
    }
  2. 文件和目录配置: 通过 includeexclude 属性,你可以指定哪些文件应该被编译,哪些文件应该被排除。

    {
      "include": ["src/**/*.ts"],
      "exclude": ["node_modules"]
    }
  3. 自定义类型定义文件: 通过 typestypeRoots 属性,你可以配置 TypeScript 使用哪些类型定义文件以及它们的搜索路径。

    {
      "types": ["node", "webpack"],
      "typeRoots": ["./typings"]
    }
  4. 源映射配置: 通过 sourceMap 属性,你可以控制是否生成源映射文件,方便在调试时追踪到 TypeScript 源码。

    {
      "compilerOptions": {
        "sourceMap": true
      }
    }
  5. 配置模块解析: 通过 baseUrlpaths 属性,你可以配置模块的基本路径和模块的别名。

    {
      "baseUrl": "./src",
      "paths": {
        "utils/*": ["./app/utils/*"]
      }
    }

通过这些配置,tsconfig.json 提供了灵活的方式来定制 TypeScript 项目的编译行为,使得开发者能够更好地适应不同的项目需求。

因为微信公众号修改规则,如果标星或点在看,你可能会收不到我公众号文章的推送,原创不易,请大家将本公众号星标,看完文章后记得点下赞或者在看,谢谢各位!

学习不打烊,充电加油只为遇到更好的自己,每天早上9点纯手工发布面试题,每天坚持花20分钟来学习与思考,在千变万化,类库层出不穷的今天,不要等到找工作时才狂刷题,提倡每日学习。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值