技术大牛成长课,从0到1带你手写一个数据库系统(无密分享)

34 阅读2分钟

/xia栽ke:52xueit.com/585/

“旧游如梦,重逢却是初见”,这句话很好的描述了再看见这个面试题的感觉,最开始知道这道题的时候,它只是道题,再看见时,它好像变成了很多知识点,这也是一种进步的吧。 题目 可能有些人不知道这道题目,所以有必要描述一下题目,这是一道经典题目 js复制代码> LazyMan('Hank') 你好,我是 Hank > LazyMan('Hank').sleep(10).eat('lunch') 你好,我是 Hank (等10秒...) 我醒了,我刚睡了 10 秒 吃午餐 > LazyMan('Hank').eat('lunch').eat('supper') 你好,我是 Hank 吃午餐 吃晚餐 > LazyMan('Hank').sleepFirst(5).eat('supper') (沉默5秒) 我醒了,我刚刚睡了 5 秒 你好,我是 Hank 吃晚餐

需要实现 LazayMan 函数,函数接收一个参数 实现链式调用 实现sleep, eat, sleepFirst方法,且执行时机要与上述匹配 知道上述情况后,大致可以奠定LazyMan的基调 js复制代码const LazyMan = (name) => { return { sleep(){}, eat(){}, sleepFirst(){} } } LazyMan("Hank") 清楚题目后,我们开始来实现吧,如果可以,我建议你可以自己先想一想! 实现 LazyMan('Hank') 从这里第一个打印来看,非常简单,只需要将这个参数值在控制台打印出即可 代码实现 js复制代码const LazyMan = (name) => { console.log(你好,我是${name}) return { sleep(){}, eat(){}, sleepFirst(){} } } LazyMan("Hank") 这样就可以得到第一个打印结果: 第一步实现非常简单,对吧,接下来继续实现下一个 实现sleep(10)和eat('lunch') 首先看到LazyMan('Hank').sleep(10).eat('lunch')打印结果 js复制代码你好,我是 Hank (等10秒...) 我醒了,我刚睡了 10 秒 吃午餐

sleep函数的执行时机是按照链式调用顺序执行,且sleep的作用是等待n秒后,再执行后续调用 eat函数就是根据参数打印是吃午餐,还是吃晚餐还是... 清楚这些后,我们开始在原来的代码上添加修改代码,以达到目的,既然 sleep 是等待n秒后执行其他函数,那我直接死循环等待即可 代码实现: js复制代码const LazyMan = (name) => { console.log(你好,我是${name}) const lazyMan = { sleep(second){ let startTime = Date.now() while (Date.now() - startTime < 10000) { } // 空等 second 秒 console.log(我醒了,刚刚睡了${second}秒) return lazyMan // 链式调用 }, eat(type){ console.log("吃午餐") }, sleepFirst(){} } return lazyMan } LazyMan("Hank").sleep(10).eat("lunch") 完工,这样我们也达到了这个调用的打印顺序要求了,查看结果: 接下来继续实现下一个 实现eat函数 我们先看到调用方式LazyMan('Hank').eat('lunch').eat('supper'),在看打印结果