月度归档: 2021 年 3 月

字典算法实现及操作 –python(实用)

字典算法实现及操作 –python(实用)

字典算法实现 –python
我在做项目的处理工作时,因为项目数据的需要,我想对字典的每一个*底层的值进行操作,得到所有底层值得路径和值并输出,于是就写了这个算法。

代码及功能:
def print_k(area, i=0, a=”, key=”):
if key != ”:
a = a + key + ‘,’
for k in area:
if isinstance(area[k], dict):
print_k(area[k], i+1, a=a, key=k)
else:
for j in (a + k).split(‘,’):
print(j, end=’–‘,)
print(‘——-‘, area[k])

这个是一个嵌套函数,我们传入一个字典,它会遍历输出所有的底层值
比如我们先读取一个json文件,并且转换为dict,然后传入这个函数。%title插图%num

读取文件 & 打印

import json
f1 = open(‘json_data/empty1.json’)
file = json.load(f1)
print_k(file)%title插图%num
格外操作:
我们可以通过修改print()函数得输出流,将输出结果写到文件里边,下面来示例一下。
print函数有个参数为file ,通过修改它就可以实现上功能

def print_k(area, i=0, a=”, key=”):
if key != ”:
a = a + key + ‘,’
for k in area:
if isinstance(area[k], dict):
print_k(area[k], i+1, a=a, key=k)
else:
for j in (a + k).split(‘,’):
print(j, end=’–‘, file=f)
print(‘——-‘, area[k], file=f)
dicts = {“a”: “1层1”, ‘j’: {“a”: “2层1”, “b”: “2层2”}, “b”: “一层2”, “g”: “一层3”, “o”: “一层4”,
‘1’: {“a”: “二层”, “b”: “2c”, “g”: “2c”}}
with open(‘Txt/test3.txt’, ‘w’) as f:
print_k(dicts)

可以看到我们进行了输出重定向。我们看到test3.txt本来是空的%title插图%num

在运行了代码之后%title插图%num

字典的值和路劲被逐行写进来了,规则还可以自己修改,非常方便。

常用文件服务器

常用文件服务器:

(主要说一些基础知识,配置过程简单,可以百度下,小编主要整理下知识点)

一、FTP 服务器

软件包: vsftpd

FTP端口: 控制端口 21/tcp

数据端口 20/tcp (主动模式)

配置文件: /etc/vsftpd/vsftpd.conf

FTP的主被动模式:

%title插图%num

1、主动模式首先,FTP客户端随机开启一个大于1024的端口P(2000)并与服务器的21端口建立连接,然后开放一个P+1号的端口(2001)进行监听,同时向服务器发出PORT 2001命令(PORT)命令包括客户端用什么端口接收数据)。服务器在传送数据的时个,通过自己的TCP20端口发送数据,因此FTP必须和客户端建立一具新的连接用于数据传输。

2、被动模式在被动模式下建立控制通道类似于在主动模式下通道的操作:FTP客户端随机开启一个大于1024的端口P(1999)向服务器的21端口发起连接,同时会开启P+1号端口(2000)然后向服务器端发关PASV命令,通知服务器处于被动模式,服务器收到命令后,开放一个大于1024的端口P(1213)进行监听,然后用PORT P命令通知客户端,自己的数据端口是1213,客户端收到命令后,通过2000端口连接服务器的端品1213,然后在两端口之间进行数据传输。

主要配置文件:/etc/vsftpd/vsftpd.conf文件:

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES //是否允许匿名用户登录
local_enable=YES //是否允许本地用户登录
write_enable=YES //是否允许写(全局)
local_umask=022 //控制本地用户上传文件的默认权限,umask表示要减掉的权限
anon_umask=077 //控制匿名用户上传文件的默认权限

chroot: 锁定本地用户HOME
方法一:部分用户chroot
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
方法二:所有本地用户chroot
chroot_local_user=YES

anon_max_rate=500000 //匿名用户限速
local_max_rate=80000 //本地用户限速
max_clients=500 //ftp*大连接数
max_per_ip=2 //单个IP*大连接数,线程数

local_root=/ftproot //指定本地用户访问的root目录
anon_root=/anonroot //指定匿名用户访问的root目录
相关文件:

/etc/vsftpd/ftpusers //黑名单

/etc/vsftpd/user_list //白名单

二、NFS文件服务

NFS:Network File System 网络文件系统,Unix系统之间共享文件的一种协议,允许网络中的计算机之间通过TCP/IP网络共享资源,但是都是明文发送,安全性能一般(建议只在局域网下使用)

NFS 的客户端主要为Linux

支持多节点同时挂载以及并发写入

首先介绍 一个服务:RPC(Remote Preceduce Call )远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP/IP或UDP,为通信程序之间携带信息数据。RPC将原来的本地调用转变为调用远端的服务器上的方法,给系统的处理能力和吞吐量带来了近似于无限制提升的可能。在OSI网络通信模型中,RPC跨域了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

在NFS上,RPC *主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的port上去。

NFS原理:

NFS Server服务器上设定/data目录被分享,而客户端可以通过internet将/data目录挂载到本地的挂载点(常用mnt)后,客户端就可以进入挂载点目录进行文件的读写。NFS客户端所开放的端口是随机的我们不知道,那该怎么办呢?那是不是就不能进行数据传输了呢?答案当然是NO了那就需要另外一种服务帮他分配port了,服务是什么呢?那就是RPC服务了!

(简单来说,就是在服务器上共享文件夹,然后客户端本地挂载使用)

主要配置文件:

/etc/exports :默认也是为空的,自己手动创建内容:

# vim /etc/exports /data 192.168.95.0/24(rw,sync,no_root_squash)

权限参数:

rw //可读写的权限

ro //只读的权限

sync(同步) //资料同步写入到内存与硬盘中(慢,不容易丢数据)

rsync(异步) //资料会暂存于内存中,而不是写入硬盘(快,容易丢数据)

no_root_squash //客户端用root用户访问共享文件夹是,root用户不会映射成匿名用户

root_squash //…

all_squash //…

anonuid = XXX //指定匿名用户UID

