GT

elastic-job失效转移异常

帅比萌擦擦* 提交于 2020-03-21 03:20:23
3 月,跳不动了?>>> 背景 公司选用elasticjob作为分布式任务调度工具,版本2.1.5,其中有一个任务对应机器两台,A和B,任务总分片数是4,A对应分片0、1,B对应分片2、3。任务每晚23:30:00执行,T日计算数据记录日期T+1,供T+1日使用。 突然有一天,A机器在22:24运行执行起分片2任务,执行完分片2之后又执行了分片3, 注意分片2、3本该是机器B所用的分片 ,这两点就很奇怪了,异常的时间执行了不属于自己的分片,而且是一个一个执行。下方是日志中记录的task id // 异常的task id,很清楚的看到分片是@2@,机器A在执行 "taskId":"jobname@-@2@-@READY@-@A机器ip@-@4927" // 正常的task id,分片号@2,3@,ip对应的是机器B "taskId":"jobname@-@2,3@-@READY@-@B机器ip@-@12384" 经过分析,基本断定是进任务失效转移逻辑了。但是,为什么任务失效转移呢?任务不在执行的时间点,而且也没有执行中,不可能出现这个情况。 经过回忆,22:23的时候,开发对机器B做了一次内存dump,与A机器启动相差一分钟,可能问题出在这里了。难道对B机器做dump操作导致B短暂与ZK注册中心断开了吗,导致误以为服务器宕机?带着问题,我们又对B做了一次dump,很快

Dockerfile使用教程

浪子不回头ぞ 提交于 2020-03-21 03:18:36
3 月,跳不动了?>>> 一、什么是Dockerfile Dockerfile是创建自定义Docker镜像的描述文件,我们可以在Dockerfile中写出一条条指令来控制镜像需要执行什么操作,下面具体讲讲Dockerfile中的指令。 二、Dockerfile四大功能分区 1. 基础镜像 声明自定义镜像的基础镜像 FROM centos 2. 描述信息 此处可以声明镜像的负责人、版本、构建时间、描述等一系列信息,此处可以声明任何信息 LABEL maintainer=tingtiandadi@360.cn LABEL version="1.0" LABEL date="2020/03/08" LABEL description="RPM软件包制作" 3. 安装镜像执行指令 3.1 USER 执行Dockerfile中shell指令时指定的用户,包括:RUN、CMD、ENTRYPOINT USER <user>[:<usergroup>] USER root 3.2 EXPOSE 指定容器运行时的服务端口 EXPOSE 80 443 3.3 WORKDIR 为Dockerfile中执行的指令设置工作目录,包括:ADD、COPY、RUN、CMD、ENTRYPOINT WORKDIR /root 3.4 ADD 拷贝文件/目录到镜像中 ADD <src>...<dest> ADD

Cocos2xd__用户事件

梦想的初衷 提交于 2020-03-21 03:17:59
3 月,跳不动了?>>> 事件类 Event:class Event : public Ref 其子类:    1. EventTouch: 触摸事件    2. EventMouse: 鼠标事件    3. EventKeyboard: 键盘事件    4. EventAcceleration: 加速度事件    5. EventCustom: 自定义事件 事件源:   精灵、层、菜单等节点对象。 事件处理者:EventListener   class EventListener : public Ref   其子类:   1. EventListenerTouchOneByOne: 单点触摸事件监听器   1. EventListenerTouchAllAtOnce: 多点触摸事件监听器    2. EventListenerMouse: 鼠标事件监听器    3. EventListenerKeyboard: 键盘事件监听器    4. EventListenerAcceleration: 加速度事件监听器    5. EventListenerCustom: 自定义事件监听器 可以看处事件监听器与事件具有对应关系。即键盘事件只能由键盘监听器处理。 事件分发器 EventDispatcher 负责注册、注销监听器和事件分发。 采用的单例设计。 可以使用

3种方法实现CSS隐藏滚动条并可以滚动内容

