1、break、continue、pass是什么?
break:在满足条件时,它将导致程序退出循环。
continue:将返回到循环的开头,它使程序在当前循环迭代中的跳过所有剩余语句。
pass:使程序传递所有剩余语句而不执行。
2、ascii、Unicode、utf-8、gbk的区别
1、 ascii 是最早美国用的标准信息交换码,把所有的字母的大小写,各种符号用 二进制来表示,共有256中,加入些拉丁文等字符,1bytes代表一个字符
2、 Unicode是为了统一世界各国语言的不用,统一用2个bytes代表一个字符,可以表达2^16=65556个,称为万国语言,特点:速度快,但浪费空间
3、 utf-8 为了改变Unicode的这种缺点,规定1个英文字符用1个字节表示,1个中文字符用3个字节表示,特点;节省空间,速度慢,用在硬盘数据传输,网络数据传输,相比硬盘和网络速度,体现不出来的
4、 gbk 是中文的字符编码,用2个字节代表一个字符
3、如何在Python中管理内存?
Python内存由Python的私有headspace管理。
所有的Python对象和数据结构都位于一个私有堆中。私用堆的分配由Python内存管理器负责。
Python还内置了一个的垃圾收集器,可以回收未使用的内存并释放内存,使其可用于headspace。
4、Python中的Map Function是什么?
map函数在对可迭代对象的每一项应用特定函数后,会返回map对象。
5、如何保证Redis中的数据都是热点数据
1、 Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。Redis 提供 6种数据淘汰策略:
2、 volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
3、 volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
4、 volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
5、 allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
6、 allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
7、 no-enviction(驱逐):禁止驱逐数据
6、当退出Python时,是否释放全部内存?
答案是No。循环引用其它对象或引用自全局命名空间的对象的模块,在Python退出时并非完全释放。
另外,也不会释放C库保留的内存部分。
7、select、poll、epoll模型的区别
1、 支持一个进程所能打开的最大连接数
select的最大连接数大概32_32,或者32_64
poll本质和select没区别,但是它没有最大连接数限制
epoll大概10万左右(1G的机器)
2、 FD剧增后带来的IO效率问题
select和poll每次调用都会对连接进行线性遍历,所以会随着FD的增加会造成遍历速度慢的“线性下降性能问题”
epoll没有前两个的线性下降的性能问题,但是当socket都很活跃的情况下,可能会有性能问题。
3、 消息传递方式
select和poll内核需要将消息传递到用户空间,都需要内核拷贝动作。
epoll通过内核和用户空间共享一块内存来实现
8、什么是C/S和B/S架构
1、 C/S 架构是一种典型的两层架构,其全称是Client/Server,即客户端服务器端架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据;另一种是Socket服务器端,服务器端的程序通过Socket与客户端的程序通信。
2、 B/S架构的全称为Browser/Server,即浏览器/服务器结构。Browser指的是Web浏览器,极少数事务逻辑在前端实现,但主要事务逻辑在服务器端实现,Browser客户端,WebApp服务器端和DB端构成所谓的三层架构。B/S架构的系统无须特别安装,只有Web浏览器即可。
9、列举Redis支持的过期策略
定时删除
在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除
惰性删除
key过期的时候不删除,每次从数据库获取key的时候去检查是否过期,若过期,则删除,返回null。
定期删除
每隔一段时间执行一次删除(在Redis.conf配置文件设置hz,1s刷新的频率)过期key操作
10、输入某年某月某日,判断这是这一年的第几天?
date=input('请输入某年某月某日,格式:xxxx.xx.xx')
def get_day(date):
days1=[31,28,31,30,31,30,31,31,30,31,30,31]
days2=[31,29,31,30,31,30,31,31,30,31,30,31]
year,month,day = [int(i) for i in date.split('.')]
if year % 400 ==0 or (year % 4==0 and year % 100!=0):
days=days2
else:
days=days1
return sum(days[:month-1])+day
print(get_day(date))