文章目录
Java基础
创建对象的几种方法
- 采用new
- 通过反射机制
- 采用clone方法
- 通过序列化机制
抽象类与接口的区别
抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。
接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。如果实现了这个接口,那么就必须确保使用这些方法,可以说是一种约束把。
抽象类 | 接口 |
---|---|
可以有默认的方法实现 | 接口完全是抽象的,不可以有具体的方法实现 |
子类使用extends继承抽象类,且一个子类只可以继承一个抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 | 子类需要用implements来实现接口,它需要提供接口中所有声明的方法的实现 |
抽象类可以有构造器 | 接口不能有构造器 |
除了不能实例化抽象类之外,与普通类没有区别 | 接口是完全不同的类型 |
抽象方法可以有public、protected和default这些修饰符 | 接口方法默认修饰符是public。不可以使用其它修饰符。 |
抽象方法可以有main方法并且可以运行 | 接口不可以有main方法 |
抽象类可以继承一个类和实现多接口 | 接口只可以继承一个或多个接口 |
接口的意义
接口的意义用三个词就可以概括:规范,扩展,回调
拆箱和装箱
- 拆箱就是自动将包装器类型转换为基本数据类型;
- 装箱就是自动将基本数据类型转换为包装器类型。
int与Integer的区别
- Integer是int的包装类,int则是java的一种基本数据类型;
- Integer变量需要实例化后才能使用,而int变量不需要;
- Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值;
- Integer的默认值为null,而int的默认值为0。
String、StringBuilder和StringBuffer区别
共同点:都是final类,不允许被继承
- String:String对象一旦创建之后该对象是不可更改的,一旦修改字符串,则会产生新的对象,适用于少量字符串操作的情况;
- StringBuilder:可以多次进行修改字符串,不产生新对象,但是线程不安全,适用于单线程操作大量字符串数据;
- StringBuffer:与StringBuilder唯一的区别就是StringBuffer线程安全,适用于多线程操作大量字符串数据。
String的intern()方法
intern()方法会首先从常量池中查找是否存在该常量值,如果常量池中不存在则先在常量池中创建,如果已经存在则直接返回。
比如:
String s1="aa";
String s2=s1.intern();
//此时由于已经有这个常量了,所以返回true
System.out.print(s1==s2);//返回true
数据集合
数据集合包括List、Set、Map,而List又包括ArrayList、Vector、LinkedList,Set包括HashSet、LinkedHashSet、TreeSet、ArraySet,Map包括HashMap、HashTable、TreeMap。
List(继承Collection接口)
- ArrayList: 它的底层结构为数组,故而有着数组的特性,有序,查询快,但增删比较慢,可以存储重复的值(包括null),但是它是线程不安全的。默认初始容量为10。
- Vector: 它的底层结构也是数组,同样的拥有数组的特性,有序,查询快,但增删比较慢,可以存储重复的值(包括null),和ArrayList唯一的区别是:Vector是实现了synchronized,是线程安全的。
- LinkedList: 它的底层结构为链表,有着链表的特性:查询慢,增删快,同时它也是线程不安全的。
Set(继承Collection接口)
- HashSet: 它的底层结构为哈希表,无序,不可以存储重复的值,只可以有一个null值。
- LinkedHashSet: 它的底层结构为双向链表和哈希表,双向链表保证了有序,哈希表保证了元素的唯一性,只可以有一个null值。
- TreeSet: 它的底层结构为红黑树,内部实现排序,也可以自定义排序规则,TreeSet不允许有null值,否则会出现空指针异常(NullPointerException)。
- ArraySet: 他的底层数据结构为双数组,有序。
Map(Map接口)
- HashMap: 它的底层结构为数组结构,这个数组里的每项元素都为一个链表结构;无序,线程不安全;存储的内容为键值对(key-value),只允许一个key为null,value不做限制。默认初始容量为16.
- HashTable: 散列表,也叫哈希表,存储的内容为键值对(key-value),无序,线程安全,不允许有null值;其父类为Dictionary。
- TreeMap: 它的底层结构为红黑树,父类是SortMap接口,能够把它保存的键值对根据key排序;key不允许有null值,否则会出现空指针异常(NullPointerException)。
数据库
join连接
join连接包括了内连接(inner join)和外连接(outer join),其中外连接有包括了左外连接,右外连接以及全外连接。
test1表
id | test1Name |
---|---|
2 | 王五 |
3 | 刘六 |
test2表
id | test2Name |
---|---|
1 | 张三 |
2 | 李四 |
- inner join: 与on一起用,inner join … on,获得两个表中匹配的行。
select * from test1 inner join test2 on test1.id=test2.id;
注:只写join默认为inner join
- left join: 左外连接,与on一起用,返回左表的全部行,每一行如果右表没有匹配的话,那么这一行右表的字段都为null。
-
**right join:**右外连接,与on一起用,返回右表的全部行 ,每一行如果左表没有匹配的话,那么这一行右表的字段都为null。
-
full join: 全外连接,显示两个表的结果。
索引
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找,则与在表中搜索所有的行相比,索引有助于更快地获取信息。
索引种类
- 唯一索引
- 主键索引
- 聚集索引
如果同时有多个索引,那么采用最左优先原则,如有一个联合索引(a,b,c),则mysql会创建(a)、(a,b)、(a,b,c)三个索引对。
MyBatis和JDBC的差别
MyBatis是对JDBC的封装,相对于jdbc而言,mybatis有以下优点:
- 有数据库连接池(减少数据库关闭开启时数据库的资源浪费);
- 由SQL配置文件统一管理,对数据库进行存取操作(减少硬编码)
- 可以动态生成SQL语句,且可以防止sql注入。
- 能够对结果集进行映射(resultset直接转为java对象)
SpringBoot
SpringBoot特性
- 可以很快的搭建一个项目;
- 非常简洁的安全策略集成;
- 内嵌Tomcat等Servlet容器;
- 简化了xml等繁琐的配置;
- 强大的开发包,且支持热部署(热启动);
- 自带应用监控;
- 自动管理依赖。