CIFAR-10

1.about CIFAR-10

用于训练分类的数据库,一共10种分类。 地址:http://www.cs.toronto.edu/~kriz/cifar.html

2.模型

CIFAR-10

如图所示,当前使用的结构为
(C + MP) * 2 + F*3
> (C: convolutional卷积层, MP: maxpooling, F: full connect)

3.结果

  • 2017-09-17 Accuracy : 62% 用时4h
  • To be continued

Q-Learning

1.主题思想

  • 1.创建一个Q表。存放所有环境状态(S), 行动(A), 奖励(R), 后续可以根据环境查表。获取奖励最大的行动
  • 2.初始化环境
  • 3.获取环境的状态 observation (s)
  • 4.查Q表获得行动 action (a)
  • 5.用action 去更新环境, 获得新的状态 observation_(s_) 和 奖励 reward (r) .得 Q现实 = reward + gamma * Q_max(observation_, action_)。 其中Q_max(observation_, action_)为查Q表获得的下一步最大的奖励的值
  • 6.用action 去查询Q表。获得 Q估计 = Q(s, a)
  • 7.error = Q现实 - Q估计
  • 8.利用梯度下降或者其他activation不断学习,降低error。 Q(s, a) = Q(s, a) + alpha * error

2.算法

Q-Learning

Sarsa

1.主题思想

* 与Q-Learning类似。但是第5步中获取 Q现实不同。
  Q-learning是查询Q表获取最大的奖励reward
  sarsa是将环境代入Q表和算法中获取下一步的行动action_和奖励 Q(observation_, action_)

2.算法

Sarsa

Sarsa(lambda)

1.算法

Sarsa

DQN

1.主题思想

  • 1.与Q-learning类似,但是Q-learning方法对于状态连续的,状态数量无限多的情况不适用。所以使用神经网络代替Q表。 类似于用一个复杂的方程代替Q表。输入环境状态 s 和 行动 a 获得 对应的奖励reward
  • 2.用2个Neural Network.一个(N_eval)用于Q现实。一个(N_target)用于Q估计。
  • 3.N_target的参数快于N_eval. N_eval用于计算Q_现实 N_target不断训练。与N_eval的值对比。一定步数之后将N_eval的参数替换为N_target的。

2.算法

Sarsa

0. design model

设计模型: lay_in, lay_hidden, lay_out design model

1. randomly initalize theta

initalize each theta(l) to a random value [-e, e] randomly initalize theta

2. forward propagation

2.1. compute a(l)

计算 layer l 上的 a(l) compute a(l)

2.2. compute cost J(theta)

compute cost J(theta) # 3. back propagation # 3.1. compute delta compute delta

3.2. compute Delta

compute Delta

3.3. compute partial derivatives

compute partial derivatives
compute partial derivatives

4. add regularizaton

5. gradient checking

利用一个小规模的模型,来验证代码的正确性 gradient checking

6. use gradient descent or advanced optimization method try to minimize J(theta)

使用梯度下降或者高级方式迭代(如:fmincg), 最小化代价 J(theta)

options = optimset('MaxIter', 50);
costFunction = @(p) nnCostFunction(p, ...
input_layer_size, ...
hidden_layer_size, ...
num_labels, X, y, lambda);
[nn_params, cost] = fmincg(costFunction, initial_nn_params, options);

P.S.

写公式的方法
<img src="http://chart.googleapis.com/chart?cht=tx&chl= 在此插入Latex公式" style="border:none;">
例如:
<img src="http://chart.googleapis.com/chart?cht=tx&chl=\Large x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}" style="border:none;">

效果

什么是ZeroNet?

