答:从三个方面来讲,一对象的引用计数机制,二垃圾回收机制,三内存池机制
⒈对象的引用计数机制
Python 内部使用引用计数, 来保持追踪内存中的对象, 全部对象都有引用计数。
引用计数增长的状况:
❶一个对象分配一个新名称
❷将其放入一个容器中(如列表、 元组或字典)
引用计数减小的状况:
❶使用 del 语句对对象别名显示的销毁
❷引用超出做用域或被从新赋值
sys.getrefcount( )函数能够得到对象的当前引用计数,多数状况下, 引用计数比你猜想得要大得多。 对于不可变数据(如数字和字符串) , 解释器会在程序的不一样部分共享内存, 以便节约内存。css
⒉垃圾回收
❶当一个对象的引用计数归零时, 它将被垃圾收集机制处理掉。
❷当两个对象 a 和 b 相互引用时, del 语句能够减小 a 和 b 的引用计数, 并销毁用于引用底层对象的名称。 然而因为每一个对象都包含一个对其余对象的应用,所以引用计数不会归零, 对象也不会销毁。 (从而致使内存泄露) 。 为解决这一问题, 解释器会按期执行一个循环检测器, 搜索不可访问对象的循环并删除它们。html
⒊内存池机制
Python 提供了对内存的垃圾收集机制, 可是它将不用的内存放到内存池而不是返回给操做系统。
❶Pymalloc 机制。 为了加速 Python 的执行效率, Python 引入了一个内存池机制, 用于管理对小块内存的申请和释放。
❷Python 中全部小于 256 个字节的对象都使用 pymalloc 实现的分配器, 而大的对象则使用系统的 malloc。
❸对于 Python 对象, 如整数, 浮点数和 List, 都有其独立的私有内存池, 对象间不共享他们的内存池。 也就是说若是你分配又释放了大量的整数, 用于缓存这些整数的内存就不能再分配给浮点数。前端
答: PyChecker 是一个 python 代码的静态分析工具, 它能够帮助查找 python 代码的 bug, 会对代码的复杂度和格式提出警告Pylint 是另一个工具能够进行 codingstandard 检查python
前端优化:web
1 减小http请求面试
2 html和css放在页面上部,js放在底部。由于js加载慢防止显示不全,性能差,影响用户体验redis
后端优化数据库
1 缓存存储读写次数搞变化少的数据,如网站首页和商品信息。一般固定的或者更新周期长的数据放在缓存中,应用程序读取时候找不到再访问磁盘进行读写操做。(磁盘访问速度远远低于内存)后端
2 对耗时操做采用异步处理,对采集比较频繁数据单独存储浏览器
3 代码优化,方法封装,避免屡次嵌套使用循环
数据库:
1 若是有条件,数据放在redis读取快
2 创建索引和外键
3 多多表联合查询的数据进行视图处理
同源策略同时知足协议相同、域名相同和端口相同。
1 session存放在服务器端,cookie在客户端(浏览器查看)
2 session运行依赖session ID,session id存放在cookie中,二者同时生效
3 session安全性较高