简述编译型与解释型编程语言

两种方式只是翻译的时间不同

概念:

  • 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。
  • 解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!

区别:

  • 编译型语言,执行速度快、效率高;依赖编译器、跨平台性差些。如C、C++、Delphi、Pascal,Fortran。
  • 解释型语言,执行速度慢、效率低;依赖解释器、跨平台性好。如Java、Basic.

Python 的采用了类似Java的编译模式,先将Python程序编译成Python字节码,然后由一个专门的Python字节码解释器负责解释执行字节码。

PHP,Java,Python,C,C++这几种编程语言特性对比

JAVA:

  1. 简单性
  2. 面向对象性(面向对象的程度可以达到95%)
  3. 健壮性
  4. 跨平台性
  5. 高性能(自动垃圾回收机制)
  6. 多线程
  7. 动态性
  8. 安全性

什么是胶水语言

能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。

Python解释器种类以及特点

  • CPython :
    用C语言开发的,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。
  • IPython :
    基于CPython的一个交互式解释器,相比于CPython ,只是在交互方式上有所增强
  • PyPy :
    采用JIT技术,对Python代码进行动态编译,所以可以显著提高Python代码的执行速度。
  • Jython :
    Python的Java实现,Jython会将Python代码动态编译成Java字节码,然后在JVM上运行。
  • IronPython :
    Python的C#实现,IronPython将Python代码编译成C#字节码,然后在CLR上运行。(与Jython类似)

PEP8规范

  1. 每个缩进级别使用4个空格。
  2. 导入库的顺序 :
    标准库 – 第三方库 –本地库
  3. 操作符左右各加一个空格,函数默认参数使用的赋值符左右省略空格
  4. 类的命名采用驼峰命名法
  5. 所有行限制为最多79个字符
  6. 始终使用UTF-8
  7. 三引号作文档字符串,
  8. 顶级定义之间空2行, 方法定义之间空1行
  9. 不要使用反斜杠连接行。Python会将圆括号, 中括号和花括号中的行隐式的连接起来

python递归的最大层数

998 次

可以通过sys.setrecursionlimit(1000)来设置

ascii、unicode、utf-8、gbk 区别

  • ASCII码使用一个字节编码,所以它的范围基本是只有英文字母、数字和一些特殊符号 ,只有256个字符。
  • Unicode : 一组十六进制的数字来表示字符
  • UTF-8是一种针对Unicode的可变长度字符编码,又称万国码
  • GBK是只用来编码汉字的,使用双字节编码。

字节码和机器码的区别

  • 机器码就是计算机可以直接执行,并且执行速度最快的代码。
  • 字节码是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码

python2与python3的区别

  1. Print 从一个语句标签一个函数
  2. 整数的除法 : 从地板除变成真除法
  3. 支持 Unicode : Python 2 默认使用 ASCII 字母表,Python 3 默认使用 Unicode
  4. Python2 中存在老式类和新式类的区别,Python3 统一采用新式类。

Python3和Python2中 int 和 long的区别?

int(符号整数):通常被称为是整数或整数,没有小数点的正或负整数

long(长整数):无限大小的整数,这样写整数和一个大写或小写的L。

简述Python的深浅拷贝以及应用场景

  • 浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝指拷贝数据集合的所有层。
  • 所以对于只有一层的数据集合来说深浅拷贝的意义是一样的,比如字符串,数字,还有仅仅一层的字典、列表、元祖等.

如何安装第三方模块?以及用过哪些第三方模块?

  • 在Python中,安装第三方模块,是通过setuptools这个工具完成的。
  • Python有两个封装了setuptools的包管理工具:easy_install和pip。目前官方推荐使用pip

解释print(1 < 2 == 2) : True

print(1 < 2 == 2)等价于print(1<2 and 2==2)

logging模块的作用?以及应用场景?

  • 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息;
  • print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging则可以由开发者决定将信息输出到什么地方,以及怎么输出;

os和sys模块的作用?

  • sys模块主要是用于提供对python解释器相关的操作
  • os模块是Python标准库中的一个用于访问操作系统功能的模块,使用OS模块中提供的接口,可以实现跨平台访问

谈谈你对面向对象的理解?

面向对象就是将一些零散的具有相同功能的属性方法通过类封装起来,实现模块化

Python面向对象中的继承有什么特点?

  • init()方法不会被自动调用,它需要在其派生类的构造中亲自专门调用。
  • 在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数。
  • 先在本类中查找调用的方法,找不到才去基类中找。

是否使用过functools中的函数?其作用是什么?

functools用于高阶函数。通常情况下,只要是可以被当做函数调用的对象就是这个模块的目标。

静态方法和类方法区别?

  • 实例方法,类方法,静态方法都可以通过实例或者类调用,只不过实例方法通过类调用时需要传递实例的引用。

  • 三种方法从不同层次上来对方法进行了描述:实例方法针对的是实例,类方法针对的是类,他们都可以继承和重新定义。

什么是反射?以及应用场景?

本质其实就是利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!

metaclass作用?以及应用场景?

要控制类的创建行为,可以使用metaclass。

json序列化时,可以处理的数据类型有哪些?如何定制支持datetime类型?

可以处理数组、对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import json
from datetime import datetime

class ComplexEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(obj, date):
return obj.strftime('%Y-%m-%d')
else:
return json.JSONEncoder.default(self, obj)

x = json.dumps({'now':datetime.now()},cls=ComplexEncoder)
print(x) # {"now": "2019-08-14 15:29:52"}

json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?

1
json.dumps(jsonData,ensure_ascii=False)

常用的设计模式

  • 简单工厂模式
  • 工厂方法模式
  • 抽象工厂模式
  • 创建者模式
  • 原型模式
  • 单例模式

简述函数式编程

在函数式编程中,函数是基本单位,变量只是一个名称,而不是一个存储单元。除了匿名函数外,Python还使用fliter(),map(),reduce(),apply()函数来支持函数式编程。