/*自定义导航栏*/

笔记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安全性较高

posted @ 2019-06-13 10:24 伏草惟存 阅读(...) 评论(...) 编辑 收藏