展开

关键词

Shell 脚本避坑指南(一)

偶尔也会有人把 Shell Terminal(终端)混淆,本文关系不大,暂且略过。 如果你能解释清楚上面两段代码输出结果的话, 那大概你可以跳过这篇文章后续内容了。 我先来分解下这段代码中涉及到主要知识点。 变量声明 变量声明有很多种办法, 但是其行为各有不同。 (MoeLove)➜ ~ declare -i bar=1+1 (MoeLove)➜ ~ echo $bar 2 但要注意是,增加整数属性后,如果将字符串赋值给它,则会出现解析失败情况,即:将值设置为 expr 2 \< 1 0 bc 命令 按定义来说,bc 其实是一种支持任意精度可交互执行计算语言。 这种方式不够高效。 这里介绍一种比较直观,也比较方便用来调试 shell 代码办法。以下是一段示例 shell 代码。 (MoeLove)➜ ~ cat compare.sh #!

13430

Redlock(redis分布式锁)原理分析

;并且在多节点中锁设计,及多节点同时崩溃等各种意外情况有自己独特设计方法; 博客或者官方文档相关概念: 1.TTL:Time To Live;只 redis key 过期时间或有效生存时间 2 注意点(Safety arguments): 1.先假设client获取所有实例,所有实例包含相同key过期时间(TTL) ,每个实例set命令时间不同导致不能同时过期,第一个set命令之前是T1 ,最后一个set命令后为T2,则client有效获取锁最小时间为TTL-(T2-T1)-时钟漂移; 2.对于以N/2+ 1(也就是一半以 上)方式判断获取锁成功,是因为如果小于一半判断为成功的话, ;否则无效 系统有活性三个特征 1.能够自动释放锁 2.在获取锁失败(不到一半以上),或任务完成后 能够自动释放锁,不用等到其自动过期 3.在client重试获取哦锁前(第一次失败到第二次重试时间间隔 所以在锁完全有效性能方面要有所取舍; 3.有效解决既保证锁完全有效性及性能高效及即使断电情况方法是redis同步到磁盘方式保持默认每秒,在redis无论因为什么原因停掉后要等待TTL时间后再重启

3.9K31
  • 广告
    关闭

    什么是世界上最好的编程语言?丨云托管征文活动

    代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Redlock(redis分布式锁)原理分析

    ;并且在多节点中锁设计,及多节点同时崩溃等各种意外情况有自己独特设计方法; 博客或者官方文档相关概念: 1.TTL:Time To Live;只 redis key 过期时间或有效生存时间 2 注意点(Safety arguments): 1.先假设client获取所有实例,所有实例包含相同key过期时间(TTL) ,每个实例set命令时间不同导致不能同时过期,第一个set命令之前是T1 ,最后一个set命令后为T2,则client有效获取锁最小时间为TTL-(T2-T1)-时钟漂移; 2.对于以N/2+ 1(也就是一半以 上)方式判断获取锁成功,是因为如果小于一半判断为成功的话, ;否则无效 系统有活性三个特征 1.能够自动释放锁 2.在获取锁失败(不到一半以上),或任务完成后 能够自动释放锁,不用等到其自动过期 3.在client重试获取哦锁前(第一次失败到第二次重试时间间隔 所以在锁完全有效性能方面要有所取舍;  3.有效解决既保证锁完全有效性及性能高效及即使断电情况方法是redis同步到磁盘方式保持默认每秒,在redis无论因为什么原因停掉后要等待TTL时间后再重启

    1.4K01

    SAP FICO里校验替代

    SAP校验是在系统输入数据按照规则设定检验是否正确,可以按抬头、行项目或完全凭证来判断,然后根据Validation设置消息类型决定凭证是否允许保存(取消、错误、警告、信息),通过事物码OB28 校验步骤: 1、事务代码SE38,将程序 RGGBR000复制为ZRGGBR000 2、事务代码GCX2,维护应用区域GBLR退出程序ZRGGBR000 3、事务代码GGB0,维护有效性验证。 替代步骤: 1、事务代码SE38,将程序 RGGBR000复制为ZRGGBR000 2、事务代码GCX2,维护应用区域GBLS退出程序ZRGGBR000 3、事务代码GGB1,维护替代。 ,直接写入替换值,可写出口程序. 4)替代可以在用户输入数据时方便地使用 确认与替代操作 最后记住激活替代GGB4/OBBH OKB9默认设置优先权大于替代 GGB1,替代优先权大于手工输入 ? 2. 尝试你需要替代字段是否可以在调用点1 抬头或2 行项目实现。 3.

    64710

    Form 表单在数栈应用(上): 校验篇

    二、什么是 Form 相信大家在日常开发中已经 Form 表单使用已非常精通了,非常值得一提是,可能大家“Form定义是什么?什么时候我们会选择用 form ?”这个问题往往回答不好。 if (value.length <= 2) { callback('长度至少大于2') } if (value ! API 回顾如下: 示例场景1: (标签引擎项目) 场景描述:表单在第一次自定义校验时失败报错,经排查为在校验时刻账号权限不足,此时我们给予该用户应该具备权限(此时弹窗未关闭),再次点击确定发现并无效果 问题分析:从 antd 使用角度来讲,有域值错误时不应当再继续进行后续操作,存在这种极限情况,问题是由于自定义校验结果产生,而自定义校验是存在时效性,所以此时我们应该让自定义校验具有准确性,使用 业务处理逻辑 ... **/ }) }) } 虽然问题是解决了,确实从上到下执行了 form 校验,仔细看代码其实是存在先后顺序,相当于是先 levelForm

    10020

    Form 表单在数栈应用(上): 校验篇

    二、什么是 Form 相信大家在日常开发中已经 Form 表单使用已非常精通了,非常值得一提是,可能大家“Form定义是什么?什么时候我们会选择用 form ?”这个问题往往回答不好。 if (value.length <= 2) { callback('长度至少大于2') } if (value ! API 回顾如下: 示例场景1: (标签引擎项目) 场景描述:表单在第一次自定义校验时失败报错,经排查为在校验时刻账号权限不足,此时我们给予该用户应该具备权限(此时弹窗未关闭),再次点击确定发现并无效果 问题分析:从 antd 使用角度来讲,有域值错误时不应当再继续进行后续操作,存在这种极限情况,问题是由于自定义校验结果产生,而自定义校验是存在时效性,所以此时我们应该让自定义校验具有准确性,使用 业务处理逻辑 ... **/ }) }) } 虽然问题是解决了,确实从上到下执行了 form 校验,仔细看代码其实是存在先后顺序,相当于是先 levelForm

    9620

    决策树原理与应用:C5.0

    分类预测指通过向现有数据学习,使模型具备未来新数据预测能力。对于分类预测有这样几个重要,一是模型使用方法是归纳提炼,而不是演绎。 这样,分枝准则涉及到两方面问题:1、如果从众多输入变量中选择最佳分组变量;2、如果从分组变量众多取值中找到最佳分割点。 可见随着决策树生长样本数量不断减少,越深层处节点所体现数据特征就越个性化,可能出现如上推理规则:“年收入大于50000元且年龄大于50岁且姓名叫张三的人购买了产品”。 它认为: 1、信息传递由信源、信道信宿组成; 2、传递系统存在于一个随机干扰环境中,因此传递系统信息传递是随机误差。 你无法判定样本分到哪个组中去,C5.0处理是将其分到所有组中去。其权重不再为1,而为此组样本数占总样本数比例。

    2.2K60

    浏览器 HTTP 协议缓存机制详解

    最近在准备优化日志请求时遇到了一些令人疑惑问题,比如为什么响应头里出现了两个 cache control、为什么明明设置了 no cache 还是发请求,为什么多次访问时有时请求里带了 etag,有时又没有带 1、缓存分类 缓存分为服务端侧(server side,比如 Nginx、Apache)客户端侧(client side,比如 web browser)。 Private指示对于单个用户整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户部分响应消息,响应消息对于其他用户请求无效。 如果某些文件会被定期生成,当有时内容并没有任何变化,Last-Modified改变了,导致文件没法使用缓存 有可能存在服务器没有准确获取文件修改时间,或者与代理服务器时间不一致等情形 Etag是服务器自动生成或者由开发者生成对应资源在服务器端唯一标识符 3、用户行为与缓存 浏览器缓存行为还有用户行为有关,如果大家 强制刷新(Ctrl + F5) 还有印象的话应该能立刻明白我意思~ 用户操作 Expires/Cache-Control Last-Modified

    72650

    HTTP 返回状态值详解

    1xx:请求收到,继续处理 2xx:操作成功收到,分析、接受 3xx:完成请求必须进一步处理 4xx:请求包含一个错误语法或不能完成 5xx:服务器执行一个完全有效请求失败 1xx:请求收到,继续处理 代码与响应 GET  HEAD 请求 301 代码类似,会自动将请求者转到不同位置,您不应使用代码来告诉 Googlebot 某个网页或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引 303(查看其他位置)请求者应当不同位置使用单独 GET 请求来检索响应时,服务器返回代码对于除 HEAD 之外所有请求,服务器会自动转到其他位置。    代码与响应 GET  HEAD 请求 301 代码类似,会自动将请求者转到不同位置,您不应使用代码来告诉 Googlebot 某个页面或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引 404(未找到)服务器找不到请求网页。例如,对于服务器上不存在网页经常会返回代码

    79130

    【模型解读】resnet中残差连接,你确定真的看懂了?

    关于LSTM相关知识,大家可以去其他地方补。 在该文章中,研究者没有使用特殊初始化方法等,也能够训练上千层网络。为什么这篇文章没有resnet火呢? 总之,为我们所知道就是下面的式子 y = H(x,WH) + X,所谓残差连接,skip connection。 2为什么要skip connect 那为什么要这么做呢? G梯度 = (1.2-1.1)/1.1 而残差网络F梯度 = (0.2-0.1)/0.1 因为两者各自是G参数F参数进行更新,可以看出这一点变化F影响远远大于G,说明引入残差后映射输出变化更敏感 文【3研究直接表明训练深度神经网络失败原因并不是梯度消失,而是权重矩阵退化,所以这是直接从源头上挖了根? ? 第2种(图b),输入对称权重矩阵,那输出W一样不具备这两部分鉴别能力,添加残差连接(蓝色部分)可打破对称性。第3种(图c)是图b变种,不再说明。

    1K20

    看点信息流Go后台单元测试有效性提升

    |导语编写了大量单元测试,覆盖率稳定性提升同时,忽略了单测目的性。我们无法衡量这些单测用例是否可以在问题发生时候真正起到作用。 背景 为什么要评估测试用例有效性? 基于故障复盘模式成本太高,单测被认为是一种形式,无法有效起到作用。我们希望能够主动创造问题来评估测试用例有效性,并可以根据发现问题改进我们单测用例。 Case1: ? ? Case2: ? Case3: ? ? Case4: ? Case5: ? 7. 赋值语句 变异体出现在赋值语句中,断言并未包含部分。 解决方法:增加部分断言 ? 9.边界值问题 变异体出现在边界值位置,测试用例数值随意,未使用边界值设置。 截止目前,变异测试信息流后台Go项目单测质量有效性有明显提升效果。

    65630

    WAF原理及其使用说明

    (1)利用正则表达式匹配回溯之正则表达式匹配原理:NFA 正则表达式:(a|b)*abb对应NFA,匹配算法需要尝试每一条路径,直到找到一条匹配路径。尝试所有路径失败则匹配失败。 *from :正则只关注‘Select id,namefrom’, 忽略了上下文信息。在做注入判断时,输入进行片面的理解,导致误报 Improved : 整个输入作为一个整体,尝试理解意图。 基于语义检测WAF(抽象攻击语义): 输入是否有效代码 执行了什么动作 动作是否有危害 基于语义检测WAF—实现: 用户输入->词法分析->语法分析->攻击语义检测->攻击语义抽象 基于语义检测WAF —优缺点 优点: 运营成本低,高准确率,低漏报 缺点: 应急响应慢,语义抽象依赖人,开发成本很高算法优化; 基于统计机器学习WAF—异常模型 思路: 1.正常请求总是相似;2.异常各有各不同 优点 攻击语义深度学习网络 用户输入 -> 深度学习攻击语义检测模型 攻击语义深度学习网络? 为什么深度学习、RNN: • 深度学习可通过学习一种深层非线性网络结构,实现攻击语义逼近。

    53410

    论文阅读: RetinaNet

    众所周知,detector主要分为以下两大门派: - one stage系 two stage系 代表性算法 YOLOv1、SSD、YOLOv2、YOLOv3 R-CNN、SPPNet、Fast R-CNN 那为什么one-stage系无法避免该问题呢? 因为one stage系detector直接在首波生成“类别极不平衡”bbox中就进行难度极大细分类,意图直接输出bbox标签(分类结果)。 而原有交叉熵损失(CE)作为分类任务损失函数,无法抗衡“类别极不平衡”,容易导致分类器训练失败。因此,one-stage detector虽然保住了检测速度,丧失了检测精度。 文章也对于 γγ\gamma 取值做了一番实验: ? 在实验中,发现 γ=2,α=0.25γ=2,α=0.25\gamma = 2,\alpha = 0.25 取值组合效果最好。 虽然看起来只是一个公式(冰山一角),其实是来源于FAIR对于类别不平衡根本原因深刻洞察分析(海平面下部分)。 指出问题意义远大于解决问题。

    1.3K30

    单元测试两三问

    而纯粹方法级别单元测试,在我们看来性价比并不高(以笔者实践案例来看,测试开发代码比约为3 : 1),如果我们将单元测试概念更加泛化,我们可以做到更加有效测试,这里有效包含两部分:一是有效率,二是有效果 单测意识缺失 那么,为什么开发同学不做单元测试呢?是上文提及一样,因为自己代码已经有足够信心么?又或者,是因为并没有做单元测试自驱力呢? 确实已有项目的改造并非朝夕事情,建议可以从四方面逐步来实现:1)与历史功能相比,优先增量代码进行单元测试编写,保证新加入代码都能得到验证;2对于新需求实现过程修改旧模块代码部分,进行单元测试编写 没有任何断言验证用例永远不会失败,但也没有任何意义,每一个单元测试,必定带有明确验证目的,其输入与断言都应该是明确可预期。 这部分代码实现自动化成本会远大于发现问题收益,建议不进行覆盖。

    65560

    PAT 1043 Is It a Binary Search Tree (25分) 由前序遍历得到二叉搜索树后序遍历

    这里为什么只需要前序遍历结果就可以得到后序遍历结果? 思路分析 你可以选择用给出输入构造出一棵二叉搜索树,然后再这棵树进行前序遍历,判断得到结果是否输入一致,如果不一致,那就输出 NO,如果一致就输出这这棵树后序遍历结果。 ,扫描前序序列,遇到比根小就i++,会停在9位置; j从右往左,扫描前序序列,遇到比根大于或等于就j--,最后会停在7位置 这样一次扫描后,应该满足 j + 1 == i,对于每一个二叉搜索树前序遍历都应该满足这个特点 上面的过程是针对于输入序列当作二叉搜索树前序遍历进行,如果要把输入序列当作镜像树前序遍历序列呢? = j + 1) return; // 左子树执行操作 GetPost(root + 1, j); // 右子树执行操作 GetPost(i, tail);

    26610

    为什么机器学习算法难以优化?一文详解算法优化内部机制

    Jax 中代码如下: def loss(θ): return loss_1(θ) + loss_2(θ) loss_derivative = grad(loss) for gradient_step α,并运行了以下代码: def loss(θ, α): return loss_1(θ) + α*loss_2(θ) loss_derivative = grad(loss) for gradient_step 为什么这种方法有时有效,有时无法提供可调参数?为此,我们需要更深入地研究一下以下两个动图之间差异。它们都是针对相同问题,使用相同损失函数生成,并且正在使用相同优化方法来优化这些损失。 但是,当帕累托前沿为凹形时,该方法似乎不再有效为什么凹帕累托前沿面的梯度下降优化会失败? 通过查看第三个维度中总体损失,可以发现实际上是用梯度下降优化了损失。 研究中往往是运行一个完整优化过程,然后确定是否满意,再超参数进行微调。重复优化循环,直到性能满意为止。

    30730

    分布式锁系列--04关于分布式锁选型分析02

    3.计算整个获取锁过程总共消耗了多长时间,计算方法是用当前时间:t2,减去第1步记录时间:t1(即:t = t2 - t1)。 即:T = T - t. 5.如果最终获取锁失败了(可能由于获取到锁Redis节点个数少于N/2+1,或者整个获取锁过程消耗时间超过了锁最初有效时间),那么客户端应该立即向所有Redis节点发起释放锁操作 设想发生了如下事件序列: 1.客户端1成功锁住了A, B, C,获取锁成功(DE没有锁住)。 2.节点C崩溃重启了,客户端1在C上加锁没有持久化下来,丢失了。 3.节点C重启后,客户端2锁住了C, D, E,获取锁成功。 这样,客户端1客户端2同时获得了锁(针对同一资源)。这个问题,redsi持久化有关。 这在客户端看来,获取锁请求由于超时而失败了,但在Redis这边看来,加锁已经成功了。因此,释放锁时候,客户端也应该当时获取锁失败那些Redis节点同样发起请求。

    23330

    改善单元测试新方法|洞见

    比如我曾经看过有人在写计算器kata程序时候,将其中一个测试命名为“return 3 when add 1 and 2”,这样命名其实掩盖了测试用例背后真实意图——传入两个整型参数,调用add方法之后得到结果应该是两者之和 整个分析构造过程中,都没有涉及具体数据,这样会强制我们揣摩输入数据可能模样,而且也能避免测试意图被掩盖掉——正如前面所说,return 3 when add 1 and 2并不代表什么,return 举个例子,假如我们有一个接收自然数并直接返回这个参数方法identity-nat,那么对于输入参数而言,全体自然数都互为等价类,其中一个有效等价类可以是自然数1;假定入参被限定在整数范围,我们很容易找到一个无效等价类 这个测试尝试100组生成自然数(nat-int?)进行测试,首次运行就发现代码发生过变动。失败数据是0,而且还给出了最小失败集[0]。 我们常常会发现,在写完上组测试用例实现之后,无需任何改动,下组测试照常能运行通过。换句话说,实现代码可能做了多余事情而我们浑然不知。

    37350

    分布式锁系列--04关于分布式锁选型分析02-Redlock实现原理

    3.计算整个获取锁过程总共消耗了多长时间,计算方法是用当前时间:t2,减去第1步记录时间:t1(即:t = t2 - t1)。 即:T = T1 - t. 5.如果最终获取锁失败了(可能由于获取到锁Redis节点个数少于N/2+1,或者整个获取锁过程消耗时间超过了锁最初有效时间),那么客户端应该立即向所有Redis节点发起释放锁操作 设想发生了如下事件序列: 1.客户端1成功锁住了A, B, C,获取锁成功(DE没有锁住)。 2.节点C崩溃重启了,客户端1在C上加锁没有持久化下来,丢失了。 3.节点C重启后,客户端2锁住了C, D, E,获取锁成功。 这样,客户端1客户端2同时获得了锁(针对同一资源)。这个问题,redsi持久化有关。 这在客户端看来,获取锁请求由于超时而失败了,但在Redis这边看来,加锁已经成功了。因此,释放锁时候,客户端也应该当时获取锁失败那些Redis节点同样发起请求。

    6110

    优化 Solidity 中百分数比例运算

    译文出自:登链翻译计划[1] 译者:Johnathan[2] 校对: Tiny熊[3] 本文是 Solidity 中进行数学运算系列文章中第三篇,这篇文章主题是: 百分数比例运算. ? 使用 SafeMath 也并啥用,因为它可能导致即使最终计算结果在 256 位以内,交易失败。在上一篇文章中,我们称这种情况为“假溢出”(phantom overflow)。 对于较小 ,当 时,这没有区别,但是对于较大 会产生错误结果。所以第一个问题是: 我们该如何避免溢出? 思路:不让它溢出。 在此实现中,假溢出仍可能存在,仅在最后一项b * d / z中。但是,只要保证 ,代码就没问题,因为 都小于 ,这保证了 可以容纳 256 位。 以下代码基于Remco Bloemen[5]提出惊人数学发现,如果您喜欢代码,请为他“数学”文章鼓掌 ?。

    61420

    相关产品

    • 移动应用安全

      移动应用安全

      移动应用(APP)安全为用户提供移动应用全生命周期的一站式安全解决方案。涵盖移动应用加固、安全测评、安全组件等服务……

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭

      扫码关注云+社区

      领取腾讯云代金券