zoukankan      html  css  js  c++  java
  • 记一道笔试题

    去除字符串乱码和 不用循环给数组赋值 自有的时间调度器

    一,用正则表达式来将字符串"I?���love�??�the�?great�?�?wall�in��?beijing"更改为:"I love the Great Wall in Beijing",主要是为了解决编码的问题导致的问题,规律:

    1,乱码只有两种特殊字符分别是'?'和'�';

    2,如果乱码的末尾是'?'则它的下一位字母肯定是大写;

    let str = "I?���love�??�the�?great�?�?wall�in��?beijing";
        str = str.replace(/�/g, '');
        console.log(str);
        strArr = str.split('?');
        for(var i=0;i<strArr.length;i++){
            strArr[i] = strArr[i].charAt(0).toUpperCase()+strArr[i].slice(1);
        }
        strArr = strArr.join(' ');
        console.log(strArr);

    二,不使用类似for,while循环控制语句和js本身自带方法(如:forEach)的情况下,实现将一个空数组[]赋值成[0,******************],范围0-100便可。

    let arr = [];
    let num = 0; 
    function addNum2Arr() {
    	if (num<100) {
    		arr.push(num);
    		num += 4;
    		addNum2Arr();
    	}
    }
    addNum2Arr();
    console.log(arr)
    

      

    三,设计一个自由可灵活配置的时间调度器,有a,b,c,d...很多个需要被调度的方法(方法名称的命名可随意),调度有两种形式,一个是顺序调用(例如调度完a后才能调度b),一个是间隔某个时间进行循环调度。用一个统一的方法进行封装可以实现下列的例子:

    1,可以为5秒后调用a,3秒后调用b,10秒后调用c,d...z方法不执行(不执行的方法可以设计成不传递参数),那么在第14秒的时候开始重新从0秒循环,又变成第一秒后调用a,3秒后调用b,这样循环往复;

    2,每间隔6秒调用一次a,每间隔4秒调用一次b,c...z方法不执行;

    3,第一秒先执行a,3秒后执行b,但是c却是每间隔3秒执行一次,d是每间隔4秒执行一次,a和b是每4秒进行一次循环;

    4,a不执行,b和c每间隔3秒执行一次,d不执行;

    class TimeScheduler {
        constructor() {
            this.events = [];
            this.orderCallStack = [];
            this.ownCallStack = [];
        }
        //添加执行栈函数,orderExec用于区别是顺序调用还是独立调用,注意同一个函数存在顺序调用和独立调用时需要add两次
        add(fn = () => {}, orderExec = false, timeout = 3) {
            let fnc;
            if (orderExec) {
                fnc = () => {
                    setTimeout(() => {
                        fn();
                        this.next();
                    }, timeout * 1000)
                };
            } else {
                fnc = () => {
                    setInterval(() => {
                        fn()
                    }, timeout * 1000)
                };
            }
            this.events.push({
                fnc,
                orderExec
            })
        }
        remove(fnc = () => {}) {
            this.events = this.events.filter(item => item.fnc === fnc);
        }
        clear() { //清除存储数据及清空调用栈
            this.events = [];
            this.orderCallStack.forEach(item => {
                clearTimeout(item.fnc);
            });
            this.ownCallStack.forEach(item => {
                clearInterval(item.fnc);
            });
            this.ownCallStack = [];
            this.orderCallStack = [];
        }
        start() { //开始执行
            this.orderCallStack = this.events.filter(item => !!item.orderExec);
            this.ownCallStack = this.events.filter(item => !item.orderExec);
            this.ownCallStack.forEach(item => item.fnc());
            this.next();
        }
        stop() { //停止执行
            this.orderCallStack.forEach(item => {
                clearTimeout(item.fnc);
            });
            this.ownCallStack.forEach(item => {
                clearInterval(item.fnc);
            });
            this.ownCallStack = [];
            this.orderCallStack = [];
        }
        next() { //顺序调用栈执行函数
            let obj = this.orderCallStack.shift() || {};
            if (obj.fnc) {
                this.orderCallStack.push(obj);
                obj.fnc();
            }
        }
    }
    
    let a = () => {
        console.log("a");
    }
    let b = () => {
        console.log("b");
    }
    let c = () => {
        console.log("c");
    }
    const timeScheduler1 = new TimeScheduler();
    timeScheduler1.add(a, true, 5);
    timeScheduler1.add(b, true, 3);
    timeScheduler1.add(c, true, 10);
    timeScheduler1.start();
    

     参考 https://cloud.tencent.com/developer/article/1637007

  • 相关阅读:
    FOJ2250 不可能弹幕结界
    寻找最大值
    Haybale Guessing
    MG loves string
    Curious Cupid
    Anton and Permutation
    TLE
    Jzzhu and Numbers
    Divisible Group Sums
    The merchant
  • 原文地址:https://www.cnblogs.com/fairy62/p/13110761.html
Copyright © 2011-2022 走看看