☆樱花仙子☆ 提交于 2020-03-21 03:01:21
3 月,跳不动了?>>> 隐藏滚动条的同时还需要支持滚动,我们经常在前端开发中遇到这种情况,最容易想到的是加一个iscroll插件,但其实现在CSS也可以实现这个功能,我已经在很多地方使用了,下面一起看看这三种方法。 方法1:计算滚动条宽度并隐藏起来 在本站的侧栏,你可以看到前端日报的那块内容并没有滚动条,但鼠标移上去却可以滚动内容。这是什么技术呢? 其实我只是把滚动条通过定位把它隐藏了起来。 演示 下面给一个简化版的代码· < div class = "outer-container" > < div class = "inner-container" > ...... </ div > </ div > .outer-container{ width: 360px; height: 200px; position: relative; overflow: hidden; } .inner-container{ position: absolute; left: 0; top: 0; right: -17px; bottom: 0; overflow-x: hidden; overflow-y: scroll; } 复制代码 这个代码巧妙的向右移动了17个像素,刚好等于滚动条的宽度。这个值是我手动调试得来的。在chrome和IE没发现问题。 方法2:使用三个容器包围起来

带你深度解锁Webpack系列(优化篇)

旧时模样 提交于 2020-03-21 02:53:34
3 月,跳不动了?>>> 前两篇文章中,主要是讲解了 Webpack 的配置,但是随着项目越来越大,构建速度可能会越来越慢,构建出来的js的体积也越来越大,此时就需要对 Webpack 的配置进行优化。 本文罗列出了十多种优化方式,大家可以结合自己的项目,选择适当的方式进行优化。这些 Webpack 插件的源码我大多也没有看过,主要是结合 Webpack 官方文档以及项目实践,并且花了大量的时间验证后输出了本文,如果文中有错误的地方,欢迎在评论区指正。 鉴于前端技术变更迅速,祭出本篇文章基于 Webpack 的版本号: ├── webpack@4.41.5 └── webpack-cli@3.3.10 复制代码 本文对应的项目地址(编写本文时使用)供参考: github.com/YvetteLau/w… 量化 有时,我们以为的优化是负优化,这时,如果有一个量化的指标可以看出前后对比,那将会是再好不过的一件事。 speed-measure-webpack-plugin 插件可以测量各个插件和 loader 所花费的时间,使用之后,构建时,会得到类似下面这样的信息: 对比前后的信息,来确定优化的效果。 speed-measure-webpack-plugin 的使用很简单,可以直接用其来包裹 Webpack 的配置: //webpack.config.js const

书到用时方恨少,一大波JS开发工具函数来了

