为什么用快速幂

对于求解\({a^b}\)的问题,我们能想到的朴素算法:

int ans = 1;
for (int i = 0; i < b; i++)
    ans *= a;

而快速幂可以在O(logn)时间内解出。

什么是快速幂

先举一个例子,我们计算\({5^8}\)只需要3步,即分别求得\({5^2}\)、\({5^4}\)、\({5^8}\)。
因为每次相乘,幂次都增长一倍,我们只需要logn次就可以让幂逼近n。

所以,我们可以将b通过二进制分解为形如10011的数,则\({\rm{b}} = {2^{k1}} + {2^{k2}} + {2^{k3}} \ldots \)。
因为\({a^{{2^{k1}}}}\)到\({a^{{2^{kmax}}}}\)可以通过\({a^{{2^1}}}\)、\({a^{{2^2}}}\)\({a^{{2^3}}}\)这样在递推kmax次中得到,所以\({a^b} = {a^{{2^{k1}}}} * {a^{{2^{k2}}}}\)可以在O(lo… Read the rest

SEO概述

在我看来,一个网站完全不做SEO不可行,过度沉迷SEO而忘记了技术博客的实质也不行。所以我选择了几个符合直觉的优化方向:一是网站伪静态化,二是外链转内链,三是开启全站https,四是使用DNS加速, 五是搜索引擎推送。当然还有一些琐碎的细节需要注意,日后再谈吧。

关于网站伪静态化,具体见我的另外一篇文章“开启WordPress伪静态”。
而DNS涉及方面比较多,而且通过站长工具看了一下,访问延迟也不高,所以也暂不考虑。

概念简述

外链转内链

很多的文章需要跳转外链的资料、或者跳转外链的下载,所以在维护网站的时候,文章内编写的外链是不可避免的。1

一般来说,我们在除了友情链接之外的外部连接之外,大部分的外链都会多多少少的分散网站的权重。

那么我们的解决办法是将原来文章中的”http://blog.csdn.net/swanabin/article/details/42293163″通过插件或者自己的脚本改为”https://endlesslethe.com/goto/ht… Read the rest

前言

伪静态指的是将网站传统的www.localhost.com/p/4684401.html的文章地址,改为和内容相关的www.localhost.com/wordpress-url-rewrite.html。
那既然伪静态作为对seo很有帮助的方式,作为有志之士的我怎么能不做呢?所以在域名审核下来前,我已经做好了文章的固定连接。

当我的域名通过审核,我在修改“站点域名”的时候就顺理成章地想把www.localhost.com/wordpress后面的/wordpress也去掉,谁知道发生了一个意料之外的bug…我的WordPress固定链接一直不能使用,文章页面一直报404错误。我也是为了解决这个问题熬了几天夜。

下面我先会描述正常的配置流程,最后再讲述我的debug流程。
对于网站seo的其他优化方法,见我的另外一篇文章“网站SEO配置教程”。

原理讲解

Apache mod_rewrite

下面是Apache mod_rewrite官方文档的描述。1

mod_rewrite 提供了基于正则表达式规则动态修改传入的请求的 URL 的方法。 这允许你以自己喜欢的任意方法映射任意 URL 到你的内部 URL 
Read the rest

前言

本文前半部分介绍了SMTP,后半部分讲述了如何通过阿里云SMTP Server来实现WordPress的推送。

事实上,我们是先在阿里云ECS通过SMTP发送邮件到Server上,阿里云Server再帮我们转发到目标邮箱。

SMTP

基本原理

SMTP协议最早在RFC 821(1982年)中定义,最后更新是在RFC 5321(2008年)中,更新中包含了扩展SMTP(ESMTP)。
Model for SMTP
two host (server) are connected to the same transport service, or via one or
more relay SMTP-servers when the source and destination hosts are not
connected to the same transport service.

The argument to the MAIL command is a reverse-path, which specifies
who the mail is from. The argument to the RCPT command is a
forward-path, which specifies who the mail is to. The forward-path… Read the rest

概述

本文介绍了如何通过官网下载安装包直接解压使用phpMyAdmin,以及过程中可能遇到的问题。

我抛弃了yum安装的方式。一是因为这样phpMyAdmin会被自动安装到/usr/share的文件夹下,要重新配置apache的访问权限设置。二是因为解压的配置过程的确简单。

正文

1. 正常的安装步骤

1
1. 在phpMyAdmin下载页面查看下载包情况
2. 使用wget下载
wget https://files.phpmyadmin.net/phpMyAdmin/4.6.3/phpMyAdmin-4.6.3-all-languages.tar.gz
3. 解压 tar -xf phpMyAdmin-4.6.3-all-languages.tar.gz
4. 使用winscp移动文件夹到/var/www/html/phpMyAdmin
5. 复制/phpMyAdmin/libraries里的config.default.php到/phpMyAdmin下,并改名为config.inc.php。
6. 打开并修改以下参数

$cfg['blowfish_secret'] = 'xxx';
//xxx为你自己随意填入的字符串。这个
Read the rest

前言

本文用以记录我创建一个文件上传页面的经历,解释了相关的html、http和安全的一些问题。

表单

<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>

这是一份用于上传的一个.php页面。标签form声明一个表单,它的action属性作为url,规定当提交表单时向何处发送表单数据。而在使用包含文件上传控件的表单时,必须使enctype属性为multipart/form-data,避免编码导致文件损坏。1

而下面的input和label标签都在form标签内。显然一个form标签需要至少一个type… Read the rest

概述

本文介绍了云服务器购买后如何进行基本的配置,以便安装wordpress。当然,日后我会不断更新这篇文章,以做到像标题所写,涵盖所有“基本配置”。

当你继续看这篇文章时,确定你已经在阿里云或其他地方购买了服务器。
不要购买阿里云优惠的OSS和CDN服务,花一毛钱都是浪费!

本文基于阿里云ecs,所以防护措施使用阿里云盾的安全组策略(和iptables类似),关闭了firewall和iptables。而且“1.实现;ping通”这个步骤需要读者参考选购相应服务器指南。

我的配置是阿里云ecs,1核1GB内存40GB硬盘1Mbps带宽。

1. 实现ping通

  1. 在阿里云控制台点选之前建立的服务器实例,再点击远程连接。
    先记下网页上显示的阿里云远程登陆密码。再设置root用户的系统登陆密码。
  2. 使用puttygen生成秘钥并通过阿里云控制台上传并绑定实例
  3. 在阿里云控制台的安全组策略
    aliyun secure list aliyun secure setting
    中添加22/22的ssh接口、支持ping的ICMP协议和80/80的http接口。其他接口等有必要时再添加。1 2
  4. 现在应该就可以通过ip地址ping通了

2.安装必要的软件

我们使用putty和winscp就略过安装vsftp。如果想… Read the rest