1.Lambda表达式
2.函数式编程
3.方法引用: Lambda表达式深层次的表达 使用::将类(或者对象)与方法名分隔开来
1.对象 :: 实例方法
2.类 :: 静态方法
3.类 :: 实例方法
4.Stream流式API: 函数式编程的高级应用,把集合转化为Stream流对集合进行过滤、搜索、排序、收集等操作,步骤如下:
1.获取Stream对象
2.过滤,映射
3.遍历,排序,统计,收集等操作
应用:
1.List xybms = subList.stream().map(GsEnterpriseTbl::getShxydm).collect(Collectors.toList());
2.List newlists = lists.stream().filter(s->s.startsWith("e")).collect(Collectors.toList());
int和Integer的区别
1.int是原始类型,integer是包装类型是面向对象的 2.int的默认值是0 integer是none即空== 与 equals 的区别
==是直接比较的两个对象的堆内存地址,如果相等,则说明这两个引用实际是指向同一个对象地址的。 equals 是比较值是否相同抽象类和接口的区别
1.抽象类是一个类,具有一般类的特征,细节方面有些不同。 2.声明与继承实现的关键字不同 3.单继承与多实现 - 子类只能继承一个父类,但是可以实现多个接口。 4.抽象类可以有构造函数,接口没有;虽然都无法创建实例 5.权限修饰符的使用: - 抽象类中不能使用default;接口默认public,还可以使用default。 - 抽象类中private修饰的无法继承;接口中default修饰的方法必须有具体实现,重写的时候修改为public。 - 两者都无法抽象成员属性,只能抽象方法,而且无法抽象静态方法。 - 接口中成员属性默认且只能被final public修饰,必须实例化,不可修改;抽象类的成员属性不可被abstract修饰。 - 静态成员(static修饰)的处理不同 - 抽象类中的静态**成员**可以继承,但是接口中的静态**方法**无法继承String StringBuffer StringBuilder的区别
1、String 和StringBuffer线程安全 StringBuilder线程不安全 2、StringBuilder运行速度最快>StringBuffer>String StringBuffer>String的原因: String 每次找到 自己的内存空间 重新拼接 StringBuffer直接 使用append在原内存空间拼接 3、String对象不可变 StringBuffer和StringBuilder的对象是可变的线程的创建方式有哪些?
1.继承Thread抽象类,重写run方法 2.实现Runnable接口,重写run方法 3.实现Callable接口,重写call方法,可返回参数线程的生命周期
1.创建 2.就绪 3.执行 4.阻塞 5.死亡sleep 和 wait 的区别?
1.sleep是在thread类中,而wait方法属于object类 2.在调用sleep时,线程不会释放对象锁,而wait会释放锁谈谈你对线程池的理解
1.线程池的好处
1、降低资源消耗
可以重复利用已创建的线程降低线程创建和销毁造成的消耗。
2、提高响应速度
当任务到达时,任务可以不需要等到线程创建就能立即执行。
3、提高线程的可管理性
线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控线程
2.线程池的分类
1.newCachedThreadPool 缓存线程池 创建一个可缓存线程池,如果线程不够使用,可回收空闲线程,若无可回收,则新建线程
2.newFixedThreadPool 固定容量线程池 创建一个固定长度线程池,可设置线程最大并发数,超出的线程会在队列中等待。
3.newScheduledThreadPool 定时及周期性任务线程池 创建一个定长线程池,支持定时及周期性任务执行。
4.newSingleThreadExecutor 单线程线程池 创建一个单线程的线程池。这个线程池只有一个线程在工作。
java多线程如何避免死锁?
1.互斥的资源 jdk提供ThreadLocal,把本来互斥的资源变得不互斥,分别给每一个线程这个资源 2.资源不可抢占 3.持有资源并且不释放 4.相互等待 破环其中之一即可常见的异常有哪些?
1.算术异常 2.空指针异常 3.数组越界异常 ...集合
Collection接口的子接口包括:Set接口和List接口 Map接口的实现类主要有:HashMap、Hashtable、ConcurrentHashMap等 Set接口的实现类主要有:HashSet、TreeSet、linkedHashSet等 List接口的实现类主要有:ArrayList、linkedList、Vector等 集合的常用方法是get(),size(),foreach(),clear(),isEmpty(),remove() Map类集合的增加是put()方法,而Collection类集合的增加是add()方法
1.ArrayList底层是数组。 2.linkedList底层是双向链表。 3.Vector底层是队列。 4.HashMap底层是数组+链表+红黑树,当链表长度超过8时,将链表转换为红黑树 5.HashTable底层是数组+单项链表。 6.HashSet底层是数组+链表+红黑树,当链表长度超过8时,将链表转换为红黑树 7.linkedHashMap底层修改自HashMap,此外还包含一个维护插入顺序的双向链表。 8.TreeSet底层是红黑树。 9.linkedHashSet底层是linkedHashMap(数组+单向链表+双向链表)。 10.ConcurrentHashMap底层采用数组+链表+红黑树的存储结构,利用CAS+Synchronized来保证并发更新的安全HashMap与HashTable的区别?
1.HashMap是线程不安全的;Hashtable使用了synchronized关键字,是线程安全的; 2.HashMap允许K/V都为null;Hashtable的K/V都不允许为null;ArrayList 和 Vector 的区别?
1.Vector 是线程安全的,ArrayList 是线程不安全的。 2.Vector在数据满时增长为原来的2倍,而ArrayList增长为原容量的1.5倍。ArrayList和linkedList的区别?
1.linkedList基于链表的数据结构;ArrayList基于动态数组的数据结构 2.linkedList在插入和删除数据时效率更高,ArrayList查询效率更高;NIO和IO的区别?
nio和io的实现方式不同,nio用的是块,所以效率比io要高 区别: 1.io面向流 nio面线缓存 2.io是阻塞io,nio是非阻塞io 3.io无选择器,而nio有选择器



