Java面试题基础篇3:10道基础面试题
文章目录
- 前言
- 21、面向对象五大基本原则
- 22、区别静态变量和实例变量
- 23、内部类
- 24、IO流
- 25、多态实现条件
- 26、流程控制
- 27、数组
- 28、Java类与对象
- 29、方法与函数
- 30、运算符
前言
亲爱的家人们,创作很不容易,若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力,谢谢大家!有问题请私信或联系邮箱:fn_kobe@163.com
21、面向对象五大基本原则
①单一职责原则:SRP(Single Responsibility Principle)类的功能要单一。
②开放封闭原则:OCP(Open-Close Principle)一个模块对拓展开放,对修改封闭。
③里式替换原则:LSP(the Liskov Substitution Principle LSP)子类替换父类方法和属性。
④依赖倒置原则:DIP(the Dependency Inversion Principle DIP)高层模块不应该依赖于低层模块,都应该依赖于抽象。抽象不依赖于具体实现,具体实现依赖于抽象。
⑤接口分离原则:ISP(the Interface Segregation Principle ISP)采用多个与特定客户类有关接口比采用一个通用接口要好。
22、区别静态变量和实例变量
①静态变量: 静态变量不属于任何实例对象,属于类,在内存中只有一份,在类的加载过程中,JVM只为静态变量分配一次内存空间。
②实例变量: 每次创建对象,都会为每个对象分配成员变量内存空间,实例变量是属于实例对象,在内存中,创建几次对象,就有几份成员变量。
23、内部类
①定义:在Java中,将一个类的定义放在另外一个类的定义内部。内部类本身是类的一个属性,与其他属性定义方式一致。
②分类:成员内部类、局部内部类、匿名内部类和静态内部类。
24、IO流
①java中IO流分类
按照流的流向划分,分为输入流和输出流;
按照操作单元划分,分为字节流和字符流;
按照流的角色划分,分为节点流和处理流。
Java Io流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼 此之间存在非常紧密的联系,
Java I0流的40多个类都是从如下4个抽象类基类中派生出来。
i:InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
ii:OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。
② 区别BIO,NIO,AIO
i:BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
ii:NIO:Non IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过Channel(通道)通讯,实现多路复用。
iii:AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO,异步 IO 的操作基于事件和回调机制。
详细解释:
BIO(Blocking I/O):同步阻塞 I/O 模型,数据读写必须阻塞在一个线程内完成,适用于连接数较少(<1000)的场景,编程简单且易维护。但在高并发场景(如十万级连接)下,BIO 模型性能受限,无法满足需求。
NIO(New I/O):同步非阻塞 I/O 模型,引入于 Java 1.4,基于 Channel(通道)、Selector(选择器)、Buffer(缓冲区) 进行 I/O 操作,支持非阻塞模式,适用于高并发场景。NIO 提供了 SocketChannel、ServerSocketChannel,相较于 BIO,可提升 I/O 性能,但仍然是同步操作。
AIO(Asynchronous I/O):即 NIO 2(Java 7 引入),基于事件驱动和回调机制的异步非阻塞 I/O 模型,I/O 操作由系统异步处理,完成后通知应用层。AIO 解决了 NIO 仍然同步的问题,但实际应用较少,Netty 也曾尝试使用 AIO,但最终放弃。
25、多态实现条件
三个必要条件:继承、重写、向上转型。
①继承:在多态中必须存在有继承关系的子类和父类。
②重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
③向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
26、流程控制
①条件语句
if-else
int num = 10;
if (num > 0) {
System.out.println("正数");
} else {
System.out.println("非正数");
}
switch
int day = 2;
switch (day) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
default:
System.out.println("Other day");
}
(2)循环语句
for
for (int i = 1; i <= 5; i++) {
System.out.println("i: " + i);
}
while
int i = 1;
while (i <= 5) {
System.out.println("i: " + i);
i++;
}
do-while
int i = 1;
do {
System.out.println("i: " + i);
i++;
} while (i <= 5);
27、数组
数组是存储多个相同类型数据的容器。
①一维数组
int[] arr = {1, 2, 3, 4, 5};
System.out.println(arr[2]); // 输出3
②二维数组
int[][] matrix = {{1, 2, 3}, {4, 5, 6}};
System.out.println(matrix[1][2]); // 输出6
28、Java类与对象
class Person {
String name;
int age;
void display() {
System.out.println(name + " is " + age + " years old.");
}
}
public class Main {
public static void main(String[] args) {
Person p = new Person(); // 创建对象
p.name = "Alice";
p.age = 25;
p.display();
}
}
29、方法与函数
Java 使用 方法(Method) 组织代码,提高复用性。
public class MethodExample {
// 方法定义
public static int add(int a, int b) {
return a + b;
}
public static void main(String[] args) {
int sum = add(5, 10); // 方法调用
System.out.println("Sum: " + sum);
}
}
30、运算符
Java 提供 算术、关系、逻辑、位运算、赋值 等运算符。
①算术运算符
- 加法 a + b
- 减法 a - b
- 乘法 a * b
/ 除法 a / b
% 取余 a % b
int a = 10, b = 3;
System.out.println("加法: " + (a + b)); // 13
System.out.println("除法: " + (a / b)); // 3(整数除法)
System.out.println("取余: " + (a % b)); // 1
②关系运算符
例(a=10, b=5)
== 等于 a == b → false
!= 不等于 a != b → true
```bash
> 大于 a > b → true
< 小于 a < b → false
>= 大于等于 a >= b → true
<= 小于等于 a <= b → false
`