kangbb

kangbb 查看完整档案

广州编辑中山大学  |  软件工程 编辑  |  填写所在公司/组织 kangblog.top 编辑
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

kangbb 关注了问题 · 2020-01-31

贪心算法的证明(拟阵)

贪心算法的证明(拟阵)

根据算法导论(引理16.8和16.9):

--

16.8 令M={S,I)是一个拟阵。如果x是S中一个元素,而且是S的某个独立子集A的一个扩展,则x是ф的一个扩展。

16.9 令M={S,I)是一个拟阵。如果x是S中一个元素,而且它不是ф的一个扩展, 那么它也不是S的任何独立子集A的扩展。

--

可是我们根据拟阵的“遗传特性”,可以知道这样的x是不存在。那么这个引理的意义在哪?

关注 1 回答 0

kangbb 提出了问题 · 2020-01-31

贪心算法的证明(拟阵)

贪心算法的证明(拟阵)

根据算法导论(引理16.8和16.9):

--

16.8 令M={S,I)是一个拟阵。如果x是S中一个元素,而且是S的某个独立子集A的一个扩展,则x是ф的一个扩展。

16.9 令M={S,I)是一个拟阵。如果x是S中一个元素,而且它不是ф的一个扩展, 那么它也不是S的任何独立子集A的扩展。

--

可是我们根据拟阵的“遗传特性”,可以知道这样的x是不存在。那么这个引理的意义在哪?

关注 1 回答 0

kangbb 赞了文章 · 2019-09-18

react-native实现定时任务

react-native中有时候需要定时执行一些后台任务,比如定时发送消息,定时统计数据等.这个时候就需要使用另外注册一个视图来做这些东西了,不然在同步任务中做这些任务,一旦任务比较耗时就会卡住后面的进程,甚至导致后面的进程不再渲染页面.

注册另外一个入口

在合适的位置:页面启动或者某个需要的时候,注册并启动我们的另外一个视图.这个时候其实相当于启动了另外一个线程.

这里注意一下,这个视图里的东西千万不要直接刷新UI相关的数据,所有的内容都应该是内存相关的.

AppRegistry.registerRunnable('RunableTask', TaskRun)

AppRegistry.runApplication('RunableTask', {});

启动定时器

调用init方法,启动我们自己的定时器刷新方法,这里我暂时定义1秒刷新一次,低于1秒间隔的定时器将不在执行.这里也是为了防止部分人设置低间隔的定时器导致APP崩溃.

这里使用react-native内部提供的requestAnimationFrame方法,每次刷新的时候先判断一次是否可以执行任务.

const tasks = new Map();
let currDate = Date.now();
/**
 * 初始化
 */
exports.init = function () {
    global.requestAnimationFrame(run);
}
/**
 * 执行,每秒执行一次
 * 保证秒级工作正确
 */
function run() {
    const now = Date.now();
    if (now > currDate + 1000) {
        currDate = now;
        tasks.forEach(item => item.preStart(now));
    }
    global.requestAnimationFrame(run);
}

任务基类

所有的任务都需要继承这个基类,定时器运行的时候也会通过基类内部的方法去判断是否需要执行方法.这里对外实现了一个timer是时间间隔,单位是毫秒,还有一个start方法用来给每个任务使用的.

通过每次执行preStart方法判断下次执行的时间到了没有来决定是否执行自定义方法.如果到了同时还要计算下一次的时间并存好.

/**
 * 基础工作类
 */
class Jobs {
    name = "base";
    /**
     * 下次执行时间戳
     */
    nextTime = 0;
    /**
     * 重载:时间间隔
     */
    timer = 0;
    /**
     * 预启动
     */
    preStart(now) {
        if (this.timer < 1000) return;
        if (this.nextTime > now) return;
        if (this.nextTime === 0) return this.nextTime = now + this.timer;
        this.nextTime += this.timer;
        this.start(now);
    }
    /**
     * 重载:执行一次设置的方法
     */
    start() { }
}