ZeroNet是一个去中心化的类似于Internet的网络,由匈牙利的开发者使用Python制作,完全开源。网站由特殊的"ZeroNet URL"可以被使用一般的浏览器通过ZeroNet程序浏览,就像访问本地主机一样。ZeroNet默认并不匿名,但是用户可以通过内置的Tor功能进行匿名化。ZeroNet使用Bitcoin加密算法及BitTorrent网络。 防DMCA Take down 由于ZeroNet去中心化的原因,国外有人制作了一个ZeroNet版本的海盗湾,,这个网站可让版权所有者头疼啦...一般的网站服务器都有IP地址,不抗投诉的ISP收到了向IP WHOIS滥用信箱发送的DMCA投诉信的话,你就要和你的网站说再见了..(俗称 DMCA Take down),可用了ZeroNet后,并没有一台服务器是真实的服务器,任何访客都有可能成为服务器,还有些访客使用了Tor,更找不到真正的物理地址。 功能 实时站点更新 支持 Namecoin 的 .bit 域名 安装方便: 只需解压并运行 一键克隆存在的站点 无需密码、基于 BIP32 的认证:用与比特币钱包相同的加密方法用来保护你的账户 你的账户被使用和比特币钱包相同的加密方法 内建 SQL 服务器和 P2P 数据同步: 让开发更简单并提升加载速度 匿名性: 完整的 Tor 网络支持,支持通过 .onion 隐藏服务相互连接而不是通过IPv4地址连接 TLS 加密连接 自动打开 uPnP 端口 插件和多用户 (开放式代理) 支持 全平台兼容 原理 在你运行zeronet.py后你将可以通过http://127.0.0.1:43110/{zeronet_address} (比如.http://127.0.0.1:43110/1HeLLo4uzjaLetFx6NH3PMwFP3qbRbTf3D)。访问 zeronet 中的站点。 在你浏览 zeronet 站点时,客户端会尝试通过 BitTorrent 网络来寻找可用的节点,从而下载需要的文件 (html, css, js...) 你将会储存每一个浏览过的站点 每个站点都包含一个名为 content.json ,它储存了其他所有文件的 sha512 hash 值 和一个通过站点私钥建立的签名 如果站点的所有者 (拥有私钥的那个人) 修改了站点, 并且他/她签名了新的 content.json 然后推送至其他节点, 那么所有节点将会在验证 content.json 的真实性 (使用签名)后, 下载修改后的文件并推送至其他节点。 有关于 ZeroNet 加密, 站点更新, 多用户站点的幻灯片 » 常见问题 » ZeroNet开发者文档 »

好了,说点有用的: 1.可以建自己的网站,你基本上不用做什么。 2.基于p2p原理,你只要建好并有人浏览过,即使你自己关机,你的网站依然在全球存在。别人想关你站,没门。 3.基于p2p原理,支付内网穿透,也就是说你在内网也没关系,手机也没问题。 4.基于比特币原理,账号很安全,谁也不知道你是谁,谁也盗不去。 5.不需要域名,任何人访问都使用http://127.0.0.1:43110/字符串 来访问。 6.不用gg fb和tt你就能浏览全世界 项目地址:该项目的官方网址为: https://github.com/hellozeronet/zeronet 下载地址:https://github.com/HelloZeroNet/ZeroBundle/raw/master/dist/ZeroBundle-win.zip 相关说明:http://www.wanbizu.com/news/201603086775.html 安装方法?其实很简单,到官网zeronet.io下载,解压,双击运行,等进度走完就会自动打开默认浏览器,你就可以访问了。一般新系统都能正常运行,老系统有两种情况:如果自动打开浏览器后发现页面显示不正常,说明你的IE不支持,用chrome或者firefox浏览器来打开127.0.0.1:43110就行了。XP用户如果运行不了,那就需要下载安装微软的VC2008 Redistributable Package运行环境,才1MB多,搜一下就有了。 安装:解压后运行zeronet.cmd

安装后你唯一要做的,是注册一个id。 http://127.0.0.1:43110/zeroid.bit

如何加入 ?

下载 ZeroBundle 文件包: Microsoft Windows Apple OS X Linux 64bit Linux 32bit 解压缩 运行 ZeroNet.cmd (win), ZeroNet(.app) (osx), ZeroNet.sh (linux) 如果你在 OS X 上遇到了 "classic environment no longer supported" 错误,请打开一个终端然后把 ZeroNet.app 拖进去 在你打开时他将会自动下载最新版本的 ZeroNet 。 ## Linux 命令行 wget https://github.com/HelloZeroNet/ZeroBundle/raw/master/dist/ZeroBundle-linux64.tar.gz tar xvpfz ZeroBundle-linux64.tar.gz cd ZeroBundle 执行 ./ZeroNet.sh 来启动 在你打开时他将会自动下载最新版本的 ZeroNet 。 在 Debian Linux 中手动安装 sudo apt-get update sudo apt-get install msgpack-python python-gevent wget https://github.com/HelloZeroNet/ZeroNet/archive/master.tar.gz tar xvpfz master.tar.gz cd ZeroNet-master 执行 python zeronet.py 来启动 在你的浏览器中打开 http://127.0.0.1:43110/ ## Vagrant vagrant up 通过 vagrant ssh 连接到 VM cd /vagrant 运行 python zeronet.py --ui_ip 0.0.0.0 在你的浏览器中打开 http://127.0.0.1:43110/ ## Docker

