资讯专栏INFORMATION COLUMN

一道很有意思的面试题

curlyCheng / 497人阅读

摘要:实现下面这道题中的函数这里等待了原型写法维护一个数组,异步就函数,不是异步就字符串写法维护一个队列数组,里面全部是构造函数,第一个参数代码是否异步,第二个是比较数组每一个都是构造函数有点浪费空间

实现下面这道题中的machine函数

function machine() {
    
}
machine("ygy").execute() 
// start ygy
machine("ygy").do("eat").execute(); 
// start ygy
// ygy eat
machine("ygy").wait(5).do("eat").execute();
// start ygy
// wait 5s(这里等待了5s)
// ygy eat
machine("ygy").waitFirst(5).do("eat").execute();
// wait 5s
// start ygy
// ygy eat
原型写法

维护一个数组,异步就push函数,不是异步就push字符串

function machine(name) {
    if(!(this instanceof machine)){
        return new machine(name)
    }  
    this.name = name
    this.logs = []
    this.logs.push(`start ${name}`)
}
machine.defer = function(time){
    const times = time
    return function(){
        console.log(`wait ${times}s`)
          return new Promise((resolve)=>{
            setTimeout(()=>{resolve()},times*1000)
        })
    }
}
machine.prototype.execute = async function(){
    const logs = this.logs
    if(logs.length > 0){
         for(let i=0; i
es6写法

维护一个queue队列数组,里面全部是构造函数,第一个参数代码是否异步,第二个是callback

function machine(name) {
    return new Action(name)
}


const defer = (time, callback) => {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve(callback())
        }, time * 1000)
    })
}
class QueueItem {
    constructor(defer, callback) {
        this.defer = defer;
        this.callback = callback;
    }
}
class Action {
    queue = []
    constructor(name) {
        this.name = name;
        this.queue.push(new QueueItem(0, () => console.log(`start ${this.name}`)))
    }
    do(eat) {
        this.queue.push(new QueueItem(0, () => console.log(`${this.name} ${eat}`)))
        return this;
    }
    wait(time) {
        this.queue.push(new QueueItem(time, () => console.log(`wait ${time}s`)))
        return this;
    }
    waitFirst(time) {
        this.queue.unshift(new QueueItem(time, () => console.log(`wait ${time}s`)))
        return this;
    }
    async execute() {
        while(this.queue.length > 0) {
            const curItem = this.queue.shift();
            if (!curItem.defer) {
                curItem.callback();
                continue;
            }
            await defer(curItem.defer, curItem.callback)
        }
    }
}
比较

数组每一个都是构造函数有点浪费空间

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/110176.html

相关文章

  • 一道意思面试算法

    摘要:解决方案异或操作异或运算是对于二进制数字而言的,比如说一个有两个二进制,如果两个值不相同,则异或结果为。比如说,本质上其实是和的每一对比特位执行异或操作,等价于下面数字对应的二进制数字对应的二进制数字对应的二进制因此的结果就为啦。 新年第一篇文章,先祝大家新年快乐!!那么接下来进入正文。 前言 前阵子突发奇想,突然开始刷leetcode。其中刷到了一道有意思的题目,发现这道题是当时秋招...

    maxmin 评论0 收藏0
  • 一道常见面试

    摘要:面试题题目页面上有一个输入框,两个按钮,按钮和按钮,点击或者分别会发送一个异步请求,请求完成后,结果会显示在输入框中。 面试题题目 页面上有一个输入框,两个按钮,A按钮和B按钮,点击A或者B分别会发送一个异步请求,请求完成后,结果会显示在输入框中。 题目要求,用户随机点击A和B多次,要求输入框显示结果时,按照用户点击的顺序显示,举例: 用户点击了一次A,然后点击一次B,又点击一次A,输...

    Heier 评论0 收藏0
  • 一道多线程面试引起自我救赎

    摘要:重温一个面试题内容数组内容为数组内容为个英文字母,使用两个线程分别输入两个数组,打印内容为这样的规律提取一下核心内容,去除次要内容两个线程需要交替执行,打印数字的线程需要先执行,数组打印完毕后线程需要结束。 一道多线程面试题引起的自我救赎 近日去一个知名互联网企业参加面试,之前准备多多信心满满,但是面试一开始就是一道不起眼的编程题 数组A内容为 1,2,3,4...52 ,数组B内容...

    BaronZhang 评论0 收藏0
  • 一道面试引发思考

    摘要:下面我们来使用面向对象类图这里就不再画了首先面试题中所提到的我们都可以看成类,比如停车场是一个类吧,它里面的车位是一个类吧,摄像头,屏幕。。。 以下是某场的一道面试题(大概): 1、一个停车场,车辆入场时,摄像头记录下车辆信息2、屏幕上显示所接收的车辆的信息情况(车牌号)以及各层车位的车位余量3、停车场一共四层车位,其中的三层都为普通车位,还有一层为特殊车位(体现在停车计费价格上面的不...

    Apollo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<