实现并加入

将设置好的任务加入全局的map示例中,运行的时候会从这个示例中取需要的任务出来.

/**
 * 添加一个工作
 * @param {*} name  名称
 * @param {*} time  时间
 * @param {*} fn    执行函数
 */
const addJob = (name, Job) => tasks.set(name, new Job())

exports.addJob = addJob;

/**
 * 取消任务
 * @param {*} name 
 */
const cancelJob = name => tasks.delete(name);

exports.cancelJob = cancelJob;

测试任务

这里模拟一次定时发送统计消息.

另外一个地方实现了将每次需要发送的消息存入内存中,这里只负责取出需要发送的消息.

设置3秒执行一次发送任务,如果数量比较少就修改定时任务的间隔,后面的任务延迟发送.

如果后台接收一次大量的数据,也可以将多次统计合并为一次统计,请求的个数会更少一些.

/**
 * 定时触发统计方法
 */
class TrackJob extends Jobs {
    timer = 3000;
    start() {
        let list = TackList();
        if (list.length > 10) {
            this.timer = 3000;
        } else {
            this.timer = 5000;
        }
        list.forEach(item => {
            request.trackData(item.url, item.data);
            log("埋点事件", item.data);
        })
    }
}
addJob("Track", TrackJob);

更多扩展

在目前的基础上扩展时间间隔的设定方式,实现固定时间日期执行任务.这里可能需要app一直活着才能保证.

加入执行次数,执行超过一定的此时就不再执行.

文章地址

查看原文

赞 2 收藏 1 评论 0

kangbb 提出了问题 · 2019-09-09

react native PixelRatio.fontscale 设置字体缩放

Android手机可以字体缩放,为了避免排版错误,需要使得系统设置字体缩放后,app字体仍旧维持原来大小。关于 PixelRatio.fontscale 官方描述:

Returns the scaling factor for font sizes....If a font scale is not set, this returns the device pixel ratio.

那么我该如何指导返回的是缩放比例还是像素密度比例?

关注 2 回答 1

kangbb 回答了问题 · 2018-05-22

解决递归函数如何返回正确值?

你的递归终止条件在哪里呢?

--------------------更新------------------------
请您先仔细了解一下forEach函数的用法,return不会终止这个函数的,223.

关注 4 回答 3

kangbb 回答了问题 · 2018-05-22

问个问题 虽然有点白痴 但还是要问

二楼的回答正确,确实要注册认证公众号

关注 4 回答 5

kangbb 回答了问题 · 2018-05-22

element-ui中树形控件子节点的右键菜单怎么写出来,文档的event看不懂

右键菜单,element-ui自带的事件不能完成你的要求,建议阅读一下源代码,把源代码直接搬进自己的项目进行修改。或者,自己实现一下树形菜单,我有一个简陋版本的,你可以参考一下:
https://github.com/kangbb/tree

关注 2 回答 1

kangbb 回答了问题 · 2018-05-22

解决js不能用import {}来获取一个对象的属性吗?

阮一峰老师的ES6教程了解一下,知识讲解的挺详细的,也包括了import, export的用法:
Module 的语法

关注 5 回答 6

kangbb 赞了回答 · 2018-05-19

关于vue extend

关注 2 回答 2

kangbb 回答了问题 · 2018-05-19

vue 组件数量效能问题

可以去看看Vue的生命周期。实际上,所有的组件都会挂载Mount,渲染,生成虚拟的DOM节点。组件的编译、组件之间数据的传递,自然需要时间,所以,能够在一个组件中实现的功能,尽量不要分开。

关注 3 回答 2

认证与成就

  • 获得 25 次点赞
  • 获得 9 枚徽章 获得 1 枚金徽章, 获得 1 枚银徽章, 获得 7 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

  • tree

    一个简单的文件树

注册于 2018-05-09
个人主页被 1k 人浏览