编程

A collection of 21 posts

阿里云 Linux 挂载新硬盘
编程

阿里云 Linux 挂载新硬盘

前言 环境 CentOS:8.x 背景 当前维护的物联网卡管理平台因为涉及到较多的上传和导出操作,经常会把当前并不大的磁盘空间给占满,导致服务挂掉。因此急需解决这个问题,以确保服务的稳定性。 目标 最简单的方式就是买块更大的硬盘挂载上去,上传和导出的文件都存储在新硬盘上。 操作步骤 购买新硬盘 直接在控制台购买一块新硬盘就好了。 查看新硬盘 $ fdisk -l Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors Units:

  • Hank Wei
    Hank Wei
PKG 打包教程
编程

PKG 打包教程

前言 背景 最近做了一个 Egg.js 的项目,有为客户私有化部署但是需要保护源代码的需求。之前没有接触过 Node.js 项目打包的,只是用过 Webpack 打包的前端的东西,更别说后端的项目打包了。搜索了一下,发现有不少方案,但是都只是解决了其中一部分问题,比如代码混淆。最后发现一个叫做 Pkg的方案应该能够满足需求。 目标 基础目标 将 Egg.js 项目打包成不包含源文件的可执行文件 进阶目标 确保包含了项目中所有依赖的文件 确保打包结果不包含源代码

  • Hank Wei
    Hank Wei
JavaScript 原型链
编程

JavaScript 原型链

前言 背景 JavaScript 的继承和 Java/C 等语言有很大的不同,关键就在于这个原型链,而我做了这么多年的 JavaScript 也一直没有彻底弄清楚。尤其是到了 Object.prototype 和 Function.prototype 的层级就更云里雾里了,所以想这次一次弄清楚。 原型链 先看一张经典的描述原型链的图。 prototype 是所有函数都具有的属性,也被成为原型对象。在将该函数作为构造函数创建一个实例时,实例的 [[prototype]] 属性和该函数的 prototype 属性指向同一个对象。

  • Hank Wei
    Hank Wei
Document Object Model 简述
编程

Document Object Model 简述