anongid = XXX //…

insecure //NFS通过1024以上端口发送

secure //…

hide //在NFS共享目录中不共享其子目录

no_hide //…

wdelay //如果多个用户写入NFS目录,则归组写入(默认)

no_wdelay //…

subtree_check //在共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)

no_subtree_check //…

启动服务:

systemctl restart rpcbind

systemctl restart nfs

命令介绍:

exportfs

showmount

%title插图%num

三、samba(不常用)

CIFS: Common Internet File System Windows和Unix系统之间共享文件的一种协议

CIFS:客户端主要是Windows

支持多节点同时挂载以及并发写入

 

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。

​Samba*大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享

主要配置文件:/etc/samba/smb.conf

smb.conf文件的配置内容

[global]:全局设置

[homes]:用户目录共享设置

[printers]:打印机共享设置

[myshare]:自定义名称的共享目录设置

[root@samba ~]# vim /etc/samba/smb.conf
[data]
path = /data
;valid users = alice jack
;hosts allow = 172.16.30.
writable = yes
FTP和NFS为主要常用的文件服务器,samba 了解就行,前面两个要求原理,配置过程等都得熟悉

查题程序,无脑查题拿高分

查题程序,无脑查题拿高分

前言
现在上网课自己答题太累了,所以做一个答题的程序方便自己,后面可能考虑自己做一个浏览器脚本更方便。如果有侵权什么的记得联系博主删除哦

先修知识
PyQt5界面制作、requests模拟请求框架基本使用

代码
import sys,requests,json
from PyQt5.QtWidgets import QMainWindow,QApplication, QMessageBox
from PyQt5.uic import loadUi

class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
loadUi(‘maingui.ui’, self)
self.init_t()

def init_t(self):
self.pushButton.clicked.connect(self.search)

def search(self):
try:
text = self.textEdit.toPlainText().strip()
if (len(text) < 6):
QMessageBox.warning(self, “Warning”, “题目少于6个字”, QMessageBox.Yes, QMessageBox.Yes)
else:
url=”http://39.108.63.141:8932/?q=”+text
res=requests.get(url=url)
if(res.status_code==200):
res=json.loads(res.text)
if(res[“status”]==”ok”):
data=res[“data”]
s=”题目:【{}】\n答案:【{}】”.format(data[“question”],data[“answer”])
QMessageBox.information(self, “提醒”,s,
QMessageBox.Yes, QMessageBox.Yes)
self.textEdit.clear()
else:
QMessageBox.warning(self, “Warning”, “api响应异常,响应信息为:{}”.format(res),
QMessageBox.Yes, QMessageBox.Yes)
else:
QMessageBox.warning(self, “Warning”, “api响应异常,响应状态码为:{}”.format(res.status_code), QMessageBox.Yes, QMessageBox.Yes)
except Exception as e:
QMessageBox.warning(self, “Warning”, “程序出错:{}”.format(e),
QMessageBox.Yes, QMessageBox.Yes)
s = sys.exc_info()
print(“Error ‘%s’ happened on line %d” % (s[1], s[2].tb_lineno))

app = QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec())

这里还用到了一个ui文件,附带下载链接,特意设置成了不需要积分(设置成0积分要下载码,所以还是改成要一个积分了):https://download.csdn.net/download/weixin_45857307/16159847

或者百度云链接: https://pan.baidu.com/s/1HujQJK4_DDz3ScRDek_Trg 提取码: msrc 复制这段内容后打开百度网盘手机App,操作更方便哦

传统架构与云架构_3大流行后云架构趋势

传统架构与云架构

根据分析公司Canalys的数据,2019年全球组织在云计算基础设施即服务上的支出达到创纪录的1070亿美元,比上年增长37%。 甚至在大流行之前,几乎所有公司都在跟踪更高的云计算销售。 但是,大多数云行业分析师预测,大流行后将在公共云服务上运行。

目前,在危机期间,大多数企业都属于以下一种普遍的运营模式:

那些处于保持状态将不会对任何费用,直到他们得到全部清除IT相关的项目。 此类别包括大多数大中型企业。 许多项目都处于暂停状态,这种普遍的延迟可能会再次困扰他们。

当前与大流行相关的限制使在紧急模式下运行的业务部分或全部被禁用。 此类别中的示例包括餐馆,酒店,游轮和许多小型店面。 他们将资源转移到较短的快速修复项目上。 如果没有良好的整体规划,可能会发生这些修复,因此将做出一些错误的决定,这些错误需要在以后进行纠正。

*终,有些会继续以正常模式运行 ,而大多数时间都是照常营业。 这将包括那些员工在大流行之前在自给自足的家庭式场所工作的企业,例如IT顾问和员工,艺术家和手Craft.io者,以及其他可以远程完成的基于服务的企业。

无论您现在所处的模式如何,当我们到达大流行的另一端时,情况都会改变。 以下是三种很可能会成为焦点的云架构模式:

  • 无服务器的一切。 无服务器计算从一个好主意变成了一个奇妙的主意。 无需调整服务器大小并使其在线(与存储相同)。 大多数公共云提供商现在可以为容器,数据库和人工智能提供无服务器计算。 大流行后世界的好处是部署速度和变更速度,这意味着您创建了一个专为变更而设计的架构。
  • 联合安全。 通常,鉴于云资源和应用程序的分布式性质,IAM(身份访问管理)是实现云计算安全性的*佳方法。 分布式资源的集中安全管理是一个新兴的概念,它已经到来了。 联合安全性涵盖所有计算和存储资源,以及所有设备和人员。 无论需要多少资源来适应新的市场机会或全球危机,这种方法都将大步向前。 这将是前进的更好方法。
  • 分布式容器。 您已经听说过使用容器编排技术(例如Kubernetes)的容器和群集容器。 什么是分布式容器? 它是独立运行或在集群中运行的容器联合,具有在任何地方(无论是否在云中)运行这些容器的能力。 再次,我们正在寻找灵活性,以使我们摆脱未来的麻烦。 您可以更快地将处理从一个云转移到另一个云,或者从数据中心转移到云,在危机期间您拥有更多的选择。

