【JAVA面试题】

详细请看链接https://blog.csdn.net/guorui_java/article/details/119299329
java基础
1.java接口和抽象类有什么区别?

抽象类和接口都不能实例化

一个类只能继承一个抽象类,可以实现多个接口

接口的方法默认是public修饰符,抽象类的方法可以任意修饰符

接口内的方法只能定义不能实现,抽象类中的方法可以定义和实现

接口的变量默认是public static final ,方法是public abstract,抽象类的变量默认是default,可以再 子类中重新定义。抽象方法是abstract,不能被private、static、synchronized等修饰,抽象方法只有定义没有实现

2.BIO、NIO、AIO 有什么区别?

(1)同步阻塞BIO

一个连接一个线程。

JDK1.4之前,建立网络连接的时候采用BIO模式,先在启动服务端socket,然后启动客户端socket,对服务端通信,客户端发送请求后,先判断服务端是否有线程响应,如果没有则会一直等待或者遭到拒绝请求,如果有的话会等待请求结束后才继续执行。

(2)同步非阻塞NIO

NIO主要是想解决BIO的大并发问题,BIO是每一个请求分配一个线程,当请求过多时,每个线程占用一定的内存空间,服务器瘫痪了。

JDK1.4开始支持NIO,适用于连接数目多且连接比较短的架构,比如聊天服务器,并发局限于应用中。

一个请求一个线程。

(3)异步非阻塞AIO

一个有效请求一个线程。

JDK1.7开始支持AIO,适用于连接数目多且连接比较长的结构,比如相册服务器,充分调用OS参与并发操作。

3.什么是 java 序列化?什么情况下需要序列化?
4.为什么要使用克隆?如何实现对象克隆?深拷贝和浅拷贝区别是什么?
5.常见的异常类有哪些?
6.hashcode是什么?有什么作用?
7.java 中都有哪些引用类型?
8.什么是 Java 的内存模型
9.举例说明什么情况下会更倾向于使用抽象类而不是接口
多线程
1.创建线程的几种方式
2.有哪几种锁
3.线程池的执行步骤?

创建一个线程池,指定核心参数
执行一个runnable对象时,判断当前线程数是否大于核心线程数,如果不大于就创建一个线程
如果大于就将任务加入队列,然后判断队列是否满了,如果没满,排队执行,如果满了就判断一下是否大于等于最大线程数,如果满足就执行拒绝策略,如果不满足就创建一个线程执行

4.线程池中间有几种状态,是怎么转化的?

/**
*private static final int RUNNING = -1 << COUNT_BITS;
*private static final int SHUTDOWN = 0 << COUNT_BITS;
*private static final int STOP = 1 << COUNT_BITS;
*private static final int TIDYING = 2 << COUNT_BITS;
*private static final int TERMINATED = 3 << COUNT_BITS;
*/
// 不再接收新的任务执行完队列中的任务再终止线程池
threadPoolExecutor.shutdown();
// 不再接收新的任务且不再执行队列中的任务直接终止线程池
threadPoolExecutor.shutdownNow();
// 判断线程池状态是不是SHUTDOWN
threadPoolExecutor.isShutdown();

5.如何停止线程?

stop:不会释放ReentrantLock 会释放synchronized
t.interrupt();

6.核心线程数和最大线程数如何设置?

CPU密集型:cpu核心数+1
IO密集型:cpu核心数*(1+线程等待时间/线程运行总时间)

7.如何理解java并发中的可见性?

线程从内存读取数据i=1的时候会在cpu的缓存中缓存一份,然后对这个变量修改为i=2,但是还没有会写到内存,另一个线程来读取的时候还是i=1,此时出现了可见性问题
java中可以通过volatile关键字保证变量的可见性,对于加了volatile的变量,线程在读取该变量是会直接从内存中读取,会同时修改cpu缓存和内存中的值

8.如何理解java并发中的原子性?

java中我们需要通过锁机制保证原子性

9.如何理解java并发的有序性?

cpu指令重排序

10.ReentrantLock 中tryLock和lock方法的区别?

tryLock()表示尝试加锁,可能加到,也可能加不到,该方法不会阻塞,如果加到锁啧返回true,没有加到则返回false
lock()表示阻塞加锁,线程会阻塞知道加到锁,方法也没有返回值

集合
1.Java 容器都有哪些?

(1)Collection
①set
HashSet、TreeSet
②list
ArrayList、LinkedList、Vector
(2)Map
HashMap、HashTable、TreeMap

2.Collection 和 Collections 有什么区别?

(1)Collection是最基本的集合接口,Collection派生了两个子接口list和set,分别定义了两种不同的存储方式。
(2)Collections是一个包装类,它包含各种有关集合操作的静态方法(对集合的搜索、排序、线程安全化等&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值