• openssh弃用rsa算法,登录验证失败怎么办?

    ssh

    今天升级了 macOS 系统到最新版本,按苹果的尿性我有得重装 xcode ……毫不意外,系统起来后 gomakegit 等等一堆命令都跪了。由于一直被坑,早已形成条件反射,直接执行 xcode 更新命令就是了:

    1
    
    xcode-select --install
    

    xcode 安装完毕后,一切似乎恢复正常,直到我执行 git 命令拉代码:

    1
    2
    3
    
    $ git pull
    git@github.com: Permission denied (publickey).
    fatal: Could not read from remote repository.
    

    提示表明,SSH 公钥认证没通过,可我没换过密钥呀!

    怀疑跟升级有关,执行 ssh 命令,开启提示信息定位错误:

    1
    2
    3
    4
    
    $ ssh -vT git@github.com
    ...
    debug1: send_pubkey_test: no mutual signature algorithm
    ...
    
    阅读全文
  • 无聊玩玩WebAssembly,用Go语言写个应用

    WebAssembly 是一种基于栈的虚拟机二进制指令格式,缩写为 WasmWasm 被设计成一种可移植的编译目标产出物,支持 Web 部署,客户端和服务端均可。

    简言之,Wasm 是一种通用的虚拟机指令格式。任何平台只要实现了虚拟机,即可执行 Wasm 应用。工程师可以使用任何编程语言来发应用程序,只要最终能编译成 Wasm 即可。

    因此,Wasm 是一个威力强大的中间层,让开发语言与执行平台完全解耦,可以任意组合。Wasm 可以跑在浏览器上,也可以直接跑在操作系统里面(比如 LinuxWindows )。硬件平台当然也不挑,ARMx86 都可以。

    阅读全文
  • 今年双十一我又奢侈了一把!

    已经很多年对双十一无感了,但今年刚好看到别人推荐一个很赞的显示器,又奢侈了一把,哈哈~

    废话不多说,直接上图!

    阅读全文
  • 万字长文漫谈高并发技术

    互联网应用通常面向海量用户,其后台系统必须支撑高并发请求。在后端开发面试中,高并发技术也是一个常见的考察点。那么,高并发系统通常是怎么设计的呢?需要采用哪些技术呢?本文就简单聊一聊高并发背后的各种技术栈。

    必须明确高并发本身是目的,而不是某一项技术;只要能够提高连接数或系统处理吞吐的技术都算。因此,这是一个涉及面非常广的话题,本文无法事无巨细地展开。

    我会重点罗列实现高并发的常见技术栈,并简单介绍每种技术的工作原理和应用场景,帮大家快速建立整体的知识脉络。虽然每种技术的讲解篇幅有限,但我会列出更详细的学习资料,方便查阅学习。

    大家可以以此知识地图为指引,制定学习计划,查漏补缺。

    阅读全文
  • 用expect实现交互式命令自动对话

    expect 是一个自动对话命令,可以编程实现与交互式命令的对话交互。

    交互式命令

    想要学习 expect 命令,掌握它的典型应用场景,我们需要先弄清楚:什么是交互式命令?

    Linux 系统中,绝大部分命令都是非交互式的常规命令。非交互式的命令一旦提交执行,它便默默地干活,执行完毕后输出结果。举个例子,我们执行 uname 命令,回车按下后不用再做任何输入:

    1
    2
    
    $ uname
    Linux
    

    uname 命令用于查看操作系统信息,例子输出表明这是一个 Linux 系统。

    交互式命令,顾名思义在命令执行期间,可能需要跟用户进行交互。举个例子,我们执行 apt 命令安装软件包,该命令询问是否继续,用户要输入 Y 之后它才会继续安装:

    阅读全文
  • 如何在MongoDB上实现转账事务

    4.0 版本之前,MongoDB 是不支持事务的,只能由应用程序自行保证事务性。本文以银行转账为例,讲解如何在不支持事务的 MongoDB 上实现转账事务。

    转账场景

    客户账上余额由 accounts 表保存,表结构大致如下:

    1
    2
    
    {"_id": "A", "balance": 100} // 客户A账上有100元
    {"_id": "B", "balance": 100} // 客户B账上有100

    如果客户 A 发起一笔转账,转 10 元给 B ,那么余额表应该是这样的(假设没有其他操作):

    1
    2
    
    {"_id": "A", "balance": 90} // 客户A账上有90元
    {"_id": "B", "balance": 110} // 客户B账上有110

    由于转账需要同时修改两条账户记录,为保证数据一致性,我们必须保证:它们要么全都修改成功,要么全都保持初始原因,不能有中间状态。

    这就是转账操作的事务性要求,那么我们应该如何实现这一点呢?

    阅读全文
  • Blob对象应用实战

    背景

    Blob 对象是 二进制大型对象binary large object )的简称,顾名思义用来表示二进制数据内容。Blob 对象数据可以按文本或二进制格式进行读取,而且是不可变的。

    数据可以来源于文件,因此 Blob 可以用来读写文件,比如读写一个图片文件的内容。操作文件通常采用 File 对象,File 继承了 Blob 的数据读写功能,并在此基础上扩展实现文件系统相关功能。

    本文先讲解 Blob 对象相关接口,再讲解一些典型应用场景,最终彻底掌握 Blob 对象用法。

    阅读全文
  • IEEE-754浮点数那些坑:0.1加0.2不等于0.3!

    浮点数是计算机程序中最基本的数据类型,几乎所有编程语言都有浮点类型。但你或许不知道,浮点数可能有精度不足的问题,使用不当会酿成大祸。以 JS 为例,我们来看一个例子:

    1
    
    0.1 + 0.2 === 0.3 // false
    

    0.1 加上 0.2 居然不等于 0.3 ,那结果等于多少呢?

    1
    
    0.1 + 0.2 // 0.30000000000000004
    

    结果等于一个非常接近 0.3 的值,但不等于 0.3 !真是令人瞠目结舌!这是为什么呢?

    想要回答这个问题,我们得知道浮点数在计算机内部是怎么表示的。IEEE 754 是目前使用最广泛的浮点数表示和运算标准,从中即可找到问题的答案。不过想要学习它之前,我们得先掌握 科学记数法scientific notation )。

    阅读全文
  • 面向错误编程

    背景

    公司有一个应急系统,管理各种类型的应急策略,前端代码质量一言难尽。最近有新需求,领导要求梳理主机异常应急策略,为此我们给系统添加一种新的策略类型——主机异常应急策略。

    后端加上新类型后,您猜咋滴?前端好几个页面白屏了!只要数据里有新类型的策略就会!

    我看了看代码,您猜咋滴?问题出在策略类型标签上:类型字段后端为英文常量,前端将其展示成一个中文标签。由于类型有好几种,前端用一个字典来映射渲染函数,代码大致如下:

    1
    2
    3
    4
    5
    6
    7
    
    const strategyTypes = {
      Link: () => <Tag color="magenta">链接</Tag>,
      CheckList: () => <Tag color="orange">确认表</Tag>,
      Card: () => <Tag color="green">应急卡片</Tag>,
      Routine: () => <Tag color="cyan">常规应急操作</Tag>,
      Host: () => <Tag color="red">主机异常策略</Tag>,
    };
    
    阅读全文
  • 用Go语言模板引擎提取数据

    最近在开发一个通用消息通知工具,可以从 API 、数据库等数据源获取数据,然后根据数据渲染消息模板,然后通过企微、邮件、短信、电话语音等渠道推送消息。整个工作的设计思想,就是想提供一种低代码、配置化的消息通知解决方案。

    简言之,工具对日常消息通知开发场景进行抽象建模,让所有要素都支持配置:

    • 数据源
    • 消息模板
    • 通知渠道
    • 通知对象
    • 发送策略(手动触发或定时任务)

    那在开发的过程中,就不可避免要面对数据提取问题。比如,有个系统提需求说他们的变更单需要每天催一次,列表通过 API 给我,结构如下:

    1
    2
    3
    4
    5
    6
    7
    
    {
        "success": true,
        "data": [
          {"name": "变更①"},
          {"name": "变更②"}
        ]
    }
    
    阅读全文