docker run -d -v <local_data_folder>:/root/data -p 15441:15441 -p 43110:43110 nofish/zeronet
# 这个 Docker 镜像包含了 Tor ,但默认是禁用的,因为一些托管商不允许你在他们的服务器上运行 Tor。如果你希望启用它, 设置 ENABLE_TOR 环境变量为 true (默认: false). E.g.:
Docker run -d -e "ENABLE_TOR=true" -v <local_data_folder>:/root/data -p 15441:15441 -p 43110:43110 nofish/zeronet
在你的浏览器中打开 http://127.0.0.1:43110/ ## Virtualenv
virtualenv env
source env/bin/activate
pip install msgpack-python gevent
python zeronet.py
在你的浏览器中打开 http://127.0.0.1:43110/ 现有限制 没有类似于 BitTorrent 的文件拆分来支持大文件 没有比 BitTorrent 更好的匿名性 (已添加内置的完整 Tor 支持) 传输文件时没有压缩和加密 (已添加 TLS 支持) 不支持私有站点 # 如何创建一个 ZeroNet 站点? 如果 zeronet 在运行,把它关掉 执行: $ zeronet.py siteCreate ... - Site private key: 23DKQpzxhbVBrAtvLEc2uvk7DZweh4qL3fn3jpM3LgHDczMK2TtYUq - Site address: 13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2 ... - Site created! $ zeronet.py ... 你已经完成了! 现在任何人都可以通过 http://localhost:43110/13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2 来访问你的站点 下一步: ZeroNet 开发者文档 我要如何修改 ZeroNet 站点? 修改位于 data/13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2 的目录. 在你改好之后: $ zeronet.py siteSign 13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2 - Signing site: 13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2... Private key (input hidden): 输入你在创建站点时获得的私钥 $ zeronet.py sitePublish 13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2 ... Site:13DNDk..bhC2 Publishing to 3/10 peers... Site:13DNDk..bhC2 Successfuly published to 3 peers - Serving files.... 就是这样! 你现在已经成功的签名并推送了你的更改。 帮助这个项目 Bitcoin: 1QDhxQ6PraUZa21ET5fYUCPgdrwBomnFgX Paypal: https://zeronet.readthedocs.org/en/latest/help_zeronet/donate/ Gratipay: https://gratipay.com/zeronet/ 赞助商 在 OSX/Safari 下 BrowserStack.com 带来更好的兼容性 感谢! 更多信息, 帮助, 变更记录和 zeronet 站点: https://www.reddit.com/r/zeronet/ 在: #zeronet @ FreeNode 和我们聊天,或者使用 gitter 这里是一个 gitter 上的中文聊天室 Email: hello@noloop.me # 福利 海盗湾全球种子站:http://127.0.0.1:43110/1PLAYgDQboKojowD3kwdb3CtWmWaokXvfp/ MSDN资源区:http://127.0.0.1:43110/1AJB5rtjfB9imjDGVk5vtRtZp3zgYizbpG/ Kindle电子书:http://127.0.0.1:43110/1KHCBG6dmbKXTZNenfwhWZ5x3oDyYyHSD4 导航:http://127.0.0.1:43110/1NzWeweqJ32aRVdM5UzFnYCszuvG5xV3vS

ZeroNet站点集合 & 搜索引擎 站点集合 http://127.0.0.1:43110/138R53t3ZW7KDfSfxVpWUsMXgwUnsDNXLP/?Page:list-of-zites ( 中文翻译在这里 ) http://127.0.0.1:43110/zaphods.bit/RM.html http://127.0.0.1:43110/0list.bit/ http://127.0.0.1:43110/1Dt7FR5aNLkqAjmosWh8cMWzJu633GYN6u/ 搜索引擎 http://127.0.0.1:43110/kaffiene.bit http://127.0.0.1:43110/zerosearch.bit/ http://127.0.0.1:43110/zerofind.bit 公用开放ZeroNet代{过}{滤}理集合(注意,这些代{过}{滤}理不能确保你的帐号安全) http://127.0.0.1:43110/ZeroProxies.bit 聊天室集合 http://127.0.0.1:43110/zerochatrooms.bit 博客集合 http://127.0.0.1:43110/zeroblogs.bit ZeroNet官方帮助集合 http://127.0.0.1:43110/ZeroSupport.bit

十三章 红黑树(red-black tree)

13.1 红黑树的性质

红黑树是一个二叉搜索树,增加了一个存储位保存结点的颜色, black 或者 red 树中的结点包含5个属性: color, key, left, right, p * 1.每个结点或是红色, 或是黑色 * 2.根结点是黑色 * 3.每个叶结点(nil)都是黑色的 * 4.如果一个结点是红色, 则它的2个子结点都是黑色 * 5.对于每个结点, 到其所有后代叶结点的简单路径上,均包含相同数量的黑色结点

