当前位置: 首页 > news >正文

挑战Java面试题复习第1天,坚持就是胜利

目录

  • 面向对象和面向过程的区别
  • 标识符的命名规则
  • 自动装箱与拆箱
  • 重载和重写的区别
  • equals与==的区别
  • Hashcode的作用
  • String、StringBuffer和StringBuilder的区别

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

面向过程:

  • 步骤分析:将问题分解为一系列步骤。
  • 函数实现:用函数逐步实现这些步骤。
  • 调用执行:在需要时调用这些函数。
  • 高性能:适合对性能要求高的场合,如单片机和嵌入式开发。

面向对象:

  • 对象分解:将问题分解为多个对象。
  • 行为描述:对象描述事物在问题解决过程中的行为。
  • 特性:封装、继承、多态。
  • 优点:易于维护、复用和扩展,可构建低耦合系统。
  • 性能:相对面向过程,性能较低。

标识符的命名规则

标识符:

  • 定义:程序中自定义的元素,如类名、方法名、变量名等。
    命名规则(硬性要求):
  • 组成:可包含字母、数字、$、_。
  • 限制:不能以数字开头。
  • 避免:不得使用关键字。

命名规范(非硬性要求):

  • 类名:首字母大写,后续每个单词首字母大写(大驼峰式)。
  • 变量名:首字母小写,后续每个单词首字母大写(小驼峰式)。
  • 方法名:与变量名规范相同。

自动装箱与拆箱

  1. 装箱:
  • 定义:将基本数据类型自动转换为对应的包装器类型。
  • 示例:int 转换为 Integer。
  • 方法:通过 Integer.valueOf(int) 实现。
  1. 拆箱:
  • 定义:将包装器类型自动转换回对应的基本数据类型。
  • 示例:Integer 转换为 int。
  • 方法:通过 Integer.intValue() 实现。
  1. Java SE5之前的装箱:
  • 需要显式使用 new 关键字创建包装器类型实例。
  • 示例:Integer i = new Integer(10);
  1. Java SE5及之后的装箱:
  • 提供了自动装箱特性,简化了包装器类型的创建。
  • 示例:Integer i = 10;(自动调用 Integer.valueOf(int))

重载和重写的区别

重写(Override):

  1. 父子类关系:仅在子类与父类之间发生。
  2. 方法签名一致:方法名、参数列表、返回类型(除子类方法返回类型是父类返回类型的子类外)必须与被重写的方法相同。
  3. 访问权限:子类方法的访问修饰符不能比父类方法的更严格。
  4. 异常限制:重写的方法不能抛出新的或更广泛的检查型异常。

重载(Overload):

  1. 多态性表现:是类中多态性的一种体现。
  2. 参数列表差异:要求同名方法的参数列表必须不同(可以是参数类型、个数或顺序)。
  3. 返回类型:对返回值类型没有限制,可以相同也可以不同,重载的判断依据是参数列表而非返回类型。

equals与==的区别

== 操作符:

  1. 地址比较:比较两个对象在内存中的地址是否相同。
  2. 对象引用:判断两个引用是否指向同一个对象。
  3. 类型要求:操作数必须类型相同或存在继承关系。
  4. 数值比较:对于基本数据类型,如果值相等则比较结果为 true。
  5. 指针操作:本质上是比较指针地址。

equals 方法:

  1. 内容比较:比较两个对象的内容是否相等。
  2. 继承自 Object:所有类都继承自 java.lang.Object 类,适用于所有对象。
  3. 默认行为:如果没有重写 equals 方法,它的行为与 == 相同。
  4. 空指针安全:使用 equals 比较时,可以避免 NullPointerException。
  5. 最佳实践:在比较对象时推荐使用 equals 方法,尤其是在阿里代码规范中。

总结:

  • 在比较对象是否相等时,应使用 equals 方法。
  • 在比较常量时,将常量写在前面,以避免可能的 NullPointerException。
  • 推荐使用阿里代码规范,并使用阿里插件来检查和替换不合适的 == 使用。

Hashcode的作用

Java集合分为List和Set:

  • List:有序,允许重复。
  • Set:无序,不允许重复。

Set判断元素存在性:

  • 使用equals方法,但在大量元素时效率低。
    哈希算法提升效率:
  • 将集合划分为多个存储区域。
  • 每个对象通过hashCode方法计算哈希码,确定存储区域。

hashCode方法:

  • 根据对象的内存地址计算出一个值。
  • 集合添加新元素时,先通过hashCode方法定位存储位置。
  • 如果位置无元素,直接存储;如果位置有元素,使用equals方法比较。
  • 相同则不存储,不同则寻找其他位置。
  • 减少equals方法调用次数,提高性能。

String、StringBuffer和StringBuilder的区别

String 类要点:

  • 不是基本数据类型,而是一个对象。
  • 底层是 final 类型的字符数组。
  • 字符串内容不可变,任何修改都会生成新的 String 对象。
  • 字段定义:private final char value[];

字符串连接操作:

  • 使用 + 操作符时,会隐式创建 StringBuilder 对象并调用 append 方法进行拼接。

StringBuilder 和 StringBuffer 要点:

  • 两者都继承自 AbstractStringBuilder 抽象类。
  • 底层都是可变字符数组:char[] value;
  • 适用于频繁的字符串操作。

线程安全:

  • StringBuffer 是线程安全的,方法加了同步锁。
  • StringBuilder 非线程安全,没有加同步锁。

http://www.mrgr.cn/news/59232.html

相关文章:

  • LSTM,全称长短期记忆网络(Long Short-Term Memory),是一种特殊的循环神经网络(RNN)结构
  • 记一次:使用使用Dbeaver连接Clickhouse
  • 生信软件39 - GATK最佳实践流程重构,提高17倍分析速度的LUSH流程
  • 设计模式(二)工厂模式详解
  • 如何评估Mechanize和Poltergeist爬虫的效率和可靠性?
  • 2024年10月24日随笔
  • 【WPF】作为一个WPF开发者你所应该知道关于Avalonia的二三事
  • Redis 基础 问题
  • 网关三问:为什么微服务需要网关?什么是微服务网关?网关怎么选型?
  • 跨境支付,哪些国产数据库能接得住?
  • 透视 @Transactional 的隔离级别:四大隔离机制让事务更安全!
  • SMA-BP时序预测 | Matlab实现SMA-BP黏菌算法优化BP神经网络时间序列预测
  • (done) 什么 RPC 协议? remote procedure call 远程调用协议
  • 无告知搜索算法(Python)
  • FCN深度学习语义分割开山之作——学习笔记
  • 更强的可操作性!Midjourney两大重要功能更新!
  • STL二分查找
  • 3285. 找到稳定山的下标
  • Qt的信号槽机制学习一
  • 常见存储器及其特点
  • 【C++习题】12.滑动窗口_将 x 减到 0 的最小操作数
  • vue3+vite 部署npm 包
  • PG数据库之事务处理
  • CANFD SSP第二采样点引发的“风波”分析
  • 数据结构------手撕链表(一)【不带头单向非循环】
  • STM32-HAL库 HC-SR04超声波测距 -- 2024.10.26