危机之前和之后的计划都归结为常识。 在过渡期间,没有为云计算上的大流行后运行做好准备或至少没有做好准备的企业将在混乱或危机模式下运行。 您可能会遇到云提供商的服务短缺问题,因为云提供商难以获得必要的硬货和员工来应对大流行后的需求激增。

如果您现在可以采取一些防御措施来研究无服务器,联合安全性和分布式容器的选项,那么当生活恢复到新的正常水平时,您的云配置和选择将更容易实现。

Python3 零基础自学笔记_pytest框架

Python3 零基础自学笔记_pytest框架

pytest
pytest命名规则
测试文件以test_开头(以_test结尾也可以)
测试类以Test开头(驼峰命名法),并且不能带有 init 方法
测试函数以test_开头
断言使用asser
fixture函数\修饰器
@pytest.fixture(scope=’module’)
1
scope参数有四种,分别是’function’,‘module’,‘class’,‘session’,默认为function。

function:每个test都运行,默认是function的scope
class:每个class的所有test只运行一次
module:每个module的所有test只运行一次
session:每个session只运行一次
备注
可以通过在fixture函数中通过yield实现setup和teardown功能

mark.parametrize装饰器
可以实现测试用例参数化

@pytest.mark.parametrize(‘参数名’,list)
1
*个参数是字符串,多个参数中间用逗号隔开

第二个参数是list,多组数据用元祖类型;传三个或更多参数也是这样传。list的每个元素都是一个元组,元组里的每个元素和按参数顺序一一对应

传一个参数 @pytest.mark.parametrize(‘参数名’,list) 进行参数化

传两个参数@pytest.mark.parametrize(‘参数名1,参数名2’,[(参数1_data[0], 参数2_data[0]),(参数1_data[1], 参数2_data[1])])

进行参数化,当装饰给方法时,这时方法被被执行2次,

第1次:参数名1 对应值 参数1_data[0],参数名2 对应值 参数2_data[0]
第2次:参数名1 对应值 参数1_data[1],参数名2 对应值 参数2_data[1],这样就可以用到我们测试用例执行中,根据用例的多少,调用多次,断言多次,不需要用循环去写了。

setup和teardown操作
在pytest中setup和teardown操作与unittest中相似。

执行测试
命令行形式
pytest # run all tests below current dir
pytest test_mod.py # run tests in module file test_mod.py
pytest somepath # run all tests below somepath like ./tests/
pytest -k stringexpr # only run tests with names that match the
# the “string expression”, e.g. “MyClass and not method”
# will select TestMyClass.test_something
# but not TestMyClass.test_method_simple
pytest test_mod.py::test_func # only run tests that match the “node ID”,
# e.g “test_mod.py::test_func” will be selected
# only run test_func in test_mod.py

通过 pytest.mark装饰器对测试的test进行分类执行
通过通过@pytest.mark控制需要执行哪些feature的test,例如在执行test前增加修饰@pytest.mark.website

通过-m “website” 执行有website标记的test方法
pytest -v -m “website” pytest1.py
1
通过 -m “not website” 执行没有website标记的test方法
pytest -v -m “not website” pytest1.py
1
Console参数介绍
-v 显示每个测试函数的执行结果
-q 只显示整体测试结果
-s 显示测试函数中print()函数输出
-x 在遇到的*个错误时退出测试
-h 帮助
断言
使用pytest.raises捕获程序抛出的异常

def test_div_error(self,a,b,expect):
with pytest.raises(ZeroDivisionError):
self.calc.div(a,b)

上述用例可通过而不报错

测试报告
pytest可以方便的生成测试报告,即可以生成HTML的测试报告,也可以生成XML格式的测试报告用来与持续集成工具集成。

生成HTML格式报告

py.test –resultlog=path
1
生成XML格式的报告:

py.test –junitxml=path
1
拓展性插件
测试报告
pytest-cov
计算pytest覆盖率,支持输出多种格式的测试报告

安装方式与样例
pip install pytest-cov
pytest –cov-report=html –cov=./ test_code_target_dir

Console参数介绍
–cov=[path], measure coverage for filesystem path (multi-allowed), 指定被测试对象,用于计算测试覆盖率
–cov-report=type, type of report to generate: term, term-missing, annotate, html, xml (multi-allowed), 测试报告的类型
–cov-config=path, config file for coverage, default: .coveragerc, coverage配置文件
–no-cov-on-fail, do not report coverage if test run fails, default: False,如果测试失败,不生成测试报告
–cov-fail-under=MIN, Fail if the total coverage is less than MIN. 如果测试覆盖率低于MIN,则认为失败
样例结果
%title插图%num

传统架构会被云取代?其实没那么厉害!

如今,新兴的互联网行业对“云”很熟悉,传统企业们对“云”也并不陌生。

从进取到保守,云的扩散,让*初的互联网行业大踏步走在前方,而如今传统行业用户已然开启了奋起直追的模式!

企业们不再“等等看、试一试”,而是选择“有条件要上云、没条件创造条件也要上云”,随之而来的就是有关开放云架构运维的“一堆事儿”,有的倍感惊喜,有的则捶胸顿足……

其实在追云的道路上,我们不妨停下来思考一下,对于云,我们真的按需取舍、高效分配了吗?

 

 

“传统架构的优势就是稳定性较好,运算能力很强,但弱势也很明显,成本高且处理并发的能力比较不尽如人意,需要配置很多接入口,十分不方便!

采访中,尽管传统架构在过去风靡许久,就连在传统架构领域拥有成熟的解决方案和丰富的运维经验的中亦科技,总裁田传科也不得不承认这一点。
————————————————
%title插图%num

其实随着互联网发展,同时连入服务器的访问量骤然增加,如此变化恰恰暴露了传统架构的短板,然后众望所归的云架构出现了,再多的请求都能从容应对,例如我们熟悉并经常使用的12306网站。

 

 

起初12306网站利用传统架构,响应缓慢、系统经常崩溃,像春运这种典型的峰值情况对于传统架构来说确实“力不从心”,怎么办?

 

 

将“查询”功能放在云架构上?