黑高: 从某个结点x出发,到达一个叶结点的任意一条简单路径上的黑色结点的个数称为该结点的黑高

一个有n个内部结点的红黑树高度最多为 2log(n + 1)

证明:
假设红黑树的高为h,由性质4可知:从根结点到叶结点一条简单路径上至少有一半是黑色的。即:bh(x) >= h/2
由性质4可知, 结点数量 n >= 2**bh(x) - 1
log(n+1) >= bh(x)
log(n+1) >= h/2
所以:h <= 2log(n+1)

13.2 旋转(rotation)

rotation * 左旋(left-rotation)

def left_rotation(T, x):
y = x.right
x.right = y.left
if y.left != T.nil:
y.left.p = x
if x.p == T.nil:
T.root = y
elif x == x.p.left:
x.p.left = y
else:
x.p.right = y
x.p = y
y.left = x
* 右旋(right-rotation)
def right_rotation(T, x):
y = x.p
y.left = x.right
if x.right != nil:
x.right.p = y
if y.p == T.nil:
T.root = x
elif y.p.left == y:
y.p.left = x
else:
y.p.right = x
x.right = y
y.p = x
## 13.3 插入 RB-INSERT插入结点后后需要一个辅助程序RB-INSERT-FIXUP对结点重新着色并旋转
def RB_INSERT(T, z):
pass

13.4 删除

1.设置文件my.conf中的mysqld添加配置

server_id       = 1
log_bin = /var/log/mysql/mysql-bin.log # 二进制日志保存的路径
expire_logs_days = 10
max_binlog_size = 100M
binlog_ignore_db = mysql # 不写入日志的数据库
binlog_ignore_db = test # 多个需要重复设置

2.重启进入mysql查看

mysql> show binary logs;
+--------------+-----------+
| Log_name | File_size |
+--------------+-----------+
| mysql.000001 | 20437849 |
| mysql.000002 | 102119 |
| mysql.000003 | 488825 |
| mysql.000004 | 18150699 |
| mysql.000005 | 36176222 |
+--------------+-----------+

mysql> show master status;
+--------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+--------------+----------+--------------+------------------+-------------------+
| mysql.000005 | 36205491 | | mysql,test | |
+--------------+----------+--------------+------------------+-------------------+

3. 全量备份

shell> mysqldump --single-transaction --flush-logs --master-data=2 \
--all-databases > backup_sunday_1_PM.sql

--single-transaction 单独的事务 --flush-logs 刷新二进制日志 --master-data

1.转换图片大小

convert -resize 50% old.jpg new.jpg

2.项目启动celery服务

celery worker --app=taidii  --loglevel=info --logfile=celery-worker-default-out.log

celery beat --app=taidii --loglevel=info

3.项目修改js之前

cd static/js/app/modules/
babel --presets react --watch reactSrc/ --out-dir reactBuild/

4.ssh保持连接

ssh -o TCPKeepAlive=yes -o ServerAliveInterval=300

5.django south

python manage.py syncdb
python manage.py convert_to_south appname
p
python manage.py schemagration appname --initial
python manage.py schemagration appname --auto
python manage.py migrate appname --fake 00001.xxx
python manage.py migrate appname

6. markdown 语法

6.1. 脚注

使用 [^keyword] 表示注脚。 keyword

6.2. 内容目录

使用[TOC]引用目录 toc

6.3 待办事宜 Todo 列表

使用带有 [ ] 或 [x] (未完成或已完成)项的列表语法撰写一个待办事宜列表例如: todo

6.4 表格

todo

6.5 流程图和时序图

  • 流程图: todo

  • 时序图: todo

6.6 LaTeX 公式

  • $ 表示行内公式: todo

  • $$ 表示整行公式: todo

git 统计

# 1、统计某人的代码提交量,包括增加,删除
git log --author="$(git config --get user.name)" --since=2014-07-01 --until=2016-08-01 --pretty=tformat: --numstat | awk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }'

# 2、仓库提交者排名前5(如果看全部,去掉head管道即可)
git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5

^M: bad interpreter

window下编辑过的文件放到unix系统执行。会报错。

使用vi打开文件

:set fileformat=unix

然后:w保存,即可

Powershell使用linux风格的快捷键

# 打开powershell配置文件
notepad.exe $PROFILE
# 添加下面一行
Set-PSReadlineOption -EditMode Emacs

nginx添加自定义的ssl

制作密钥

openssl genrsa -out test.key 2048

制作证书

openssl req -new -x509 -days 365 -key test.key -out test.crt

修改nginx配置

