1.内存溢出和内存泄露:
答:溢出:充满某个容器并向外流出。
内存溢出:内存已经满了,所以程序申请内存时,有足够的空间供其使用。
泄露:将消息或者秘密告诉别人
内存泄露:程序分配出去的内存不再使用,无法进行回收
2.线程和进程
答:
进程:系统进行资源分配和调度的基本单位,是操作系统结构的基础;
一个程序就可以看成一个进程,相互独立,可包含多个线程;
进程间通信通过IPC机制;进程是资源分配单位
线程:是操作系统能够进行运算调度的最小单位,包含在进程中的,是进程中的实际运作单位;
线程间共享进程资源,某进程内的线程在其他进程内不可见;
线程间通信通过数据段(如:全局变量)的读写,需要进程同步和互斥手段的辅助,以保证数据的一致性;
线程是cpu调度单位,跟cpu真正打交道的是线程,线程上下文切换比进程上下文切换要快得多。
java语音的特性
答:封装:把客观事物进行封装成抽象类,该类的数据和方法只让可信的类操作,对不可信的类隐藏。封装分为属性的封装和方法的封装
继承:子类继承父类的的共有属性或者特点
多态:同一个行为具有多个不同表现形式或形态的能力,多态的前提是类与类之间必须存在关系,要么继承,要么实现
抽象:把现实生活某一类东西提取出来,成为该类东西的共有特性
面向对象和面向过程
答:
面向对象:优点:易维护、易复用、易拓展,由于面向对象有封装、继承、多态的特性,可以设计出低耦合的程序
缺点:性能比面向过程低
面向过程:优点:性能比面向对象高,因为类的调用需要实例化,开销比较大
缺点:没有面向对象的易维护、易复用、易拓展
装修和拆箱
装箱:将基本数据类型包装成它们的引用类型
拆箱:将包装类型转换成基本数据类型
String、StringBuffer和StringBuilder
可变性:
String对象不可变,StringBuffer与StringBuilder对象是可变的
线程安全性:
a.String对象不可变线程安全
b.StringBuffer加了同步锁线程安全
c.StringBuilder可变不安全
性能:
String类进行改变的时候,都会产生新的String对象,然后将指针指向新的String对象,性能低
StringBuffer进行改变的时候,都会复用自身对象,性能比String高
StringBuilder行改变的时候,都会复用自身对象,相比StringBuffer能获得10%~15%左右的性能提升,但是得承担多线程的不安全的风险
HashMap,HashSet,HashTable,LinkedHashSet,LinkedHaseMap
总结:Linked是有序的,非同步
Table是同步的,简直不允许null 容量11