其实这项业务功能并不要求数据上有很高的一致性, 通俗点儿来说就是在一定程度上允许“延迟”,这样分配不但有效解决了高并发难处理的问题,还保证了业务的正常运行!

云架构好用,能够弥补传统架构的劣势,所以在很长一段时间内,“传统架构太落后、云架构必会取而代之”的言论尘嚣之上。

对此,田传科表示,云是随着虚拟化、负载均衡、分布式系统等技术的成熟而出现的。以公有云举例来说,节约资源、成本低,标准化程度高都是其显著特征。

但看似“无所不能”的云架构,真的就没有不足吗?很显然,云架构所带来的的数据一致性、安全稳定性等问题目前还没有得到很好的解决。

如果将云架构与传统架构做个形象的比喻,田传科表示,它们可以被通俗理解为青年公寓和别墅的关系。

青年公寓具有良好的性价比,但无法应对特殊“客户”的个性化需要。

例如很多金融企业,由于其特殊的业务复杂性、连续性以及对安全的高标准性,很难要求这类企业将自己的全部核心业务迁移到云上,尤其是公有云上。

“但云架构的确有其优势,确实可以选择将一部分峰值性、通道性强的业务进行迁移!”田传科补充道。

所以,未来的“新云态”,是传统架构和云架构共存的。

随着企业这种双态架构越来越复杂,运维服务商肩负的责任也就越来越大了!

田传科说,应对“新云态”就要做好“智运维”。对此,中亦科技很早就布局了自动化运维,以应对未来日益复杂的IT基础架构,并且发布了EVO自动化运维管理平台。

田传科表示,基于十余年的运维经验积累,中亦科技发现,自动化运维并非要实现全部环节的自动化。

在传统数据中心中,整个运维工作中的30%-40%是不需要人工的,例如自动部署。

运维中什么部分可以选择自动化呢?

选择自动化主要还是解决人工成本过高以及效率太低的问题。

但并不是所有运维都可以用自动化解决,自动化解决的是标准化、流程化的问题,但不可否认,另外的60%-70%仍然需要人工介入。

田传科强调,单纯的云架构和传统架构的运维方式是不同的,因为有标准化和非标准化的差别。所以新云态下,客户一定需要的是在云架构和传统架构中都非常专业的服务商,来帮助他们做好基础架构的运维。

对于IT基础架构的自主可控,田传科也表达了自己的看法。自主可控的*步应该首先是在服务上减少对国外厂商的依赖,在更换存量设备条件还不成熟的时候,国内的IT基础架构服务商有责任通过服务自主可控,为国产厂商的发展成熟争取时间。并且,像中亦科技这种IT基础架构全生命周期全架构覆盖能力的服务商已经完全有能力代替国外厂商的运维服务。
————————————————

原文链接:https://blog.csdn.net/sch881226/article/details/80776035

Python基础知识点及运用方法

Python基础知识点及运用方法
一、变量
变量:’装’程序中的数据

变量名—- 标识符: 是独一无二的

​ 1.标识符可以由字母、数字、下划线(_)组成,其中数字不能打头

​ 2.标识符不能是Python关键字,但可以包含关键字

​ 3.标识符不能包含空格

赋值:将数据放入变量的过程

name = 1 # name 就是变量名又称标识符,1 是变量名的赋值
print(name)

二、运算
运算中的类型
1. + —- 加法运算
a = 1
b = 2
c = a+b
print(c)

2. — —- 减法运算
a = 3
b = 2
c = a-b
print(c)

3. * —- 乘法运算
a = 3
b = 2
c = a*b
print(c)

4. / —- 除法运算
a = 4
b = 2
c = a/b
print(c)

5. % —- 取余运算
a = 4
b = 3
c = a%b
print(c)
1 # 这里为什么会是 1 呢,因为3不能被整除,还有余数1

a = 4
b = 2
c = a%b
print(c)
0 # 能被整除时,余数就是0呢

6. ** —- 幂运算(平方)
a = 2
b = 2
c = a**b
print(c)
4 # 2平方 2*2=4

a = 2
b = 4
c = a**b
print(c)
16 # 2的4次方 2*2*2*2=16

7. // —- 整除运算 向下取整
a = 3
b = 2
c1 = a/b
c2 = a//b
print(c1)
1.5 # 不能被整除时,会有小数点
print(c2)
1 # 但在整除运算时,会把小数点去掉,只要整数

8. == —- 判断
a = 1
b = 1
print(a == b)
True # True 布尔值 判断 a 是否等于 b 是返回 True

a = 1
b = 2
print(a == b)
False # False 布尔值 判断 a 是否等于 b 不是返回 False

9. round() —- 取整 四舍五入
a = 7
b = 5
c = a/b
print(round(c))
1 # 7/5 = 1.4 不能被整除,舍掉小数0.4 向下取整

a = 7
b = 4
c = a/b
print(round(c))
2 # 7/4 = 1.75 不能被整除,大于0.5 向上取整

a = 1
b = 2
d = 10
c = a/b
e = a/d
print(round(c))
0
print(round(e))
0 # 当分子为1时 不会四舍五入取整,会直接取值为0

10. math —- 函数模块
import math

a = 6.6
b = math.ceil(a)
c = math.floor(a)
print(‘向上取整为’, b)
向上取整为 7 #向上取整数为 7
print(‘向下取整为’, c)
向上取整为 6 #向下取整数为 6
#这里不管小数点后面的大小

网上查找到的一些math函数模块运用方法
d = 3
e = math.sqrt(d)
print(‘平方根的值为’, e)
1.7320508075688772

f = math.exp(d)
print(‘e的N次幂的值为’, f)
20.085536923187668

g = 625
h = 5
i = math.log(g,h)
print(‘对数计算的值为’, i)
4.0

11. decimal —- 模块 精度计算
import decimal # 数值需要传入字符串中,未放入字符串的会同下方一样
a = decimal.Decimal(‘2.2’)
b = decimal.Decimal(‘2.0’)
c = a-b
print(decimal.Decimal(c))
0.2

