Win10环境下基于Hexo的静态博客环境搭建,及其阿里云部署
引言
1、为什么要搭建自己的个人博客
工作和学习过程中,我们经常遇到一些这样或那样的问题,此时我们可能会在网上找到相应的解决方法。但是过了一段时间之后,当我们再次碰到类似的问题时,早已忘记以前是怎么解决的了,于是又要到网上去搜,浪费大量的时间和精力。面对这些重复的问题,我们为什么不能把它们记录下来呢?
在我看来,搭建自己的个人博客主要有以下好处:
有助于养成归纳总结的习惯,帮助记忆,把别人的知识变成自己的知识。
通过记录自己工作和生活,锻炼自己的写作的能力。
培养开放(开源)意识,与大家一起学习交流,共同进步。
“对外开放”作为我国的一项基本国策,其效果有目共睹。国家都开放了,我们个人还等什么呢?
2、搭建个人博客的多种选择
目前,主流的博客主要分静态博客和动态博客两类:
所谓动态,就是指有前端有后端,可以登录到后台进行管理。静态博客是纯前端的展示,没有后端。
(1)动态博客搭建
a. 直接在简书、CSDN(最近吐槽的比较多)、知乎、博客园等动态博客公共平台上写。
优点:简单
缺点:别人家的东西限制多
b. 使用WordPress等成熟框架搭建动态博客 + 服务器部署
优点: ...
感悟生活的真谛——记与“新型冠状病毒”擦肩而过的经历
写在前面的话
在灾难面前,有些事情看似事不关己,只有亲身经历了才能体会被其支配的恐惧;
在灾难面前,有些东西看似平淡无奇,只有当我们失去时才会懂得珍惜;
在灾难面前,人的生命会变得异常渺小,只有意志坚强才能有可能战胜它。
当灾难来临时,生活永远不会给你重新再来的机会!
当灾难来临时,我们仿佛一下子悟透了许多道理背后的真谛!
此时,我们唯一能做的就是:正视它,战胜它,为自己争取一次改过自新的机会!
1、终生难忘的春节
2020年的这个春节对每一个中国人来说都一定是一个特殊的春节。无论你在哪,今年春节都没有了以往的走亲访友、聚会咵天。每天大家听到最多新闻就是:“新冠病毒”、“湖北”和“武汉”。每天大家关注最多的信息就是各地新增的疑似、确诊、死亡病例数目的变化。
面对这场没有硝烟的战争,我们每个人都是一名战士,只是作战的方式和冲锋的位置稍有区别罢了。对于那些不听指挥、自以为是的群众和不作为、乱作为干部,无异于战场上的叛徒和逃兵。
2、我的经历和感受
作为一名普通的新武汉人,作为这场战争的一名亲历者,这场疫情更是让我记忆犹新。接下来,我将谈谈疫情发生以来我与"新冠病毒&qu ...
回归
1、什么是机器学习
机器学习 ≈ 让机器帮我们找一个函数f解决某一问题。
如:
语音识别:输入一段语音信号,输出识别出的文字。
图像识别:输入一个图像,输出图像识别结果。
阿尔法Go:输入棋盘上黑子和白子的位置,输出下一步下棋的位置。
注:
本课程重点介绍机器学习(ML,Machine Learning)中的深度学习(DL,Deep Learning);
本课程主要介绍如何通过神经网络(NN,Neural Network)的方式实现深度学习。
2、机器拟合函数类型
2.1、回归
回归(Regression):函数的输出是一个标量。
如: 使用机器学习预测PM2.5。
输入各种与预测PM2.5相关的指数(如:今天的PM2.5值、温度和臭氧的浓度等),输出明天的PM2.5值。
2.2、分类
分类(Classification):函数从我们事先设定好的一些选项【options】(又称“类别”,classes)中选择一个作为输出。
如:
使用机器学习进行垃圾邮件筛选。
输入一封邮件,输出是否为垃圾邮件(2个选项)。
阿尔法Go。
输入棋盘上黑子和白 ...
机器学习概述
1、什么是机器学习
机器学习 ≈ 让机器帮我们找一个函数f解决某一问题。
如:
语音识别:
图像识别:
阿尔法Go:
注:
本课程重点介绍机器学习(ML,Machine Learning)中的深度学习(DL,Deep Learning);
本课程主要介绍如何通过神经网络(NN,Neural Network)的方式实现深度学习。
2、神经网络的输入和输出
神经网络的输入可以是:
一个向量(vector)
一个矩阵(Matrix),如:一张图片。
一个序列(Sequence),如:一段语音、一段文字等。
神经网络的输出可以是:
一个数字(标量,scalar),即是一个回归问题。
多个选项,即分类(classification)问题。
其它复杂的输出,如:一段语音,一段文字、一个图片等。
3、课程概览
(1)第1-5讲:监督学习
监督学习(Supervised Learning)需要使用大量人工标记的数据作为训练集。
如:我们需要机器帮我们区分输入的图片是“神奇宝贝”还是“数码宝贝”。
那么,我们需要收集大量训练数据,并对所有的训练数据进行人工标注。 ...
SpringCloud概述
1、系统架构演变过程
随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。 从互联网早起到现在,系统架构大体经历了下面几个过程: 单体应用架构 → 垂直应用架构 → 分布式架构 → SOA架构 → 微服务架构,当然还有悄然兴起的Service Mesh(服务网格化)。
接下来我们就来了解一下每种系统架构是什么样子的, 以及各有什么优缺点。
1.1、单体应用架构
互联网早期,一般的网站应用流量较小,只需一个应用,将所有功能代码都部署在一起就可以,这样可以减少开发、部署和维护的成本。 如:一个电商系统,里面会包含很多用户管理、商品管理、订单管理、物流管理等多个模块, 我们会把它们做成一个web项目,然后部署到一台tomcat服务器上。
所谓“单体应用架构(all in one)”是指:我们将一个应用中的所有应用服务都封装在一个应用中。无论是ERP、CRM或其它系统,我们都把数据库访问、Web访问等功能放在一个war包内。all in one的架构方式,我们把所有的功能单元放在一个应用里面,然后把整个应用部署到服务器上。
优点:
项目架构简单,易于开发 ...
重构二叉搜索树(继承二叉树)
1、重构二叉搜索树
1.1、设计思想
由于实际项目中常用的二叉树种类有很多(如:二叉搜索树、AVL树、红黑树等),为了提高代码的复用率和可读性,我们可以通过继承二叉树的方式重构这些特殊的二叉树。
因此,我们也可以通过继承二叉树的方式实现二叉搜索树(Binary Search Tree,BST),如下图所示:
其中:
二叉树类中存放所有二叉树公共的接口。
二叉搜索树类中实现二叉搜索树自己特有的接口。
1.2、类的结构设计
同样地,在编程之前,我们需要先对二叉树类和二叉搜索树类的结构进行设计。
1.2.1、二叉树类设计
二叉树类需要的成员主要包括:
树的节点(元素)数量
1private int size;
size = 元素(Element)数目 = 节点(Node)数目。
根节点的引用
1private Node<E> root;
root指向二叉搜索树的根节点。
内部静态节点(Node)类
由于该节点类仅供二叉搜索树类使用,因此,需将该节点类定义为二叉搜索树类的内部类。该类的成员包括:
该节点内部的泛型元素
1E element;
泛型元素既可以是基 ...
二叉搜索树
0、引例
思考:如何在n个动态的整数中搜索某个整数?(查看其是否存在)
方法一:使用普通的动态数组存放元素。
从第0个位置开始遍历搜索,平均时间复杂度为O(n)。
添加元素的平均时间复杂度为O(1)。
删除元素的平均时间复杂度为O(n)。
方法二:使用有序的动态数组存放元素。
利:使用二分搜索,最坏时间复杂度为O(logn)O(\log n)O(logn)。
弊:为了保持数组的有序性,添加、删除的平均时间复杂度均为O(n)。
**注:**有序数组中的元素始终是按顺序排列的。因此,需要先将数组中的元素按顺序排列。
方法三:使用二叉搜索树存放元素。
添加、删除、搜索的最坏时间复杂度均可优化至:O(logn)O(\log n)O(logn)。
1、二叉搜索树(Binary Search Tree)
1.1、概念
若一个二叉树满足:
任意一个节点的值都大于其左子树所有节点的值。
任意一个节点的值都小于其右子树所有节点的值。
则称此二叉树为“二叉搜索树”。
注:
二叉搜索树是二叉树的一种,是应用非常广泛的一种二叉树,英文简称为BST。
二叉搜索树又被称为: ...
树与二叉树
1、树形结构
1.1、二叉树和多叉树
**二叉树:**指各节点的分叉数均不超过2的树。
**多叉树:**指存在节点的分叉数超过2的树。
**注:**使用树形结构可以大大提高数据(或文件)增、删、改、查的效率。
1.2、树形结构的应用
如:
公司组织架构
文件夹组织架构
2、树(Tree)的基本概念
2.1、节点(node)
**节点:**指树的每一个数据元素。
2.1.1、根节点
根节点是树中唯一没有入边的节点。
2.1.2、父节点
一个节点是它出边所连接的所有节点的父节点。
2.1.3、子节点
一个节点是它入边所连接的节点的子节点。
2.1.4、叶子节点
没有子节点的节点称为叶子节点。
2.1.5、兄弟节点
具有相同父节点的节点互为兄弟节点。
如:上述多叉树中,21与22互为兄弟节点,21与31并不是兄弟节点。
注:
一棵树可以没有任何节点,称为**“空树”**。
一棵树最多只有一个根节点。
一棵树可以只有1个节点,即:只有根节点。
2.2、边(edge)
**边:**指连接两个节点的有向线段。
2.2.1、入边
**入边:**指从其它节点指向该节 ...
线性表——循环双端队列
1、循环双端队列(CircleDeque)
循环双端队列是在头尾两端都能添加和删除元素的循环队列。
与循环队列一样,循环双端队列:
循环双端队列也是基于数组实现的。
循环双端队列也是存储在循环向量中的。
循环双端队列内部的元素也是顺序存储的。
循环双端队列的首尾元素未必相连,也是个逻辑上的循环。
循环双端队列本质上还是一个普通的双端队列。
与双端队列一样,循环双端队列:
它可以在队头添加元素,也可以在队尾添加元素。
它可以在队头删除元素,也可以在队尾删除元素。
**注:**和循环队列一样,循环双端队列的设计思维也像一个环,因此也常使用一个环图来表示,但注意其也不是一个真正的环,也是一个逻辑上的环。
2、循环双端队列的设计
2.1、类的结构设计
在编程之前,我们需要先对循环双端队列类(CircleDeque)的结构进行设计。如下图所示:
循环双端队列类需要的成员主要包括:
循环双端队列存放元素的数量。
1private int size;
size = 元素(Element)数目 = 循环双端队列长度 ≤ 循环双端队列容量(capacity)。
用来存放循环 ...
线性表——循环队列
1、从“顺序队列”到“循环队列”
**虽然队列(Queue)最好是使用链表来实现,但其实队列底层也可以用动态数组来实现,**并且各接口的时间复杂度也可以优化到O(1)。
1.1、顺序队列
如果我们直接使用动态数组来实现队列,那么入队操作时:在动态数组尾部添加元素,时间复杂度为O(1);出队操作时:删除动态数组头节点元素,后续节点元素从前往后依次前移一位,时间复杂度为O(n)。
为了优化使用动态数组实现的队列,降低它在元素出队时的时间复杂度。我们使用两个指针(front和rear)分别指向数组中存放的第一个元素和最后一个元素的下一个位置。其中:
front指针指向第一个元素,被称为队头指针;
rear指针指向最后一个元素的下一个位置(front+size),被称为队尾指针。
注:
front和rear的初值在队列初始化时均应置为0;
入队时将新元素插入rear所指的位置,然后将rear加1;
出队时,删去front所指的元素,然后将front加1并返回被删元素。
由此可见:
当头尾指针相等时队列为空。
在非空队列里,头指针始终指向队头元素,而尾指针始终指向队尾元素的下一个位置 ...