以下题目均来自JAVA微信公众号,答案均来自互联网外加自己总结

话不多说,以下就是干货。
面向java基础篇。
1、面向对象的三大基本特征和五大基本原则:
封装、继承、多态就不多解释了,现在谈谈何为五大基本原则
单一职责原则:一个类应该有且只有一个去改变它的理由,说白了就是类的本身是解耦的。
开放封闭原则:对象应该对扩展开放,对修改封闭。如对象的Getter与Setter,又如为何将共有方法的一类设置成接口。
里氏替换原则:参考多态的向下转型(父类的调用同样适用于子类)。
依赖倒置原则:高层次不依赖低层次,应该都依赖于抽象,具体实现依赖于抽象。参考接口
接口隔离原则:类实现接口,实现类之间的解耦。
2、JAVA如何实现与平台无关:
.java文件经过编译后生成.class文件,Java虚拟机可以解释.class文件。所谓的无关是指任何的一台机器只要配备了Java解释器就可以运行这个程序。
3、整型中byte、short、int、long的取值范围:
byte:-128~127(-2的7次方到2的7次方减一),占用1个字节
short:-32768~32767(-2的15次方到2的15次方减一),占用2个字节
int:(-2的31次方到2的31次方减一),占用4个字节
long:(-2的63次方到2的63次方减一),占用8个字节
字节具体与操作系统的位数相关
4:为什么不能用浮点型表示金额:
32位的浮点数由1比特的符号位、8比特的阶码、23比特的尾数,精度由尾数决定,如金额大小超过了尾数就造成精度丢失。
5、Integer的缓存机制:
JAVA5中引进,在-128~127区间中,自动拆装箱过程中不会new对象,超过这个区间就会new。参考Integer源码。
6、String.valueOf()和Integer.toString的区别:
当传参为空时,前者返回null,后者报空指针异常。具体参考源码。
7、transient、volatile、const关键字的原理及用法:
transient:修饰变量,由transient修饰的属性不会被序列化。
volatile:修饰变量,保证变量的可见性。即一个线程修改该变量时,另一个线程可以立即读取该变量修改后的值。使用volatile修饰之后,会强制将修改后的值写入主内存中,同时也会导致另一线程的工作内存无效,该操作是禁止重排序的,另外的用volatile修饰的变量进行汇编时会多出一个lock前缀指令。具体参考深入理解JAVA虚拟机。
const:修饰变量,只可读不可写:
8、ArrayList、LinkedList和Vector的区别。
ArrayList:数组实现,自动扩容,内存中顺序存储,查询快,增删慢,线程不安全。
LinkedList:双链表实现,链式存储,同时实现了Queue和Stack接口,增删快,查询慢,线程不安全。
Vector:矢量队列,继承自AbstractList,实现了List等接口,使用数组存储数据,默认数组大小为10,可以动态扩容,使用synchronize关键字保证线程安全。
9、HashMap、HashTable、ConcurrentHashMap的区别:
HashMap:底层实现为数组+链表,实际上是数组里面的每一个元素都挂载一条链表,add方法则是根据key计算出hash值找到数组的下标,这样会有一个问题,即hash冲突,解决hash冲突就要用到上面的链表了,将hash值一样的放入链表中,获取元素则是根据key找到数组再依次equals比较链表中的值。造成链表循环则是因为当数组扩容时,多个线程进行put操作时,会将链表的顺序打乱,如A线程将链表中的元素A—>B,而B线程将链表中的元素B—>A,则会形成A-B-A情况。在Java8中,当链表中的数量到达8以上,链表转换成红黑树,加快查询效率。
HashTable:散列表,以键值对的方式存储数据,使用关键字synchronize关键字来保证线程安全。
ConcurrentHashMap:分段锁的方式保证线程安全,即在HashMap实现的基础上外面再加一个数组。以上具体参考源码。
10、Set如何保证元素不重复:每次添加数据使用equals方法判断数据是否已存在。
11、Enumeration和Iterator的区别:
前者只能读取数据不能删除数据,后者都能。前者被HashTable和Vector所实现。
12、枚举的线程安全性问题:
枚举是线程安全的,枚举类被final修饰,而属性被static修饰,枚举类被使用时,类中的属性就会被加载初始化,在加载过程中是线程安全的。
13、解释同步、异步、阻塞、非阻塞:
同步:即发送一个请求,必须等请求返回才能发起下一个请求。
异步:即发送一个请求不需要等请求返回,可以做其他事。
阻塞:发送一个请求,在响应没有返回之前,该线程被挂起,不分配CPU。
非阻塞:响应未反应也不会阻塞线程,而会立刻返回。
14、BIO、NIO、AIO的区别及用法:
BIO:同步阻塞IO,在响应没有返回之前,线程被挂起,也不能干其他的事。
NIO:同步非阻塞
AIO:异步非阻塞
(建议去搜专门的博客好好理解)
15、何为反射:
反射机制实在运行状态中,对于任何一个类,都能知道这个类的所有方法和属性,对于任一个对象都能调用该方法和属性。反射就是把类中的各个成分映射成一个个JAVA对象。运行时对象由JAVA虚拟机在第一次加载类识别.class文件时被创建(通俗的说就是每个类在运行时的状态被记录下来同时被封装进Class对象中)。
第二部分答案正在收集总结中。。。。