bt365体育投注.主頁欢迎您!!

    <acronym id="zvmrr"></acronym>
    <td id="zvmrr"></td>
  • <tr id="zvmrr"><label id="zvmrr"></label></tr>
  • <acronym id="zvmrr"></acronym>
  • BaLaLaLs

    BaLaLaLs 查看完整档案

    贵阳编辑  |  填写毕业院校魔夜网络科技有限公司  |  技术总监 编辑 baidu.com 编辑
    编辑

    软件卸载工程师

    个人动态

    BaLaLaLs 赞了回答 · 3月17日

    解决如何优雅的删除对象中的指定属性?

    要优雅的话,使用 Lodash 的 omit 方法移除不要的属性:

    const object = { 'a': 1, 'b': '2', 'c': 3 };
     
    const result = _.omit(object, ['a', 'c']);
    // => { 'b': '2' }

    或者用 pick 方法只留下需要的属性:

    const object = { 'a': 1, 'b': '2', 'c': 3 };
     
    const result = _.pick(object, ['a', 'c']);
    // => { 'a': 1, 'c': 3 }

    当然如果你不想用库或者喜欢动手的话,自己实现一个 omit 也是可以的,实现方法有很多:

    // 中规中矩式
    const omit = (obj, uselessKeys) =>
       Object.keys(obj).reduce((acc, key) =>
          return uselessKeys.includes(key) ?
            acc : 
            {...acc, [key]: acc[key]}
       }, {});
    
    
    // 投机取巧式
    const omit = (obj, uselessKeys) =>
      uselessKeys.reduce((acc, key) => {
        return {...acc, [key]: undefined}
      }, obj)
    
    
    // 粗暴式
    const omit = (obj, uselessKeys) => {
      uselessKeys.forEach(key => {
        delete obj[key]
      })
      return obj
    }

    最后是特别粗暴的方法:

    delete obj.created_at
    delete obj.deleted_at
    delete obj.updated_at

    希望对你有帮助

    关注 7 回答 6

    BaLaLaLs 提出了问题 · 2月2日

    dubbo apache alibaba 是否兼容

    现在dubbo 有个包一个是apache包名的一个是alibaba包名的,工程中一个工程用 apache 一个工程用 alibaba,注册中心 采用nacos 他们之间能互相调用吗?存在兼容问题吗?

    关注 2 回答 1

    BaLaLaLs 赞了回答 · 1月27日

    发送http请求出现异常,怎样设置重试? 例如出现异常后 间隔30秒 3分钟 3小时 重试三次.

    消息队列确实是ok的,毕竟题主的需求来看无碍乎就是一个循环的重试,重试间隔需要指定,所以用延迟消息队列绝对能够解决问题,消息队列中间件选择很多

    BaLaLaLs提到的rabbitmq确实需要一个插件来做,也可以选择RocketMQ,天生支持延迟消息,当然用redis去模拟一种延迟效果也是可以的

    不过以上方案的选型,感觉需要额外多部署一些东西,假如系统之前并没有这方面的中间件,那可能为了做一个重试方案,显得有点大材小用了,毕竟确实真要实现,简单的循环,加上一些if判断就搞定了(至于占用线程资源倒是小事了),只是说这样的代码比较难看,而且也无法复用

    我记得在Java轮子百宝屋Spring中,有一个工程:Spring Batch,这里面有一个重试的注解@Retryable,去看了一下,这一套API现在已经独立出来,名叫:Spring-Retry

    简单的@Retryable注解配置就可以让一个方法直接具有重试效果(即使我不解释注解属性的含义,也应该能简单看懂重试规则)
    image.png

    执行该方法的效果
    image.png

    可以看到很简单就配置好了一套按照倍数增长间隔时间的重试方案

    当然可以玩出很多效果,题主可以自己探索,但是为了解决题主的问题,我还是提前玩了一下,先说结论:
    我自己反正试过已经有的API还不能支持题主30秒,3分钟,3小时的配置(或许我眼瞎没看到。。。)。毕竟他们之间的倍数没有特定的递增关系,可以看作是直接配置死了几次重试的间隔而已

    由于注解@Retryable的实现重试的方式是按照已有的Spring-Retry配置的策略,所以我们得使用Spring-Retry提供的另一种方式去定制一个重试模版

    先简单介绍一下,@Retryable的实现方式其实是基于一个拦截器的AnnotationAwareRetryOperationsInterceptor,而拦截器里面会去为被注解的方法创建一个RetryTemplate,这个RetryTemplate中包含了注解中的规则以及被注解的方法

    所以定制重试模版的方式其实就是我们自己定义一个RetryTemplate,然后自己定义规则

    先说规则,因为我们只是为了把一列间隔时间直接取出来然后重试,所以我们的规则就很简单,实现类CustomBackOffPolicy(以下截图并不是完整代码)
    image.png

    用一个Queue<Long> intervalQueue的方式简单粗暴的存储间隔时间,在需要取间隔时间直接调用poll方法,取队列首位并删除

    然后我们就可以自定义RetryTemplate,间隔时间分别为1秒,5秒,10秒,其中SimpleRetryPolicySpring-Retry自带的,表示重试策略,参数就是重试次数,这里取的间隔数组长度+1(包括第一次失败,所以这里是4不是3)
    image.png

    然后我们就可以去在需要重试的地方使用RetryTemplate
    image.png

    最后效果
    image.png

    当然当然,说实话哈,Spring-Retry也算是造了一个轮子,但是其实哈仔细去查看一下Spring-Retry的实现模式,在题主的这个需求上,还是while循环然后用Sleep去停,哈哈哈哈,所以我最开始才说担心什么线程的资源占用,这都是小事,毕竟定时器或者什么定时任务这玩意儿,底层不都还是while循环嘛,所以我觉得我都可以给你整一个简要版,弄一个CustomRetryTemplate

    image.png

    然后调用的话也很简单
    image.png

    最终效果也是一样的
    image.png

    所有代码我都放在了github上,稍微有点多,就不在这里发了,可以自取哈

    就酱,( ^_^ )/~~拜拜

    最后再提一嘴,真要使用Spring-Retry,记得把spring-aspects的配置要加上哈,我的pom里是有的
    image.png

    关注 5 回答 4

    BaLaLaLs 回答了问题 · 1月27日

    发送http请求出现异常,怎样设置重试? 例如出现异常后 间隔30秒 3分钟 3小时 重试三次.

    可以用消息队列中间件比如rabbitmq,也可以用redis,看自己的需求使用消息队列各方面的可靠性要好些,看自己选择。rabbitmq有一个插件 rabbitmq_delayed_message_exchange 是专门来干这种事情的。

    关注 5 回答 4

    BaLaLaLs 回答了问题 · 1月22日

    解决HTTP2实现全双工

    http都不能全双工上websocket能解决你这个问题

    关注 3 回答 3

    BaLaLaLs 回答了问题 · 1月22日

    mysql 存储一个json字段,但是这个json对象非常复杂。我不知道如何处理

    这种数据不适合存json类型太复杂了,还不如直接TEXT

    关注 4 回答 3

    BaLaLaLs 回答了问题 · 1月22日

    为什么同一个链接用chrome打开就是下载,用微信打开就是预览,一个pdf文件?

    这个很好理解不同浏览器面对相同的内容做出的行为可能不同,但是我记得chrome pdf是预览的,刚测试了下带后缀的可以预览,可能是网址不带pdf后缀就不预览?

    关注 4 回答 3

    BaLaLaLs 发布了文章 · 2020-08-02

    windwos 下使用wsl 编译c/c++

    原文:http://balalals.cn/archives/w...
    微软前段时间推出了wsl子系统可以在windows中运行linux系统。目前支持的linux发行版有image.png。使用场景是什么呢?个人猜测应该是代替虚拟机和双系统,在没有wsl之前如果是做linux开发装个虚拟机时必须的事。虚拟机安装配置比较麻烦wsl要比虚拟机方便点启动速度也更快。不过在装的时候遇到过几个坑使得使用wsl没有想象中的那么丝滑。再次记录下来以免日后忘记。
    打开微软软件商店搜索wsl 安装ubuntu ,安装完成之后会在开始菜单多出ubuntu图标
    image.png
    这个时候打开是打不开的需要去设置->应用->程序和功能->启用或关闭Windows功能找到image.png然后勾选上才可以。这是再点击就可以打开,到这wsl就安装完成。
    我安装wsl的目的是写linux socket代码windows下的socket和linux下的是不一样的又不想安装虚拟机和双系统,看到CLion 支持wsl编译就有了使用wsl的想法。想在Windwos用CLion编译linux代码还需要做些其他的配置首先要先要打开ssh。
    sudo apt-get install openssh-server
    sudo vim /etc/ssh/sshd_config
    

    sshd_config 有几处要改的地方

    Port 2222 #ssh server 监听端口可以随便改个不要用22
    ListenAddress 0.0.0.0
    PasswordAuthentication yes # 允许密码登录
    

    保存重启sshd服务,安装开发套件

    sudo apt install build-essential
    sudo apt install cmake

    到这里环境就准备完毕了但是还有一个坑,就是CLion会报CMake错误,网上有人说把所有删掉重装就会好,我没尝试毕竟太麻烦了万一还是不行就烦躁了,最终在jetbrains论坛找到解决方案

    1. 在 /etc/ 目录下创建一个 wsl.conf 文件内容为:

    /etc/wsl.conf

    [automount]
    options = "metadata"
    enabled = true

    1. 重启 wsl

    wsl.exe -t Ubuntu // (或者其他的发行版比如. Debian)
    完事!最终的效果是image.png
    运行一个hello world
    image.png

    查看原文

    赞 0 收藏 0 评论 0

    BaLaLaLs 赞了文章 · 2020-05-27

    node-rsa非对称加密

    写在最前:此文的目的只是介绍,所以不做详细累述。

    一.使用 node-rsa 进行非对称加解密

    • 因为 比特币 中使用的非对称加密,所以在npm中对比找到一个比较方便也直观的库:node-rsa
    • 非对称加密的关键在于 有 公钥 / 私钥
      用法:
      a.生成一对公钥私钥
      b.公钥加密 -> 对应私钥解密
      c.私钥加密 -> 对应公钥解密
    • 非对称加密的常见应用方式
      a.公钥加密,发给私钥拥有者,私钥解密获得明文。其它人用公钥解不开
      b.私钥加密(签名)
    • 公钥的传输(混合加密)
      a.使用对称加密算法发布公钥
      b.使用对称加密算法解密公钥,再使用公钥加密明文,发给私钥拥有者

      注:不能 公钥加密公钥解密 或 私钥加密私钥解密

    二.几个重要概念

    秘钥内容格式与传输格式

    1. DER 和 PEM 编码

    • DER: 基于二进制的编码。可以用CER或者CRT作为扩展名的的整数。比较合适的说法是“我有一个DER编码的证书”,而不是“我有一个DER证书”。【编码规则参考】
    • PEM: 基于ASCII(Base64)的编码。OpenSSL 使用 PEM 文件格式存储证书和密钥。【编码规则参考】

      PEM 实质上是 base64 编码的二进制内容,再进行增加或裁剪特殊字符-、n、r、begin信息、end信息等,如:

    -----BEGIN CERTIFICATE-----
    内容
    -----END CERTIFICATE-----

    注:本文中的私钥公钥都是用 pem 格式

    2. PKCS(The Public-Key Cryptography Standards)

    • 由美国RSA公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。
    • 版本:现有PCKS1,PCKS3,PCKS5,PKCS6,PKCS7,PKCS8,PKCS9,PKCS10,PKCS11,PKCS12,PKCS13,PKCS14,PKCS15 共 13个版本
      常用:PCKS1 和 PCKS8,本文使用 PCKS8 标准

      注:由于PKCS内容规范设计二进制,不方便使用,所以一般转成base64 后,用 pem 格式规范显示

    • PCKS1 的pem格式头:
    //公钥
    -----BEGIN RSA PUBLIC KEY-----
    MEgCQQCpb53RwojJX+lxHiEMfNmixx+eIV+u+d9e61Ecx8MVBW0tzAoxTpdTKrgN
    9hdBqaP6rtQMxOp/4++C5+3zh6D1AgMBAAE=
    -----END RSA PUBLIC KEY-----
    //私钥
    -----BEGIN RSA PRIVATE KEY-----
    MIIBPAIBAAJBAKlvndHCiMlf6XEeIQx82aLHH54hX675317rURzHwxUFbS3MCjFO
    l1MquA32F0Gpo/qu1AzE6n/j74Ln7fOHoPUCAwEAAQJAJO8tyeHMC4may4uzzJMS
    pgcd/0xrHSte48QMBGgPQG95imYXELKQUV2rjzsua9xJP5huQjhe+qrmBpEqrtf7
    wQIhANccK0zuFaH4CoIuKsp92YB6OGwndy6UJaiX2RoUw0V5AiEAyaTTkar73r4d
    OB2s4Ofj+UkGX/aspp0dM+7V5HathF0CIQCezlYNSmvAEr23U9wVeAmd9x02g4BS
    a97Nc6U8wv1SiQIhAKap7ZTA1l1MlaoEHRfnkq5AhVxb7mfoBHMgPPoQfWqhAiEA
    npkku9LfP2mlCCB85/zxsUehZOwoMVLlF2dSLWsrURs=
    -----END RSA PRIVATE KEY-----
    • PCKS8 的pem格式头:注意私钥头中没有 RSA
    //公钥
    -----BEGIN PUBLIC KEY-----
    MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKzY3F21g7UWaTcIk/ltUy4LuuHK5Hhl
    9ZpdxDr4+WA7pNwhCzhgBKbWUa+XotUYet841I2mYPJ6+6X32LwotF0CAwEAAQ==
    -----END PUBLIC KEY-----
    //私钥
    -----BEGIN PRIVATE KEY-----
    MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEArNjcXbWDtRZpNwiT
    +W1TLgu64crkeGX1ml3EOvj5YDuk3CELOGAEptZRr5ei1Rh63zjUjaZg8nr7pffY
    vCi0XQIDAQABAkBUJ3GDHnD1peesJ70D37pz3LosXMBH7jxZ3/U+USH5O8M7ixzt
    lpYa+ITcuL0MKxvVyVYw5Pvaui1+Nq9LV17xAiEA5VMCIgtn3WFEOpP+sVhHlqPc
    VbTfE3g0RlDfUt/sQ5sCIQDA9AiJ65G3pHJJxYNc9RB/lVav3anFkbgnGKolPw8T
    ZwIhAIs7QLpGzoLcgT5HiIVIIf7V8fqfXClH/AUNKOn6RkotAiEAo6HQY/ZMeyqQ
    aZOA1aJWPXxOKZKX2R68xxsZn8Ccbl0CIQDck74y8SzLRSBB6JgVZ6NoWkWI5tyj
    V8RFCZU9VUinQA==
    -----END PRIVATE KEY-----

    三.代码示例

    /** from: @jameszou707
     * 1.使用 node-rsa 生成 公钥和私钥,并进行服务端测试
     * @param pkcsType :pkcs版本(pkcs1/pkcs8),默认为 pkcs8
     */
    function generateKeyPair() {
      pkcsType = pkcsType ? pkcsType : 'pkcs8';//不为空则 设置为传入参数,为空则 设置为 pkcs8
      console.log('pkcsType=' + pkcsType);
    
      //1.创建RSA对象,并指定 秘钥长度
      var key = new NodeRSA({ b: pkcsSize });
      key.setOptions({ encryptionScheme: 'pkcs1' });//指定加密格式
    
      //2.生成 公钥私钥,使用 pkcs8标准,pem格式
      var publicPem = key.exportKey(pkcsType+'-public-pem');//制定输出格式
      var privatePem = key.exportKey(pkcsType + '-private-pem');
      //console.log(key.$options);
      console.log(pkcsType+'公钥:\n',publicPem);
      console.log(pkcsType+'私钥:\n', privatePem);
      
      //---------------------测试1:服务端私钥加密公钥解密------------------------
      //3.使用 私钥 加密 数据,并指定 字符编码 和 字符集
      var encryData = key.encryptPrivate('服务端测试 -> jameszou love code~~~', 'base64','utf8');
      console.log('\n私钥加密后的数据:\n', encryData); //加密后数据为 base64 编码
    
      //4.使用 公钥 解密 数据,并指定字符集
      var decryptData = key.decryptPublic(encryData,'utf8');
      console.log('\n公钥解密后的数据:\n', decryptData);
    
      //---------------------测试2:服务端加载公钥后解密------------------------
      //1.创建RSA对象,并指定 秘钥长度
      var key2 = new NodeRSA({ b: pkcsSize });
      //2.导入 公钥,并指定使用 pkcs标准,pem格式
      key2.importKey(publicPem, pkcsType+'-public-pem');
    
      //3.使用 公钥 解密数据
      var decrypted = key2.decryptPublic(encryData, 'utf8');  
      console.log('\n使用公钥解密后的数据:\n',decrypted);
    }

    四.可能遇到的错误

    • 暂无
    查看原文

    赞 5 收藏 1 评论 1

    BaLaLaLs 回答了问题 · 2020-04-29

    el-table中嵌入el-input数据量大的时候input会卡顿,怎么解决

    分页吧dom树内元素多了怎么都会卡

    关注 8 回答 5

    认证与成就

    • 获得 7 次点赞
    • 获得 11 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 11 枚铜徽章

    擅长技能
    编辑

    开源项目 & 著作
    编辑

    (??? )
    暂时没有

    注册于 2018-01-14
    个人主页被 750 人浏览

    bt365体育投注