2018年秋招运维岗面试常见python和数据结构知识点总结

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防火墙,例如冰盾防火墙

猜你喜欢

转载自blog.csdn.net/aaaaaab_/article/details/82959170