Java知识体系之Java基础

最近看到CSDN上面的一篇博客 面试必备:《Java最多见的200+面试题全解析》, 讲解了关于Java体系的一些模块以及面试中的一些常见问题; 虽然最近没有要去找工做的需求, 可是巩固一下这方面的知识仍是颇有必要的; 后面从做者提出的问题进行自个人提问与解答, 有问题欢迎你们指出;

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, 这个暂时还不是很了解实现, 明天学习一下;
相关文章
相关标签/搜索