跳转至

计算机相关

为什么MySQL喜欢用B+树

最近看到一篇文章讲MySQL的底层数据结构的,说到Innodb为什么使用B+树作为索引的数据结构,讲的非常好,由浅入深。以下是原文信息

大家好,我是小林。

「为什么 MySQL 采用 B+ 树作为索引?」这句话,是不是在面试时经常出现。

要解释这个问题,其实不单单要从数据结构的角度出发,还要考虑磁盘 I/O 操作次数,因为 MySQL 的数据是存储在磁盘中的嘛。

这次,就跟大家一层一层的分析这个问题,图中包含大量的动图来帮助大家理解,相信看完你就拿捏这道题目了!

ubuntu上部署hexo博客

之前这个个人博客一直挂在github pages或者coding pages下面,之前在百度云上买了一台云服务器,闲着也是闲着,就将个人博客转到这上面来吧。

本文从一个纯净的ubuntu系统开始,到最后的上线,主要涉及以下内容

  1. 云服务器上git环境的搭建
  2. 云服务器上nginx的设置
  3. 云服务器上https证书的设置
  4. 本地hexo提交到云服务器
  5. 云服务器git 钩子设置
  6. 设置图片防盗链

一步一步来,我买的是ubuntu 18.04 x64

一、云服务器上git环境的搭建

1.1 安装git

# apt-get update
# apt-get install git

1.2 初始化git仓库

1
2
3
4
5
6
root@instance-tgmmsl5q:~# mkdir myblog
root@instance-tgmmsl5q:~# chown -R $USER:$USER myblog/
root@instance-tgmmsl5q:~# chmod -R 755 myblog/
root@instance-tgmmsl5q:~# cd myblog/
root@instance-tgmmsl5q:~/myblog# git init --bare hexo_blog.git
Initialized empty Git repository in /root/myblog/hexo_blog.git/

这时我们就创建了一个空的git仓库

二、设置nginx环境

2.1 安装nginx

# apt-get update
# apt-get install nginx

2.2 设置nginx环境

我们将hexo的index目录设置为 /var/www/myblog

1
2
3
4
root@instance-tgmmsl5q:~/myblog# cd /var/www/
root@instance-tgmmsl5q:/var/www# mkdir myblog
root@instance-tgmmsl5q:/var/www# chown -R $USER:$USER myblog/
root@instance-tgmmsl5q:/var/www# chmod -R 755 myblog/

2.3 绑定域名

需要将www.yangyanxing.com 的域名指向/var/www/myblog

/etc/nginx/sites-available创建yangyanxing.com文件,写入

server {
        listen 80;
        listen [::]:80;

        server_name www.yangyanxing.com;

        root /var/www/myblog;
        index index.html;

        location / {
                try_files $uri $uri/ =404;
        }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
        access_log off;
        expires 1d;
    }
    location ~ \.(js|css) {
       access_log off;
       expires 1d;
    }
}

然后创建一个链接文件 ln -s /etc/nginx/sites-available/yangyanxing.com /etc/nginx/sites-enabled/

重启nignx sytemctl restart nginx , 在/var/www/myblog 目录下写一个index.html文件,然后再访问一下www.yangyanxing.com 查看nginx域名设置是否生效,如果是你设置的index.html则说明生效了.

三、云服务器上https证书的设置

添加 certbot 源

add-apt-repository ppa:certbot/certbot

安装certbot

apt-get update && apt-get install python-certbot-nginx -y

生成证书,会有几个步骤

  1. 输入邮箱,随意填
  2. 是否同意许可,Y
  3. 是否分享你的电子邮件 N
  4. 选择哪个域名需要添加证书,这里输入列出的编号
  5. 是否将http强制跳转到https,我选是 2

执行完脚本以后,我们再浏览器中刷新一下,之前的http就自动跳转到了https则说明设置https成功。

Let's Encrypt 签发的 SSL 证书有效期只有 90 天,所以在过期之前,需要自动更新 SSL 证书。最新版 certbot 会自动添加更新脚本到 /etc/cron.d 里,此脚本每隔 12 小时运行一次,并将续订任何在30天内到期的证书。输入以下命令检测自动续签是否工作:

certbot renew --dry-run

命令运行后如果没有报错,即说明自动续签可以正常工作。

四、本地hexo提交到云服务器

在第一步中初始化git仓库以后,服务器上的地址为/root/myblog/hexo_blog.git

我们是可以得到git的地址为你的服务器用户名@云服务器的IP地址:/root/myblog/hexo_blog.git

先本地clone一下这个项目,前提是需要将本机的公钥文件id_rsa.pub 复制到云服务器中的authorized_keys 文件里。

设置本地hexo的_config.yml 文件

1
2
3
4
deploy:
-  type: git
   repo: `你的服务器用户名@云服务器的IP地址:/root/myblog/hexo_blog.git`
   branch: master

然后就可以使用hexo d 来提交部署,如果没有报错,则继续往下走。

五、云服务器git 钩子设置

云服务器上的git的钩子设置是为了将提交上来的文件,将其拷贝到第二步中nginx设置的域名目录

创建 /root/myblog/hexo_blog.git/hooks/post-receive

设置为

#!/bin/bash
git --work-tree=/var/www/myblog --git-dir=/root/myblog/hexo_blog.git checkout -f

保存退出,并添加执行权限,之后再hexo d 提交一下,看看是否可以正常自动部署了!

