欢迎光临散文网 会员登陆 & 注册

成都8K笔试题分享,看看你值不值8K?

2023-06-10 16:45 作者:蛋糕前端  | 我要投稿

今天刚收到一个前端笔试邀请(来自于中石油董小姐拍照地方的公司)


在这个环节,你需要完成以下2个题目

题目一:匹配算法 match-algo

假设有两组数组

const A = []
const B = []

他们的元素拥有相似的数据结构

A的元素

{
   name: "Alan",
   credit: 10,
   address: "10 Peter St.",
   skill: ["climbing", "cooking"]
},
{
   name: "Jack",
   credit: 21.0,
   address: "192 Kinsington Ave.",
   skill: ["programing"]
},
...

B的元素

{
   name: "Jessica",
   credit: 10,
   address: "82 Lafei St.",
   backpack: ["candy", "eyelash"]
},
{
   name: "Muse",
   credit: 26.3,
   address: "33 Udon Drive",
   backpack: ["torch"]
},
...

目标

输入任意的A和B数组,然后进行匹配,匹配的输出示意:

[
   {
       aName: "Alan"
       aCredit: 10,
       aAdress: "10 Peter St.",
       aSkill: ["climbing", "cooking"],
       bName: "Jessica",
       bCredit: 10,
       bAddress: "82 Lafei St.",
       bBackpack: ["candy", "eyelash"]
       creditSum: 20,
       composite: [
           AElement,
           BElement
       ]
   }
   ...
]
// 其中 AElement,BElement分别来自数组A和B的匹配元素。

匹配需要满足如下规则:

  1. A数组的一个元素与B数组的一个元素的credit相等

  2. A数组的多个元素的credit之和与B元素的credit相等

  3. B数组的多个元素的credit之和与A元素的credit相等

同时,你需要输出未匹配的A数组元素和B数组元素,按照其数组元素原始的数据结构输出即可。

题目二:发布订阅模式和自动监听

本题的目标分为3个Section

Section 1

subscribe函数允许输入订阅事件和callback,当另一个函数publish随着订阅事件和一系列参数输入被调用时,应该运行正确callback,并产生正确的输出。subscribe的订阅事件应该允许stringSymbol,同时为了方便,函数返回的handler可以直接进行发布调用并允许传参。要求之后需要实现的订阅函数自然具有此能力,不再赘述。即

const pubA = subscribe("A", (name) => console.log(`helloworld ${name}`);
pubA("Candidate");
// 打印 helloworld Candidate

并且,你应该实现once函数,函数允许的输入与subscribe函数相同,但只会响应一次publish

Section 2

实现debounceSubscribe,函数允许输入订阅事件、callbackdebounceTimer,在publish第一次触发后的debounceTimer毫秒内,不应该再次被publish触发,但如果在debounceTimer毫秒内有其它的publish调用,在此次调用的debounceTimer毫秒后,应该正确调用publish并产生正确的callback的输出。

实现unsubscribe函数,允许输入订阅事件,对订阅进行注销。注销后,不再响应发布事件,

改造你的publish函数,使得其如果callback的返回是一个Promise对象时,确保最后resolve的Promise链被调用。

注意你的内存管理。

Section 3

实现一个reactive函数,允许输入一个Token或一个对象、数组、数字、字符串、布尔值,该Token可以是一个对象、数组、数字、字符串、布尔值的reference,如果输入的是Token,你不应该改变此Token的任何属性。该函数应该返回一个handle用于保存输入参数的响应式对象。

实现一个watch函数,允许输入一个Token,该Token必须是一个响应式对象的reference,函数同时也允许输入一个callback,该callback允许接收两个参数oldValnewVal

当Token对应的值改变时,应该运行正确的callback并且其参数应该等于Token对应的旧值和新值。

当输入的Token不是一个由你的reactive函数生成的响应式对象时请抛出错误Cannot watch non-reactive object

你的watch函数仍需要考虑其callback返回Promise的情况,并与Section 2的要求一致。

注意

  • 单元测试用例和用例的Coverage也是考核因素之一,请合理设计测试用例,请在单元测试完全通过后再提交你的代码。你可以使用新建Terminal来开启新终端会话,请使用yarn test来启动你的测试

  • 请在提交前运行yarn coverage生成测试用例覆盖报告

  • 问题一中数组的元素的credit字段可能为小数

  • 请注释你的代码,良好的注释可以帮助审查者阅读你的代码

  • 你可以在package.json中添加你需要的依赖

  • 请勿过于依赖轮子,这可能会影响你的笔试结果


成都8K笔试题分享,看看你值不值8K?的评论 (共 条)

分享到微博请遵守国家法律