python技术面试题(十九)--腾讯
正文共: 4171 字 6 图 预计阅读时间: 11 分钟
因为去面试,停更了几天。在这次面试中,直接教会了我怎么做人......问的问题很深入,也让我明白了自己的水平。很简单的一个问题,深入之后,会衍生出n多问题。路途遥远,同志仍需努力啊......
这次面试的是腾讯地图项目。面试过程中, 数据库 以及数据结构与算法占大多数,python的相关知识需要深入,不能只停留表面。以下只列出几个印象深刻的问题。问了超多问题,有些很大,不知从何处写起。(二叉树的实现和遍历,我未写出O-O...大家感兴趣可以看我之前的文章『 这是一个链接 』,需要手写代码,大家可以多练习一下)
每日分享
Every person is a new door to a different world.
每个人都是通往不同世界的新大门。
小闫语录 :
每个人都是独一无二的存在,暂时的失意,只是寻找道路的一次尝试。也许尝试的次数多到你曾无数次想放弃,但是放弃又能怎样?请感谢坚持的自己,疼爱坚持的自己,最后的成功只属于你自己。
面试题和笔试题
1.python中map和reduce?
1.
map()
是python内置的高阶函数,它接收一个函数f和一个list,并通过把函数f依次作用在list的每个元素上,得到一个新的list并返回。(python3中返回的迭代器)
2.
reduce()
函数接收的参数和
map()
类似,一个函数f和一个list,但行为和
map()
不同,
reduce()
传入的函数f必须接收两个参数,
reduce()
对list的每个元素反复调用函数f,并返回最终结果的值。python3使用
reduce
需要导入,在
functools
中。
2.多态
答:定义时的类型和运行时的类型不一样,此时就是多态。python中,多态就是弱化类型,重点在于对象参数是否有指定的属性和方法,如果有,就认定合适,而不关心对象的类型是否正确。
3.事务隔离级别。
MySQL 数据库事务隔离级别主要有四种:
- Serializable (串行化),一个事务一个事务的执行。
- Repeatable read (可重复读),无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响。
- Read committed (读取已提交),其他事务提交了对数据的修改后,本事务就能读取到修改后的数据值。
- Read uncommitted (读取为提交),其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。
MySQL数据库 默认使用可重复读( Repeatable read)。
4.Django中ORM如何使用?
Django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。
使用Django进行数据库开发的步骤如下 :
1.配置数据库连接信息。
2.在
models.py
中定义模型类。
3.迁移。
4.通过类和对象完成数据增删改查操作。
腾讯面试官问:Django中ORM框架的使用,调用了哪个模块? 因为有一段时间没写代码了,对于框架的一些东西记忆并不是很清晰,我只记得当时使用Django框架并没有导包或者调用什么,而是直接写业务逻辑,所以我答的是“Django框架封装了ORM不需要额外安装扩展,可以直接使用”,显然面试官不是很满意,任然追问,我只能是尴尬的微笑一下,面试官在看出不会时,问我是不是忘记了,然后继续了后面的提问。O-O......
定义模型类时,我们继承了
models.Model
,这个模块在
django.db
中。我们在查询操作时,需要导入模型类,通过类和对象完成数据增删改查。(也许这是面试官想听的吧,我关注点错误的放在了查询时导了什么包....)
5.多继承写法以及继承顺序问题。
答:在多继承时,我们的书写方式:
class Son(Master, Father):
pass
python中多采用新式类,多继承的时候按照上面的方式进行书写。
多继承会继承所有父类的属性和方法。
如果多个父类中有同名的属性和方法,则默认使用第一个父类的属性和方法
。我们可以根据
__mro__
(是一个魔法方法,称为方法解析顺序,用来获取当前类的方法继承顺序)来查看继承顺序。
在腾讯面试中,面试官质疑我的答案,觉得多个父类有同名的方法,继承的不是第一个。也许是考验我吧,我查找了相关资料发现没有问题.....很尴尬,幸亏当时没有动摇。
6.析构函数
答:析构函数就是当对象结束其生命周期,比如对象所在的函数已经调用完毕,程序结束时,系统自动执行析构函数。在python中,当一个对象的引用计数为0的时候,
__del__
会被自动调用。
__del__
就是一个析构函数。
7.继承,在执行析构函数时,先执行父类的,还是先执行子类的?
答:析构时,会先调用子类的析构函数,再调用父类的。
初始化子类时,会先自动调用父类的构造函数,然后调用子类的构造函数。
8.继承时,所有的方法都会被继承吗?
答:不会,比如构造函数和析构函数,它们不能被继承。
9.range(0,20)[2:-2]执行结果?
python3中range返回的是一个可迭代对象,python2中则是返回一个列表。这个题目我以为python3会报错,特意写出了上面的话。结果面试官的答案显示出了我的无知...
>>> range(0,20)[2:-2]
range(2, 18)
10.写出下面代码执行结果。
[1,2,3,5,6,7,8][2:-2]
结果为:
[3,5,6]
11.将一个列表去重,并按原始顺序排序。
alist = [2,5,6,3,2,6,3,2,8]
new_list = list(set(alist))
new_list.sort(key=alist.index)
print(new_list)
>>>[2, 5, 6, 3, 8]
本来很稳的一道题,结果我在手写的过程中,忘记用新列表接收了,面试官问我对不对,我还自信的说没问题,结果我仔细看的时候,啪啪打脸啊......
12.谈一下单例模式。
答:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。简单的说就是保证只有一个对象,节约内存空间,我们可以通过修改类中的
__new__
方法,实现一个简单的单例类。
之前的文章中有相关的代码也写过这个题。『 浅谈面向对象 』『 python技术面试题(十) 』点击左侧连接,跳转查看。
13.简单谈谈ACID,并解释每一个特性。
答:ACID是事务的四大特性。分别为原子性,一致性,隔离性和持久性。 原子性(Atomicity) 指的是一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚。 一致性(Consistency) 指的是数据库总是从一个一致性的状态转换到另一个一致性的状态,如果事务没有提交,中间某一步执行失败,那么事务中所做的修改并不会保存到数据库中。 隔离性(Isolation) 指的是一个事务所做的修改在最终提交以前,对其他事务是不可见的。 持久性(Durability) 指的是一旦事务提交,则其所做的修改会永久保存到数据库。
14.MySQL的两个主流引擎,并介绍它们的区别。
答:主流的引擎有两个,分别是
InnoDB
和
MyISAM
。其中
InnoDB
支持事务,支持外键约束,它还支持行锁(比如select…for update语句,会触发行锁,但是锁定的是索引不是记录)。
MyISAM
不支持事务,不支持外键,它是数据库默认的引擎。
InnoDB
保存表的行数,如果看这个表有多少行的时候,
InnoDB
扫描整张表,
MyISAM
则是直接读取保存的行数即可。删除表的时候
InnoDB
是一行一行的删,而
MyISAM
则是重建表。
InnoDB
适合频繁修改以及安全性要求较高的应用,
MyISAM
适合查询为主的应用。在我们的项目中使用的是
InnoDB
。
15.如果将一个列表传入函数中,在函数中修改后,全局的列表会被修改吗?
答:会被修改,作为参数传入函数内部,内部修改相当于修改外部的列表。
a = [1,2,3]
def fuc(a):
a.append(1)
print(a)
fuc(a)
结果为:
[1, 2, 3, 1]
可以看出,确实改变了。
16.像快排、冒泡之类的必须会手写!!!不光腾讯,每个公司都问!!!可以看文章『 这是一个链接 』,冒泡排序请看更正文章『 这是一个链接 』
17.之前的那些面试题都有问到,大家多看一下本公众号之前的面试题。下面为大家做了汇总,可以点击跳转对应文章进行查看。
个人水平有限,可以根据自己情况,自由发挥。
- python技术面试题(一)
- python技术面试题(二)
- python技术面试题(三)
- python技术面试题(四)--redis持久化
- python技术面试题(五)
- python技术面试题(六)--数据库的优化
- python技术面试题(七)--SQL语句
- python技术面试题(八)
- python技术面试题(九)
- python技术面试题(十)
- python技术面试题(十一)
- python技术面试题(十二)--SQL注入、项目部署
- python技术面试题(十三)
- python技术面试题(十四)--数据库索
- python技术面试题(十五)--算法
- python技术面试题(十六)--数据结构与算法
- 更正--冒泡排序代码
- python技术面试题(十七)
- python技术面试题(十八)
- 浅谈面向对象
- python那些包
- 字符串的相关操作
18.还有很多问题,太底层,一脸懵逼的题,我也没法写,只能向大家提一下意见。学知识,多问一下为什么,多往底层走一步。比如列表底层实现(当然这次没有问这个)等等。SQL语句,往往简单的查询不会考,都是多张表联合查询,此次综合考了两个查询。算法和数据结构很重要,大公司和小公司都会考!!!还要会手写代码,否则习惯了代码提示的你,手写时会一脸懵逼。
优质文章推荐 :