server {
listen 443;
server_name test.com; # 改为绑定证书的域名
ssl on;
ssl_certificate /etc/nginx/ssl/test.crt; # 改为自己申请得到的 crt 文件的名称
ssl_certificate_key/etc/nginx/ssl/test.key; # 改为自己申请得到的 key 文件的名称
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html; #站点目录
index index.html index.htm;
}
}

svn clean up failed

  1. 安装sqlite3命令行工具 (sqlite-tools-win32) from http://www.sqlite.org/download.html
  2. sqlite3 .svn/wc.db "select * from work_queue"
  3. sqlite3 .svn/wc.db "delete from work_queue"

清除命令行记录和登陆记录

sudo lastlog -C -u <username>

history -c

python多cpu build

MAKEFLAGS="-j$(nproc)" pip install xxx

redis设置用户名密码权限

参考redis docs

ACL SETUSER username on >PASSOWRD allchannels ~* allcommands
ACL SETUSER 用户名 on >密码 key 命令
# 示例
ACL SETUSER xm on >admin123 allchannels ~* allcommands

kafka

消费者

kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning --group group-python-test

生产者

kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test

golang交叉编译

GOOS=linux GOARCH=amd64 go build -o <output>

centos添加启动项

在CentOS中添加启动项通常需要创建一个Systemd单元文件来管理服务。下面是一些简单的步骤来实现这个过程:

  1. 创建一个名为<服务名称>.service的文件,其中<服务名称>是你想要添加的服务名称。可以使用任何文本编辑器创建该文件。
sudo vi /etc/systemd/system/<服务名称>.service
  1. 在打开的文件中,输入以下内容:
[Unit]
Description=<服务描述>
After=network.target

[Service]
ExecStart=<可执行文件的路径>
Restart=on-failure

[Install]
WantedBy=multi-user.target

确保将<服务描述>替换为对你的服务的简短描述,并将<可执行文件的路径>替换为你要运行的可执行文件的路径。

  1. 保存并关闭文件。

  2. 运行以下命令来重新加载Systemd配置:

sudo systemctl daemon-reload
  1. 运行以下命令以启用并启动服务:
sudo systemctl enable <服务名称>.service
sudo systemctl start <服务名称>.service

确保将<服务名称>替换为你在步骤1中创建的服务名称。

现在,你的服务将在CentOS启动时自动启动。你可以使用以下命令来管理服务:

sudo systemctl stop <服务名称>.service  # 停止服务
sudo systemctl restart <服务名称>.service # 重启服务
sudo systemctl status <服务名称>.service # 查看服务状态

aria2

# 文件的保存路径 (可使用绝对路径或相对路径), 默认:当前启动位置
# D:\Download 是我的默认下载目录,可以改为你自己的下载路径
dir=D:\Download

# 开启 BT 下列设置
enable-dht=true
bt-enable-lpd=true
enable-peer-exchange=true

# bt-tracker 更新,解决 Aria2 BT 下载速度慢没速度的问题
bt-tracker=udp://tracker.opentrackr.org:1337/announce,udp://9.rarbg.com:2810/announce,udp://opentracker.i2p.rocks:6969/announce,https://opentracker.i2p.rocks:443/announce,udp://tracker1.myporn.club:9337/announce,udp://tracker1.bt.moack.co.kr:80/announce,udp://tracker.torrent.eu.org:451/announce,udp://p4p.arenabg.com:1337/announce,udp://open.stealth.si:80/announce,udp://open.demonii.com:1337/announce,udp://ipv4.tracker.harry.lu:80/announce,udp://explodie.org:6969/announce,udp://exodus.desync.com:6969/announce,https://tracker.tamersunion.org:443/announce,https://tracker.nanoha.org:443/announce,https://tracker.lilithraws.org:443/announce,https://tr.burnabyhighstar.com:443/announce,https://1337.abcvg.info:443/announce,http://tracker.mywaifu.best:6969/announce,http://bt.okmp3.ru:2710/announce

mac删除无用的支持在后台服务

# 查找对应的服务
ls /Library/LaunchDaemons/
ls /Library/LaunchAgents/

#
sudo rm /Library/LaunchDaemons/<对应的服务>
sudo rm /Library/LaunchAgents/<对应的服务>

user加入docker的group

# 查看group
groups
# 加入docker组
sudo gpasswd -a $USER docker
# 重启docker后生效

switch游戏nsz转为nsp

安装: https://github.com/nicoboss/nsz/releases/

nsz -D /path/to/your/game.nsz

1.主服务器

1.1 设置好配置文件

cnf配置文件一般会有四个,可以根据命令 # ll /usr/share/mysql/*.cnf 查看;

