python工程师面试需要掌握什么知识_Python工程师面试题之必须掌握的基础语法知识...

1.可变与不可变类型;

不可变类型(数字、字符串、元组、不可变集合)不可变类型不能被修改。

可变类型(列表、字典、可变集合)。

2.__new__() 与 __init__()的区别;

_new_作用于_init_之前。前者可以决定是否调用后者,或者说可以决定调用哪个类的_init_方法。

首先要知道在面向对象编程中,实例化基本遵循创建实例对象、初始化实例对象、最后返回实例对象这么一个过程。

Python 中的 _new_ 方法负责创建一个实例对象,_init_ 方法负责将该实例对象进行初始化。

3.设计模式相关知识

单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点,例如框架中的数据库连接

装饰器模式:不修改元类代码和继承的情况下动态扩展类的功能,例如框架中的每个controller文件会提供before和after方法。

迭代器模式: 提供一个方法顺序访问一个聚合对象中各个元素,在PHP中将继承 Iterator 类。

命令模式: 将”请求”封闭成对象, 以便使用不同的请求,队列或者日志来参数化其他对象. 命令模式也支持可撤销的操作。

1547625772433.jpg

4.装饰器相关知识

装饰器是一个函数,这个函数的主要作用是包装另一个函数或类。包装的目的是在不改变原函数名的情况下改变被包装对象的行为。接收一个函数,内部对其包装,然后返回一个新函数,这样子动态的增强函数功能;通过高阶函数传递函数参数,新函数添加旧函数的需求,然后执行旧函数。

使用装饰器单例属性不会被覆盖。因为装饰器单例模式是直接返回之前生成的对象,并不会重新初始化对象。像new方法构建的单例模式会重新调用init方法,为实例重新初始化属性。

5.垃圾回收机制相关知识

垃圾回收:python解释器对正在使用的对象保持计数,当某个对像的引用计数降为0时,垃圾收集器就可以释放该对象,获取分配的内存。当分配对象和取消分配对象的差值高于阈值时垃圾回收才会启动。

分代回收:python将所有的对象分为0,1,2三代。所有的新建对象都是0代对象。当某一代对象经历过垃圾回收,依然存活,那么它就被归入下一代对象。垃圾回收启动时,一定会扫描所有的0代对象。

如果0代经过一定次数垃圾回收,那么就启动对0代和1代的扫描清理。当1代也经历了一定次数的垃圾回收后,那么会启动对0,1,2,即对所有对象进行扫描。

6.多进程与多线程知识点

多线程:在单个程序中同时运行多个线程完成不同的工作,称为多线程。

线程共享内存空间;进程的内存是独立的,同一个进程的线程之间可以直接交流;两个进程想通信,必须通过一个中间代理来实现,一个线程可以控制和操作同一进程里的其他线程;但是进程只能操作子进程。进程间通信主要包括管道, 系统IPC(包括消息队列,信号量,共享存储), SOCKET。

多进程的优点是稳定性好,一个子进程崩溃了,不会影响主进程以及其余进程。但是缺点是创建进程的代价非常大,因为操作系统要给每个进程分配固定的资源。

多线程优点是效率较高一些,但是致命的缺点是任何一个线程崩溃都可能造成整个进程的崩溃,因为它们共享了进程的内存资源池。

7.协程知识点

高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理协程能保留上一次调用时的状态,管是进程还是线程,每次阻塞、切换都需要陷入系统调用,使用线程时需要非常小心地处理同步问题,而协程完全不存在这个问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值