11/15
每天给自己一个目标,背十道面试题,然后做5-7的算法题,这是今天的面试题
机器码和字节码区别
.java文件(源代码)经过JDK中javac编译,编译成.class文件(jvm可以看懂的java代码),然后再经过jvm,变成机器可以执行的二进制机器码
面向对象和面向过程的区别
面向过程:性能更高,开销更大
面向对象:易复用,易维护,易扩展,降低系统的耦合度,更加灵活
Java 语言有哪些特点
1.平台无关性(jvm可以在任何平台运行)
2.面向对象:
封装:把类私有化,并且设置允许外界访问的方法
继承:可以复用以前的代码
多态:相同事务调用相同方法,即使参数一样,所做的行为也不一样
8种基本数据类型
byte(1字节)char(2字节)short(2字节)int(4字节)float(4字节)double(8字节)long(8字节)
JAVA反射,动态代理
class.forName();
java反射是通过jvm类加载获取类的信息,以及字段的属性和方法,从而可以动态地创建类的对象和调用类的方法,
反射效率很低,并且破坏java的封装性,使得原本私有化的方法可以被反射访问到。
动态代理比静态代理要好的地方是:
动态代理可以实现无侵入式的代码扩展,也就是方法的增强,更加灵活
动态代理的原理
1.通过代理类的接口来获取这个代理类的全限名、方法列表以及异常列表
2.根据步骤一的类全限名、方法列表以及异常列表来生成对应的class文件字节流,其中方法的调用最后
会使用到invoationHanlder的invoke方法
3.使用类加载器来加载这个字节流,创建动态代理类对象
4.使用创建生成的代理类对象
编译
编译分为前端编译和后端编译两个部分
前端编译:.java文件变成.class文件
后端编译:由jvm的解释器来解释执行这个class文件
反编译
反编译,顾名思义就是将.class文件转换成.java文件
泛型
泛型方法:在定义泛型方法的时候,必须在返回值前面加一个<>,来声明这个是一个泛型方法,还得要一个泛型类的参数
泛型类:在类名之后加一个<>
泛型的意义和作用:
类型的参数化,就是可以把类型像方法的参数一样传递
泛型可以使得编译器在编译的期间对类型进行检查以提高类型的安全减少运行时不必要的差错
T<?extend B>只能读不能插入
T<?super B>只能插入不能读
Object的九个方法
1.equal 2.hashcode 3.wait 4.notify 5.notifyall 6.toString 7.clone 8.getClass 9.finalize
今天的算法,主要是DFS类,回溯,leetcode的经典中等题型。
有全排列,二维平面组合,熬过这个DFS就好!加油。