挑战Java面试题复习第1天,坚持就是胜利
面向对象和面向过程的区别
面向过程:
步骤分析:将问题分解为一系列步骤。
函数实现:用函数逐步实现这些步骤。
调用执行:在需要时调用这些函数。
高性能:适合对性能要求高的场合,如单片机和嵌入式开发。
面向对象:
对象分解:将问题分解为多个对象。
行为描述:对象描述事物在问题解决过程中的行为。
特性:封装、继承、多态。
优点:易于维护、复用和扩展,可构建低耦合系统。
性能:相对面向过程,性能较低。
标识符的命名规则
标识符:
定义:程序中自定义的元素,如类名、方法名、变量名等。
命名规则(硬性要求):
组成:可包含字母、数字、$、_。
限制:不能以数字开头。
避免:不得使用关键字。
命名规范(非硬性要求):
类名:首字母大写,后续每个单词首字母大写(大驼峰式)。
变量名:首字母小写,后续每个单词首字母大写(小驼峰式)。
方法名:与变量名规范相同。
自动装箱与拆箱
装箱:
定义:将基本数据类型自动转换为对应的包装器类型。
示例:int 转换为 Integer。
方法:通过 Integer.valueOf(int) 实现。
拆箱:
定义:将包装器类型自动转换回对应的基本数据类型。
示例:Integer 转换为 int。
方法:通过 Integer.intValue() 实现。
Java SE5之前的装箱:
需要显式使用 new 关键字创建包装器类型实例。
示例:Integer i = new Integer(10);
Java SE5及之后的装箱:
提供了自动装箱特性,简化了包装器类型的创建。
示例:Integer i = 10;(自动调用 Integer.valueOf(int))
重载和重写的区别
重写(Override):
父子类关系:仅在子类与父类之间发生。
方法签名一致:方法名、参数列表、返回类型(除子类方法返回类型是父类返回类型的子类外)必须与被重写的方法相同。
访问权限:子类方法的访问修饰符不能比父类方法的更严格。
异常限制:重写的方法不能抛出新的或更广泛的检查型异常。
重载(Overload):
多态性表现:是类中多态性的一种体现。
参数列表差异:要求同名方法的参数列表必须不同(可以是参数类型、个数或顺序)。
返回类型:对返回值类型没有限制,可以相同也可以不同,重载的判断依据是参数列表而非返回类型。
equals与==的区别
== 操作符:
地址比较:比较两个对象在内存中的地址是否相同。
对象引用:判断两个引用是否指向同一个对象。
类型要求:操作数必须类型相同或存在继承关系。
数值比较:对于基本数据类型,如果值相等则比较结果为 true。
指针操作:本质上是比较指针地址。
equals 方法:
内容比较:比较两个对象的内容是否相等。
继承自 Object:所有类都继承自 java.lang.Object 类,适用于所有对象。
默认行为:如果没有重写 equals 方法,它的行为与 == 相同。
空指针安全:使用 equals 比较时,可以避免 NullPointerException。
最佳实践:在比较对象时推荐使用 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 非线程安全,没有加同步锁。
挑战Java面试题复习第1天,坚持就是胜利的更多相关文章
- Java面试题复习笔记(数据库)
1.数据库分类? 关系型数据库和非关系型. 常用关系型:Myspl.Oracle.SQLServer 非关系型:Redis.Hadoop.Memcache.Mogobd 2.关系数据库三范式? 范式就 ...
- Java面试题复习笔记(Web方向)
1.Http中get和post请求的区别? 共同点:都是Http请求方式,用户可以通过不同的请求方式完成对资源(Url)的操作.具体来讲就是get一般用于获取/查询资源信息,post用于更新资源信息. ...
- java面试题复习(八)
71.如何通过反射创建对象? 方法1:通过类对象调用newInstance()方法,例如:String.class.newInstance() 方法2:通过类对象的getConstructor()或 ...
- java面试题复习(七)
61.jdbc的操作步骤 加载驱动:Class.forName("oracle.jdbc.driver.OracleDriver"); 创建连接:Connection con =D ...
- java面试题复习(六)
51.实现多线程的方法 一种是继承Thread类:另一种是实现Runnable接口.两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如 ...
- java面试题复习(五)
41.阐述final.finally.finalize的区别 final:修饰符(关键字)有三种用法:如果一个类被声明为final,意味着它不能再派生出新的子类,即不能被继承,因此它和abstract ...
- java面试题复习(四)
31.内部类可以引用它的外部类的私有成员吗? 可以,内部类对象可以访问创建它的外部类对象的成员 32.final关键字有哪些用法? 修饰类时该类不能被继承,修饰方法时,该方法不能被重写,修饰变量时表示 ...
- java面试题复习(三)
21.静态嵌套类和内部类的不同? 答:静态嵌套类是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化.而通常的内部类需要在外部类实例化后才能实例化.//还是考的static的知识 ...
- java面试题复习(二)
//我又回来了 11.数组有没有length()方法?String有没有length()方法? 数组只有length属性,String有length()方法.注意:JavaScript获取字符串长度使 ...
- java面试题复习(一)
//基础最重要,如果面试官问一个答不上一个,那有难度的都都不用问了,直接就pass了,就像我,嘿嘿. //每天最好熟记10个问题,这些问题在编程是会很厚帮助,帮你避免很多不应该出现的错误. 一.面向对 ...
随机推荐
- 用户案例 | 蜀海供应链基于 Apache DolphinScheduler 的数据表血缘探索与跨大版本升级经验
导读 蜀海供应链是集销售.研发.采购.生产.品保.仓储.运输.信息.金融为一体的餐饮供应链服务企业.2021年初,蜀海信息技术中心大数据技术研发团队开始测试用DolphinScheduler作为数据中 ...
- ρars/ey 题解
给个链接:ρars/ey. 我们考虑一个树上背包. 设 \(f_{u,i}\) 表示在 \(u\) 号节点的子树内删除 \(i\) 个点的最小代价.显然有答案为 \(f_{1,siz_1-1}\). ...
- StarNet:关于 Element-wise Multiplication 的高性能解释研究 | CVPR 2024
论文揭示了star operation(元素乘法)在无需加宽网络下,将输入映射到高维非线性特征空间的能力.基于此提出了StarNet,在紧凑的网络结构和较低的能耗下展示了令人印象深刻的性能和低延迟 来 ...
- reduce() 多种用法
reduce()方法用于将数组简化为单一值,通过遍历数组并应用提供的函数.它可以用于求和.乘积.计算对象属性的总和.数组去重和转换数组结构等.初始值的设置会影响reduce的起始索引.不提供初始值时, ...
- 线性dp:最长公共子串
最长公共子串 本文讲解的题与leetcode718.最长重复子数组,题意一模一样,阅读完本文以后可以去挑战这题. 力扣链接 题目叙述: 给定两个字符串,输出其最长公共子串的长度. 输入 ABACCB ...
- nishishui语录
nishishui语录 原因 由于根本在机房语录里不存在 nishishui 的话,所以我要新开一个语录,专门记录 \(Abnormal123\) 的比话. 好的. 4.30 nishishui : ...
- Docker 构建多平台镜像
构建多平台镜像的方法分为两种:一种是在不同平台的机器上分别构建并推送对应平台的镜像,然后通过 Docker Manifest 将两个镜像标签合并为一个.另一种是通过 Docker buildx 在一台 ...
- Navicat16 安装破解教程
Navicat16 安装破解教程 Navicat 16.1 什么是Navicat? 官网下载Navicat 注册包的使用 Navicat 16.1 在文章最后添加工作号 回复关键词获取注册机 什么是N ...
- OpenFeign深入学习笔记
OpenFeign 是一个声明式的 Web 服务客户端,它使得编写 Web 服务客户端变得更加容易.OpenFeign 是在 Spring Cloud 生态系统中的一个组件,它整合了 Ribbon(客 ...
- SimMTM: 用于掩码时间序列建模的简单预训练框架《SimMTM: A Simple Pre-Training Framework for Masked Time-Series Modeling》(预训练模型、时序表征学习、掩码建模、流行学习、近邻聚合、低级表示学习(掩码)、高级表示学习(对比)、segment-wise 和point- wise)
今天是2024年7月3日10:15,写一篇1月7日就看过的论文,哈哈哈哈哈哈哈哈哈,突然想到这篇论文了. 论文:SimMTM: A Simple Pre-Training Framework for ...