Synchronized与ReentrantLock的区别

底层原理区别

  • 底层实现上来说,synchronized 是JVM层面的锁,是Java关键字,通过monitor对象来完成(monitorenter与monitorexit),
    对象只有在同步块或同步方法中才能调用wait/notify方法,

  • ReentrantLock 是从jdk1.5以来(java.util.concurrent.locks.Lock)提供的API层面的锁。

Read More

Java笔试题收集

TCP、UDP区别
  1. TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
  2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
  3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
  4. TCP首部开销20字节;UDP的首部开销小,只有8个字节
Read More

LinkedList

概述

  • LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
  • LinkedList 实现 List 接口,能对它进行队列操作。
  • LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
  • LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
Read More

类加载

类加载过程

加载,验证,准备,解析,初始化,使用,卸载

加载

  • 使用 new 关键字实例化对象,读取或者设置一个类的静态变量(被 final修饰的除外,已经在编译器被加入常量池),以及调用一个类的静态方法的 时候
  • 对类进行反射调用的时候
  • 当初始化一个类时,如果其父类没有被加载,则先对其父类进行加载
Read More