平安科技Python面试题分析

Steven最近在考虑换工作,突然接到了平安的面试邀请,也没怎么特别的准备就跑过去面试了,结果聊了一个小时之后被无情刷掉,不过还是想把这次的一些考点放在这里供大家以后参考。btw:面试我的竟然是个妹子,刚开始进来的时候我还以为先是HR面,结果人家一开始问技术问题,肃然起敬。

先是问道:

1.Python里面的数据类型有哪些?

分析:其实这个问题并不难,除了基础的int/float/bool/字符串/None之外就是Python特有的字典/列表/元组/set 类型

2.然后面试官接着问:那么你能告诉我list和set的区别吗?

分析:这个问题问的比较细,因为平时没有用到set类型,所以当时回答不上来,事后我去网上查了一些,其实也很简单,list是有序的数组,可以有重复的数据,可以通过下标来访问,但是set是无序的,但是数据不允许重复,不可通过下标来访问,另外一点set语句执行效率更高。我们可以做一个测试:

python -m timeit -n 1000 "[x for x in range(1000) if x in range(500,1500)]"

输出结果如下:

可以清晰的看到:执行1000次循环足足花了18s的时间

再用set来测试一下:

python -m timeit -n 1000 "set(range(1000)).intersection(range(500,1500))"

set语句几乎是在我敲下回车键之后瞬间执行完的。所以他们的效率不可同日而语。

 

当时因为不清楚set类型的区别,所以我说的是List和dict的区别,list占用空间小,但是插入和查询数据更慢,然后面试官紧追不舍,为什么dict的效率更高一些呢,又把我问懵了,后来我查了一些,其实是因为dict 是参考的hashmap的方式,时间复杂度O1,但是list的复杂度是On,自然dict的查询和插入效率更高。

3.因为我的简历上写着用过Selenium和BeautifulSoup,面试官问道:那你知道这两个的区别吗?

说真的,这个是之前上数据分析课的时候老师讲过,我真的忘了,具体的大家感兴趣的话可以自行搜狗,我这里就不误导大家了。

part II 开始写几个程序吧

4.给出几个数字0,1,1,2,3,5,8 ,写一个函数来输出第n个数字。

分析:这个很明显的是求Fibbonacci数列的,直接写:

def fib(n):
    if n ==0:
        return 0
    elif n==1:
        return 1
    else:
        return fib(n-2) + fib(n-1)

5.请写一个装饰器

分析:装饰器是Python比较高级一点的特性,是通过闭包的方式来实现的,主要是防止重复修改代码。

def login(fn):
    def inner():
        username = raw_input('请输入用户名:')
        pwd = raw_input('请输入密码:')
        if username == 'admin' and pwd == '123456':
            fn()
        else:
            print('登陆失败,请重试')
    return inner

@login
def delete():
    print("删除中,请稍后")

delete()

6.给出一个list,请根据list里面字典的值进行排序。

分析:这个考察的是我们对于基础的数据类型的使用,做法也有很多种,但是当时有限的时间内,我没有足够的时间思考,所以给出的答案应该是错误的。后面研究之后 发现了一个可以很好解决这个问题的解法。

 

a= [{'a':1},{'b':3},{'c':2}]
c = {}
for l in a:
    c.update(l)
c2 = sorted(c.items(),key=lambda x:x[1])

7.list列表去重的问题:

给定一个列表['a','a','b','b','c'],请给出去除重复值之后的列表

分析:前面也提到之前因为是没有接触过set的,所以这里面有个最简单的set解决方式,我不知道,于是只能通过for循环的方式来解决问题,但是面试官显然对我当时的解法不满意。

解答:

lis1 = ['a','a','b','b','c']

s = set(lis1)

lis2 = list(s)

解法二:我们可以借助字典的方式来解决:

d1 = dict.fromkeys(lis1)

lis2 = list(d1)

代码的问题到这里就结束了,感觉做的面试官不算太满意

part III、聊项目

基于我之前的项目,面试官问我做的项目里面设计了哪些表,js用的怎么样,Ajax在这个项目里面用到没有,其实Ajax之前开发web项目用过,但是后来不熟悉了,所以这个项目没用到。

最后聊到的一个项目里面她问到这个项目里面用到哪些服务,我说了Mysql、Redis、RabbitMQ,最后一个问题是这些服务之间用的什么协议呢?  我说是HTTP协议,她说不对,我有点懵,这个我真没关注到,后来查了一下是说,RabbitMQ和其他系统通讯用的比较多的是STOMP/AMQP1.0等等。

后面就是让我问她有没有什么问题,面试就这样结束了,持续了将近一个小时。但是因为败在了一些细节上,所以总结出来的是什么呢?越是大公司会越是注重基础,所以大家在平常的工作和学习中一定要注意基础知识的积累,及时查漏补缺。这样才能在机会到来的时候一跃而起。

 

你可能感兴趣的:(编程开发,职场)