面向对象

面向过程更注重处理问题的步骤和顺序,面向对象更注重处理问题有哪些参与者、各自需要做什么。

面向过程比较直接高效,面向对象更易于复用、扩展和维护。

特性:封装、继承、多态。

封装:明确标识出允许外部使用的成员函数和数据项,内部细节对外部调用透明。

继承:子类共性的属性和方法直接使用父类的,再添加自己独有的。

多态:接口有不同的实现类。

 

JDK、JRE、JVM的区别和联系

JDK:java development kit java开发工具,提供给开发人员使用。

JRE:java runtime environment java运行时环境,提供给运行java程序的用户使用。

JVM:java virtual machine java虚拟机。

JDK包含JRE,JRE包含JVM。

.java文件经过javac编译成.class文件,.class文件可以到处运行,放到windows或者linux版本的jvm上,jvm调用lib里面的类库去解释.class文件,将.class文件翻译成机器码,映射到操作系统,然后调用。

 

重载和重写的区别

重载:发生在同一个类中,方法名相同,参数列表不同。

重写:发生在父子类中,方法名和参数列表相同,如果父类方法修饰符为private那么子类不能重写这个方法。

 

接口和抽象类

抽象类中可以有普通成员方法,接口中的方法必须全部是抽象方法。

抽象类只能继承一个,接口可以实现多个。

抽象类中的成员变量可以是各种类型的,接口中的成员变量只能是public static final类型的

 

权限修饰符

                      同一个类中        同一个包中        不同包的子类           不同包的无关类

private                  yes

默认                     yes                  yes       

protect                 yes                  yes                   yes

public                   yes                  yes                   yes                        yes

 

final

最终的。

修饰类:表示类不可以被继承。

修饰方法:表示方法不可以重写。

修饰变量:表示变量一旦被赋值就不可以修改它的值。

修饰引用类型:地址不可以改变,地址值可以改变。

 

static

被类的所有成员共享

可以使用类名和对象名调用,推荐使用类名调用

static修饰的方法只能调用static修饰的方法,没有被static修饰的方法可以调用任意方法

 

String、StringBuffer、StringBuilder

String是final修饰的,不可变,每次修改会产生新的String对象。

StringBuffer和StringBuilder都是在原来的对象上操作的,底层是数组,可以用append()方法增添新元素,性能StringBuilder>StringBuffer>String。

StringBuffer是线程安全的,StringBuilder是线程不安全的,StringBuffer的方法都是synchronized修饰的。

修改少时使用String,经常需要修改时使用StringBuffer和StringBuilder,多线程共享变量时使用StringBuffer。

 

List和Set的区别

List存储有序、可重复的元素,支持下标访问和迭代器访问。

Set存储无序、不可重复的元素,只能通过迭代器访问。

 

ArrayList和LinkedList

ArrayList基于动态数组,需要存储在连续的内存中,适合下标访问(随机访问),不适合插入、删除,适合查询。

扩容机制:因为数组长度固定,超出数组长度时需要新建数组,然后将老数组的数据拷贝到新数组。

插入:如果不是尾插法,后面的元素全部要向后移动,所以使用尾插法并且规定较大的初始长度可以极大提升性能。

LinkedList基于链表,可以存储在分散的内存中,适合数据插入、删除,不适合查询。

插入:需要创建node对象。

遍历:只能使用迭代器,不能使用for循环,不能使用indexOf返回元素索引。因为会对LinkedList全部遍历一遍。

 

HashMap和HashTable

HashMap是线程不安全的,HashTable是线程安全的,HashTable的方法都是synchronized修饰的。

底层是通过数组+链表实现的。

 

实现一个ioc容器

1.在配置文件中配置包扫描路径。

2.递归包扫描获取.class文件。

3.反射,确定需要交给ioc管理的类。

4.对需要进行注入的类进行依赖注入。

 

jvm体系结构

 

进制

八进制0开头

十六进制0x开头

 

转义字符

\t制表

\n换行

 

实例化

new student();

 

static

static修饰的方法和类一起加载,

没有static的方法和对象一起加载

 

常见设计模式

单例模式:类只有一个实例,自己实例化自己,提供对外的接口

工厂模式:创建者和调用者分离

mvc模式:model,view,controller