面试题知识点全纪录—基础概念与常识
注意:该博客仅是本人对掌握知识的测试,具体内容请移步guide哥网站!!!
https://snailclimb.gitee.io/javaguide
链接
基础概念与常识
- Java 语言有哪些特点?
面向对象,简单易学,平台无关,多线程,可靠性,安全性,编译与解释并存。 - JVM vs JDK vs JRE?
- JVM?
java虚拟机,运行字节码文件,针对不同系统有特定实现。 - JDK 和 JRE?
java编译工具和java运行环境 - 为什么说 Java 语言“编译与解释并存”?
.java --> .class --> 机器码、热点代码有JIT编译器 - Oracle JDK 和 OpenJDK 的对比?
oracleJDK基于openJDK7构建 - Java 和 C++的区别?
都是面向对象,(都支持封装继承多态)java不提供指针访问内存,更安全;java单继承,c++多继承;java垃圾自动回收,c++手写; - import java 和 javax 有什么区别?
没什么区别
基本语法
- 字符型常量和字符串常量的区别?
字符常量单引号,字符串常量双引号;字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置);字符常量只占 2 个字节; 字符串常量占若干个字节 (注意: char 在 Java 中占两个字节), - 注释
- 标识符和关键字的区别是什么?
- Java 中有哪些常见的关键字?
- 自增自减运算符
- continue、break、和 return 的区别是什么?
- Java 泛型了解么?什么是类型擦除?介绍一下常用的通配符?
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
Java 的泛型是伪泛型,这是因为 Java 在编译期间,所有的泛型信息都会被擦掉,这也就是通常所说类型擦除 。
8. ==和 equals 的区别?
?表示不确定的 java 类型
T (type) 表示具体的一个 java 类型
K V (key value) 分别代表 java 键值中的 Key Value
E (element) 代表 Element
9. hashCode()与 equals()?
对于基本数据类型来说,==比较的是值。对于引用数据类型来说,==比较的是对象的内存地址。
因为 Java 只有值传递,所以,对于 == 来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引用类型变量存的值是对象的地址。
equals() 作用不能用于判断基本数据类型的变量,只能用来判断两个对象是否相等。equals()方法存在于Object类中,而Object类是所有类的直接或间接父类。
如果两个对象相等,则 hashcode 一定也是相同的。两个对象相等,对两个对象分别调用 equals 方法都返回 true。但是,两个对象有相同的 hashcode 值,它们也不一定是相等的 。因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖。
基本数据类型
- Java 中的几种基本数据类型是什么?对应的包装类型是什么?各自占用多少字节呢?
byte,short,int,long,float,double,char,boolean
基本类型 位数 字节 默认值
int 32 4 0
short 16 2 0
long 64 8 0L
byte 8 1 0
char 16 2 ‘u0000’
float 32 4 0f
double 64 8 0d
boolean 1 false
注意:
Java 里使用 long 类型的数据一定要在数值后面加上 L,否则将作为整型解析。
char a = 'h'char :单引号,String a = "hello" :双引号。
这八种基本类型都有对应的包装类分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean 。
包装类型不赋值就是 Null ,而基本类型有默认值且不是 Null。
另外,这个问题建议还可以先从 JVM 层面来分析。
基本数据类型直接存放在 Java 虚拟机栈中的局部变量表中,而包装类型属于对象类型,我们知道对象实例都存在于堆中。相比于对象类型, 基本数据类型占用的空间非常小。
- 自动装箱与拆箱
- 8 种基本类型的包装类和常量池
方法(函数)
-
什么是方法的返回值?
-
方法有哪几种类型?
-
在一个静态方法内调用一个非静态成员为什么是非法的?
-
静态方法和实例方法有何不同?
-
为什么 Java 中只有值传递?
-
重载和重写的区别
-
重载
-
重写
-
-
深拷贝 vs 浅拷贝
Java 面向对象
-
面向对象和面向过程的区别
-
成员变量与局部变量的区别有哪些?
-
创建一个对象用什么运算符?对象实体与对象引用有何不同?
-
对象的相等与指向他们的引用相等,两者有什么不同?
-
一个类的构造方法的作用是什么? 若一个类没有声明构造方法,该程序能正确执行吗? 为什么?
-
构造方法有哪些特点?是否可被 override?
-
面向对象三大特征?
封装 继承 多态 -
String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?
-
Object 类的常见方法总结
-
反射
-
何为反射?
-
反射机制优缺点
更加灵活,但是耗费内存 -
反射的应用场景
java动态代理;注解
异常
- Java 异常类层次结构图
- Throwable 类常用方法
- try-catch-finally
- 使用 try-with-resources 来代替try-catch-finally
I/O 流
-
什么是序列化?什么是反序列化?
序列化:数据结构->二进制流
反序列化:二进制流->数据结构 -
Java 序列化中如果有些字段不想进行序列化,怎么办?
transient关键字修饰; -
获取用键盘输入常用的两种方法
方法 1:通过 Scanner
Scanner input = new Scanner(System.in);
String s = input.nextLine();
input.close();
Copy to clipboardErrorCopied方法 2:通过 BufferedReader
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String s = input.readLine(); -
Java 中 IO 流分为几种?
按照流的流向分,可以分为输入流和输出流;
按照操作单元划分,可以划分为字节流和字符流;
按照流的角色划分为节点流和处理流。 -
既然有了字节流,为什么还要有字符流?
字符流是由 Java 虚拟机将字节转换得到的,问题就出在这个过程还算是非常耗时,并且,如果我们不知道编码类型就很容易出现乱码问题。所以, I/O 流就干脆提供了一个直接操作字符的接口,方便我们平时对字符进行流操作。如果音频文件、图片等媒体文件用字节流比较好,如果涉及到字符的话使用字符流比较好。