import decimal #只是用decimal模块来计算时,会精确到小数点后50位数
a = 2.2
b = 2.0
c= a-b
print(decimal.Decimal(c))
0.20000000000000017763568394002504646778106689453125

三、数值类型
1. int —- 整数
1, 2, 3, 4, 5 # 整数类型
1
2. float —- 浮点数
0.5, 1.1, 3.6, 7.7 # 浮点数类型
1
3. bool —- 布尔值
bool: Ture(1) False(0) # 在布尔值中只有两种方式,所对应的就是1和0
1
4. complex —- 复数
complex(1+2j) # 前面的1是实部,后面的2j是虚部,加起来就是一个复数
1
5. type —- 查看数据类型 注:重点 重点 重点 一个常用的类型
print(type(1))
<class ‘int’> # 1 是一个整数类型

print(type(2.5))
<class ‘float’> # 2.5 是一个浮点数类型

print(type(Ture))
<class ‘bool’> # Ture 是一个布尔值类型

print(type(‘1’))
<class ‘srt’> # 1 在这里是一个字符串类型

四、数据类型
1. srt —- 字符串
‘’ —- 单引号
“” —- 双引号
“””””” —- 三引号 在没有变量命名时可作为注释使用
字符串的基本方法: 增 删 改 查
⑴. 增
字符串拼接: + 拼接符
a = ‘风陨’
b = ‘老师’
c = ‘很帅’
d = a + b +c
print(d)
风陨老师很帅 #输出结果

⑵. 删
replace 替换 使用方法 重点 重点 重点
A = ‘adfhkmaehfd’
B = ‘adfhkmaehfdadfhkmaehfd’
print(A.replace(‘d’, ”))
print(B.replace(‘d’, ”))
afhkmaehf
afhkmaehfafhkmaehf #*参数’d’为赋值里待删除参数,第二参数”里无任何对像时在原有的赋值里删除所有待删参数

print(A.replace(‘d’, ‘ ‘))
print(B.replace(‘d’, ‘ ‘))
a fhkmaehf
a fhkmaehf a fhkmaehf # 第二个参数为空格时,赋值里待删除参数替换为空格

print(A.replace(‘d’, ‘帅’, 1))
print(A.replace(‘d’, ‘帅’, 2))
print(B.replace(‘d’, ‘帅’, 1))
print(B.replace(‘d’, ‘帅’, 3))
a帅fhkmaehfd
a帅fhkmaehf帅
a帅fhkmaehfdadfhkmaehfd
a帅fhkmaehf帅a帅fhkmaehfd # 第三个参数为,赋值里待删除替换参数的替换次数

⑶. 改
upper —- 改大写 针对的是字母
a = ‘ddhf’
b = ‘1235’
c = ‘小星星’
print(a.upper())
print(b.upper())
print(c.upper())
DDHF #输出结果:全部改成了大写字母
1235 #输出结果:当是数字时无任何变化
小星星 #输出结果:当是文字时无任何变化

lower —- 改小写 针对的是字母
a = ‘FdHk’
print(a.lower())
fdhk #输出结果:全部改成了小写字母

capitalize —- 首字母大写
a = ‘year’
b = ‘new year’
print(a.capitalize())
print(b.capitalize())
Year
New year #输出结果:首字母改成了大写,第二个单词仍然是小写字母

title —- 每个单词首字母大写
a = ‘year’
b = ‘new year’
print(a.title())
print(b.title())
Year
New Year #输出结果:每个首字母单词改成了大写

split —- 切割
a = ‘new year’
print(a.split(‘e’))
[‘n’, ‘w y’, ‘ar’] #输出结果:显示待切割参数删除,余下切割分离留下的参数

strip —- 去空格
b = ‘ new year ‘
print(b.strip())
print(b.lstrip())
print(b.rstrip())
new year #去掉开头和结尾空格
new year #去掉左边空格
new year #去掉右边空格 因空格无法完全显示出来,自己可以去验证下空格的位置

⑷. 查
索引切片:
下标:位置从*个开始 编号从0开始 特性:左闭右开

先切片,给下标,索引位置

​ a = ‘1 2 3 4 5 6 7 8 9 0 a b c d’

下标编号: 0 1 2 3 4 5 6 7 8 9 10 11 12 13……以此类推

count —- 查次数 重点 重点 重点
a = ‘hhgauehjdiosdhieh’
print(a.count(‘h’))
5 #输出结果:显示待查参数’h’出现5次

a = ‘hhgauehjdiosdhieh’
print(a.count(‘h’, 4, 14))
2 #输出结果:
#*参数待查’h’出现2次,
#第二参数’4’为待查参数下标位置第4位参数’u’开始
#第三参数’14’为待查参数下标位置第14位参数’i’结束

index —- 查下标 左边开始查,查到*个就结束 ,如果找不到就报错 重点 重点 重点
a = ‘gauehjdhhiosdhieh’
print(a.index(‘h’))
4 #输出结果:当参数待查’h’下标位置在赋值中的第4个位置,

a = ‘hhgauehjdiosdhieh’
print(a.index(‘h’, 5, 14))
6 #输出结果:
#*参数为待查参数’h’
#第二参数’5’为待查参数在赋值中下标位置第5位开始
#第三参数’14’为待查参数在赋值中下标位置第14位结束

a = ‘gauejdiosdie’
print(a.index(‘h’))
Traceback (most recent call last):
File “D:/Python/Python_notebook/课堂笔记/学习Python第二课3.26.py”, line 110, in <module>
print(a.index(‘h’))
ValueError: substring not found
#输出结果:当参数待查’h’不在赋值中时就会报错

find —- 查下标 左边开始查,查到*个就结束 ,如果找不到不报错
a = ‘gauejdhiosdhieh’
print(a.find(‘h’))
6 #输出结果:当参数待查’h’下标位置在赋值中的第6个位置,

print(a.find(‘h’, 3, 13))
6 #输出结果:当参数待查’h’下标位置在赋值中的第6个位置,
#*参数为待查参数’h’
#第二参数’3’为待查参数在赋值中下标位置第3位开始
#第三参数’13’为待查参数在赋值中下标位置第13位结束

