用 vue 写一个单页的 hexo 主题

2018 年 5 月 5 日更新: 因为我突然发现如果采用单页的话,就很难处理 SEO 的问题,所以我现在已经基本不再考虑在 hexo 的基础上考虑这个主题。所以我现在也已经在使用别的主题。在未来,我会考虑采用 vuepress 或者 peco 搭建我的博客。


大概一年以前,我发布过一个主题,名为 hexo-theme-mls。这个主题是我当时在学完如何写一个 hexo 主题后完成的。后来在学了 vue 之后,构思着再写一个主题。我非常想把它写成一个单页应用,可是一直没有思绪。直到后来看到了 hexo-theme-one,我才有了思绪,于是开始写一个单页的主题。

2017 -> 2018

上一年差不多在这时也写了这么一个年终总结,今年也写一个吧。

HTTP 协议中的 URL

URL 概念

全称 Uniform Resource Locator (统一资源定位符),是一种 URI (Uniform Resource Identifier, 统一资源标识符)

URL 作用

主要用于网络资源的定位。换句话说,当你想告诉 Alice 你的服务器上有一个有趣的文件想要分享时,你就可以告诉这个文件对应的 URL。那么 Alice 就可以根据这个 URL 找到你要分享的文件。而目前 URL 更通俗的被称为网址。

拓扑排序 / topological sort

问题描述: 提供一些以数字为 id 的任务(task),这些任务存在如下图所示的依赖关系:

其中, 1 -> 3 表示任务 3 必须在任务 1 完成之后才能够开始。如上图中,任务 3 必须在任务 1 和任务 4 之后。而任务 4 又必须在任务 2 之后。

而要求就是, 提供一个序列,要求按照这个序列能够顺利完成所有任务。这里假设每个时刻只能处理一个任务,而且一旦开始处理某个任务,那么你不能中止或切换到其它任务。这个答案可能不唯一。在上图中,一个可能的答案就是 [1, 2, 4, 3, 5, 7, 6]

思考为什么要用工厂模式

以 JavaScript 为例子发表一下我对工厂模式 (Factory Pattern) 的看法

为什么不直接 new 呢? 我自己写代码直接 new 自己写的类不就好了么?

这里不得不提一下设计模式的意义。设计模式并不是凭空捏造的,而是长期开发所形成的经验之谈,当然这些经验自然是成功的,被认可的经验,否则设计模式就不会被那么多人认可和推崇了。

简单谈谈 Node.js 对 ESM 的几种支持方案

简单谈谈目前 (2017 年 10 月), Node.js 对 ESM (ES6 Module) 的支持情况,并且发表一点自己的看法。

主流的方案

  1. 在文件开头添加 "use module"; 或类似字段
  2. 新的文件后缀名,如 .mjs
  3. 通过源代码内容自动区分
  4. package.json 指明采用 ESM 的文件

借助 Proxy 实现一个 DefaultDict

这里的 DefaultDict 指的是类似于 Python 中的 defaultdict 的一种类。其基本特点就是当某个属性不存在于该对象中时,该对象会自动为这个属性创建一个默认值。这个默认值是由用户在创建 DefaultDict 时指定的。

举个例子,现在需要一个对象,如果某个属性不在这个对象时,在为这个属性赋值为 0.