1、JVM
Java虚拟机,是java跨平台的关键。Java虚拟机根据不同的平台以及其指令集,对java字节码文件进行执行,换言之,java语言从源代码到执行的顺序是这样的:java源代码----->.class字节码文件----->不同平台对应的java虚拟机进行执行。
也就是说,我们的源代码只要编译一次,成为.class字节码文件,然后在不同的平台上,就会由java虚拟机解释为对应平台的指令进行执行。实现了一次编译,到处运行。
2、jre
java运行时环境,它包括Java虚拟机、Java核心类库和支持文件。
3、jdk
java开发工具包,包括jre,编译器和其他的工具(比如:JavaDoc,Java调试器)。
4、java面向对象的特征
封装,继承,多态
5、方法覆盖和方法重载
覆盖是子类继承父类之后,重写父类方法,从而将父类方法覆盖(同返回值类型,同参数列表)。
重载是指同一方法名不同的参数列表,运行期根据输入选择对应的方法。
6、接口和抽象类的区别
继承/实现:只能继承一个抽象类,可以实现多个接口。
抽象方法:接口全为抽象方法(public),抽象类可以有实际方法(public,protected,private)。
变量:接口为 public final,抽象类则没有限制
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。
7、java多线程
synchronized关键字,同步方法默认用this或者当前类class对象作为锁,同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度
8、java线程池
Executorà ExecutorServiceà AbstractExecutorService àThreadPoolExecutor
corePoolSize:核心池大小
maximumPoolSize:最大线程数
keepAliveTime: 表示线程没有任务执行时最多保持多久时间会终止
unit:参数keepAliveTime的时间单位
TimeUnit.DAYS; //天
TimeUnit.HOURS; //小时
TimeUnit.MINUTES; //分钟
TimeUnit.SECONDS; //秒
TimeUnit.MILLISECONDS; //毫秒
TimeUnit.MICROSECONDS; //微妙
TimeUnit.NANOSECONDS; //纳秒
workQueue:一个阻塞队列,用来存储等待执行的任务
threadFactory:线程工厂,主要用来创建线程;
handler:表示当拒绝处理任务时的策略,有以下四种取值:
ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务
9、HashMap,LinkHashMap,TreeMap,HashTable
键值对进行存储
HashCode()计算散列值,由散列值确定存储位置,使用entry对象存储键值对对象
HashMap一般使用数组存储,数组元素是link对象。所以当key的hash值重复过多时链表过长,会影响效率。所以当链表长度达到8以上时,会已红黑树的形式存储,使得每次查找、插入、删除的复杂度不超过O(n log n)。
LinkHashMap 在HashMap的基础上,在Entry类中添加了after和before对象的引用,使得遍历的时候元素顺序为插入顺序(HashMap的遍历是无序的)
TreeMap使用红黑树进行存储,默认使用hash值的递增序列,也可以自己设计。
HashTable 线程安全的,但是效率及其低下,现已废弃,功能与HashMap基本相同(除了线程安全部分,)。(key不能为null,其他map可以)
ConcurrentHashMap 分段锁,线程安全的,但是如果并发执行 map.put ( key, map.get(key)+1 ) 的话,还是会出错。