mysql正常运行偶尔会自动停止

一个外包项目的mysql数据库服务今晚上突然自己停止了, 回来查看mysqld进程确实没了, 然后查看mysql的error_log, 发现错误如下

result

这个是因为mysql升级软件包之后, 一些表的结构发生变化导致的, 可以运行如下命令解决:

mysql_upgrade -u root -p

结果如下:

result

阅读全文 »


python中用type来创建一个类

起因是和同事讨论Python中的枚举类型的作用与php中有什么不同,后来发现python2.7中本身不带枚举类的,需要自己写代码实现, 3中已经自带枚举类的包了, 用type函数实现,一般我们用type来判断对象的类型(我更倾向用isinstance来判断), 但是type比较 少用的作用是用来创建一个类

代码如下

def __init__(self, name):
    self.name = name


def print_name(self):
    print(self.name)


bases = (object,)

attrs = {
    '__init__' : __init__,
    'print_name' : print_name
}

Duck = type('Duck', bases, attrs)

d = Duck('cola')
d.print_name()

其中type函数包括三个参数, 第一个是类的名字, 第二个可以理解成继承的类,但要是元组格式, 第三个参数是个dict类型, 里面可以包含类的成员变量 ,也可以包含类的成员函数—-其实当你用class定义一个类的时候, python解释器在遇到class的时候只会浏览检测一下class的语法之类的东西, 然后接着会用 内置的type函数来创建类.

阅读全文 »


常用的各种linux系统安装nodejs

有的时候node源码下载编译安装的时候会有各种依赖包的版本问题, 所以采用命令方式安装比较简单, 如下:

Debian7/8 和 Ubuntu12/14/16

nodejs>=6.x

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs

nodejsv7:

curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs

Centos Or Fedora

nodejs >= 6.x

curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
yum -y install nodejs

nodejs v7

curl --silent --location https://rpm.nodesource.com/setup_7.x | bash -
yum -y install nodejs

当然还有些0.10低版本之类的node就不考虑的, out了

阅读全文 »


杨辉三角

算法代码为

#!/usr/local/bin/python3
# _*_ coding: utf-8 _*_

def triangle(max):
    q = [1]
    n = 0
    while n < max:
        print(q)
        for i in range(1, len(q)):
            q[i] = p[i-1] + p[i]

        q.append(1)
        n = n + 1
        p = q[:]



triangle(6)

效果为:

result

阅读全文 »


汉诺塔算法

下午研究下汉诺塔算法, 挺有意思的, 大体示意图如下: hannuota

说明:A.B.C分别表示三根柱子, 1,2,3分别表示三个圆盘, 并且数字越大表示圆盘越大, 现在我们需要将A上的全部圆盘移动到C上

  1. 只有一个圆盘1的情况, 直接从A->C
  2. 有2个圆盘1 2, 则 A->B A->C B->C
  3. 有3个圆盘1 2 3的情况下, 总共需要7步。 A->C A->B C->B A->C B->A B->C A->C

分析过程, 不管有几个盘子, 最重要的就是A->C(步骤中加粗)这一步, 也就是把数字最大的盘子移动到C柱子上, 以3个盘子为例, 在A->C步骤的上面表示把1号和2号盘子 从起点A移动到终点B, 下面表示把1号盘子和2号盘子从起点B移动到终点C, 所以可以用一种递归的思想表示这个过程

假如函数原型是move(n, A, B, C)
#上面的部分: n-1个圆盘从A->B
move(n-1, A, C, B)
#中间部分, 号码最大的盘子从A->C
move(1, A, B, C)
#下面部分: n-1个圆盘从B->C
move(n-1, B, A, C)

算法代码为

#!/usr/local/bin/python3
# _*_ coding: utf-8 _*_

def move(n, a, b, c):
    if n == 1:
        print(a, '->', c)
    else:
        move(n-1, a, c, b)
        move(1, a, b, c)
        move(n-1, b, a, c)

count = input("请输入要移动到圆盘个数: ")
move(int(count), 'A', 'B', 'C')

效果为:

result

阅读全文 »


acsii-unicode-utf8编码的来源以及关系

周末的时候细下心来查询整理下了一下字符串编码的来源以及各种格式之间的关系,以下纯属自己的理解思路,如有误,欢迎指出:


  1. 关于ascii码
    最早的时候计算机是由老外发明的, 他们只把127个字符编码到计算机中, 其中包括大小写字母和一些特殊符号, 这个
    编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122, 所以针对ascii编码而言, 1个字节(8
    个byte)足以了, 因为1个字节最大二进制表示为 11111111, 十进制位256
    
  2. 关于中文编码
    第一条说的英文, 对于中文而言, 1个字节明显不够, 刚刚百度查了下, 中国的汉字大约有10W多个, 至少2个字节吧,
    2个字节最大为 1111111111111111十进制数位 65535 ,所以中国就出现了GBK系列的编码, 但是如果每个国家都制定自己的一套编码那岂不是乱套了吗, 所以为了统一unicode编码就出现了
    
  3. unicode编码
    unicode把所有的编码都统一到一套编码里, 它的标准也在不停的扩展, 最常用的是用两个字节表示一个字符(这个地
    方的字符是不区分英文还是中文的), 所以到目前为止, ascii码和unicode编码的区别就是前者采用一个字节编码(其实连一个字节都用不上,总共127个字符, 7个byte正好就够了), 后者用两个字节但是如果你写的文本全是英文的话,
    采取unicode编码是不是就有点浪费空间了呢, 对于存储和传输都是十分不利的, 比如字母A在ascii编码中存储的二
    进制为01000001, 但是在unicode编码中为 00000000 01000001, 为了解决这种情况, 就出现了一种变长的unicode编码, 被称为 utf-8 编码
    
  4. utf-8编码
    utf-8规定, 把一个unicode字符编码成1-6个字节, 常用的英文被编码成1个字节(unicode是2个字节), 中文一般
    用3个字节(unicode也是2个字节), 只有那些很生僻的汉字才会用到4-6个字节
    

字符 ASCII码 unicode编码 utf-8编码
A –01000001– –00000000 01000001– –01000001–
–x– –01001110 00101101– –11100100 10111000 10101101–

另外, 在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件

阅读全文 »