Java面试常考基础知识点

发布于2025年03月10日浏览量0

# 自学笔记
# 后端
# Java

什么是B/S和C/S架构

Browser/Server:浏览器程序 Client/Server:桌面应用程序

什么是JDK和JRE

Java Development Kit,开发人员需要安装的环境 Java Runtime Environment, 运行java程序所需要的环境

Java的特点

  1. 简单易学,有丰富的类库
  2. 面向对象,降低耦合度,内聚性更高

耦合度

模块之间相互依赖的程度

内聚性

模块内部各元素之间联系的紧密程度

面向对象和面向过程的区别

  1. 面向过程是站在过程的角度思考问题,强调功能的行为,功能的执行过程。其中每一个功能都使用函数一步步实现,使用的时候依次调用
  2. 面向对象是站在对象的角度思考问题,把多个功能合理的放到不同的对象里,强调具备某些功能的对象。

什么是类

类是对象类型的一种表示,是描述对象细节的蓝图/计划/模板

什么是对象

对象是类的实例,有自己的状态、身份和行为

类和对象的关系

类是对象的抽象,对象是类的实体,类是对象的模板,对象是类的实例

Java有几种数据类型

  1. 整形byte (8 bit), short 16, int 32, long 64
  2. 浮点型float 32, double 64
  3. 字符型char 16
  4. 布尔型boolean 8

标识符的命名规则

硬性要求为

  • 可包含英文字母,0-9数字,$以及_
  • 不能以数字开头
  • 不能为关键字

instanceOf关键字的作用

用来测试一个对象是否为一个类的实例,用法

boolean res = obj instanceOf Class

当obj为Class的对象,或者是其直接或间接的子类,或者是其接口的实现类,都返回true

int i = 0;
System.out.println(i instanceof Integer); // 编译不通过i必须是引用类型,不能是基本类型
System.out.println(i instanceof Object); // 编译不通过
Integer integer = new Integer(1);
System.out.println(integer instanceof Integer); // true
System.out.println(null instanceof Object); // false,如果obj为null,那么将返回false。

隐式转换和显式转换

  1. 隐式转换是大范围的变量能够接受小范围的数据(自动类型转换)
  2. 显式转换就是类型强转,把大类型的数据强制赋值给小类型的数据(强制类型转换)

char是否能转为int/string/double

  1. char的int值从1开始,一共有2<sup>16</sup>个数据
  2. 可以隐式转为int和double
  3. 不能隐式转为string,但可以使用Character.toString(c)
  4. 转为byte和short时需要强转

什么是拆装箱

  1. 装箱时自动将基本数据类型转换为包装器类型,如int转Integer,内部是通过调用Integer.valueOf(int)
  2. 拆箱则相反,讲包装器类型转为基本数据类型,如Integer转int,内部是通过调用intValue()方法
Integer i = 10; // 装箱(新版可自动装箱)
int n = i; // 装箱

面试题

public class Main { 
    public static void main(String[] args) { 
        Integer i1 = 100; 
        Integer i2 = 100; 
        Integer i3 = 200; 
        Integer i4 = 200; 
        System.out.println(i1 == i2); // true
        System.out.println(i3 == i4); // false
    } 
}

第一个表示1,2指向同一个对象,为true。是因为其创建值为-128到127时会自动调用IntegerCache中的对象,所以是一样的。 第二个表示3,4指向不同的对象,为false,因为==就是相当于判断对象的地址,判断值需要用.equals()

一个java类中包含哪些内容

属性、方法、内部类、构造方法、代码块

面向对象的特性

  1. 抽象:将一类对象的共同特征总结出来的构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关心其细节
  2. 继承:从已有类得到继承信息来创建新类的过程。提供继承信息的为父类(超类/基类),得到继承信息的类为子类(派生类)
  3. 封装:隐藏一切可以隐藏的东西,只向外界提供最简单的编程接口。把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
  4. 多态性:允许不同的子类型的对象对同一个消息做出不同的响应。可以说是用同样的对象引用调用同样的方法但是做了不同的事情。
    • 方法重载overload实现的是编译时的多态性
    • 方法重写override实现的是运行时的多态性

访问修饰符的区别

修饰符当前类同包子类其他包
publicYYYY
protectedYYYN
defaultYYNN
privateYNNN

String是基本数据类型吗

不是。基本数据类型primitive type只有八个:byte, short, int, long, float, double, char, boolean。 剩下的都是引用类型reference type

float f = 3.4为什么不正确

因为默认3.4会设定为double类型,这样就属于窄化,可能会造成精度损失,所以强转需要float f = (float)3.4;或者float f = 3.4f;

重写和重载的区别

  1. 重写即子类将父类本身有的方法重写一遍,使用@override
  2. 重载即在一个类中,同名的方法如有不同的参数列表则视为重载override。注意重载对返回类型没有要求,可以相同也可不同,但是不能通过返回类型来判断是否重载。

equals==的区别

  1. ==是比较变量内存中存放对象的内存地址,判断两个对象的地址是否相同,即是否指向同一个对象。比较的是真正意义上的指针操作。
  2. equals比较的是两个对象的内容是否相等,取决于对象内部的判断逻辑。因为所有类都是继承java.lang.Object类,所以没有对其中的equals方法进行覆盖,则默认返回的也是==的判断

数组实例化的方式

静态实例化:int[] a = new int[]{1, 2, 3}; 动态实例化:int[] a = new int[3];

形参和实参

  • 形参是方法或函数定义时声明的参数,用于接收传入的值
  • 实参是调用方法或函数时传入的实际值,用来替换形参并传递给方法
public class Example {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        add(a, b); // a 和 b 是实参
    }

    public static void add(int x, int y) { // x 和 y 是形参
        int sum = x + y;
        System.out.println("Sum: " + sum);
    }
}

什么是Spring

两个核心:Dependency Injection依赖注入和Aspect-Oriented Programming面向切面编程 四种关键策略:

  1. 基于POJO的轻量级和最小侵入性编程
  2. 通过依赖注入和面向接口实现松耦合
  3. 基于切面和惯例进行声明式编程
  4. 通过切面和模板减少样板式代码

Spring框架的设计目标,设计理念和核心是什么

目标:为开发者提供一个一站式的轻量级应用开发平台 设计理念:

  • 支持POJO和JavaBean开发方式,使应用面向接口开发,充分支持OO面向对象设计方法
  • 通过IoC容器实现对象耦合关系的管理,并实现依赖反转,将对象之间的依赖关系交给IoC容器,实现解耦 核心:
  • IoC容器:管理POJO对象以及它们之间的耦合关系,让互相协作的组件保持松散的耦合
  • AOP模块:通过AOP以动态非侵入的方式增强服务,允许把遍布于应用各层的功能分离出来形成可重用的功能组件

-

My Nocturzone

LEONの熬夜空间