1.遍历字典
for k,v in dic.items()
2.什么叫闭包?
函数内部调用函数外部(局部)的变量
3.在调用一个函数中,如何结束本程序?
quit() sys.exit() exit() 让函数抛出异常
4.交换机和路由器的区别?
交换机的主要功能是组织局域网, 经过交换机内部处理解析信息之后, 将信息以点对点,点对多的形式传给固定端
路由器: 跨网段进行数据传输,路由选择最佳路径
5.针对 使用UDP协议发送数据,一次收发大小究竟多少合适?
udp不会发生粘包,udp协议本层对一次收发数据大小的限制是:
65535 - ip包头(20) - udp包头(8) = 65507
站在数据链路层, 因为网卡的MTU 一般被限制在了1500, 所以对数据链路层来说,一次收发数据的大小被限制在
1500 - ip包头(20) - udp包头(8) = 1472
得到结论:
如果sendto(num)
num > 65507 就会报错
1472 < num < 65507 会在数据链路层拆包,而udp本身就是不可靠协议, 所以一旦
拆包之后, 造成的多个小数据包在网络传输中,如果丢任何一个, 那么此次数据传输就会失败
num < 1472 是比较理想的状态
6.面试题
"""
编写Python脚本,分析xx.log文件,按域名统计访问次数
xx.log文件内容如下:
https://www.sogo.com/ale.html
https://www.qq.com/3asd.html
https://www.sogo.com/teoans.html
https://www.bilibili.com/2
https://www.sogo.com/asd_sa.html
https://y.qq.com/
https://www.bilibili.com/1
https://dig.chouti.com/
https://www.bilibili.com/imd.html
https://www.bilibili.com/
脚本输出:
4 www.bilibili.com
3 www.sogo.com
1 www.qq.com
1 y.qq.com
1 dig.chouti.com
"""
import re
from collections import Counter
with open("xx.log") as f:
data = f.read()
ym_list = re.findall(r'https://(.*?)/.*?', data)
ym_dict = dict(Counter(ym_list))
ret = sorted(ym_dict.items(), key=lambda x: x[1], reverse=True)
print(ret)
for i in ret:
print(i[1], i[0])
1. 谈谈你对面向对象的理解?
对象 = 数据 + 方法
2. Python面向对象中的继承有什么特点?
继承的优点:
1、建造系统中的类,避免重复操作。
2、新类经常是基于已经存在的类,这样就可以提升代码的复用程度。
继承的特点:
1、在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。有别于C#
2、在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
3、Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
3. 面向对象深度优先和广度优先是什么?
必须得了解:
MRO
深度优先 广度优先 C3算法 => http://python.jobbole.com/85685/
4. 面向对象中super的作用?
在子类中执行父类的方法
5. 列举面向对象中特殊成员(带双下划线的特殊方法,如:__new__、__init__、__call__等)
__new__(): 开辟空间,创建对象
__init__(): 初始化对象,对象属性的赋值
__call__(): 对象()直接执行的代码
__str__(): print(对象)时执行的
__repr__(): 解释器环境下直接输入对象展示的内容
__len__(): len()
__del__(): 析构
__hash__():
__eq__():
__setitem__():
__getitem__():
__delitem__():
6. 静态方法和类方法区别?
顾名思义,类方法就是Python类的方法,是这个类可以调用的方法,那么参数需要把这个类本身传进去,不需要实例化就可以使用。静态方法是类中的一个普通函数或者说方法,那么参数和普通的传参一样,类或者实例化的对象都可以直接使用它,也就是说这个静态方法也不需要实例化就可以调用。