最近看到CSDN上面的一篇博客 面试必备:《Java最多见的200+面试题全解析》, 讲解了关于Java体系的一些模块以及面试中的一些常见问题; 虽然最近没有要去找工做的需求, 可是巩固一下这方面的知识仍是颇有必要的; 后面从做者提出的问题进行自个人提问与解答, 有问题欢迎你们指出;
一、JDK 和 JRE 的区别 java
个人理解是: 首先JDK包含三部分: 一、程序员编程所须要的基本类库等; 二、Java字节码的运行时环境(JRE); 三、用于对JVM进行调优查看等工具, 如 jconsole、jstack等; 而JRE仅仅为Java代码的运行提供运行时环境而已;
二、== 和 equals 的区别程序员
== 表示两个对象的内存地址是否相等, 即: ==两遍比较的对象是否是同一个类的实例, 若是是同一个实例, 那么返回true, 若是不是则返回false; 默认java.lang.Object中的equals是基于==来实现的; 而Object子类能够重写equals方法, 来实现本身的逻辑上的等于判断; 即便两个对象不是同一个对象实例, 里面有一些数据相同也能够认为它们是相同的;
** 三、HashCode 与 Equals是什么关系?面试
在不使用集合的状况下, hashCode与equals没有直接关系; equals能够单独进行逻辑判断, 即便两个对象逻辑相等, hashCode也能够不同; 反过来也成立, 即便两个对象的hashCode相同, equals方法返回值也可能不一样; 可是在使用如HashMap、HashSet等结构时, 因为底层是基于桶的算法, 因此必须确保若是做为Key两个对象的equals返回true, 它的hashCode必定要相等; 若是不相等, 那么对于逻辑相同的对象做为Key去检索的时候找不到对应的Value;
四、final 在 java 中的做用 算法
final在Java中能够修饰 类、方法、变量; 修饰类: 表示该类是一个终态类, 不容许有子类; 修饰方法: 表示该方法不可以被重写; 修饰变量: 表示该变量指向的对象不可以改变 通常定义不可变常量 如: LOGGER 或者在线程中须要引用外部变量, 则须要添加final修饰符;
五、String 属于基础的数据类型吗 编程
String不属于基本数据类型, 它是Java中的内置的类, 底层使用char[]实现;
六、java 中操做字符串都有哪些类?它们之间有什么区别? 安全
Java中操做字符串的类有3个: String、StringBuffer、StringBuilder; String类每次对于字符串的CURD操做都会产生一个新的字符串常量; StringBuffer与StringBuilder不会; 而StringBuffer是线程安全的, StringBuilder是线程非安全的;
七、String 类的经常使用方法都有那些 异步
indexOf, substring, lastIndexOf, chatAt, equals, startWith, endWith, concat, replace, split, toLowerCase等等;
八、抽象类必需要有抽象方法吗? 工具
这种就是更基础的了, 抽象类不必定要有抽象方法, 能够所有是实现; 不过通常没有抽象方法的抽象类都会把abstract修饰符给去掉
九、BIO、NIO、AIO 有什么区别 学习
这个问题就比较大了, 涉及到的知识点比较多; BIO: 通常翻译为同步阻塞IO, 一旦调用了同步方法, 那么必须等待数据到达以后才会返回; 不然一直等待; NIO: 通常翻译为New IO, 或者 Non-Blocking IO; 其实也是阻塞IO, 增长了Channel、Selector以及事件机制来确保不是全部的IO操做都处于等待, 可以更加合理的利用CPU资源; 具体表现为Selector监听各个IO操做的状况, 若是有IO可读、可写以后, 就直接返回; 而后遍历全部的Channel, 哪一个可读可写就调度谁; 该NIO实现依托于Linux IO模型中的多路复用机制 AIO: 就是异步非阻塞IO, 这个暂时还不是很了解实现, 明天学习一下;