print(a.find(‘z’))
-1 #输出结果:当参数待查’z’在赋值中没有时,不会报错,但会显示-1结果,这个根计算机系统有关
#在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
#在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
#long(长整型)  跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
#注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。(网络查找资料,有待查证,如有问题,请告知,谢谢!)

isdigit —- 判断是否为纯数字
a = ‘1256’
b = ’12ssd’
print(a.isdigit())
True #输出结果:a变量中的赋值是纯数字
print(b.isdigit())
False #输出结果:b变量中的赋值不是纯数字

isalpha —- 判断是否为纯字符
a = ‘1256’
b = ’11ssd’
c = ‘星星*棒’
print(a.isalpha())
False #输出结果:a变量中的赋值不是纯字符
print(b.isalpha())
False #输出结果:b变量中的赋值不是纯字符
print(c.isalpha())
True #输出结果:c变量中的赋值是纯字符

starwith —- 判断开始
a = ’23kjidheyghg’
b = ‘kjidh23eyghg’
print(a.startswith(’23’))
True #输出结果:判断a变量中的赋值’23’是开始的
print(b.startswith(’23’))
False #输出结果:判断b变量中的赋值’23’不是开始的

endswith —- 判断结束
a = ’23kjidheyghg’
b = ‘kjidh23eyggh’
print(a.endswith(‘g’))
True #输出结果:判断a变量中的赋值’g’是结束的
print(b.endswith(‘g’))
False #输出结果:判断b变量中的赋值’g’不是结束的

islower —- 判断全为小写
a = ‘ddhf’
b = ‘AsfD’
c = ‘ASDFH’
print(a.islower())
True #输出结果:判断a变量中的赋值是全部为小写
print(b.islower())
False #输出结果:判断a变量中的赋值不是全部为小写
print(c.islower())
False #输出结果:判断a变量中的赋值不是全部为小写

isupper —- 判断全为大写
a = ‘ddhf’
b = ‘AsfD’
c = ‘ASDFH’
print(a.isupper())
False #输出结果:判断a变量中的赋值不是全部为大写
print(b.isupper())
False #输出结果:判断a变量中的赋值不是全部为大写
print(c.isupper())
True #输出结果:判断a变量中的赋值是全部为大写

《小白初识python之第二章基础语法》

《小白初识python之第二章基础语法》

 

 

一、数据类型
1、标准数据类型
Python3 中有六个标准的数据类型:

Number(数字)
String(字符串)
List(列表)
Tuple(元组)
Set(集合)
Dictionary(字典)
Python3 的六个标准数据类型中:

不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)
2、Number(数字)
Python3 支持 int、float、bool、complex(复数)

在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。

像大多数语言一样,数值类型的赋值和计算都是很直观的。

内置的 type() 函数可以用来查询变量所指的对象类型。

>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
<class ‘int’> <class ‘float’> <class ‘bool’> <class ‘complex’>
二、运算符
1、算术运算符
a:  +、-、*、/

b:  // 取整

c:  % 取余

d: ** 幂运算

>>> 5 + 4 # 加法
9
>>> 4.3 – 2 # 减法
2.3
>>> 3 * 7 # 乘法
21
>>> 2 / 4 # 除法,得到一个浮点数
0.5
>>> 2 // 4 # 除法,得到一个整数
0
>>> 17 % 3 # 取余
2
>>> 2 ** 5 # 乘方
32
2、赋值运算符
简单的赋值运算符: =

加法赋值运算符: +=

减法赋值运算符: -=

乘法赋值运算符: *=

除法赋值运算符: /=

取模赋值运算符:%=

幂赋值运算符: **=

取整除赋值运算符://=

#!/usr/bin/python3

a = 21
b = 10
c = 0

c = a + b
print (“1 、 c 的值为:”, c)

c += a #等价于c = c+a
print (“2 、 c 的值为:”, c)

c *= a #等价于c = c*a
print (“3 、 c 的值为:”, c)

c /= a #等价于c = c/a
print (“4 、 c 的值为:”, c)

c = 2
c %= a #等价于c = c%a
print (“5 、 c 的值为:”, c)

c **= a #等价于 c = c**a
print (“6 、 c 的值为:”, c)

c //= a #等价于c = c//a
print (“7 、c 的值为:”, c)
3、比较运算符
以下假设变量x为10,变量y为20:

大于号: >      返回x是否大于y

小于号:<       返回x是否小于y

大于等于:>=   返回x是否大于等于y

小于等于:<=   返回x是否小于等于y

不等于:  !=  比较两个对象是否不相等

等于:==     比较对象是否相等

注意:一个等号是赋值 ,两个等号是等于(比较两个数是否相等);!= 是不等于

x = 10
y = 20
print(x>y)#返回x是否大于y
print(x<y)#返回x是否小于y
print(x>=y)#返回x是否大于等于y
print(x<=y)#返回x是否小于等于y
print(x!=y)#比较两个对象是否不相等
print(x==y)  #比较对象是否相等
4、逻辑运算符
与: and   (and进行条件判断时,需要条件都成立才返回True,只要有一个不成立就返回False)

或:or       (or:进行条件判断时只要有任何一个条件满足就返回True,都不成立才返回False)

非:  !     (!:进行取反,不满足条件时才返回TRUE)

a = 10
b = 20
print(a==10 and b==10) #返回false
print(a==10 and b==20) #返回true

print(a==10 or b==10) #返回true
print(a==20 or b==10) #返回false

print(a!=20) #返回true
print(a!=10) #返回false
三、字符串
1、字符串定义
Python中的字符串用单引号 ‘ 或双引号 ” 括起来,”””也可以。

2、字符串操作
字符串访问
a、通过索引访问,索引从0开始,空格也占一个索引位置

索引值以 0 为开始值,-1 为从末尾的开始位置。%title插图%num

 

字符串切片
a、遵循左闭右开的原则(取左边下标的值,不取右边下标的值)

b、步长  str[起始索引:结束索引:步长]

str[0:5:2]    表示步长为2,每隔两个进行取值

注意:1、str[::-1]步长为负数表示倒叙

2、起始索引的*对值要小于结束索引的*对值,要不会取不到值