my-small.cnf 内存少于或等于64M,只提供很少的的数据库服务;

my-medium.cnf 内存在32M--64M之间而且和其他服务一起使用,例如web;

my-large.cnf 内存有512M主要提供数据库服务;

my-huge.cnf 内存有1G到2G,主要提供数据库服务;

my-innodb-heavy-4G.cnf 内存有4G,主要提供较大负载数据库服务(一般服务器都使用这个);

可以根据服务器配置的不同选择不同的cnf配置文件。

my.cnf

[mysqld]
server-id = 1 # 必须,id,一般取IP最后一段
log-bin = mysql-bin # 必须,二进制日志文件
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = include_database_name # 包括的库名称 多个可换行多次设置
binlog_ignore_db = include_database_name # 不包括的库名称 多个可换行多次设置

1.2 配置好给从服务器登陆的账号,重启

grant replication slave on *.* to `tom`@`192.168.1.196` identified by 'password';
### 1.3 查看主服务器状态
mysql> show master status;
### 1.4 备份数据库(如果从服务器也为新建库,则不需要此操作)

备份数据库的方法有很多种:如果在同一局域网可以直接复制数据库,也可以用工具直接进行数据导入。

复制数据库用打包的方法:

cd/data 转到存放Mysql数据库的路径下

tarcvfz testcreate.tar.gz db/

再从数据库中进行复制解压

cd/data

scp 192.168.1.61:/data/testcreate.tar.gz

tar xvfz testcreate.tar.gz

2 从服务器

2.1. 配置从库服务my.cnf文件

# vi etc/my.cnf 对其进行如下修改:

Server-id = 2 # 这里ID改为2 因为主库为1;

log-bin = mysql-bin  # 必填项,用于数据同步;

master-host = 192.168.1.60 # 主库IP;

master-user = test # 同步用的账户;

master-password = 123456 # 同步账户密码,主库时的设置;

master-port = 3306 # 同步数据库的端口号。

2.2 重启从库服务器

#service mysqld restart

如果重启失败则配置文件有问题,需重新检查配置。

2.3 调整复制过来的数据库的权限(如果有从主库复制过来的数据库)

主库复制过来的数据库权限都为root权限,需要修改为mysql权限

#chown–R mysql:mysql /var/lib/mysql

如果从库是新建的库就不需要进行此步骤

2.4 显示从服务器状态

进行mysql服务器:

mysql>showslave status\G;
查看Slave_IO_Running和Slave_SQL_Running都是yes则成功

例如:

$ docker pull ubuntu:16.04
Trying to pull repository docker.io/library/ubuntu ...
Get https://registry-1.docker.io/v2/library/ubuntu/manifests/sha256:dd7808d8792c9841d0b460122f1acf0a2dd1f56404f8d1e56298048885e45535:
Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fubuntu%3Apull&service=registry.docker.io:
read tcp *.*.*.*:41348->50.17.62.194:443:
read: connection reset by peer
  • 原因:目测50.17.62.194被TCP重置。

  • 解决方法:

    找到其可用IP:

    $ dig auth.docker.io

     <<>> DiG 9.10.4-P6-RedHat-9.10.4-4.P6.fc25 <<>> auth.docker.io
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7119
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;auth.docker.io. IN A

    ;; ANSWER SECTION:
    auth.docker.io. 60 IN A 34.193.147.40
    auth.docker.io. 60 IN A 50.17.62.194
    auth.docker.io. 60 IN A 52.5.246.212

    ;; Query time: 130 msec
    ;; SERVER: *.*.*.*#53(.*.*.*.*)
    ;; WHEN: Tue Mar 07 11:03:29 CST 2017
    ;; MSG SIZE rcvd: 91
    改/etc/hosts强制docker.io相关的域名解析到其它可用IP:

    vi /etc/hosts
    34.193.147.40 registry-1.docker.io auth.docker.io

顺便附上关于镜像的描述以及现在有哪些镜像提供商

首先,需要明确一个问题:Mirror 与 Private Registry 有什么区别?

抄自daocloud的说明:

二者有着本质的差别。

Private Registry 是开发者或者企业自建的镜像存储库,通常用来保存企业内部的 Docker 镜像,用于内部开发流程和产品的发布、版本控制。 Mirror 是一种代理中转服务,我们(指daocloud)提供的 Mirror 服务,直接对接 Docker Hub 的官方 Registry。Docker Hub 上有数以十万计的各类 Docker 镜像。 在使用 Private Registry 时,需要在 Docker Pull 或 Dockerfile 中直接键入 Private Registry 的地址,通常这样会导致与 Private Registry 的绑定,缺乏灵活性。 使用 Mirror 服务,只需要在 Docker 守护进程(Daemon)的配置文件中加入 Mirror 参数,即可在全局范围内透明的访问官方的 Docker Hub,避免了对 Dockerfile 镜像引用来源的修改。

