栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java基础知识点

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java基础知识点

jdk8新特新有哪些?
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有选择器
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749692.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号