CDN技术基础
参考:《CDN技术详解》
概述在互联网商业化不久,由于缺乏必要的流量管理和疏通手段,骨干带宽被迅速消耗掉,IP网络流量秩序濒于失衡。为解决这一难题,麻省理工学院的一批顶级科学家提出了CDN解决方案,从此以后,CDN就成为互联网的基础设施,伴随着互联网的潮起潮落而发展。
CDN(Content Distribute Network,内容分发网络)将内容推到网络的边缘,为用户提供就近性的边缘服务,从而保证服务的质量和整个网络上的访问秩序,解决了困扰内容提供商的内容“集中与分散”的两难选择,极大缓解了内容传送瓶颈。CDN的发展促使整个互联网产业进一步分工合作,使网站和应用开发者们能够更关注于上层应用。
产生背景1995年,麻省理工学院教授,互联网发明者Tim Berners-Lee预见到当时互联网使用者已经习以为常的网络拥挤难题,未来会成为互联网应用的最大障碍。于是他向同事提出挑战,要发明一种全新的、从根本上解决问题的方法来推送互联网内容。他的这一提议造就了今天被大家普遍接受的互联网基础服务——CDN。
CDN的基本工作过程用户通过浏览器等方式访问网站的过程
①用户在自己的浏览器中输入要 ...
Python练习:文本内容检索替换
文本内容检索替换需求1python file_replace.py old_str new_str filename
代码123456789101112131415161718import sys# 获取变量old_str = sys.argv[1]new_str = sys.argv[2]filename = sys.argv[3]f = open(filename, 'r+') # 以读写模式打开data = f.read()new_data = data.replace(old_str, new_str)old_count = data.count(old_str)f.seek(0)f.truncate()f.write(new_data) # 写入替换后的内容print(f'{filename}中的{old_str}替换为{new_str},共计{old_count}处。')
验证测试文本test.txt如下:
1234abcddd a fdg bc ...
Python练习:用户登录认证
用户登录认证需求
要求用户输入账号密码进行登陆
用户账号信息保存在文件内
用户密码输入错误三次锁定用户,下次再登录,检测是这个被锁定的用户,则依然不允许登录,提示已被锁定
思路
需要从文件中读取用户信息,保存为字典,key=用户名,value=用户信息;
输入用户名,在字典中查找是否存在该用户名,若存在再判断该用户是否锁定,若锁定则不允许登录,提示已被锁定;
输入密码,查询字典判断密码是否正确,密码正确则登录成功,否则继续输入,直到输错3次提示将被锁定,修改用户状态为锁定状态写入文件;
代码1234567891011121314151617181920212223242526272829303132accounts = {} # 设置一个空字典,用于保存从文件中获取到的信息f1 = open('user.db', 'r') # 读取文件for line in f1: line = line.strip().split(',') # 将每行内容以列表形式返回 acco ...
Python学习:三元表达式、列表推导式和生成器表达式
三元表达式语法格式如下:
1为真时的结果 if 判断条件 else 为假时的结果
例子123name = input('姓名>>: ')res = '请进' if name == '张三' else '再见'print(res)
结果如下
1234姓名>>: 张三请进姓名>>: 李四再见
列表推导式列表推导式用于使用其他列表创建一个新列表。
语法格式如下:
12345# 格式1[表达式 for 变量 in 列表] # 格式2,对列表进行判断帅选[表达式 for 变量 in 列表 if 条件]
例1123# 求1-9的平方组成的列表l = [x**2 for x in range(1, 10)]print(l)
结果如下:
1[1, 4, 9, 16, 25, 36, 49, 64, 81]
例2123# 求1-9中偶数的平方组成的列表l = [x**2 for x in range(1, 10) if x % 2 == 0]print(l)
结果如下:
1 ...
Python学习:风格指南
PEP 8风格指南PEP是Python Enhancement Proposal的缩写,通常翻译为“Python增强提案”。每个PEP都是一份为Python社区提供的指导Python往更好的方向发展的技术文档,其中的第8号增强提案(PEP 8)是针对Python语言编订的代码风格指南。尽管我们可以在保证语法没有问题的前提下随意书写Python代码,但是在实际开发中,采用一致的风格书写出可读性强的代码是每个专业的程序员应该做到的事情,也是每个公司的编程规范中会提出的要求,这些在多人协作开发一个项目(团队开发)的时候显得尤为重要。我们可以从Python官方网站的PEP 8链接中找到该文档,下面我们对该文档的关键部分做一个简单的总结。
分号不要在行尾加分号, 也不要用分号将两条命令放在同一行。
行长度每行不超过80个字符。
例外:
长的导入模块语句
注释里的URL
不要使用反斜杠连接行
Python会将圆括号,中括号和花括号中的行隐式的连接起来 , 你可以利用这个特点. 如果需要, 你可以在表达式外围增加一对额外的圆括号。
12345Yes: foo_bar(self, width, h ...
Python学习:函数基础
函数基础除了可以直接使用的内置函数外,Python还支持自定义函数,即将一段有规律的、可重复使用的代码定义成函数,从而达到一次编写、多次调用的目的。
函数的本质就是一段有特定功能、可以重复使用的代码,这段代码已经被提前编写好了,并且为其起一个好听的名字。在后续编写程序过程中,如果需要同样的功能,直接通过起好的名字就可以调用这段代码。
函数的作用
结构化编程对代码的最基本的封装,一般按照功能组织一段代码;
封装的目的为了复用,减少冗余代码;
代码更加简洁美观、可读易懂
函数的定义Python函数:能完成一定的功能,由若干语句组成的语句块、函数名称、参数列表构成,它是组织代码的最小单元。
语法格式
1234def 函数名(参数1,参数2,参数3,...): '''注释''' 函数体 return 返回的值
需要注意的地方:
函数名后面必须加冒号;
函数名即标识符,命名规范:小写字母,多个单词用_间隔;
如果函数体和def不在同一行,必须缩进,约定4个空格;
若没有return,则隐式返回一个None值;
如 ...
Python学习:数据类型
概述什么是数据数据即变量的值,如name = 'John',John则是我们保存的数据。
Python3 中有六个标准的数据类型:
Number(数值)
String(字符串)
List(列表)
Tuple(元组)
Sets(集合)
Dictionary(字典)
数值Python的数值类型包括常规的类型:整数(没有小数部分的数字)、浮点数(通俗地说,就是有小数部分的数字)以及其它数值类型(复数、分数、有理数、无理数、集合、进制数等)。除了十进制整数,还有二进制数、八进制数、十六进制数。
需要说明的:
Python 3.x中的整数不区分一般整数和长整型整数,3.x版本中的整数支持无穷精度;
任何时候浮点数都是不精确的。当带有小数点或科学计数的标记符号e或E,就表示这是浮点数;
当浮点数参与表达式的运算时,会以浮点数的规则进行运算,也就是整数会转换成浮点数类型;
数值类型是不可变对象,不可变意味着不可原处修改;
数值类型不可变说明:假如a = 3333,那么现在内存中会有一个内存块保存数值对象3333,如果修改它,比如对它加上1操作a += 1,python将创建一 ...
Python学习:流程控制
关于流程控制Python 同样提供了现代编程语言都支持的两种基本流程控制结构,分支结构和循环结构:
分支结构用于实现根据条件来选择性地执行某段代码;
循环结构用于实现根据循环条件重复执行某段代码;
Python使用if语句提供分支支持,提供了while、for-in循环,也提供了break和continue控制程序的循环结构。
在学习流程控制前,需要了解布尔、比较操作符等知识。
布尔值虽然整型、浮点型和字符串数据类型有无数种可能的值,但“布尔”数据类型只有两种值:True和False。Boolean(布尔)的首字母大写, 因为这个数据类型是根据数学家George Boole命名的。在作为Python代码输入时,布尔值True和False不像字符串,两边没有引号,它们总是以大写字母T或F开头, 后面的字母小写。
例如:
123456789>>> 2==2True>>> a=trueTraceback (most recent call last): File "<stdin>", line 1, in <mo ...
Shell学习:子Shell概念
shell环境每个shell进程有一个自己的运行环境,不同的Shell进程有不同的Shell环境。Shell解析命令行、调用命令行的过程都在这个环境中完成。
调用shell程序时,会读取配置文件来初始化Shell环境。
读取配置文件情况分为两种:
用户登录启动的shell
非用户登录启动的shell
什么是子shell所谓子shell,即从当前shell环境中新开了一个shell环境,这个新开的shell环境就是子shell,而开启子shell的环境称为该子shell的父shell。
子Shell的本质可以理解为Shell的子进程,子进程的概念是由父进程的概念引申而来的,在Linux系统中,系统运行的应用程序几乎都是从init(pid为1的进程)进程派生而来的,所有这些应用程序都可以视为init进程的子进程,而init则为它们的父进程。通过执行pstree -a命令就可以看到init及系统中其他进程的进程树信息:
12345678910111213141516171819202122232425262728293031[root@test ~]# pstree -asyst ...
《新编淡水鱼饲养百科》读书笔记
《宠物生活》编委会 编 / 2010-7 /
笔记蓝曼龙
成鱼体长14厘米。身体上半部为蓝色,蓝灰色的鱼体上布满白点白斑,腹部呈黄灰色,背、臀、尾鳍都是灰色。在光线的照耀下,整个鱼体会发出绚丽多彩的蓝紫色。腹鳍胸位特化成长丝状,已演化成细长的触觉器官。
体侧有3个黑色圆斑点,一个在鳃盖后,一个在鱼体中部,一个在尾柄基部,像3颗星镶在蓝色的天空中,故又称蓝三星鱼。
生活在水体中、上层,性情温和,一般不会出现打斗,杂食性。
以鱼虾及肉类为食,食量大、生长快。
繁殖方法:蓝曼龙鱼是卵生鱼类,吐泡沫筑巢繁殖。繁殖水温以25℃左右为宜。pH值5.5~8.5,硬度5~8°DH。繁殖时,可在水族箱置一株菊花草浮在水面,繁殖方法与其他采用泡沫繁殖的鱼相同。雄鱼会吐泡筑巢并诱导雌鱼产卵,弯曲身体环抱雌鱼完成受精过程,产卵500枚左右。
斑马神仙
成鱼体长10~12厘米。身体上黑色横带密集,形成如斑马一样的黑白相间的纹路,故而得名。早期斑马燕黑色条纹较少,目前斑马燕的纹路已经非常密集了。生活在水体中层,喜欢安静,通常缓慢地游动,且比较喜欢较暗的光线。
杂食偏肉食性,以各种小型的水 ...