第一题:
仔细阅读以下代码,找出你认为能优化的地方,或者支出代码不足的地方
def sum_str(num):
str = 'first'
for i in range(num):
str += 'X'
return str
print(sum_str(5))
# 优化如下:
print('first'+'X'*5)
第二题: 简单描述python中如何实现并发
pyhton实现并发tornado框架(epoll多路IO复用)
nginx+uWSIG负载均衡(gevent协成方案)
缓存设计
MySQL相关优化
页面静态化
前后端分离
第三题 一个包(文件夹)里有三个模块,mod1.py,mod2.py,mod3.py,但使用from demopack import * 导入时,如何保证只有mod1,mod3被导入?
思路:在demopack 的init.py中添加 all=["mod1","mod3"]
第四题:实现一个装饰器,用于打印函数的调用记录
nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量
def decorate(fun):
'''
打印函数被调用的时间及调用次数
'''
count = 0
def wrapper(*args, **kwargs):
nonlocal count
count += 1
print("被调用%d次" % count)
return fun(*args, **kwargs)
return wrapper
@decorate
def demo():
print("hello world!")
if __name__ == '__main__':
for i in range(3):
demo()
被调用1次
hello world!
被调用2次
hello world!
被调用3次
hello world!
第五题:python 里面如何实现tuple和list的转换
# 定义元组
tup = (1,2,3)
print(tup,type(tup))
# 元组转换列表
tuple_to_list = list(tup)
print(tuple_to_list,type(tuple_to_list))
# 列表转换元组
list_to_tuple = tuple(tuple_to_list)
print(list_to_tuple,type(list_to_tuple))
# 结果:
(1, 2, 3) <class 'tuple'>
[1, 2, 3] <class 'list'>
(1, 2, 3) <class 'tuple'>
第六题:python 写一段代码实现删除一个列表里面重复的元素
lis = [1, 2, 6, 8, 12, 2, 6, 8, 42, 52, 12]
# 方法1:使用set()函数 ,然后再用list()转换成列表,或者列表推导式
res = list(set(lis))
# res = [i for i in set(lis)]
print(res)
# 方法2:append
def delList(list):
new_list = []
for i in list:
if i not in new_list:
new_list.append(i)
return new_list
res = delList(lis)
print(res)
# 方法3:count,remove
def delCountList(list):
for i in list:
if list.count(i) > 1:
for x in range((list.count(i) - 1)):
list.remove(i)
return list
res = delCountList(lis)
print(res)
第七题:python中 pass语句的作用是什么
Python pass 是空语句,是为了保持程序结构的完整性。
pass 不做任何事情,一般用做占位语句。因为如果定义一个空函数程序会报错,当你没有想好函数的内容是可以用 pass 填充,使程序可以正常运行。
第八题:下面这段代码的输出结果将是什么?请解释?
class Parent(object):
x = 1
class Child1(Parent):
pass
class Child2(Parent):
pass
print(Parent.x, Child1.x, Child2.x)
Child1.x = 2
print(Parent.x, Child1.x, Child2.x)
Parent.x = 3
print(Parent.x, Child1.x, Child2.x)
结果为:
1 1 1 #继承自父类的类属性x,所以都一样,指向同一块内存地址。
1 2 1 #更改Child1,Child1的x指向了新的内存地址。
3 2 3 #更改Parent,Parent的x指向了新的内存地址。
第九题:python 输入一个字符串,输出该字符串中字符串的所有组合。
例如:输入字符串"123",则输出为'1', '2', '3', '12', '13', '21',
import itertools
str = '123'
str_list = []
for i in range(1,len(str)+1):
res = [''.join(x) for x in itertools.permutations(str,i)]
str_list += res
new_str = ','.join(str_list)
print(new_str)
# 结果:
1,2,3,12,13,21,23,31,32,123,132,213,231,312,321
第十题:输入日期,判断这一天是这一年的第几天?
import datetime
from datetime import timedelta
def dayofyear():
year = input('请输入年份:')
month = input('请输入月份:')
day = input('请输入天:')
data1 = datetime.date(year=int(year), month=int(month), day=int(day))
data2 = datetime.date(year=int(year), month=1, day=1)
return year,(data1-data2 +timedelta(days=1)).days
year,day = dayofyear()
print('这是{}的第{}天'.format(year,day))
第十一题:写下常用的Linux命令,并简洁其作用。
ls -a 显示所有文件包括隐藏文件
cd dir 切换到当前目录下的dir目录
rm test 删除某个文件
touch test 创建一个空文件
su xiaoming 切换到xiaoming用户
dete -s 20:30:30 设置系统时间为 20:30:30
cd /home 进入 /home目录
cd .. 返回上一级目录
cd ../.. 返回上两级目录
mkdir dir1 创建dir1目录
rm -f file1 删除file1的文件 -f 忽略不存在的文件,不会提示
groupadd group_name 创建一个新用户组
groupdel group_name 创建一个用户组
tar -cvf archive.tar file1 创建一个非压缩的tarball
tar -cvf archive.tar file1 file2 dir1 创建一个包含了 file1,file2,dir1的档案文件
tar -tf archive.tar 显示一个包中的内容
tar -xvf archive.tar -C /tmp 将压缩包释放到/tmp目录下
tar -cvfj archive.tar.bz2 dir1 创建一个bzip2格式的压缩包
tar -xvfj archive.tar.bz2 解压一个bzip2格式的压缩包
tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包
tar -xvfz archive.tar.gz 解压一个gzip格式的压缩包
第十二题:MySQL事务的四大特性是多么?并简述每个特征。
1.原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
2.一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。举例来说:假设用户A和用户B两者的钱加起来一共是1000,那么不管A和B之间如何转账,转几次,事务结束后两个用户的钱加起来应该还得是1000,这就是事务的一致性。
3.隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如同时操作同一张表时,数据库为每个用户开启的事务,不能被其他事务的操作有所干扰,多个并发事务直接要相互隔离,关于事务的隔离性数据库提供了多种隔离级别。
4.持久性(Durability)
一旦事务提交,则其所做的修改会永久保存到数据库。
第十三题:什么是restful api?简单介绍一下。
是一种统一接口的设计方式,就是被普遍采用的RESTful API设计风格。
restful风格设计的关键点有:
1.url路径:url路径地址尽量使用名词复数,不使用动词;
2.请求方式:访问同一个url地址,采用不同的请求方式,代表要执行不同的操作;
3.过滤信息:过滤参数可以放在查询字符串中;
4.响应数据:针对不同操作,服务器向用户返回不同的响应数据;
5.响应数据格式:服务器返回的响应数据格式,应尽量使用json;
6.响应状态码
200 OK - [GET/PUT]:服务器成功返回用户请求的数据
201 CREATED - [POST]:用户新建数据成功。
204 NO CONTENT - [DELETE]:用户删除数据成功。
400 INVALID REQUEST - [POST/PUT]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作
401 Unauthorized - []:表示用户没有权限(令牌、用户名、密码错误)。
403 Forbidden - [] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
404 NOT FOUND - []:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。。
500 INTERNAL SERVER ERROR - []:服务器发生错误,用户将无法判断发出的请求是否成功。