JAVA面试题5

1,为什么说 synchronized 是种悲观锁?乐观锁的实现原理是什 么?什么是CAS,它有什么特性?

因为它的并发策略是悲观的,不管是否竞争,任何数据操作都要被加锁,用户态核心态转换,维护锁计数器和检查线程是否阻塞是否需要被唤醒

乐观锁:对于数据冲突保持一种乐观的态度,操作数据时不会对操作的数据加锁(这使得多个任务可以并行的对数据进行操作)

CAS(是乐观锁的核心算法)一般操作三个数:内存对象(V),预期原值(A),新址(B),并且是一般是内存值和预期值相同时,才将内存值修改为新值,

特性:避免使用互斥锁

2,说一说 jvm 常见垃圾回收器和特点

按内存来划分,年轻代回收器有:

1,Serial:是一个串行的垃圾回收器

2ParNew:是Serial的并行版本

3,Paraller Scavenge:也是一个并行的垃圾回收器,区别在于他注意吞吐量,

年轻代的三个垃圾回收器采用的都是复制算法,所以在回收垃圾的时候会暂停所有线程

老年代回收器

1,Serial Old:是一个serial老年代版本,串行,采用标记-整理算法,同样会STW(垃圾回收的过程会出现阻塞)

2,Paraller Old:是Paraller Scavenge的老年代版本,并行,采用的是标记-清除算法,会STW,注重吞吐量

3,CMS:注重低延迟,采用标记-清除算法,分为四个阶段,初始标记.并发标记,重新标记,清除标记,在初始化和标记阶段是并行的,会STW,其余两个阶段是并发执行与用户线程同时执行,由于采用了标记-清除算法,会产生空间碎片,最后整堆收集器:G1收集器

3,HashTable、HashMap、TreeMap 的区别

1,HashTable,HashMap,TreeMap都实现了Map接口,都是以键值对的形式操作数据和储存数据

2,HashTable是java早期提供的,方法是同步的(加了synchronized),key和value都不能为空,

3,HashMap的方法是不同步的,支持key和Value为null的情况,行为基本和HashTable一致.由于HashTable是同步的性能开销比较大,所以推荐使用HashMap

4,HashMap采用get和put操作时,基本可以达到常熟时间的性能

5,TreeMap是一种基于红黑树的一种提供顺序访问的Map,和HashMap不同,它的get和put操作的时间复杂度是0(log(n)).具体顺序由指定的Comparator来决定,或者根据key的具体顺序来决定

4. ConcurrentLinkedQueue 和 LinkedBlockingQueue 有什么区别

首先两个都是线程安全的队列,都可以使用生产者消费者模型

LinkedBlockingQueue是阻塞队列,好处是:多线程操作时不需要额外同步,由于具有插入和移除的双重阻塞功能,对插入和移除进行阻塞,队列会自动平衡负载,从而减少生产者和消费者的速度差距

由于LinkedBlockingQueuer有阻塞功能,是基于锁实现的,当有多个消费线程消费的时候,队列为空时,消费线程会阻塞 ,有元素时还需要将消费者唤醒,导致用户态和内核态切换频繁,消耗系统资源,LinkedBlockingQueue更适合单线程插入,多线程取出,就多个生产者和一个消费者

ConcurrentLinkedQueue是非阻塞的队列,采用CAS+自旋,解决多线程之间的竞争,并不适合多写入操作,当多个线程共享访问一个公共集合时,ConcurrentLinkedQueue是个好的选择,ConcurrentLinkedQueue更适合多个线程插入,单核线程取出

5,聊一聊并行和并发的区别?

相同点:

并行和并发相同的目标都是提高CPU的使用率,将CPU的性能压榨出来

不同点:

1,并行在多处理器系统中出现,并发可以在单处理器和多处理器中出现

2,并行要求程序能同一时间执行多个操作,并发只要求程序看着像同时执行多个操作,其实是交替执行

6,聊一聊 JUC 包下的并发工具

1CountDownLatch,闭锁,一个线程等待一个线程执行完毕后恢复操作,通过计数器来判断是否执行完毕,等待线程执行完毕计数器会变为-1,当CountDownLatch的值为0后无法恢复,这就是闭锁

2,CyclicBarrier,循环栅拦,一组线程同时到达临界点后再同时恢复

3,SemaPhore,信号量,SemaPhore是synchronized或者Lock的加强版,作用是控制线程的并发数量

4,Exchanger,线程交换器,Exchanger类允许两个线程之间定义同步点,当两个线程到达同步点时,他们交换数据

7,Java 中提供的线程池种类,及其特点!

线程池的使用场景

1,单个任务的处理时间短

2,需要处理的任务数量大

提供的四种线程池

1,newCachedThreadPool,创建一个可根据需求创建线程的线程池,对于短期内异步任务的程序而言,这些线程池通常可以提高程序新嗯呢该

2,Single Thread Executor只有一个线程的线程池

3,newFixedThreadPool创建一个指定线程数的线程池,

4newScheduledThreadPool,创建一个线程池,它可延迟执行或者定期执行

8.synchronized 底层如何实现?什么是锁升级、降级!

靠monitorenter和monitorexit实现的

JDK的优化提供了三个不同的Monitor实现

1偏斜锁

2轻量锁

3重量锁

JVM优化synchronized运行机制就叫锁的升级

9,传输层上的 TCP 和 UDP 区别

1,UDP无连接,TCP面向连接

2,UDP创术可靠性不保证,TCP可靠传输

3,UDP单播,广播,任播的连接方式,TCP是单播

4,UDP报文数据传输方式,TCP字节流传输方式

5,UDP不使用阻塞控制,TCP使用阻塞控制

6,UDP不支持流量控制,TCP支持流量控制

7,UDP是8字节的报文开销,TCP是20-60字节

10,http 协议1.0 和 .1 版本区别

  • HTTP/1.0协议使用非持久连接,即在非持久连接下,一个tcp连接只传输一个Web对象;
    HTTP/1.1默认使用持久连接,在持久连接下,不必为每个Web对象的传送建立一个新的连接,一个连接中可以传输多个对象!
  • HTTP 1.0不支持Host请求头字段,WEB浏览器无法使用主机头名来明确表示要访问服务器上的哪个WEB站点,这样就无法使用WEB服务器在同一个IP地址和端口号上配置多个虚拟WEB站点。
    在HTTP 1.1中增加Host请求头字段后,WEB浏览器可以使用主机头名来明确表示要访问服务器上的哪个WEB站点,这才实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点。此外HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值