5. ==和EQUALS的区别
关于==
1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。
2.复合数据类型(类) 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地
equals
Java 语言里的 equals方法其实是交给开发者去覆写的,让开发者自己去定义满足什么条件的两个Object是equal的。
6.String,StringBuilder,StringBuffer的区别
- 运行速度:StringBuilder >StringBuffer >String
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。
- 线程安全:StringBuilder是线程不安全的,而StringBuffer是线程安全的
如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。
- 使用场景
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
7. 讲一下JAVA中的集合
java中的集合分为value(Collection),和key-value(Map)两种;
存储value的有list和set两种:
list是有序的,可重复的
set是无序的,不可重复的
存储为key-value是map:HashMap,Hashtable,CurrentHashMap
8. ARRAYLIST, Vector和LINKEDLIST的区别
1. 区别
-
Vector、ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形式进行存储。
-
Vector线程同步,ArrayList、LinkedList线程不同步。
-
LinkedList适合指定位置插入、删除操作,不适合查找;ArrayList、Vector适合查找,不适合指定位置的插入、删除操作。
-
Vector默认扩充为原来的两倍,(每次扩充空间的大小是可以设置的),而ArratList默认扩充为原来的1.5倍(查看之前的文章),因此ArrayList更节省空间。
2. 联系
-
ArrayList,Vector、LinkedList类均在java.util包中都是可改变大小的.
-
ArrayList和Vector都是基于存储元素的Object[ ] array 来实现的,他们会在内存中开辟一块连续的空间来存储,由于数据存储是连续的,因此,他们支持用索引来访问元素,同时索引数据的速度比较快。但是在插入元素时需要移动容器中的元素,所以对数据的插入操作执行的比较慢。ArrayList和Vector都有一个初始化的容量大小,当里边存储的元素超过这个大小时就需要动态地扩充他们的存储空间。
9. HASHMAP和HASHTABLE的区别
**相同:**HashMap和Hashtable都可以使用来存储key-value的数据
区别:
基类不同:HashTable基于Dictionary类,而HashMap是基于AbstractMap。Dictionary是什么?它是任何可将键映射到相应值的类的抽象父类,而AbstractMap是基于Map接口的骨干实现,它以最大限度地减少实现此接口所需的工作。
线程安全:HashMap时单线程安全的,Hashtable是多线程安全的。
遍历不同:HashMap仅支持Iterator的遍历方式,Hashtable支持Iterator和Enumeration两种遍历方式。
null不同:HashMap可以允许存在一个为null的key和任意个为null的value,但是HashTable中的key和value都不允许为null。
多线程时,如何保障线程安全的同时也能保证效率?ConcurrentHashMap
通过把整个Map分为N个segment(类似Hashtable),这样既可以保障线程安全,也能使效率提高N倍,默认是16倍.
ConcurrentHashMap当中每个Segment各自持有一把锁。在保证线程安全的同时降低了锁的粒度,让并发操作效率更高。
10. 实现一个拷贝文件的工具类要使用字节流还是字符串
使用字节流,因为我们要拷贝的文件,不好确定里面是否全是字符,如果文件中包含图片之类的字节时,就需要使用字节流.所以,我们一般是用字节流拷贝文件.
11. 线程的的实现方式?怎么启动线程?怎么区分线程?
-
1.继承Thread类,不推荐
-
1.实现Runnable 接口
-
1.实现java.util.concurrent下的Callable接口
12. 线程并发库和线程池的作用
简单了解过,JDK5中增加了并发库,java.util.concurrent中提供了对线程优化.管理的各项操作,该包提供了线程的运行,线程池的创建,线程生命周期的控制.
线程池:java.util.concurrent.Executors创建四种线程池
-
newCachedThreadPool 创建非固定数量,可缓存的线程池,若线程池超过处理需要,可灵活回收空线程,若没有线程可回收,则建新线程
-
newFixedThreadPool固定线程池,底层是无界队列,可控制最大并发数,超出的线程会在队列中等待
-
newScheduledThreadPool定时执行线程池,支持定时及周期性任务执行
-
newSingleThreadExecutor单线程化的线程池,只会用唯一的工作线程来执行任务,保证所有任务按照顺序执行
线程池的好处:
-
限定线程的个数,不会导致由于线程过多导致系统运行缓慢或崩溃
-
线程池每次都不需要去创建和销毁,节约了资源
-
线程池不需要每次都去创建,相应时间更快.
13. 设计模式和常用的设计模式(选择自己熟悉的说,最好能手写)
设计过程中可以反复使用的、可以解决特定问题的通用模板。
-
创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。
-
结构型模式&#