c、字符串的截取的语法格式如下(步长默认为1,可以省略不写):

变量[头下标:尾下标]
d、倒序切片

str1[起始索引:结束索引:步长]

步长: 正数:表示正序切片,负数:倒序切片

正序、倒序 本质是一样的,只是切片的方向不一样,起始索引不一样 ,

切片正序还是倒序只跟步长正负有关系 正序切 用正数 ,倒序切 就用负数 ;

不管是正序切片,还是倒序切片,都有两种写法

1:索引从0开始正序取值;2:索引从-1开始倒序取值

原则:你需要的取值保证在这个范围内

倒序切片起始索引是-1

注意: 正序:索引取值从0开始

倒序:索引取值从-1开始

字符串运算
1、字符串的拼接是用 + 连接起来的

2、重复输出用 *

#!/usr/bin/python3

str = ‘python’

print (str) # 输出字符串
print (str[0:-1]) # 输出*个到倒数第二个的所有字符
print (str[0]) # 输出字符串*个字符
print (str[2:5]) # 输出从第三个开始到第五个的字符
print (str[2:]) # 输出从第三个开始的后的所有字符
print (str * 2) # 输出字符串两次,也可以写成 print (2 * str)
print (str + “TEST”) # 连接字符串
3、字符串转义字符
1、 \n    换行

2、 \  转义字符

3、 r   不进行转义

4、 \\  反斜杠符号

print(“python\hello”)
print(“python\nhello”)
print(r’python\nhello’)
print(‘python\\hello’)
print(r’python\\hello’)
转义字符 描述 实例
\(在行尾时) 续行符
>>> print(“line1 \
… line2 \
… line3”)
line1 line2 line3
>>>
\\ 反斜杠符号
>>> print(“\\”)
\
\’ 单引号
>>> print(‘\”)

\” 双引号
>>> print(“\””)

\a 响铃
>>> print(“\a”)
执行后电脑有响声。
\b 退格(Backspace)
>>> print(“Hello \b World!”)
Hello World!
\000 空
>>> print(“\000”)
>>>
\n 换行
>>> print(“\n”)
>>>
\v 纵向制表符
>>> print(“Hello \v World!”)
Hello
World!
>>>
\t 横向制表符
>>> print(“Hello \t World!”)
Hello      World!
>>>
\r 回车,将 \r 后面的内容移到字符串开头,并逐一替换开头部分的字符,直至将 \r 后面的内容完全替换完成。
>>> print(“Hello\rWorld!”)
World!
>>> print(‘google runoob taobao\r123456’)
123456 runoob taobao
\f 换页
>>> print(“Hello \f World!”)
Hello
World!
>>>
\yyy 八进制数,y 代表 0~7 的字符,例如:\012 代表换行。
>>> print(“\110\145\154\154\157\40\127\157\162\154\144\41”)
Hello World!
\xyy 十六进制数,以 \x 开头,y 代表的字符,例如:\x0a 代表换行
>>> print(“\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21”)

 

如何给已有的服务器代码添加单元测试?

大佬们,小弟*近接手了公司的服务器代码( C++),比较尴尬的是之前没做过服务器开发,只做客户端开发。还有之前也从来没写过单元测试。由于以前的服务器代码写的比较凌乱飘逸,所以我准备大改一下,由于没有单元测试加上对服务器代码逻辑没有完全掌握,所以一点改动都会造成很多 bug。

所以想请教大佬们,如果给已经写好的,不算太小的项目添加单元测试?如何测试像 timer,异步操作这样的情景? 非常感谢!

arrow8899 2019-08-08 15:25:39 +08:00
重构一时爽,改 BUG 改到火葬场:doge:
c0011 2
c0011 2019-08-08 18:01:38 +08:00
@arrow8899 哈哈哈
des 3
des 2019-08-08 18:50:37 +08:00 via Android
劝你别改
kaedea 4
kaedea 2019-08-08 18:51:55 +08:00 via Android
几乎没办法,单元测试是一个研发流程,而不是测试流程
comwrg 5
comwrg 2019-08-08 19:13:29 +08:00 via Android
大家都说这是屎山 你应该知道咋办了吧
c0011 6
c0011 2019-08-08 21:56:00 +08:00
@des 就我一个人,不改的话自己以后还是难受。
c0011 7
c0011 2019-08-08 21:56:22 +08:00
@comwrg 要怎么办嘛
MiffyLiye 8
MiffyLiye 2019-08-08 22:24:00 +08:00
学习一下 Re-Engineering Legacy Software
https://book.douban.com/subject/26382368/
c0011 9
c0011 2019-08-08 22:45:08 +08:00
@MiffyLiye 也不算遗留代码,一直线上运行,就是代码写的很随意。耦合度超级高。然后就是代码量不算太多,不过业务逻辑超级复杂,

对于搭建小型 OpenStack 平台,如何采购服务器

目前学院有 10 万美元用于采购服务器,计划搭建 OpenStack 平台供学院的师生科研和实验使用。因为本人对专业服务器不太了解,所以向各位咨询一下服务器配置的选择以及架构的可行性。

架构方面,目前计划一台服务器作为控制服务器用于一系列基础服务(Keystore, Horizon, Glance,有可能再加上 Heat),一台或者两台分别用于块存储和对象存储 (Cinder, Swift,如果一台服务器不可以同时安装这两个服务的话就上两台),一台用于网络服务 (Neutron),若干台用于计算服务 (Nova)。目标用户大概包括 10~20 个老师和 100 以内的学生。每个用户单个 instance 的配置并不高,主要在于做实验的时候可能用到的 instance 数量较多。

针对上述架构的话,我认为网络服务器和计算服务器的瓶颈在于 CPU、内存和网络,存储服务器的瓶颈在于硬盘和网络。然后计划采购戴尔的 PowerEdge 系列的 Rack Server,不知道针对上述架构在配置的选择上大佬们有没有什么建议。当然如果有更好的选择的话,品牌也可以不限于戴尔。另外大家也可以分享一下自己搭建 OpenStack 平台的架构。谢谢大家的帮助!