前言 背景 这篇文章写的有点太晚了,以至于当时为什么要写的原因都想不起来了😂。大概原因是当时在代码中看到了一个之前从未见过全局方法,查了一下文档,不是 JavaScript 的全局方法,而是 DOM 的全局方法。当时脑子一下就懵了,DOM 到底是什么了? DOM 是什么 文档对象模型 (DOM) 是 HTML 和 XML 文档的编程接口。它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的结构,样式和内容。DOM 将文档解析为一个由节点和对象(

  • Hank Wei
    Hank Wei
数据结构和算法
编程

数据结构和算法

前言 背景 自从重新回到编程的职业道路上以来,每天都能切身地感受到每次考虑到职业生涯的前途而带来的压力。与之前的职业不同,这种压力和解决问题的方法我是可以看得见摸得到的,也愿意为之付出时间和精力。然而由于一直以来学习的方式不够高效,导致并没有很好的系统性地提升自己的工作能力并解决问题。目前面临着职业生涯和个人未来和家庭未来的重要关头,为了能够找到心仪的工作,更要努力和高效地把数据结构和算法学好,以便能够顺利通过面试。 目标 学习数据结构和算法的最大目标是为了眼前找到一个心仪的国外工作; 面试时可以对答如流; 能够刷 LeetCode 的题目; 写这篇文章的有两个目标; 总结记录好的学习资料和网站; 按照自己的想法总结,形成自己的知识体系; 确定教程 网上有很多各式各样的关于数据结构和算法的教程,我相信其中任何一个都是通往罗马的大道。但是既然要高效地学习,就要选择最适合自己的。 选择教程的标准 完整。

  • Hank Wei
    Hank Wei
在 Egg.js 项目中跑临时脚本
编程

在 Egg.js 项目中跑临时脚本

前言 背景 当前在 egg.js 项目中经常会遇到要运行一段临时脚本,修补之前的数据错误之类的临时需求。但是 egg.js 项目和其他的 node 框架不同,只能启动整个项目,而无法单独运行一个文件。 环境 Egg.js:2.26.x; 解决方案 查了一些资料以后发现,可以利用 Egg.js 官方库中的 egg-mock。这个库的用途本来是用来做单元测试的,正好可以利用这个特点跑一下我们要执行的脚本。

  • Hank Wei
    Hank Wei
Apollo GraphQL 之上传文件
编程

Apollo GraphQL 之上传文件

前言 背景 在 Web 应用中,上传文件是非常常见的需求,而在使用 GraphQL 以后,应该如何实现上传文件的功能呢。 环境 apollo-server:2.x; Altair:2.4.6; 后端 Apollo 直接提供了上传文件的功能,具体用法参见官方文档。 后端在处理时需要注意两个地方: 根据文档获取上传文件的文件名和 readable stream; 为了避免内存溢出,不用全部读取到内存,然后再保存文件,而是将

  • Hank Wei
    Hank Wei
flutter 的序列化和反序列化
编程

flutter 的序列化和反序列化

前言 背景 最近正在学习 flutter,准备手头的公司项目用 flutter 实现。但是碰到一个很现实的问题,就是 dart 的强类型特征。强类型自然有其好处,但是也有其弊端,就是定义实在是太麻烦了,我只写了一个类,因为这个类有 30 多个字段,然后我先写类的成员属性,再写构造函数,再写命名构造函数,就几乎崩溃了。然后发现还有一个要把实例序列化,好保存在 SQLite 里的需求,又多出一个只是转当前成员属性类型的方法,快把我弄崩溃了。 环境 Dart:

  • Hank Wei
    Hank Wei
Node.js 和 Egg.js 项目远程调试
编程

Node.js 和 Egg.js 项目远程调试

前言 背景 在开发 Node.js 项目过程中,为了更加快速、方便的定位问题,我们一般都会在开发过程中使用本地调试当前的项目。但是项目如果已经部署到远程的服务器以后,再出现问题,就很难定位问题所在了。因此对远程服务器当前运行的项目进行调试也是一个很现实和重要的需求。 本文假设读者都会使用 Node.js 的本地调试方法和工具,因此重点放在已经运行在远程机器的 Node.js 项目调试方法上。如果不了解本地调试内容,请先了解相关内容后再阅读本文。 环境 Node.js:12.x; Egg.js:

  • Hank Wei
    Hank Wei
NGINX - 后端服务反向代理
编程

NGINX - 后端服务反向代理

一、写作背景 和之前一上来就要写大而全,甚至要写成一个完整的说明书的想法不同,我从这篇文章开始,尝试着从当前正在使用的小点入手,只讲解该小点和其深度相关的内容,然后快速发布、迭代文章。目前对我来说,积累 100 篇文章的内容来回斟酌修改,不如连续快速发布成功 100 篇文章。 二、概要 本文作为 NGINX 使用的一个系列,主要讲解在反向代理后端服务时,NGINX 的配置。 三、反向代理 proxy_pass 指令 在使用

  • Hank Wei
    Hank Wei
GFW - DNS 污染和抢答
编程

GFW - DNS 污染和抢答

背景 作为普通人上网的第一步,DNS 是极为重要的一环。而在网络发展的初期,并没有考虑到会有像 GFW 这样罪恶无耻的东西出现,因此 DNS 设计的比较脆弱,也因此留下了重大的隐患。 原理 我们知道,在上网的时候为了方便我们记忆,在地址栏中输入的都是域名,而在真正的网络中,是通过 IP 地址组织起来的,因此需要将域名转换成对应的 IP 地址,这就是 DNS 的作用。 但是 DNS 当初的实现并没有考虑到太多的情况,因此

  • Hank Wei
    Hank Wei
一次简单的 Docker 使用
编程

一次简单的 Docker 使用

在 Docker 中,镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 要在 Docker 中运行开发 Ghost 需要按照以下步骤: 1. 拉取 Node.js 指定版本镜像; 2. 启动容器,挂载本地目录,暴露出容器的端口; 3. 进入容器,新建用户和用户目录; 4. 安装 Ghost 并运行;

  • Hank Wei
    Hank Wei