Python后端开发工程师面试

Python036

Python后端开发工程师面试,第1张

第一步:自我介绍

第二步:公司介绍

第三步:技术基础

第四步:项目介绍

第五步:待遇

自我介绍,简单直接,姓名,籍贯,大学,工作经历

示例如下:

你好,面试官,我叫XX,来自XX,本科毕业于XX,主修XX专业,有X年工作经验,在上一家公司担任python后端开发工程师的职位。

公司名称是XX、公司主要做外包软件、都有软件定制/商城定制、前端2个后端2个运维1个

主要是根据你简历中填写的技术,根据我的简历中所写的,总结几点如下:

字典的查询流程:

不可变对象可哈希, str , fronzenset , tuple ,自己实现的类,要重载 __hash__ 方法。

dict内存花销大,但是查询速度快,自定义的对象或者python内部的对象都是dict包装的。

dict的存储顺序和元素添加顺序有关,添加顺序可能改变已有数据的顺序。

集合:是一个可以存放任意数据类型的可变无序的映射集合。

set和dict类似,set的核心也是散列表,但是表元只包含值的引用。 由于散列表的特性,set的元素不能重复,且无序。 内部由哈希实现,查找的时间复杂度为O(1),所以性能很高,实现了魔法函数 __contains__ 可以使用in来查找。 set的去重是通过两个函数 __hash__ 和 __eq__ 实现的。

(1)浅拷贝

定义:浅拷贝只是对另外一个变量的内存地址的拷贝,这两个变量指向同一个内存地址的变量值。

浅拷贝的特点:

(2)深拷贝:

定义:一个变量对另外一个变量的值拷贝。

深拷贝的特点:

Python GC主要使用引用计数(reference counting)来跟踪和回收垃圾。在引用计数的基础上,通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用问题,通过“分代回收”(generation collection)以空间换时间的方法提高垃圾回收效率。

GIL全称 Global Interpreter Lock ,中文解释为全局解释器锁。它并不是Python的特性,而是在实现python的主流Cpython解释器时所引入的一个概念,GIL本质上就是一把互斥锁,将并发运行变成串行,以此来控制同一时间内共享数据只能被一个任务所修改,从而保证数据的安全性。

GIL保护的是解释器级别的数据,但是用户自己的数据需要自己加锁处理。

既然有了GIL的存在,一个进程中同一时刻只有一个线程能够被执行,无法利用cpu的多核机制,导致多线程用于I/O密集型,多进程用于计算密集型,如金融分析等。

死锁:两个或两个以上的进程或者线程在执行过程中,因为争夺资源而造成的互相等待现象,若无外力的作用,都将一直处于阻塞状态,这些互相等待的进程或者线程就被称为死锁。

解决方法,使用递归锁(RLock)

这个RLock内部有一个Lock和一个counter变量,counter记录着acquire的次数,从而使得资源可以被多次require。直到一个线程所有的acquire都被release,其他的线程才能获得资源。上面的例子如果使用RLock代替Lock,则不会发生死锁

可以直接认为是linux,毕竟搞后端的多数是和linux打交道。

那么如何避免粘包问题呢? 归根结底就是一句话, 明确两个包之间的边界.

UDP不存在粘包问题,是由于UDP发送的时候,没有经过Negal算法优化,不会将多个小包合并一次发送出去。另外,在UDP协议的接收端,采用了链式结构来记录每一个到达的UDP包,这样接收端应用程序一次recv只能从socket接收缓冲区中读出一个数据包。也就是说,发送端send了几次,接收端必须recv几次(无论recv时指定了多大的缓冲区)。

存储可能包含rdbms,nosql以及缓存等,我以mysql,redis举例**

一、自我介绍

之前讲过很多关于如何应对面试官提出的“自我介绍”这个问题,今天,针对Python程序员这个岗位,给大家重新梳理一下答题的结构。我们在做自我介绍时,可以按照:个人基本信息+基本技术构成+项目经验(具体项目以及在项目中的负责部分)+自我评价的结构来回答。注意一定要紧紧围绕招聘岗位的需求做介绍,在此之前要做好准备工作,看看招聘方具体需要什么方向的研发工程师。目前针对Python,有自动化测试平台的设计与开发、数据的挖掘与清洗以及Python开发等具体岗位,所以面试Python方向的同学注意,可以多和运维以及自动化方面靠拢。当然,具体还是要看公司空缺岗位与你的专业是否对口。

二、不要给自己挖坑

确保你在回答面试官的过程中,回答的每个知识点都了然于胸,不然被问住,是很难堪的。如果遇到不会的问题,一定不要盲目乱答一通。比如有一次,有位同学在回答Web安全问题时,顺嘴说了SQL注入,面试官便顺水推舟,让这位同学接着讲讲SQL的原理及解决方法。然而这位同学却把XSS跨站注入攻击和SQL注入搞混了,归根结底,还是知识掌握得不够牢固。所以,在面试时,要斟酌每一句话,聪明的同学还可以引导面试官,让他问出自己想要被问的问题。当然,化被动为主动,就是面试中比较高的一种境界了。

三、有足够的自信

如果你学历不是特别高,在面试时,面试官很有可能会问你是怎样看待学历和能力的。学历和能力在当今的社会都不可或缺,学历往往是你面试的敲门砖,但敲完门用途就不大了,后面才是证明你能力的时刻。针对这个问题,我们一定要不卑不亢地说出自己看法:“我想只要完成了大学校园内的学业,就表明已经具备了一定的学习能力。如果我们努力学习代码技能,并且有能力学好,那么是学士还是博士就不是很重要。竞争这个岗位的关键是看你能在这个领域上发挥什么作用,而不单单是学了多少书本上的知识。”

作为一个容易上手的开发工具,python近几年有很多小伙伴在学习,那么大家有没有想过往python哪个模块继续深造呢?爬虫是最近热点久居不下的模块,不知道广大学习python的大军中,有没有想在爬虫领域进行大展身手的。今天小编就面试爬虫岗位需要掌握哪些知识这个点跟大家进行分析。

1.Python

因为面试的是Python爬虫岗位,面试官大多数会考察面试者的基础的Python知识,包括但不限于:

Python2.x与Python3.x的区别

Python的装饰器

Python的异步

Python的一些常用内置库,比如多线程之类的

2.数据结构与算法

数据结构与算法是对面试者尤其是校招生面试的一个很重要的点,当然小公司不会太在意这些,从目前的招聘情况来看对面试者的数据结构与算法的重视程度与企业的好坏成正比,那些从不问你数据结构的你就要当心他们是否把你当码农用的,当然以上情况不绝对,最终解释权归面试官所有。

3.Python爬虫

最重要也是最关键的一点当然是你的Python爬虫相关的知识与经验储备,这通常也是面试官考察的重点,包括但不限于:

你遇到过的反爬虫的策略有哪些?

你常用的反反爬虫的方案有哪些?

你用过多线程和异步吗?除此之外你还用过什么方法来提高爬虫效率?

有没有做过增量式抓取?

对Python爬虫框架是否有了解?

4.爬虫相关的项目经验

爬虫重在实践,除了理论知识之外,面试官也会十分注重爬虫相关的项目:

你做过哪些爬虫项目?如果有Github最好

你认为你做的最好的爬虫项目是哪个?其中解决了什么难题?有什么特别之处?

以上4个模块为大家面试python爬虫岗位提供一个参考,不知道要为面试准备什么的小伙伴可以好好看看,最后小编祝大家能面试到自己想去的岗位。更多Python学习推荐:PyThon学习网教学中心。