【刷题Day27】Python/JAVA - 01(浅)
Python
Python 2 和 Python 3 有什么区别?
主要:
- 打印语句:在Python2中,print是一个语句,写作print “Hello”,而在Python3中,print变成了一个函数,写作print(“Hello”)。
- 整数除法:在Python2中,整数除法会自动进行地板除法(Truncating Division),例如5/2会得到2,而在Python3中,结果是浮点数2.5
- 字符串处理:在Python2中,默认的字符串类型是ASCII,而在Python3中,默认的字符串类型是Unicode。
- 内置函数变化:Python3中,range()返回的是一个迭代器,而在Python2中,range()返回的是一个列表。如果你希望在一个Python3中得到一个列表,需要使用list(range(10))
- 语法与库的改进:Python3对许多内置库和语法进行了改进和简化,提升了代码可读性和性能,例如urllib,input()函数
解释型语言 Python 和编译型语言有什么区别?
Python作为一种解释型语言,不同于编译器语言,其主要区别在于代码执行方式。解释型语言在执行程序时通过解释器逐行将代码转换为机器语言,并立即执行;而编译器语言在执行之前需要经过编译器将整个代码文件编译为机器语言的可执行文件,然后再执行。
主要区别:
-
解释型语言(如Python):执行时逐行编译,通常无需编译步骤。
-
编译型语言(如C++):在运行前整个程序都需要编译成机器码,产生可执行文件。
-
错误处理:解释型语言在运行时发现错误,而编译型语言在编译阶段就能找到大部分错误。
-
执行速度:编译型语言通常比解释型语言执行更快,因为编译后的代码是直接的机器码。
-
平台依赖性:编译型语言生成的平台特定可执行文件,解释型语言则更为跨平台,因为只需要对应平台的解释器。
什么是 Python 的 OOPS(面向对象编程)?
Python的OOPS(面向对象编程)是一种编程范式,它通过”类“和”对象“来组织代码,提高代码的可重用性、可维护性和扩展性。
在Python中,OOP包括四大主要特性:
- 封装(Encapsulation):通过把数据和操作数据的方法封装在一个类中,保护数据不被外界意外修改。
- 继承(Inheritance):通过定义新的类来继承已有类的属性和方法,从而实现代码复用。
- 多态(Polymorphism):通过不同的类实现相同的方法,使得相同的操作作用于不同的对象产生不同的结果。
- 抽象(Abstraction):通过抽象类和接口来定义通用方法,隐藏复杂的实现细节。
Java
接口和抽象类有什么区别?
接口和抽象类在设计动机上有所不同。
接口的设计是自上而下的。我们知晓某一行为,于是基于这些行为约束定义了接口,一些类需要有这些行为,因此实现对应的接口。
抽象类的设计是自下而上的。我们写了很多类,发现它们之间有共性,有很多代码可以复用,因此将公共逻辑封装成一个抽象类,减少代码冗余。
所谓的自上而下指的是先约定接口,再实现。
而自下而上是先有一些类,才抽象了共同父类。
其他区别:
-
方法实现:
接口中的方法默认是public和abstract(但在Java8之后可以设置default方法或静态方法)
抽象类可以包含abstract方法(没有实现)和具体方法(有实现)。它允许子类继承并重用抽象类中的方法实现。
-
构造函数和成员变量:
接口不能包含构造函数,接口中的成员变量默认为public static final,即常量。
抽象类可以包含构造函数,成员变量可以有不同的访问修饰符(如private、protected、public),并且可以不是常量。
-
多继承:
抽象类只能单继承,接口可以有多个实现。
JDK 动态代理和 CGLIB 动态代理有什么区别?
JDK动态代理是基于接口的,所以要求代理类一定是有定义接口的。
CGLIB基于ASM字节码生成工具,它是通过继承的方式生成目标类的子类来实现代理类,所以要注意final方法。
它们之间的性能随着JDK版本的不同而不同
你使用过 Java 的反射机制吗?如何应用反射?
Java的反射机制是指在运行时获取类的结构信息(如方法、字段、构造函数)并操作对象的一种机制。反射机制提供了在运行时动态创建对象、调用方法、访问字段等功能,而无需在编译时知道这些类的具体信息。
反射机制的优点:
- 可以动态地获取类的信息,不需要在编译时就知道类的信息。
- 可以动态地创建对象,不需要在编译时就知道对象的类型。
- 可以动态地调用对象的属性和方法,在运行时动态地改变对象的行为。