Python后端开发工程师面试

第一步:自我介绍。

第二步:公司介绍

第三步:技术基础

第四步:项目介绍

治疗

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

例子如下:

面试官你好,我叫XX,来自XX。本人毕业于XX,本科学历,专业为XX,有X年工作经验。我在上一家公司做python后端开发工程师。

公司名称是XX。公司主营外包软件,均有软件定制/商城定制,2前端2后端运维1。

主要是根据你简历上填写的技能,根据我简历上写的内容,我可以总结出以下几点:

字典的查询过程:

不可变对象可以是hashed、str、fronzenset、tuple、自实现类,应该重载__hash__方法。

Dict消耗内存大,但是查询速度快。自定义对象或python内部的对象被包装在dict中。

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

Set:可以存储任何数据类型的变量无序映射集。

Set类似于dict,set的核心也是哈希表,但是table元素只包含对值的引用。由于哈希表的特性,set的元素不能重复和乱序。内部用hash实现,搜索的时间复杂度为O(1),所以性能很高。神奇的函数__contains__实现了,可以在in中搜索。set的去重是通过两个函数__hash__和__eq__实现的。

(1)浅层复制

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

浅层拷贝的功能:

(2)深度复制:

定义:将一个变量的值复制到另一个变量。

深层拷贝的功能:

Python GC主要使用引用计数来跟踪和回收垃圾。在引用计数的基础上,通过“标记和清扫”解决了容器对象可能存在的循环引用问题,通过“世代收集On”提高了垃圾收集效率。

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

GIL保护解释器级别的数据,但是用户需要锁定他们自己的数据。

由于GIL的存在,一个进程中只能同时执行一个线程,无法使用cpu的多核机制,导致多线程用于I/O密集型,多进程用于计算密集型,比如财务分析。

死锁:两个或多个进程或线程在执行过程中因为争夺资源而互相等待的现象。除非有外力,否则它们会一直处于阻塞状态。这些相互等待的进程或线程被称为死锁。

解决方案是使用递归锁(RLock)

这个RLock中有一个锁和一个计数器变量,计数器记录获取的次数,这样就可以多次获取资源。直到一个线程的所有获取都被释放,其他线程才能获得资源。如果上面的例子使用RLock而不是Lock,就不会发生死锁。

可以直接认为是linux,毕竟大部分后端的人跟linux打交道。

那么如何避免包粘的问题呢?说到底就是一个字,定义了两个包的边界。

UDP不存在粘包问题,因为UDP发送的时候没有经过Negal算法的优化,不会一次合并发送多个包。此外,在UDP协议的接收端,使用链结构来记录每一个到达的UDP包,使得接收应用程序一次只能从套接字接收缓冲区接收一个包。换句话说,发送方发送了几次,接收方必须接收几次(无论recv时指定了多大的缓冲区)。

存储可能包括rdbms、nosql和缓存等。我以MySQL和Redis为例* *