Python笔试基础

Python的多线程、多进程、协程的区别?

线程是操作系统最小的调度单位,而进程是各种资源管理的集合。而进程要操作CPU,就必须创建1个线程(进程中至少包含1个线程)。
线程是共享内存空间,即共享数据,而进程的内存空间是独立的。
协程是通过单线程来实现并发,它只有1个线程,可以实现无需线程上下文切换的开销、无需操作锁和同步的开销。而1个CPU支持上万的协程是不成问题的。
操作系统可以开多个进程,一个进程可以有多个线程,多个线程可以被分配到不同的核心上跑,但实际上每个核心上只有一个线程,只是这个线程在不停的进行上下文的切换,给我们一种并发的感觉。

Python中可变不可变类型有哪些?

可变:列表、字典
不可变:int、string、float、tuple

Python中迭代器与生成器的区别?

生成器是1种特殊的迭代器,可以做到迭代器能做的所有事情,而且自动创建iter和next方法,效率更更高和节省内存。

什么是猴子补丁

猴子补丁就是在函数或对象已经定义之后,再去修改它的行为。

谈下python的GIL

GIL锁在解释器进程中是全局有效的,它主要锁定Python线程的CPU执行资源。
换句话说,在CPython解释器中当一个线程需要执行CPU进行计算之前,它需要先获得这把大锁;否则即使已经被操作系统调度出来,但仍然无法执行计算。
多核的时候,同时会有多个线程在不同的CPU核心上执行,此时不同线程之间就需要竞争GIL,而GIL只能同时被一个线程申请到,所以会导致其它线程处于闲置状态。所以Python在多核CPU上的多线程始终只有单线程在跑程序。
为了能在Python中利用多核来提高计算效率,还是有如下的方法可以实现的:

  • 使用python3.4或更高版本(对GIL机制进行了优化)
  • 使用多进程替换多线程(多进程之间没有GIL,但是进程本身的资源消耗较多)
  • 使用C编写高性能模块(with nogil跳出GIL限制)
  • 指定cpu运行线程(使用affinity模块)
  • 使用Jython、IronPython等无GIL解释器
  • 全IO密集型任务时使用多线程,因为计算密集型任务会长时间占据GIL并容易再次申请到GIL
  • 使用协程(高效的单线程模式,也称微线程;通常与多进程配合使用)

简单说下Kafka

Kafka是1个分布式消息提交日志系统,集群适用zookeeper来保证系统可用性。主要由消费者和发布者组成。
其与JMS不同的是,即使消息被消费了,消息仍然不会被立即删除,日志文件会根据broker中的配置要求保留一定的时候后才删除。对于集群而言,对应的消费者和发布者信息是保存在zookeeper中。
但是没有提供消息确认机制(不比RabbitMQ),只能在一定程度上对尚未确保的消息的发送和接收绝对可靠。适用于网站活性跟踪,将网页/用户操作等信息发送到Kafka中,并实时跟踪或离线统计分析。适合用于日志收集中心,流式处理(后面应接spark或storm)

简单说下随机森林

随机森林是1种集成算法,通过组合多个弱分类器,最终结果通过投票或者取均值,使得整体模型的结果具有较高的精确度和泛化能力。

简单说下机器学习的过程

主要从如下步骤做起:

  1. 从整体上思考观察所需要解决的问题(定义业务目标的解决方案、如何去构建解决方案(监督学习/无监督学习, 线上/线下)?、如何衡量性能效果(例误差率这些)?等)
  2. 获得数据
  3. 仔细观察你的数据得到对这些数据的思路与想法,数据探索,研究其特征及属性(名称、类型、噪声、分布等)
  4. 将数据处理成符合机器学习算法所需要求(数据的清洗、准备、预处理、标准化)
  5. 找不同算法模型, 并寻找效果最好一个.
  6. 微调模型并将它们组合成一个很好的解决方案.
  7. 提出解决方法.(通过可视化的方式进行查看)

redis使用场景

redis的使用场景有:

  • 缓存内容
  • 排行榜
  • 计数处理,比如用户登录次数统计、在线状态检测
  • 轻量级消息队列,使用list
  • 内容订阅(发布/订阅)

redis数据类型与排行榜

redis中最常用的数据类型有:

  • string
  • hash
  • list
  • set
  • sorted set

其中sorted set(有序集合)类型可以用于排行榜功能,使用zadd添加键名,使用zrevrange进行逆序获取指定排名前N个用户。

MongoDB使用场景

MongoDB是一个面向文档(document-oriented)的数据库。适用于:

  • 日志记录的存储与查询
  • 使用地理位置索引对于移动地图、打车、外卖软件是最佳选择

RESTful是什么

RESTful是一种软件架构风格、设计风格,其面向资源。相比SOAP要简单很多。其中后者是交换数据的1种协议规范,用于描述传递信息的格式。而WebService是一种跨编程语言和跨操作系统平台的远程调用技术。

若文章对您有帮助,请打赏1块钱。您的支持,可以让我分享更多精彩的文章。转载请注明来源


知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。