試著忘記壹切 提交于 2020-03-21 02:51:38
3 月,跳不动了?>>> 前言 在我们日常开发的时候,可能会遇到各种各样的需求,但是自己一时半会儿可能找不到合适的办法去解决。书到用时方恨少,下面的这些JavaScript的工具函数可能就会派上大用场了,我们可以进行复用,提高我们的工作效率。 我把下面的方法都大致分了个类放在了我的 GitHub 上。大家可以 clone 下来直接使用,也可以在需要用到时在里面去查找,善用 ctrl+F 。 这个仓库也会持更新的,如果里面没有,但是需要用到的工具函数,大家也可以在 issues 提出来,说不定就帮到了别人哟~ 正则校验check工具函数 这里的正则表达式主要参考了 any-rule 。 验证不能包含字母 /** * @param { string } value */ export const isNoWord = value => /^[^A-Za-z]*$/g.test(value); 复制代码 验证中文和数字 /** * @param { string } value */ export const isCHNAndEN = value => /^((?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868

分解 Laravel 框架的核心:服务容器(Service Container)

流过昼夜 提交于 2020-03-21 02:44:56
3 月,跳不动了?>>> 原文链接: learnku.com/laravel/t/4… 讨论请前往专业的 Laravel 开发者论坛: learnku.com/Laravel 在理解服务容器之前,我们需要知道什么是容器,从名称上可以解释这一切,因为容器是我们存储东西的地方,当我们需要时我们从那里获取它。下面是代码示例。 class container{ public $bindings =[]; public function bind ( $name , Callable $resource ){ $this ->bindings[ $name ]=resource; } public function make( $name ){ $this ->bindings[ $name ](); } } $container = new container(); $container -> bind ( 'Game' , function (){ return 'Football' ; }); print_r( $container ->make( 'Game' )); //输出 'Football' 复制代码 正如您所看到的,我创建了一个容器类,其中有两个方法 Bind Make 在 bind 方法中将我们的函数注册到一个容器中,然后在 make 方法中调用这个函数。 这是

AML工作原理快速调研

馋奶兔 提交于 2020-03-21 02:30:01
3 月,跳不动了?>>> 前两天邀请人做这个文档的Review: in nek:评审邀请:Linux内核软件架构基础 ,有读者告诉我我对AML的理解有误。我找我们做BIOS的兄弟确认了一把,把逻辑链放在这里。 先定义一下问题:ACPI是一种定义BIOS和OS之间接口的方法。和其他一些方法,比如Device Tree(简称DTS),不同,ACPI支持函数接口,也就是说,OS可以通过“调用”接口给出的函数实现功能。这种所谓的“调用”,有几种可能: BIOS中给定一个数据结构,整体描述了一个函数,这个函数本身就是CPU的本地汇编。BIOS把整个数据接口传递到OS管理的内存空间,OS直接调用这个空间中的函数。 BIOS中给定一个数据结构,整体描述了一个函数,这个函数本身就是CPU的本地汇编。这个数据结构留在BIOS控制的内存中,传递给OS一个指针,OS远程调用这个指令的地址,完成请求。 BIOS中实现了一个本地函数,然后把这个函数的位置和格式告知OS,OS通过一个统一的接口把函数的标识和请求的参数传递给BIOS,BIOS内部完成调用,然后把结果通知OS。 BIOS给定一个数据结构,整体描述了一个函数,用一种平台无关的格式标识,这个数据结构整体提供给OS,OS上有一个解释器,解释执行这个平台无关的格式,实现对功能的执行。 用图来表达,区别如下: 严格来说,前两个方案没有什么区别,内存这东西

SparkRDD函数详解

雨燕双飞 提交于 2020-03-21 01:46:15
3 月,跳不动了?>>> 1 、 RDD 操作详解 启动spark-shell spark-shell --master spark://hdp-node-01:7077 1.1 基本转换 1) map map是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD。 任何原RDD中的元素在新RDD中都有且只有一个元素与之对应。 举例: scala> val a = sc.parallelize(1 to 9, 3) scala> val b = a.map(x => x*2) scala> a.collect res10: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9) scala> b.collect res11: Array[Int] = Array(2, 4, 6, 8, 10, 12, 14, 16, 18) 上述例子中把原RDD中每个元素都乘以2来产生一个新的RDD。 2) filter filter 是对RDD中的每个元素都执行一个指定的函数来过滤产生一个新的RDD。 任何原RDD中的元素在新RDD中都有且只有一个元素与之对应。 val rdd = sc.parallelize(List(1,2,3,4,5,6)) val filterRdd = rdd.filter(_ > 5) filterRdd.collect(

最简实现Promise,支持异步链式调用(20行)

佐手、 提交于 2020-03-21 01:43:59
3 月,跳不动了?>>> 前言 在面试的时候,经常会有面试官让你实现一个Promise,如果参照A+规范来实现的话,可能面到天黑都结束不了。 说到Promise,我们首先想到的最核心的功能就是异步链式调用,本篇文章就带你用20行代码实现一个可以异步链式调用的Promise。 这个Promise的实现不考虑任何异常情况,只考虑代码最简短,从而便于读者理解核心的异步链式调用原理。 代码 先给代码吧,真就20行。 function Promise ( excutor ) { var self = this self.onResolvedCallback = [] function resolve ( value ) { setTimeout( () => { self.data = value self.onResolvedCallback.forEach( callback => callback(value)) }) } excutor(resolve.bind(self)) } Promise .prototype.then = function ( onResolved ) { var self = this return new Promise ( resolve => { self.onResolvedCallback.push( function ( ) { var