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.如何将字符串反转?
String str = "abc";
char[] charArr = str.toCharArray();
StringBuffer a = new StringBuffer();
for (int i = charArr.length - 1; i >= 0; i--) {
a.append(charArr[i]);
}
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的缺点:
- 循环时间长开销很大。
- 只能保证一个共享变量的原子操作。其他的就会被判定为无效操作;
- 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:一个由链表结构组成的双向阻塞队列。