六、设置图片防盗链

其实经过上面几步的操作以后,基本上已经完成了hexo向云服务器自动部署了,但是可以再做一些优化,比如图片防盗链.

1
2
3
4
5
6
7
8
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
        access_log off;
        expires 1d;
        valid_referers none server_names *.yangyanxing.com;
        if ($invalid_referer){
            rewrite ^/ http://ww1.sinaimg.cn/large/795ab47fly1g4a6llk7wjj20c808174s.jpg;
        }
    }

valid_referers 这行的作用是配置可以识别 refer,即可以正常获取资源文件的请求,在这里配置加入白名单的请求 refer 域名。 参数说明:

  • none 代表请求的 refer 为空,也就是直接访问,比如在浏览器中直接访问图片 www.yangyanxing.com/test1.png,直接访问时,refer 会为空。
  • blocked refer 来源不为空,但是里面的值被代理或者防火墙删除了
  • server_names refer 来源包含当前的 server_nameslocation 的父节点 server 节点的 server_name 的值。
  • 字符串 定义服务器名称,比如 *.test1.com,配置后,来源是从 test1.com 就会被认为是合法的请求。
  • 正则表达式 匹配合法请求来源, 如 ~\.test2\.

当请求的 refer 是合法的,即可以被后面任一参数所匹配, $invalid_referer 的值为0, 若不匹配则值为 1, 进入 if 的代码中。我这里的设置是,如果是不合法的请求,就统一返回一张图片,也可以直接返回 403

参考文章

在Ubuntu18.04服务器上部署Hexo博客

图片防盗链

在wireshark上显示host

wireshark默认不显示目标的host,只显示IP,有时对于查看非常不直观。 可以自定义显示一些列 wireshark

点击"编辑"→"首选项" 首选项

点击下面的"+",添加一个列,类型选择Custom,字段那填写http.host,字段发生那填写0,点击OK,界面上就会显示host字段了 显示host

Android官方的uiautomator例子的实现

Android的自动化测试有很多框架,其中uiautomator是google官方提供的黑盒UI相关的自动化测试工具,case使用java写,今天实践了一下官方文档中样例程序,其中还是有一些小问题需要总结一下的。 前几天试着使用uiautoamtor在真实的项目中写了一个简单的测试 使用Uiautomator做基于UI界面的测试

使用ADT创建一个java的项目

在创建项目的时候要加上JUnit与你使用的Android platforms中对应的android.jar与uiautomator.jar

image

七牛cdn缓存导致ajax评论失效

在使用了七牛的CDN后,发现在评论的时候会出现405错误

{"error":"get from image source failed: E405"}

在网上查了查,这个问题出现的还挺多的,解决办法是改comments-ajax.js这个文件

1.在comments-ajax.js文件中下面这段程序的后面(参考cdn缓存导致ajax评论失效):

1
2
3
4
5
var i = 0, got = -1, len = document.getElementsByTagName('script').length;
while ( i <= len && got == -1){
    var js_url = document.getElementsByTagName('script')[i].src,
            got = js_url.indexOf('comments-ajax.js'); i++ ;
}

java中面向对象的一点学习总结

最近开始看java的一些东西,感觉比python麻烦些,今天学习了面向对象的一些东西,觉得挺多挺复杂,这里做个知识总结

以一个简单的例子来说明java面向对象的三大特性,封装,继承,多态,有一个动物(Animal)基类,定义了run与eat方法,然后有一个猫(Cat)与狗(Dog)的子类继承了动物这个父类,子类重写(override)了父类的run与eat方法,同步又重载(overload)了run与eat方法,同时又定义了一个交配(Icopulation)的接口,让狗来implements交配接口,同时又创建一个Human类来专门implements交配接口

795ab47fjw1ejo4u6epeoj20ab083jrh

下面是具体的实现代码,没有什么实际的应用,只是作为学习用

解决wordpress后台写日志时编辑器加载慢

空间放在国外的人基本都有一个感受,有时加载很慢,我最近用wordpress写文章的时候,默认的编辑器加载很慢 有时都无法写博客下图中红框圈出来的位置加载太慢,后来网上查了查相应的资料,原来是有一个.js文件导致的,那个文件有200多K 所以有时对于主机放在国外的朋友很慢,其实这里只要把这个js文件放到国内服务器,加载速度就能提高很快

到你的wordpress目录 wp-includes/js/tinymce取出tiny_mce.js文件,然后将其放到国内一个访问快的服务器,别说你没有啊,实在没有的话用新浪的SAE。然后找到打开wp-includes/class-wp-editor.php 这个文件,找到大概540行左右

北京工业大学内两个网卡分别访问内网与外网的方法

相信很多在北京工业大学的童鞋都知道内网有很多资源,但是由于学校内的网络是按流量收费的,所以对于外网拥有的更多好资源有时只能另想办法,于是很多宿舍开始办理201宽带,但是最快的网速也不及内网10M/s下载爽,于是我在网上找了一些方法,结合北工大的网络环境,写了一个批处理文件来解决同时访问内网与外网的方法

1.网络现状:有线接内网,无线接ADSL宽带。

2.首先查看自己内网与ADSL的IP与网关

内网  IP  172.27.28.96 网关 172.27.28.254

ADSL IP  192.168.1.105 网关 192.168.1.1

3. 再建一个txt文档,输入以下信息,重新保存为.bat文件,