简单来说,Mirror类似CDN,本质是官方的cache;Private Registry类似私服,跟官方没什么关系。对我来说,由于我是要拖docker hub上的image,对应的是Mirror。 yum/apt的mirror又有点不一样,它其实是把官方的库文件整个拖到自己的服务器上做镜像(不管有没有用),并定时与官方做同步;而Docker mirror只会缓存曾经使用过的image。

目前国内访问docker hub非常便秘,使用docker mirror势在必行。现有提供服务的有三家:ustc、daocloud、aliyun,下面会一一介绍。

1. 网易163 docker镜像

$ sudo echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=http://hub-mirror.c.163.com\"" >> /etc/default/docker
$ service docker restart

2. ustc的镜像

ustc是老牌的Linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。之前在blog里有提到可以用ustc的docker仓库镜像,使用方法参考ustc docker 镜像使用帮助。

ustc的docker镜像速度不错,一直用的挺happy。但是今天发现不好使了,可能跟这件事有关系吧,今天尝试去pull ubuntu,非常慢,应该是直接去docker hub上去拉了,基本没有加速效果。

ustc docker mirror的优势之一是,不需要注册,公共服务(这才是我熟悉的ustc嘛)。

3. daocloud

DaoCloud也提供了docker加速器,但是跟ustc不同,需要用户注册后才能使用,并且每月限制流量10GB。linux上使用比较简单,一条命令搞定:

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://{your_id}.m.daocloud.io

实际改的是/usr/lib/systemd/system/docker.service,加了个–registry-mirror参数,:

ExecStart=/usr/bin/docker-current daemon --registry-mirror=http://{your_id}.m.daocloud.io

设置后,需要重新加载配置&重启:

systemctl enable docker; systemctl daemon-reload ; systemctl restart docker

但是!今天使用DaoCloud的docker加速器体验非常差,加速效果基本没感觉,果断放弃。 ## 4. alicloud

阿里云也提供了docker加速器,不过比ustc更麻烦:不光要注册为阿里云的用户,还得加入开发者平台。不过捏着鼻子昨晚这些以后,它的服务还真是不错,基本1MB/s的pull速度(部分原因可能是因为我也在杭州吧)。配置方法跟daocloud类似,也是开通加速器以后给一个url。

我直接去改/usr/lib/systemd/system/docker.service了:

ExecStart=/usr/bin/docker-current daemon --registry-mirror=https://{your_id}.mirror.aliyuncs.com\

重新加载配置&重启:

systemctl enable docker; systemctl daemon-reload ; systemctl restart docker

pull的时候还是显示docker.io,但速度一点都不docker.io。

# docker pull ubuntu
Using default tag: latest
Trying to pull repository docker.io/library/ubuntu ...
latest: Pulling from docker.io/library/ubuntu
cad964aed91d: Pull complete
3a80a22fea63: Pull complete
50de990d7957: Pull complete
61e032b8f2cb: Pull complete
9f03ce1741bf: Pull complete
Digest: sha256:28d4c5234db8d5a634d5e621c363d900f8f241240ee0a6a978784c978fe9c737
Status: Downloaded newer image for docker.io/ubuntu:latest

算法 最坏情况运行时间 平均/期望运行时间
1 插入排序 Θ(n**2) Θ(n**2)
2 归并排序 Θ(nlgn) Θ(nlgn)
3 冒泡排序 Θ(n**2) Θ(n**2)
4 选择排序 Θ(n**2) Θ(n**2)
5 堆排序 Θ(nlgn)
6 快速排序 Θ(n**2) Θ(nlgn)
7 计数排序 Θ(n + k) Θ(n + k)
8 基数排序 Θ(d(n + k)) Θ(d(n + k))
9 桶排序

1.插入排序

  • 思路:类似于抽牌的过程,右手一张张地抽牌,每次右手抽的牌对比左手中已经排序好的牌,放在左手相应的位置中 example1
def sort_insert(lista):
for i in xrange(1, len(lista)): # 右手抽的牌
right_num = lista[i]
j = i #左手边起始对比的位置
while (j > 0) and (lista[j-1] > right_num): # 左边比较大的时候
lista[j] = lista[j-1] # 坐标的数字往后移
j -= 1
lista[j] = right_num
return lista

2.归并排序

  • 思路:
    1. 将数组划分为2个排好顺序的数组A和B
    2. 每次从2个数组中抽出一个最小的放在另一个数组C中,直到A、B其中一个数组被取完,将A、B中未取完的数组放入C中
