1、5个常用的java-api包
主要使用的java-api包在rt.jar文件中,主要使用的api包如下:
io:文件操作、流操作
lang:java编程基础类
math:数学函数
net:网络编程工具
sql:数据库编程工具
util:java编程工具类
补充其他:
1.1 & 和 && 的区别
1.2 == 和 equals的区别
1.3 装箱和拆箱的问题
备注:主要会涉及到缓存的问题,涉及到等式判断
1.4 IO和NIO的区别
1.5 final,finally和finalize的问题
1.6 重载和重写的区别
1.7 String、StringBuffer和StringBuilder的区别
主要是两点:(1)可变性,String是不可变,StringBuffer和StringBuilder是可变的,(2)线程安全的,String和StringBuffer是线程安全的,StringBuilder是非线程安全的
1.8 浅克隆和深克隆
备注:主要区别在于对象是否地址隔离
1.9 单例模式实现方式、优缺点分析
1.9.1 懒汉式
1.9.1.1 双重检测
1.9.2 恶汉式
1.9.2.1 枚举
1.9.2.2 内部类
1.10 去除重复元素(实际上重写equals和hashcode方法)
备注:对象相等,euqals和hashcode 一定相等
对象不等,hashcode可能相等
1.11 java不支持多重继承?
备注:应为钻石问题, 假设支持多重继承,那么 B,C继承A,重写了A中的方法,D继承B,C时,D调用 A中的方法是,无法判断是来自于B中还是C中。
1.12 Comparable<E>与Comparator<E>接口的区别:Comparable<E>比较的是当前对象和传入对象,Comparator<E>比较的是传入的两个对象,具体事例如下:
package comparable;
import java.util.Arrays;
import java.util.Comparator;
class ComparableTest1 implements Comparable<ComparableTest1>{
private String name;
private int age;
public ComparableTest1(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
@Override
public String toString() {
return ""+this.name+" "+this.age;
}
public int compareTo(ComparableTest1 o) {
if (this.getName().compareTo(o.getName()) != 0) {
return this.getName().compareTo(o.getName());
}
else {
if (this.getAge() < o.getAge()) {
return -1;
}
else if (this.getAge() > o.getAge()) {
return 1;
}
else {
return 0;
}
}
}
}
class Cmp implements Comparator<ComparableTest1> {
public int compare(ComparableTest1 a, ComparableTest1 b) {
if (a.getName().compareTo(b.getName()) != 0) {
return a.getName().compareTo(b.getName());
}
else {
if (a.getAge() < b.getAge()) {
return -1;
}
else if (a.getAge() > b.getAge()) {
return 1;
}
else {
return 0;
}
}
}
public static void main(String[] args) {
ComparableTest1[] p = new ComparableTest1[4];
p[0] = new ComparableTest1("ZZZ",19);
p[1] = new ComparableTest1("AAA", 109);
p[2] = new ComparableTest1("AAA", 19);
p[3] = new ComparableTest1("YYY",100);
Arrays.sort(p, new Cmp());
System.out.println(Arrays.toString(p));
}
}
2、String中常用的5个方法
3、API接口的开发注意事项
4、TCP/UDP、HTTP协议
5、集合相关类
5.1 Collection下:List和Set
5.1.1 List: ArrayList、LinkedList和Vector-Stack 特点:元素可重复
5.1.2 Set:HashSet、TreeSet 特点:元素不可重复
备注:HashSet 基于HashMap实现的,TreeSet基于TreeMap实现的
5.2 Map下:HashMap、HashTable、LinkedHashMap、ConcurrentHashMap 特点:键值对
5.2.1 HashMap底层的数据结构
(1)JDK1.7及以前:数组+链表
(2)JDK8及以后:数组+链表+红黑树
5.2.2 HashMap和HashTable的区别
(1)线程安全性:HashTable是线程安全的,HashMap是非线程安全的
(2)键值是否可为空:HashMap是允许键值为空,HashTable不允许键值为空
(3)继承的类:HashMap继承的是Map接口,HashTable继承的是Dictionary类
(4)判断包含元素:HashTable使用Contians方法,HashMap使用ContainsKey和ContainsValue
5.2.3 ConcurrentHashMap和HashMap的区别
6、线程相关类
6.1创建线程的几种方式
6.2线程同步的方法
6.3 wait和sleep区别
6.4 Runnable和Callable接口的区别
6.5 如何实现线程安全
7、框架相关的
7.1 Mybatis
7.2 Spring
7.2.1 Spring IOC
7.2.2 Spring DI
7.2.3 Spring AOP
7.2.4 Spring Transaction
7.2.5 Spring 用到的设计模式
7.2.6 Spring MVC
7.3 Redis
7.4 Zookeeper
7.5 消息处理:
RabbitMq、Kafak等
7.6 SpringBoot
7.7 SpringCloud
7.8 Dubbo
7.9 缓存:本地缓存和分布式缓存
8、Mysql
8.1、 InnoDB和MyISAM区别
8.2 、Mysql索引类别
8.3、B+树和B树