华为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中使用。
相关推荐
无限码力17 小时前
华为OD技术面真题 - JAVA开发 - 2
华为od·华为od技术面真题·华为od技术面八股·华为od面试八股文·华为od技术面java开发
uesowys1 天前
华为OD算法开发指导-二级索引
数据结构·算法·华为od
嵌入式进阶行者7 天前
【算法】深度优先搜索实例:华为OD机考双机位A卷- 中庸行者
c++·算法·华为od·深度优先
无限码力8 天前
华为OD机试双机位C卷 - 快递投放问题 (JAVA & Python & C++ & JS & GO)
华为od·华为od机考·华为od机试·华为od机试双机位c卷·华为od上机考试真题·华为od机考真题·华为od-快递投放问题
vftOWpVs9 天前
施耐德M241 PLC与IAI伺服电缸Ethernet IP通讯解决方案:PLC与伺服配套软件...
华为od
无限码力9 天前
华为OD机试双机位C卷 - 明日之星选举 (JAVA & Python & C/ C++ & JS & GO)
华为od·华为od机考·华为od机试真题·华为od机试·华为od上机考试双机位c卷·华为od上机考试真题·华为od机考真题
无限码力16 天前
华为OD技术面真题 - 计算机网络 - 3
计算机网络·华为od·面试·华为od技术面真题·华为od面试八股文·华为od技术面计算机网络相关
无限码力17 天前
华为OD技术面真题 - 计算机网络 - 2
计算机网络·华为od·华为od技术面真题·华为od面试八股文·华为od技术面计算机网络相关
无限码力17 天前
华为OD机试真题双机位C卷 【运维日志排序】C语言实现
c语言·华为od·华为od机考·华为od机试真题·华为od机试双机位c卷·华为od机考双机位c卷·华为od上机考试