笔记11:面试知识
面试笔记
1 Python 是如何进行内存管理的?
答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制
⒈对象的引用计数机制
Python 内部使用引用计数, 来保持追踪内存中的对象, 所有对象都有引用计数。
引用计数增加的情况:
❶一个对象分配一个新名称
❷将其放入一个容器中(如列表、 元组或字典)
引用计数减少的情况:
❶使用 del 语句对对象别名显示的销毁
❷引用超出作用域或被重新赋值
sys.getrefcount( )函数可以获得对象的当前引用计数,多数情况下, 引用计数比你猜测得要大得多。 对于不可变数据(如数字和字符串) , 解释器会在程序的不同部分共享内存, 以便节约内存。
⒉垃圾回收
❶当一个对象的引用计数归零时, 它将被垃圾收集机制处理掉。
❷当两个对象 a 和 b 相互引用时, del 语句可以减少 a 和 b 的引用计数, 并销毁用于引用底层对象的名称。 然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零, 对象也不会销毁。 (从而导致内存泄露) 。 为解决这一问题, 解释器会定期执行一个循环检测器, 搜索不可访问对象的循环并删除它们。
⒊内存池机制
Python 提供了对内存的垃圾收集机制, 但是它将不用的内存放到内存池而不是返回给操作系统。
❶Pymalloc 机制。 为了加速 Python 的执行效率, Python 引入了一个内存池机制, 用于管理对小块内存的申请和释放。
❷Python 中所有小于 256 个字节的对象都使用 pymalloc 实现的分配器, 而大的对象则使用系统的 malloc。
❸对于 Python 对象, 如整数, 浮点数和 List, 都有其独立的私有内存池, 对象间不共享他们的内存池。 也就是说如果你分配又释放了大量的整数, 用于缓存这些整数的内存就不能再分配给浮点数。
2 有没有一个工具可以帮助查找 python 的 bug 和进行静态的代码分析?
答: PyChecker 是一个 python 代码的静态分析工具, 它可以帮助查找 python 代码的 bug, 会对代码的复杂度和格式提出警告Pylint 是另外一个工具可以进行 codingstandard 检查
3 前端、后端和数据库角度阐述web项目的性能
前端优化:
1 减少http请求
2 html和css放在页面上部,js放在底部。因为js加载慢防止显示不全,性能差,影响用户体验
后端优化
1 缓存存储读写次数搞变化少的数据,如网站首页和商品信息。通常固定的或者更新周期长的数据放在缓存中,应用程序读取时候找不到再访问磁盘进行读写操作。(磁盘访问速度远远低于内存)
2 对耗时操作采用异步处理,对采集比较频繁数据单独存储
3 代码优化,方法封装,避免多次嵌套使用循环
数据库:
1 如果有条件,数据放在redis读取快
2 建立索引和外键
3 多多表联合查询的数据进行视图处理
4 什么是同源策略
同源策略同时满足协议相同、域名相同和端口相同。
5 cookie和session区别
1 session存放在服务器端,cookie在客户端(浏览器查看)
2 session运行依赖session ID,session id存放在cookie中,两者同时生效
3 session安全性较高
作者:白宁超,工学硕士,现工作于四川省计算机研究院,研究方向是自然语言处理和机器学习。曾参与国家自然基金项目和四川省科技支撑计划等多个省级项目。著有《自然语言处理理论与实战》一书。 自然语言处理与机器学习技术交流群号:436303759 。
出处:http://www.cnblogs.com/baiboy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。