第五套面试题

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()

 

 


.

posted on 2018-02-18 18:56  海燕。  阅读(170)  评论(0)    收藏  举报