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的两个主流引擎,并介绍它们的区别。

答:主流的引擎有两个,分别是 InnoDBMyISAM。其中 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.之前的那些面试题都有问到,大家多看一下本公众号之前的面试题。下面为大家做了汇总,可以点击跳转对应文章进行查看。

个人水平有限,可以根据自己情况,自由发挥。

  1. python技术面试题(一)
  2. python技术面试题(二)
  3. python技术面试题(三)
  4. python技术面试题(四)--redis持久化
  5. python技术面试题(五)
  6. python技术面试题(六)--数据库的优化
  7. python技术面试题(七)--SQL语句
  8. python技术面试题(八)
  9. python技术面试题(九)
  10. python技术面试题(十)
  11. python技术面试题(十一)
  12. python技术面试题(十二)--SQL注入、项目部署
  13. python技术面试题(十三)
  14. python技术面试题(十四)--数据库索
  15. python技术面试题(十五)--算法
  16. python技术面试题(十六)--数据结构与算法
  17. 更正--冒泡排序代码
  18. python技术面试题(十七)
  19. python技术面试题(十八)
  20. 浅谈面向对象
  21. python那些包
  22. 字符串的相关操作

18.还有很多问题,太底层,一脸懵逼的题,我也没法写,只能向大家提一下意见。学知识,多问一下为什么,多往底层走一步。比如列表底层实现(当然这次没有问这个)等等。SQL语句,往往简单的查询不会考,都是多张表联合查询,此次综合考了两个查询。算法和数据结构很重要,大公司和小公司都会考!!!还要会手写代码,否则习惯了代码提示的你,手写时会一脸懵逼。

优质文章推荐:

公众号使用指南

redis操作命令总结

前端中那些让你头疼的英文单词

Flask框架重点知识总结回顾

项目重点知识点详解

难点理解&面试题问答

flask框架中的一些常见问题

团队开发注意事项

浅谈密码加密

Django框架中的英文单词

Django中数据库的相关操作

DRF框架中的英文单词

重点内容回顾-DRF

Django相关知识点回顾

美多商城项目导航帖

项目重要技术点介绍

原文发布于微信公众号 - 小闫笔记(Pythonnote)

原文发表时间:2019-03-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券