一次Python后端开发的面试经历

一次Python后端开发的面试经历
2018年04月24日 10:53 心空的凝望

在人才市场上,程序员也是竞争激烈的岗位。笔者经历过后端开发的应聘,在网上投出去简历后,大部分都被标记为不合适,有两个给了面试机会,其中一个自己觉得肯定不会去的,也就没有去面试,另一个经历了一轮电话面加一轮现场笔试和面试,在此记录一下面试的内容,做个小的总结。

电话面试,来了以后基本没废话,直接开始问问题。

1. is和==的区别?

is判断两个引用是否指向的是同一个变量,即内存id是否相等,==则是调用的__eq__方法,一般是用于判断值是否相等,也可以重写__eq__方法实现想要的效果。

2. dict与list的查找复杂度?

dict用hash实现,查找的时间复杂度是O(1),list则为O(n)。

3. a/b/c三个装饰器依次装饰函数fun(),装饰器的执行顺序?

注意装饰器函数本身一般有两层,在装饰的时候外层和内层顺序是相反的,详情可以参考这边文章python 多个装饰器的调用顺序。

4. 如何运行一个字符串?

eval和exec。

5.Python多线程能否充分利用CPU多核心,为什么?

这里回答的是GIL相关的东西,可深可浅,自己把握~

6. 什么是上下文管理器?如何实现?

广泛意义上来说,上下文是指程序运行的环境,Python中常见于打开文件或网络连接,其实就是with关键字,如:

with open("test.txt") as file:

print(file.read())

可以确保文件在最后会被关闭,只要对一个对象实现了__enter__和__exit__函数,就可以构造自己的上下文管理器了。

7. 同步/异步/阻塞/非阻塞都是什么?

感觉直接解释概念不好解释,这里我回答的思路是举例子,异步说白了就是任务不需要同步进行,比如用爬虫爬取一个数据,然后再保存数据,接下来再去爬另一个数据,这是同步;异步就是爬虫不用等着数据保存好,爬完一个直接去爬另一个,数据保存的事情交给别的逻辑去慢慢处理;尚学堂•百战程序员陈老师指出,阻塞和非阻塞也是基于此的,同步的情况下会阻塞爬虫,爬虫需要等待数据的保存。(这部分是我自己的理解,建议看看专业的说明)

8. 如何判断两个浮点数是否相等?

之前完全没想过这个的问题,我的回答就是按一个差不多的精度去比较,比如到小数点第几位之前都是相等的,就认为两个数相等,或者Math模块里可能有什么方法可以去精确对比,当时是这么回答的,现在查了一下基本也是这个思路,Math模块中有一个isclose函数用来判断两个浮点数的值是否接近或相等。

9. MySQL的索引一般是怎么实现的?

B-Tree(一般是B+Tree)和Hash,然后再简单介绍一下。

10. 对于Flask的实现有了解吗?

只知道WSGI,其余的不清楚,暂时还没去深入看Flask的源码。

现场笔试+面试

这个面试经历略有波折,笔试题如下:

1. 一个木棍任意截成三段,围成三角形的概率?

咩咩咩?不知道。(回来查了是25%,具体可以自行搜索,反正脱离数学N年是无论如何都想不出来的)。

2. 一个函数RAND7()随机返回1~7,使用它构造一个RAND10()函数随机返回10。

3. 有一个问答平台,每个用户对一个问题最多只能回答一次,同一个问题最多只能对一个答案点赞;1)设计合适的数据库结构;2)写出SQL获取点赞数最多的10个问题;

我平时也就用数据库查数据,在设计数据库上没有深入研究,因此的我答案就简单写了有哪些表,字段分别是什么,至于题中的条件限制,就交由后台的程序逻辑去处理,而不是在数据库设计层面去限制。因为是自己设计的表结构,SQL本身也就不难。

4. 设计一个栈,实现pop/push及max方法,要求能在O(1)时间内取得最大值。

LeetCode原题啊!list怎么能O(1)取得最大值呢,无非是空间换时间,每push一个数就同时记录当前的最大值。

其他针对简历的提问

1. 你的网站,你觉得如果访问量上去了,最先出现瓶颈问题的点是哪?怎么优化?

我答的是数据库,因为好多不必要或者可以使用缓存的地方也频繁操作数据库,而且是使用的ORM,但之前从哪看到ORM不能确保对应的SQL语句是最优的,因此可以尝试使用原生SQL或者增加Redis缓存。

2. 如果要扩展后台服务器,需要怎么做?

(话说这不是运维的工作么)嗯,是的,就是增加服务器啊,然后前面加一层负载均衡,把请求分配给不同的服务器。(那不同的服务器怎么使用你的Session?)再加个Session服务器。

3. 我看你平时刷编程题,有遇到什么有意思的题目吗?

LeetCode才开始刷,就举了两道Codewars上的题目,我也真是傻了,真的举了两道有意思(但自己没做好)的题。

其他就无非是一些为什么想做后端开发之类的问题了,个人感觉题目大部分也挺简单的,我的表现也算中规中矩吧,但面试官说我要进一步加强基础知识,具体哪方面(数据库、网络协议、还是Python本身)又语焉不详。

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部