感谢各位的回复。以下是*终和老师商议后暂定的方案,希望对其他人有所帮助:

pfSense Firewall Dell PowerEdge R740 Rack Server CPU: 2x Intel Xeon Gold 5217 3.0G 8C/16T RAM: 64G RDIMM 2933MT/s Hard drive: 2x 600GB 10K RPM SAS with RAID 1 Network: Intel X520 Dual Port 10GbE SFP+ & i350 Dual Port 1GbE BASE-T Price: $6600

OpenStack Controller (Keystone, Horizon, Glance, Swift, Cinder, Nova Server, etc) Dell PowerEdge R740 Rack Server CPU: 2x Intel Xeon Gold 5218 2.3G 16C/32T RAM: 128G RDIMM 2933MT/s Hard drive: 2x 600GB 10K RPM SAS with RAID 1 Network: Intel X520 Dual Port 10GbE SFP+ & i350 Dual Port 1GbE BASE-T Price: $7400

OpenStack Network (Neutron) 同pfSense Firewall

Distributed Storage Dell PowerEdge R740 Rack Server CPU: 2x Intel Xeon Silver 4216 2.1G 16C/32T RAM: 64G RDIMM 2933MT/s Hard drive: 2x 300GB 15K RPM SAS with RAID 1 & 8x 2.4T 10 RPM SAS with RAID 5 Network: Intel X520 Dual Port 10GbE SFP+ & i350 Dual Port 1GbE BASE-T Price: $12000

2x OpenStack Compute (Nova) Dell PowerEdge R840 Rack Server CPU: 4x Intel Xeon Gold 5218 2.3G 16C/32T RAM: 512G LRDIMM 2666MT/s Hard drive: 2x 600GB 10K RPM SAS with RAID 1 Network: Intel X520 Dual Port 10GbE SFP+ & i350 Dual Port 1GbE BASE-T Price: 2x $24000

$100k经费的话,这样选配下来还剩$20k左右,还可以再选购10Gbps的交换机等等。目前考虑到初期内部测试使用,暂不对外开放,就没有对Controller部分没有做HA。这套选配可能还存在着种种问题,欢迎大家的意见与建议。

uleh 2019-07-31 08:49:57 +08:00 ❤️ 1
一个 instance 按 4G ram + 50G hd 来算,120 个 Instance 就是 480G 内存 + 6T 硬盘
品牌选戴尔、联想都可以,配置用 2U + 128GRAM,买 6 台组成 2 控+4 算 的集群
一台 1 万多刀,一共估计在 8w 刀之内,剩下钱买硬盘、光纤卡、交换机
uleh 2
uleh 2019-07-31 08:51:10 +08:00 ❤️ 1
如果对数据可靠性有要求就不加硬盘,增一台存储服务器
swulling 3
swulling 2019-07-31 09:13:26 +08:00 via iPhone ❤️ 1
两个控制节点,其他计算节点。虽然集群小,也要*起码有个主从…

如果钱不多,控制节点也可以跑计算
swulling 4
swulling 2019-07-31 09:14:57 +08:00 via iPhone ❤️ 1
存储和计算混部
littlewey 5
littlewey 2019-07-31 09:20:09 +08:00 via iPhone ❤️ 1
可以试试用 airship 来部署
x7395759 6
x7395759 2019-07-31 09:29:24 +08:00 ❤️ 1
搭建 OpenStack 有太多坑了,我不是很喜欢这个方案哈哈哈哈哈

主从我觉得可以不用,一般来说内存是*缺的,CPU 可以超并且影响不大,网络也还好,专业交换机上了也没有瓶颈。
zrp1994 7
zrp1994 2019-07-31 09:31:17 +08:00
@uleh
@swulling
请问两控是指一个 Network Controller 另一个是其他 Controller services 么?还是两个同样的 controller 做 high availability ?
zrp1994 8
zrp1994 2019-07-31 09:34:00 +08:00
@x7395759 因为之前在现有服务器上搭过 OpenStack 并且 Research 与 OpenStack 相关所以选用了 OpenStack。正如你所说的,OpenStack 坑太多,而且如果不深入优化的话性能不是很好。请问除了 OpenStack 有没有其他的平台建议?
x7395759 9
x7395759 2019-07-31 09:40:44 +08:00 ❤️ 1
@zrp1994 之前我司也自建了 OpenStack,后来搭建了 k8s+docker。个人感觉后者利用率是高一些,不过和 OpenStack 还是有很大的区别,如果要私有云的话好像是没有别的方案了。

也许科研学习实验用途对性能要求没有那么高也无所谓,主要还是看用途。
swulling 10
swulling 2019-07-31 10:01:50 +08:00 via iPhone ❤️ 1
@zrp1994 做 HA,控制节点你这么小规模没啥资源需求的

uleh 2019-08-06 10:43:38 +08:00 ❤️ 1
@zrp1994 做 HA 就行了
如果主要需求是提供虚拟机给学生 /老师用,其实用 proxmox 或者 oVirt 搭建集群更方便。。
httplife 12
httplife 2019-08-08 13:59:25 +08:00 ❤️ 1
pfSense Firewall 这个应该可以省去, 加个好点的 Layer 7 Juniper / Cisco 交换机(就是需要额外学一下怎么用 Junos OS/Cisco)
Dell 本身 software raid 不怎样, 用硬件 RAID,SSD 代替 SAS .

如果愿意折腾, 建议用 SuperMicro, 可以搭配更好点配置. 省下的钱还可以买备件
p200635 13
p200635 2019-09-27 07:39:33 +08:00 via Android
虚拟化 上 dell 这个方向没错。 但是为什么要上 OpenStack 而不是 ovirt 我司就是全套 VMware 爽到*限
p200635 14
p200635 2019-09-27 07:44:13 +08:00 via Android
从构架分析 你需要超融合方案 成熟的商用有 VMware nitanix 其他的不推荐 计算和存储是要分离的 网络是要支持软件定义的 还需要自动化运维 或者是桌面云 基本上数下来的话 直接找开源的话 ovirt 或者 pve 是*好的 也可以直接上 nutanix 的一体机 也是便宜还带有成熟的解决方案

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速