00-Python 开发的基础
语言学习相关
为什么学习 Python
大学学的是计算机专业,学长建议我学Python,然后自己通过看视屏教程和向有学过 Python 的同学学习了 Python。
Python 入门比较简单,它简单易学,生态圈比较强大,涉及的地方比较多,特别是在人工智能,和数据分析这方面。Python 目前的发展方向包括:
- 爬虫
- 自动化运维
- 全栈
- 大数据、数据分析
- 人工智能
通过什么途径学习 Python
刚开始跟着网上里面跟着视频学基础,再后来网上到看技术贴,比如廖雪峰的Python教程等,后来有时间到GitHub上面找一些小项目学习。
有问题都去那些找解决方案
百度、谷歌,还会去知乎、stackoverfloow、必应、思否(segmentfault)。
是否有关注什么技术类的公众号
- Python 之禅(主要专注Python相关知识,作者:刘志军)
- 码农翻身(主要是 Java 的,但不光是 Java,涵盖面很广,作者:刘欣)
- 实验楼(在线练项目)
编程基础
谈谈对 Python 的了解和其他语言的区别
优点:
- Python 属于解释型语言,当程序运行时,是一行一行的解释并运行,所以调式代码很方便,开发效率高。
- Python 易于学习,语法简洁优美,功能强大,标准库与第三方库都非常强大,而且应用领域也非常广,用少量的代码构建出很多功能(高效的高级数据结构)。
- 龟叔给 Python 定位是任其自由发展、优雅、明确、简单。
- Python 完全支持面向对象;数据类型是动态类型的。
- Python 是跨平台且开源的。可移植性,可扩展性,可嵌入性都很强。
缺点:
- 运行速度慢,Python 的运行速度相较与 C,肯定是慢了。
- Python 弱类型(强类型是指不允许隐式变量类型转换,弱类型则允许隐式类型转换)。
与其他语言相比:
- 与 Java 相比:在很多方面 Python 比 Java 简单,比如 Java 中所有变量必须声明才能使用,而 Python 不需要声明,用少量的代码构建出很多功能。
- 与 PHP 相比:Python 标准包直接提供了工具,并且相对于 PHP 代码更易于维护。
- 与 C 相比:Python 和 CPython 这门语言是由 C 开发而来。
简述解释型和编译型编程语言
- 解释型:边解释边执行(Python、php)。
- 编译型:编译后再执行(c、Java、c#)。
Python 的解释器种类以及相关特点
- CPython:官方版本的解释器。使用 C 语言开发的,所以叫 CPython。在命令行下运行 Python 就是启动 CPython 解释器。CPython 是使用最广的 Python 解释器。
- IPython:IPython 是基于 CPython 之上的一个交互式解释器,也就是说,IPython 只是在交互方式上有所增强,但是执行 Python 代码的功能和 CPython 是完全一样的。CPython 用
>>>
作为提示符,而IPython用In [序号]:
作为提示符。 - PyPy:由 Python 写的解释器,它的执行速度是最快。PyPy 采用 JIT 技术,对 Python 代码进行动态编译(注意不是解释),绝大部分 Python 代码都可以在 PyPy 下运行,但是 PyPy 和 CPython 有一些是不同的,这就导致相同的 Python 代码在两种解释器下执行可能会有不同的结果。
- Jython:Jython 是运行在 Java 平台上的 Python 解释器,可以直接把 Python 代码编译成 Java 字节码执行。
- IronPython:IronPython 和 Jython 类似,只不过 IronPython 是运行在 .Net 平台上的 Python 解释器,可以直接把 Python 代码编译成 .Net 的字节码。
小结:
- Python 的解释器很多,但使用最广泛的还是 CPython。
- 如果要和 Java 或 .Net 平台交互,最好的办法不是用 Jython 或 IronPython,而是通过网络调用来交互,确保各程序之间的独立性。
位和字节的关系
- 位(bit,又名比特,简写为b):数据传输是以大多是以 位 为单位进行传输的。一个位就代表一个 0 或 1(即一个二进制),二进制是构成存储器的最小单位。
- 字节(Byte,简写为B):数据存储是以 字节 为单位存储的,字节是最小一级的信息单位。
1字节 = 8位
。每 8 个 位(bit)组成一个 字节(Byte)。
b、B、KB、MB、GB 的关系
1 |
|
ascii、unicode、utf-8、gbk 区别
- ascii:最多只能用 8 位(一个字节)来表示,即:
2^8 = 256
,所以,ASCII 码最多只能表示 256 个符号。 - unicode(万国码):任何一个字符 == 两个字节。
- utf-8(万国码的升级版):一个中文字符 == 三个字节,英文是一个字节,欧洲的是 2 个字节。
- gbk(国内版本):一个中文字符 == 2个字节,英文是一个字节。
- gbk 转 utf-8 需通过媒介 unicode。
python2 对内容进行编码默认 ascii,python3 对内容进行编码的默认为 utf-8。
字节码和机器码的区别
机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑的 CPU 可直接解读的数据。运行速度最快,但也非常晦涩难懂,也比较难编写。
字节码(Bytecode)是一种包含执行程序、由一序列
op 代码/数据对
组成的二进制文件。字节码是一种中间码,它比机器码更抽象,需要直译器转译后才能成为机器码的中间代码。
字节码是一种中间状态(中间码)的二进制代码(文件)。
解释 PV、UV 的含义
- PV 访问量(Page View),即页面访问量,每打开一次页面 PV 计数+1,刷新页面也是。
- UV 访问数(Unique Visitor),指独立访客访问数,一台电脑终端为一个访客。
解释 QPS 的含义
QPS(Query Per Second)每秒查询率,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
什么是正向和反向代理
- 正向代理代理客户端(客户端找一个代理去访问服务器,服务器不知道你的真实IP)
- 反向代理代理服务器(服务器找一个代理给你响应,你不知道服务器的真实IP)
生产者消费者模型应用场景及优势
生产者与消费者模式是通过一个容器来解决生产者与消费者的强耦合关系,生产者与消费者之间不直接进行通讯,而是利用阻塞队列来进行通讯,生产者生成数据后直接丢给阻塞队列,消费者需要数据则从阻塞队列获取。
实际应用中,生产者与消费者模式则主要解决生产者与消费者生产与消费的速率不一致的问题,达到平衡生产者与消费者的处理能力,而阻塞队列则相当于缓冲区。
应用场景:用户提交订单,订单进入引擎的阻塞队列中,由专门的线程从阻塞队列中获取数据并处理。
优势:
解耦。
假设生产者和消费者分别是两个类。如果让生产者直接调用消费者的某个方法,那么生产者对于消费者就会产生依赖(也就是耦合)。
将来如果消费者的代码发生变化,可能会影响到生产者。而如果两者都依赖于某个缓冲区,两者之间不直接依赖,耦合也就相应降低了。支持并发。
生产者直接调用消费者的某个方法,还有另一个弊端。由于函数调用是同步的(或者叫阻塞的),在消费者的方法没有返回之前,生产者只能一直等着。而使用这个模型,生产者把制造出来的数据只需要放在缓冲区即可,不需要等待消费者来取。支持忙闲不均。
缓冲区还有另一个好处。如果制造数据的速度时快时慢,缓冲区的好处就体现出来了。当数据制造快的时候,消费者来不及处理,未处理的数据可以暂时存在缓冲区中。等生产者的制造速度慢下来,消费者再慢慢处理掉
列举你熟悉的设计模式
- 简单工厂模式、工厂模式、工厂方法模式、build 模式、单例模式、clone 模式
- 适配器模式、代理模式、装饰器模式、桥接模式
- 责任链模式、迭代器模式、状态模式