第五套面试题
1、关于Python程序的运行性能方面,有什么手段能提升性能?
- 让关键代码依赖于外部包 - 排序时使用键key - 优化循环 - 优化循环的关键:是要减少Python在循环内部执行的工作量 - 优化循环的方式有很多,比如列表推导就能提高执行速度。 - 使用较新版本的Python - 尝试多种编码方式 - 交叉编译应用程序
2、打乱一个排好序的列表
import random li = [1,2,3,4,5] random.shuffle(li) print(li)
3、简单实现一个stack
栈是先进后出 Stack() 建立一个空的栈对象 push() 吧一个元素添加到栈的最顶层 pop() 删除栈最顶层的元素,并返回这个元素 gettop() 取栈顶元素 isEmpty() 判断栈是否为空 size() 返回栈中元素的个数 peek() 返回最顶层的元素,并不删除它 class Stack: '''模拟栈''' def __init__(self): self.items = [] def isEmpty(self): '''判断是否栈空''' return len(self.items) ==0 #返回是布尔值,不成立就返回False,成立就返回True def push(self,item): '''往栈里面添加元素''' return self.items.append(item) def pop(self): '''删除栈最顶层的元素,并返回''' return self.items.pop() def peek(self): '''返回栈顶元素,并不删除它''' if not self.isEmpty(): return self.items[len(self.items)-1] #返回栈顶元素 def size(self): '''返回栈中元素的个数''' return len(self.items) # ==========对自定义栈的使用================== s = Stack() print(s.isEmpty()) #True s.push('one') s.push('two') print(s.peek()) # two s.push('three') print(s.size()) # 3 print(s.isEmpty()) # False s.push(111111) print(s.pop()) print(s.pop()) print(s.size())
4、输出某年某月某日,判断这一天是这一年的第几天?
# 比如以3月5日为例,应该先把前两个月的加起来,然后加上5天就是本年的第几天 # 特殊情况,闰年且输入月份大于2时需考虑多加一天 year = int(input('请输入年:>>')) month = int(input('请输入月:>>')) day = int(input('请输入日:>>')) month_day_number = [31,28,31,30,31,30,31,31,30,31,30,31] if year%4==0 and year%100!=0: #如果是闰年 month_day_number[1] = 29 print('这一天是这一年的第{0}天'.format(sum(month_day_number[0:month-1])+day))
5、如何查找一个字符串特定字符?Find()和indexOf()两个函数有什么差异?
s = 'adsfd' print(s.find('x')) #找到的是索引,如果找得到就返回找到的那个索引,找不到就返回-1 print(s.index('x')) #找到返回索引,找不到会报错。
6、使用过Python那些三方件?、
Python常用的标准库以及第三方库有哪些? - collections模块。 1.namedtuple:生成可以使用名字来访问元素内容的tuple 2.deque:双向队列(两头都可进可出,但是不能取中间的值),可以快速的从另外一侧追加和推出对象 3.Counter:计数器,主要用来计数 4.OrderedDict:有序字典 5.defaultdict:带有默认值的字典 - multiprocessing:多进程模块 - current.future模块:开进程池和线程池 - os :与操作系统相关 - os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 - os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd - os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname - os.makedirs('dirname/diename2'):可生成多层递归目录 - os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 - os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname - os.remove() 删除一个文件 - os.rename("oldname","newname") 重命名文件/目录 - os.stat('path/filename') 获取文件/目录信息 - os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/" - os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' - os.system("bash command") 运行shell命令,直接显示 - os.popen("bash command) 运行shell命令,获取执行结果 - sys:和Python解释器交互 - sys.avg:实现从程序外部向程序内部传递参数 - sys.exit():退出程序 - sys.version :获取python解释器的版本信息 - sys.maxsize: 获取最大的值 - sys.path :返回模块的搜索路径 - sys.platform:返回操作系统的平台名称 - threading:多线程模块 - hashlib模块:摘要算法(注意摘要算法不是加密算法) - configparse模块:该模块适用于配置文件的格式与windows ini 文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)。 - logging模块:函数是简单配置 两种方式去应用logging模块 方式一:设置config 方式二:logger对象配置
7、索引有什么作用?有哪些分类?有什么好处和坏处?
索引是用来提高查询速度的。 索引分类: 普通索引:index 唯一索引 - 主键索引:permiary key - 唯一索引: unique 联合索引(遵循最左前缀匹配原则) - primary key(id,name):联合主键索引 - unique(id,name):联合唯一索引 - index(id,name):联合普通索引 全文索引fulltext:用于搜索很长一篇文章的时候效果最好 空间索引spatial:了解就好
8、http请求get 和post方式的区别?
get 请求: - 没有请求体 - 数据量有限制 - get请求数据会暴露在浏览器的地址栏中,以?分割URL和传输数据,多个参数用&连接 post 请求: - 有请求体 - post请求数据会放在请求体里面 那些是get请求: 1、在浏览器的地址栏中直接给出url,那么就一定是get请求 2、点击页面上的超链接也一定是get请求 3、提交表单时,表单默认使用get请求,但可以设置为post
9、常用的多线程解决并发的方法
利用Threading模块开多线程
http://chuna2.787528.xyz/haiyan123/p/7445703.html
10、描述下字典的items()方法与iteritems()方法的不同?
items()以将一个字典以列表的形式返回,因为字典是无序的,所以返回的列表也是无序的。 #举例 d = {'a':1,'b':20} print(d.items()) #dict_items([('a', 1), ('b', 20)]) # for i in d.items(): # print(i) #('a', 1) iteritems():返回的是一个迭代器 b = a.iteritems() 返回b <dictionary-itemiterator object at 0x00000000022BDF98> list(b) =[('a',1),('b',3)]
11、用装饰器给一个方法增加打印功能
def wrapper(func): def inner(*args,**kwargs): print('hi..') ret = func(*args,**kwargs) return ret return inner @wrapper def index(): return '你好' obj = index() print(obj)
12、简单实现一个栈,实现push,pop方法
def push(self,item): '''往栈里面添加元素''' return self.items.append(item) def pop(self): '''删除栈最顶层的元素,并返回''' return self.items.pop()
.
浙公网安备 33010602011771号