1.JDK 和 JRE 有什么区别?
    jdk是开发环境,jre是运行环境,jdk包括jre
    2.== 和 equals 的区别是什么?
    ==用于比较基本数据类型,int,long,double,float,char,beye, equals方法用于比较对象
    3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
    hashCode方法只是返回hash值,用于确认存储位置,跟equals没有必要的关联,所以不对;
    4.final 在 java 中有什么作用?
    final用于将类,变量,方法断子绝孙,使其不能被修改。
    5.java 中的 Math.round(-1.5) 等于多少?
    2
    6.String 属于基础的数据类型吗?
    不属于
    7.java 中操作字符串都有哪些类?它们之间有什么区别?
    StringBuffer:线程安全效率低,主要用于多字符串的拼接,一般都用这个
    StringBuilder:线程不安全效率高,主要用于多字符串的拼接。
    String:对象不可变,如果拼接会有效率问题;
    8.String str=”i”与 String str=new String(“i”)一样吗?
    不等于 但 equals 相等
    9.如何将字符串反转?

    1. String str = "abc";
    2. char[] charArr = str.toCharArray();
    3. StringBuffer a = new StringBuffer();
    4. for (int i = charArr.length - 1; i >= 0; i--) {
    5. a.append(charArr[i]);
    6. }
    7. System.out.println(a.toString());

    10.String 类的常用方法都有那些?
    动态的:trim length substring startWith endsWith getBytes replace split 【last】indexOf isEmpty toLowerCase toUpperCase
    静态的:valueOf

    11.抽象类必须要有抽象方法吗?不是,但次类依然不可实例化了,不写图啥?

    12.普通类和抽象类有哪些区别?

    13.CAS(Compare And Swap)算法:CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B。
    CAS指令执行时,当且仅当内存地址V的值与预期值A相等时,将内存地址V的值修改为B,否则就什么都不做。整个比较并替换的操作是一个原子操作。
    CAS是乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。
    cas的缺点:

    1. 循环时间长开销很大。
    2. 只能保证一个共享变量的原子操作。其他的就会被判定为无效操作;
    3. ABA问题。如果出现a用户修改了数据x,b用户取到了数据x,在b修改完数据x之前a用户有修改数据x为b取到的x数据,这中间其实a对数据x修改了2次,但是第二次改回去了,这样b在存储的时候会判定数据x并没有被改变。当然如果这样不会对整体的程序造成影响这个问题就可以被忽略,否则这个问题应该被解决;

    练习:使用cas算法实现购票系统的抢票;

    14.java提供的阻塞队列和非阻塞队列分别有几个?分别是什么?
    阻塞队列7个:
    ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列。
    LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列。
    PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。
    DelayQueue:一个使用优先级队列实现的无界阻塞队列。
    SynchronousQueue:一个不存储元素的阻塞队列。
    LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
    LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。