java基础知识
封装隐藏内部功能具体实现。
继承从它的父类继承所以属性和方法。
多态同一动作作用于不同的对象,所产生的不同行为。
StringBuffer 线程安全 效率低
StringBuilder 线程不安全 效率高
@Overwrite
- 参数列表与被重写方法的参数列表必须完全相同。
- 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。
- 访问权限不能比父类中被重写的方法的访问权限更低。例如如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
- 父类的成员方法只能被它的子类重写。
- 声明为 final 的方法不能被重写。
- 声明为 static 的方法不能被重写,但是能够被再次声明。
- 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
- 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
- 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
- 构造方法不能被重写。
- 如果不能继承一个类,则不能重写该类的方法。
@Overload
- 被重载的方法必须改变参数列表(参数个数或类型不一样);
- 被重载的方法可以改变返回类型;
- 被重载的方法可以改变访问修饰符;
- 被重载的方法可以声明新的或更广的检查异常;
- 方法能够在同一个类中或者在一个子类中被重载。
- 无法以返回值类型作为重载函数的区分标准。
String底层是由数组实现的,数组长度不可变。
抽象类和接口
抽象类
- 有构造方法。
- 含有抽象方法的类。
- 必须声明为抽象类。
- 不能被实例化。
- abstract不能修饰属性。
- 只有方法声明没有方法实现。
接口
- 方法都是抽象方法。
- 没有方法体。
- 实现接口,必须实现接口的所有方法。
区别
- 抽象类有构造器,接口没有。
- 关键字不同。
- 抽象类可以有非抽象方法,接口只能有抽象方法。
- 抽象类可以定义static方法,接口不行。
实例变量new对象在堆中开辟内存空间。
局部变量在栈中开辟内存。
数组和链表的区别
- 存储位置数组逻辑上相邻的元素物理存储位置也相邻,而链表不一定。
- 内存空间上数组是连续一段的内存空间,链表存放的内存空间可以是连续的,也可以不连续。
- 数组长度不可变,链表可变。
- 数组访问性强,查找速度快。
并发A事情 》B事情 》A事情。
并行A事情 》A、B事情同事进行。
线程的生命周期
新建-就绪-运行-阻塞-死亡
进程拥有独立的堆栈空间和数据断,系统开销大。进程之间独立、安全性高、有独立空间。
线程线程拥有独立的堆栈空间,彼此之间使用相同地址空间,开销小。
线程是一个进程中的不同执行路径,一个死亡等于整个进程死亡。
反射对于任意一个对象,都能调用它的人一方法和属性。
序列化把对象转换为容易传输的格式过程。
事务是控制并发的基本单位。
原子性事务做为一个整体被执行,包含其中对数据库的操作,要么全部执行,要么都不执行。
一致性事务应确保数据库的状态从一个一致状态转变为另一个状态。
隔离性多个事务并发执行时,一个事务的执行不影响其他事务。
持久性已被提交的事务对数据库的修改应永久被保存在数据库中。
存储过程由SQL语句组成的代码块。
转发(Forward)和重定向(Redirect)的区别
- 转发是服务器行为、重定向是客户端行为。
- 转发是把请求url里面的内容读取出来,重定向是请求新的url,地址栏显示新的地址。
ORM使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
JVM加载机制
记载-验证-准备-解析-初始化
Java线程实现
- 继承Thread类,本质实现Runnable接口。
- 实现Runnable接口。
Spring IOC原理
Spring通过一个配置文件描述Bean和Bean之间的依赖关系,利用Java的反射功能实例化Bean并简历Bean之间的依赖关系。
JAVA工厂模式
- 实例化对象,用工厂方法代替new操作。
- 将实现类,创建对象统一管理和控制,从而将调用者跟我们的实现类解耦。
Spring MVC模型(Model)-视图(View)-控制器(Controller)