python中的函数:
def foo(): 定义函数
return 1
foo() 调用函数
定义类:
class 类名:
def 方法1(self,参数列表):
self指哪一个对象调用的方法就是哪一个对象的引用。
pass
def 方法2(self,参数列表):
pass
python捕获异常:
try:
执行的代码
except:
错误的代码
面向对象和面向过程
面向过程:强调的是步骤。
面向对象:强调的是功能。
封装:根据职责将属性和方法封装到一个抽象的类中。
继承:实现代码的重用
多态:不同的子类调用相同的方法产生不同的结果
python中的闭包:
闭包指根据不同的配置信息得到不同的结果。
id命令:
python中的id命令用来查看内存地址。
python中的装饰器:
为了给某段程序添加功能,但该程序已经上线或已经被使用,那么不需要批量修改源代码装饰器用于拓展原来
函数功能,特殊之处在于他的返回值也是一个函数。使用@符号可以将装饰器应用到函数。
@outer 一个修饰符就是一个函数。
python中的kwargs和*args:**
**kwargs参数表示的就是一个字典。
*args用来将参数打包成tuple给函数用。
python的内存分配以及垃圾回收:
python采用计数的方式来管理分配内存,python的每个对象都有一个引用计数,这个引用计数表明了有多少个对象指
向他,计数为0即表示释放。
python中的GC模块主要运用了引用计数来跟踪和回收垃圾,还可以通过‘标记--清除’解除可能出现的回环问题。
python多线程:
1.解耦降低关联性
2.支持并发
3.支持忙闲不均,防止一次制造太多来不及处理,等生产者慢下来再处理。
python遍历列表的4种方法:
app_list = [1234,5678,9999]
for app_id in app_list:
print app_id
for index,app_id in enumerate(app_list):
print index,app_id
enumerate()说明
enumerate()是python的内置函数
enumerate在字典上是枚举、列举的意思
对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以
同时获得索引和值enumerate多用于在for循环中得到计数
for i in range (len(app_list)):
print i,app_list[i]
for app_id in iter(app_list):
print app_id
iter()函数有两种用法,一种是传一个参数,一种是传两个参数。结果都是返回一个iterator对象。
python类型转换:
num_list=[1,2,3,4]
type(num_list)
num=tuple(num_list) 转换为元祖类型
type(num)
python删除列表重复数据:
b=list(set(num_list))会从大到小排列
python如何复制对象:
使用 copy模块来复制对象
例:import copy
list = [1,2,3,4]
b = list
c = copy.copy(list) 浅拷贝
d = copy.deepcopy(list) 深拷贝
python中的深拷贝和浅拷贝的定义:
在python中对象的赋值就是对象的引用,当创建一个对象把他赋值给另一个变量时,Python只是拷贝了对象的引用而已。
浅拷贝:拷贝了最外围对象本身,内部的元素只是拷贝了一个引用而已,也就是只复制对象,对象的引用不复制。
深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用,把对象复制了一遍,并且该对象中引用的其他对象也复制。
python如何发送邮件:
SMTP(邮件传输协议),只可用来发送邮件,不可用来接受邮件,默认端口号是25。也可以使用email模块。
如何使用python删除文件?
使用OS模块
os.remove(path) 删除文件
os.removedirs(path) 递归的删除目录,只删除父目录,子目录为空会报错。
os.rmdir(path) 删除目录要求为空
python如何copy一个文件?
在shutil模块中有一个copyfile函数可以实现。
python中的socket套接字
用于描述IP地址和端口,是一个通信链的句柄,用于实现不同虚拟机或者不同计算机间通信。
python中列表,元组的区别
列表和元组都是容器,列表是可变的,元组是不可变的。
python如何来查询和替换一个字符串?
sub()方法来查找和替换。
sub(replacement,string,[count=0])
被替换 替换 可选
subn()和sub()一样,不过会返回一个二维数组,包括替换后的新字符串和总共替换的数量。
单例模式:
确保一个类只有一个实例存在,python模块就是一种单例模式,第一次导入生成.pyc文件,第二次直接
加载.pyc文件。把相关函数和数据定义在一个模块中,就可以获得单例对象。
UTF-8占用字节数:
一个utf-8数字占用一个字节,英文字母占用一个字节,少数汉字占用三个字节,多数汉字占用四个字节。
计算字符串长度:
通过内置方法len()来计算字符串的长度。
aa = 'afebb' print len(aa)
python中__name__==__main__的作用
让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行。
如果我们是直接执行某个.py文件的时候,该文件中那么”__name__ == '__main__'“是True,但是我们如果从另外一个.py
文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。
这个功能还有一个用处:调试代码的时候,在”if __name__ == '__main__'“中加入一些我们的调试代码,我们可以让外部
模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!
数据结构与算法:
链表:
链表:是一种由节点(Node)组成的线性数据集合,每个节点通过指针指向下一个节点,它是由节点组成的并能表示序列的数据结构。
单链表:每个节点仅指向下一个节点,最后一个节点指向空(Null)
双链表:每个节点有两个指针p,n,p指向前一个节点,n指向下一个节点,最后一个节点指向空(null)
循环链表:每个节点指向下一个节点,最后一个节点指向第一个节点。
栈:
栈是一个数据集合,支持两个基本操作,push用于将元素压入栈,pop用于删除栈顶元素,后进先出。
队列:
队列是一种元素集合,支持两种基本操作:enqueue用于添加一个元素到队列,dequeue用于删除队列中的元素,先进先出数据结构。
树:
树是一种无向,联通的无环图。
二叉树:是一种树形数据结构,每个节点最多有两个节点,称为左子节点和右子节点。
满二叉树:二叉树中每个节点有0或2个子节点。
完美二叉树:二叉树中每个节点有两个子节点,并且所有叶子节点的深度是一样的。
完全二叉树:二叉树中除最后一层外其他各层节点数都达到最大值,最后一层的节点都持续集中在左边。
堆:
堆是一种给予树的满足某些特性的数据结构,整个堆中所有子节点的键值都满足相同的排序条件。
最大堆:父结点的键值永远大于等于所有子节点的键值,根结点的键值是最大的。
最小堆:父节点的键值永远小于等于所有子节点的键值,根节点的键值是最小的。
DDOS攻击原理以及检测:
DDOS意思是分布式拒绝服务,即采取一些垃圾数据包来阻塞网络的网路通道,导致网站不能正常访问。分布式
服务攻击就是利用一台主服务器来控制N台肉鸡来对目标服务器进行服务拒绝攻击的方式。
检测:
首先网站打不开的话,可以尝试使用3389连接,可以用ping来测试,再一种方法就是用telnet方法来登录80端口查看,
看会不会出现黑屏。这些都无法连接,则判断是收到了DDOS攻击。
然后如果除了80端口以外其他端口均正常,ping命令也正常,那就是80端口坏了,然后查看IIS(互联网信息服务)是否正常,
可以把80端口改为其他端口,若可以正常访问,则判断收到了CC攻击。
几种常见的DDOS攻击:
SYN/ACK Flood攻击
可以通过各种系统的网络服务,主要通过向受害主机发送大量的伪造源IP和源端口的SYN或ACK包,导致主机的缓存资源被耗尽
或忙于发送回应包而拒绝服务,由于源IP是伪造的追踪起来比较困难,缺点是实施起来有一定的难度,需要高带宽的僵尸主机。
TCP全攻击:
通过许多僵尸主机不断地与受害服务器建立大量的TCP连接,直到服务器的内存资源被拖垮,从而造成拒绝服务。
CC攻击:
和服务端建立正常的TCP连接,并不断的向脚本程序提交查询,列表等大量耗费数据库资源的调用,典型的以小博大攻击。
DDOS攻击的防护:
1.采用高性能的网络设备
2.保证充足的网络带宽
3.安装专业的抗DDOS防火墙,例如冰盾防火墙