def sort_merge(lista):
def compare(A, B): #步骤2
result = []
i, j = 0, 0
while i < len(A) and j < len(B):
if A[i] < B[j]:
result.append(A[i])
i += 1
else:
result.append(B[j])
j += 1
result.extend(A[i:])
result.extend(B[j:])
return result

def merge(lista): #步骤1,将数组分为2个数组A,B
if len(lista) == 1:
return lista
else:
mid = len(lista) // 2
left = merge(lista[:mid])
right = merge(lista[mid:])
return compare(left, right)
return merge(lista)

3.冒泡排序

  • 思路: 从左往右,从第一个数字开始,左边一个与右边一个数字对比,如果左边比右边大,就交换顺序,然后再从第二个数字开始迭代
def sort_bubble(lista):
length = len(lista)
for i in xrange(length-1):
for j in xrange(i, length-1):
if lista[j] > lista[j+1]: #如果左边大于右边,交换位置
lista[j], lista[j+1] = lista[j+1], lista[j]
return lista

4.选择排序

  • 思路: 类似于冒泡排序,但是循环的时候是找出最小的数值,与循环的起始位置交换顺序
def sort_selection(lista):
length = len(lista)
for i in xrange(length - 1):
minum = i
for j in xrange(i, length):
if lista[j] < lista[minum]:
minum = j
lista[i] = lista[minum]
return lista

5.堆排序

  • 思路: 1.将数组看做一个最大二叉堆 2.维护最大二叉堆的性质,父节点大于子节点 3.然后从根节点取出元素放到后面,重新维护最大堆的性质 4.重复3步骤,直到剩下最后1个元素
def sort_heap(lista):
def Father(i): # 父节点 i的一半向下取整 └ i/2 ┘
return (i+1)//2 - 1
def Left(i): # 左孩子节点
return (i+1)*2 - 1
def Right(i): # 右孩子节点
return (i+1)*2 + 1 - 1
def max_heapify(A, i): # 维护最大堆的性质
global heap_size
l = Left(i)
r = Right(i)
lastest = i
if l <= heap_size and l > A[lastest]:
lastest = l
if r <= heap_size and r > A[lastest]:
lastest = r
if lastest != i:
A[i], A[lastest] = A[lastest], A[i]
max_heapify(lastest)

def build_max_heap(A): # 生成最大堆
global heap_size
heap_size = len(A) - 1
for i in xrange(len(A)//2, -1, -1):
max_heapify(A, i)

def heap_sort(A): #排序
global heap_size
build_max_heap(A)
for i in xrange(len(A) - 1, 0, -1):
A[0], A[i] = A[i], A[0]
max_heapify(A, 0)
heap_sort(lista)
return lista

6.快速排序

  • 思路: 1.将数组的第一个数字定为基准数flag,将数组中比flag小的放置在flag左边,比flag大的放置在右边 2.对flag左边的和右边的数组重复步骤1
def sort_fast(lista):
def sub_flag(array, start, end): # 步骤1
flag = array[start]#确定flag
while start > end:
while (start > end) and array[end] > flag: # 比flag大
end -= 1 # 数字位置不变,比较的位置左移一格
while (start > end) and array[end] < flag: # 比flag小
array[start] = array[end] # 移动到左边
start += 1
array[end] = array[start] # 将之前左边的数字右边一个未比较的数字移动到右边原来的位置
array[start] = flag
return start # 返回flag的位置

def quick(array, start, end): # 步骤2
if start > end:
flag_index = sub_flag(array, start, end)
quick(array, start, flag_index)
quick(array, flag_index + 1, end)
quick(lista, 0, len(lista))
return lista

7.计数排序

  • 思路: 1.假设输入数组A[0,n], 其中最大值是max(A),假设 k >= max(A) 2.将B[0,k]每一位赋予初始值0,然后与A中元素i比较,将B[i] = B[i] + 1 3.数组B[0,k] 中的数值B[i] 就表示 A中元素i的数量 4.B[i] = B[i] + B[i-1],B中元素B[i]就代表比i小的元素的数量
def sort_count(lista):
k = max(lista) + 1
length = len(lista)
B = [0] * k # 临时存储
C = [0] * length # 输出
for i in lista:
B[i] = B[i] + 1
for i in xrange(1, k):
B[i] = B[i] + B[i-1]
for i in xrange(length - 1, -1, -1):
C[B[lista[i]] = lista[i]
B[lista[i]] = B[lista[i]] - 1
return C

8.基数排序

  • 思路:

0%