【算法工程师】Python面试问题总结

算法工程师的语言要求是一大一小,大的我选择的是java,但是我java学的并不好,emmm,难过。。。
所以就把python当作我最熟悉的语言,准备一点问题,防止他问到我的时候怪尴尬的,就比如去年京东就问我GC是怎么回事,两眼发懵。。。
以下鸣谢的文章都是面向Python开发的会涉及到一些Django和爬虫的,有兴趣可以看看,我的时间比较紧张,就放弃了。。。

鸣谢:
https://www.cnblogs.com/shunge/p/8120047.html
https://www.cnblogs.com/xuechaojun/archive/2018/12/13/10112001.html
https://blog.csdn.net/t8116189520/article/details/80165589


Python是如何进行内存管理的(重要)

  1. Python利用内存池机制用于管理小块内存的申请和释放;
  2. 当创建大量占用内存小的对象时,即频繁调用new/malloc,会导致大量内存碎片,致使效率降低,所以需要内存池机制。
  3. 内存池机制需要在内存中预先申请一定数量的、大小相同的内存块留作备用,当有新的内存需求时,先从内存池中,给这个需求分配内存,如果不够了,就在重新申请。

Python垃圾回收机制(重要)

https://www.cnblogs.com/George1994/p/7349871.html

python利用引用计数实现跟踪和回收垃圾,并在引用计数的基础上,使用“标记-删除”解决容器内部对象的循环引用问题,利用分代回收以空间换取时间进一步提高垃圾回收的效率。

  1. 引用计数
    当一个对象的引用被创建或者复制时,对象的引用计数+1;
    当一个对象的引用被销毁时,对象的引用计数-1;
    当对象的引用计数为0时,表明这个对象不会再被使用,将其内存释放掉。
  2. 标记-删除
    寻找根对象的集合来作为垃圾检测动作的起点,根对象的集合是全局变量的引用或者函数栈的引用,这些引用所指向的对象不可能被删除;从根对象出发,沿着根对象集合的每个引用,如果某个对象能够到达,就说明这个对象是可达的,可达对象是不会被删除的,这个过程就是垃圾检测阶段;垃圾检测结束之后,所有对象被分为可达和不可达,可达对象被保留,释放所有不可达对象的内存,这就是垃圾回收阶段。
  3. 分代回收
    将系统中所有内存快按其存活时间划分为多个集合,也就是“代”,python默认定义了三代对象集合,活得越久的对象越不可能是垃圾,应该减少对它的垃圾收集频率。
    如何衡量“活得越久”:这个对象经过的垃圾收集次数。

迭代器和列表的区别

  1. 迭代器生成,被迭代一遍之后,里面的元素就被取光了,如果想在用,还得重新生成;list可以反复遍历。
  2. 迭代器从集合的第一个元素来开始访问,直到访问完所有的元素,只能向前,不能后退;list可以从任意位置开始向前向后进行访问。

谈谈装饰器(重要)

  1. 本质:闭包函数;
  2. 作用:使其他函数在不修改代码的前提下增加额外功能;
  3. 返回值:函数对象;
  4. 优点:少写很多重复性代码,提高工作效率。

Python如何定义一个私有变量

https://www.cnblogs.com/lijunjiang2015/p/7802410.html

  1. _xx 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。若内部变量标示,如: 当使用“from M import”时,不会将以
  • 8
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值