华为OD技术面真题 - JAVA开发 - 1

文章目录

JAVA跨平台是如何实现的

java中经典的Write Once, Run Anywhere是基于JVM实现,Java 源码编译成与平台无关的字节码,由不同平台的 JVM 负责解释或编译执行。核心是通过加入JVM中间层屏蔽了操作系统和硬件的差异。

基于JVM带来的负面影响:

  • 性能损耗:多了一层 虚拟机,字节码 → 机器码需要转换,启动阶段存在解释和 JIT 成本。
  • 资源占用更高:JVM 自身需要内存,对小设备不友好。
  • 对底层系统能力的"隔离":JVM 封装了操作系统,Java 标准 API 不暴露全部系统能力,例如一些CPU专用指令集、高性能I/O接口。

面向对象三大特性

封装:将数据和对数据的操作封装起来,对象状态(属性)由这个对象自己的行为(方法)来读取和改变,隐藏细节部分。java种常见会把属性设置为private,通过settergetter修改和获取属性。 目的: 控制访问权限,降低耦合,提高安全性和可维护性

继承:子类复用父类的代码,并在此基础上扩展或修改行为。目的是为了代码复用

多态:同一个接口,不同对象,调用时表现出不同行为。调用方法时,运行期决定调用哪个子类的方法。目的: 提高拓展性

重写和重载的区别

先用代码简单介绍什么是重写,什么是重载

复制代码
// 重载
class MathUtil {
    int add(int a, int b) {
        return a + b;
    }

    double add(double a, double b) {
        return a + b;
    }

    int add(int a, int b, int c) {
        return a + b + c;
    }
}

重载发生在同一个类中,重载方法的方法名相同,参数列表、返回类型、权限修饰符可以不同。

复制代码
//重写
class Father {
    int handle(int a, int b) {
        return a + b;
    }    
}

class Son extends Father {
    int handle(int a, int b) {
        return a * b;
    }
}

Father example1 = new Son()
Father example2 = new Father()
example1.handle(1, 2)
example2.handle(1, 2)

重写发生在子类中,方法名、参数列表和返回类型都相同,权限修饰符要大于父类方法,声明异常要小于父类。

详细对比点

对比点 重载 重写
发生位置 同一个类中 发生在父子类之间
方法名 必须相同 必须相同
参数列表 必须不同(类型/个数/顺序)不同 必须完全相同
返回值类型 可以不同 可以不同,但子类返回的返回值类型必须是父类返回值类型的子类
访问修饰符 无要求 不能比父类更严格
异常 无要求 子类抛出的异常必须是父类相同或者为它子类

讲讲JAVA中不同访问权限修饰符区别

JAVA中分为四种访问级别权限符,访问范围从大到小为publicprotecteddefaultprivate

private特点:

  • 只能在当前类中访问
  • 子类也无法访问。所以private的方法是不能被重写的。

default特点:

  • 默认,不指定访问权限,默认就是这个。
  • 同一个包内可访问
  • 不同包完全不可见

protected特点:

  • 同包可访问。
  • 不同包:只有子类能访问。

public 特点:

  • 任何地方都可以访问
  • 类、方法、成员变量都可用

为什么要设计不同访问权限修饰符

Java 设计不同级别的访问修饰符,是为了通过权限分级实现封装和解耦。不同级别分别满足类内部、模块内部、继承关系以及对外 API 的访问需求,在保证安全性的同时,提高代码的可维护性和可扩展性。

String、StringBuffer和StringBuilder区别

String:是典型的Immutable 类,被声明成为 final class,所有属性也都是 final 的。也由于它的不可变性,类似拼接、裁剪字符串等动作,都会产生新的 String 对象。不可变

StringBuffer:是为解决String提到拼接产生太多中间对象的问题而提供的一个类,我们可以用 append 或者 add 方法,把字符串添加到已有序列的末尾或者指定位置。StringBuffer 本质是一个线程安全的可修改字符序列,它保证了线程安全,也随之带来了额外的性能开销。可变线程安全

StringBuilder:Java 1.5 中新增的,在能力上和 StringBuffer 没有本质区别,但是它去掉了线程安全的部分,有效减小了开销,是绝大部分情况下进行字符串拼接的首选. 可变线程不安全

HashCode、== 和 equals的区别

== 的特点:

  • 对于基本数据类型,值相同返回true.
  • 对于引用类型,如果引用类型的两个对象引用地址相同返回true。
  • 常用于判断是否为同一对象
java 复制代码
int a = 10;
int b = 10;
int c = 11;
a == b; // true
a == c; // false

User u1 = new User();
User u2 = new User();
User u3 = u1;
u1 == u2; // false
u1 == u3; //true

equals()特点:

  • 定义在Object类中,默认实现就是等价于==
  • 自定义类一般都会重写hashcode()equals()方法,重写equals逻辑一般是默认类个属性值相同就返回true。
  • 常适用于判断对象业务等价

hashcode()特点:

  • 定义在Object类中,返回一个int值。
  • 一般用于快速定位对象在哈希表中的位置。
  • 常适用于map中使用。
相关推荐
西电研梦2 天前
26西电考研 | 寒假开始,机试 or C语言程序设计怎么准备?
c语言·考研·华为od·研究生·西安电子科技大学·计算机408
无限码力2 天前
华为OD技术面真题 - Mysql相关 - 4
mysql·华为od·华为od技术面真题·华为od技术面八股·华为od技术面八股文·华为od技术面mysql相关
无限码力2 天前
华为OD机试双机位C卷 - FLASH坏块监测系统 (C语言 & C++ & Python & JAVA & JS & GO)
华为od·华为od机试真题·华为od机试双机位c卷·华为od上机考试双机位c卷·华为od上机考试真题·华为od机考真题·华为odflash坏块监测系统
无限码力3 天前
华为OD技术面真题 - 计算机网络相关 - 4
计算机网络·华为od·华为od技术面真题·华为od技术面计算机八股·华为od技术面计算机网络真题
想七想八不如114083 天前
2019机试真题
java·华为od·华为
开开心心_Every6 天前
家常菜谱软件推荐:分类齐全无广告步骤详细
linux·运维·服务器·华为od·edge·pdf·华为云
无限码力7 天前
华为OD2026最新机试双机位C卷机考真题目录含考点说明 (持续更新)
华为od·华为od机考·华为od题库·华为od机试·华为od机试双机位c卷·华为od最新上机考试题库·od机考题库
无限码力7 天前
华为OD技术面真题 - 数据库MySQL - 3
数据库·mysql·华为od·八股文·华为od技术面八股文
无限码力7 天前
华为OD技术面真题 - JAVA开发 - 5
java·华为od·面试·华为od技术面真题·华为od技术面八股·华为od技术面java八股文