-
继承的特点:
子类继承父类,拥有父类的非私有成员
-
重写和重载:
重写:发生在继承关系中,参数列表和返回值都相同。子类的修饰符不能大于父类。@Override
重载:同名不同参,与返回值无关 -
Final:
修饰类:不能被继承
修饰方法:不能被重写
修饰变量:不能被修改
-
多态、好处与弊端:
概念:父类的引用指向了子类的对象,从而执行不同的操作 好处:增强扩展性 弊端:父类不能使用子类特有的成员
-
装箱与拆箱:
Jdk 5以后,装箱与拆箱都有jdk自动完成。基本<-->引用
-
常见的数据结构:
栈:先进后出 队列:先进先出 链表:查询慢,增删快 数组:查询快,增删慢 堆、树、图
-
集合:
Collection(单列集合) List(有序、可重复)
ArrayList( 底层是数组||查询快,增删慢||线程不安全) LinkedList(底层是链表||查询慢,增删快||线程不安全) Set(不可重复、没有带索引的方法|底层是链表) HashSet(哈希表) LinkedHashSet(链表+红黑树-->有序) Map(双列集合) HashMap( 8之前是数组+链表,之后多了红黑树) LinkedHashMap(双链表+红黑树+数组-->有序)
HashMap的底层:
1.在jdk 8之前是数组+链表,之后多了红黑树。储存方式为(key,value)形式。
2.储存元素时如果发生哈希冲突,就先判断equals,相同就替换,不同就插入链表。
3.当链表高度大于8时,就转为红黑树,当元素小于6时,退化为链表。
4.它是线程不安全的,可以使用并发包的ConcurrentHashMap
-
线程和进程
进程:指的是进入到内存的程序 线程:进程的一部分
多线程运行原理
调用start方法时,main方法和另一个线程在不同的栈空间,CPU会以很快的速度去切换执行。
-
实现线程的三种方式:
继承Thread类
实现Runnable接口
实现Callable接口
-
CAS与Synchronized区别
CAS:比较并交换。每次都认为变量没有被修改,如果内存中的值和期望值相同才会修改,否则继续自旋判断。
Synchronized:每次都认为变量已经被修改,执行前会锁对象。当执行结束后才会释放锁。所以效率低。
-
线程池运行原理
使用一个容器储存线程,用的时候从线程池取出,用完归还。减少了线程的创建和销毁。
-
线程6个状态的名称
新建(new) 等待(wait)运行(run) 阻塞(block)睡眠(sleep)死亡(dead)
-
递归
方法自己调用自己
弊端:栈内存溢出
-
==与equals的区别
==比较的是地址值
equals比较的是值
当一个对象没有重写equals方法,equals等价于==
如果重写,就比较两个对象的值
-
BIO/NIO/AIO
同步阻塞
同步非阻塞
异步非阻塞
-
反射的概念
通过class文件对象对文件进行解剖,获取各种成员
-
XML的作用
存储数据
作为配置文件(框架)
-
有哪些XML约束技术
-
dtd约束
-
schema约束
-
-
动态代理
在不改变方法的前提下,对方法进行增强