秋招后端开发面试题 - Java语言基础(上)


目录

  • Java基础上
    • 前言
    • 面试题
      • Java 语言的特点
      • JVM JDK JRE
      • 什么是跨平台性?原理是什么?
      • 什么是字节码?采用字节码的好处是什么?
      • Java 和 C++ 的区别?
      • 注释?
      • 关键字
      • 关键字 instanceof
      • 类型转换
      • 关键字 this 和 super
      • 关键字 final finally finalize?
      • 自增自减运算符
      • continue、break 和 return 区别?
      • 变量按照数据类型的分类?
      • 讲讲数组的声明?
      • 变量按照声明位置的分类?
      • 成员变量和局部变量?
      • 静态变量?
      • 字符型常量和字符串常量的区别?
      • 方法的返回值?方法的类型?
      • 静态方法为什么不能调用非静态成员?
      • 静态方法和实例方法?
      • 重写和重载?
      • 基本类型和包装类型?
      • 基本类型和包装类型的不同?
      • 自动装箱与拆箱?
      • 包装类型的缓存机制?
      • 为什么浮点数会有精度丢失的风险?
      • 如何解决浮点数运算的精度丢失?
      • 超过 long 整型的数据如何表示?
      • 对象实例和对象引用有什么不同?
      • 对象的相等和引用相等的区别?
      • 构造方法有哪些特点?是否可以被 override?
      • JavaBean?
      • JavaBean 要求
      • 深拷贝 浅拷贝 引用拷贝?
      • Object 类的方法?
      • \==和 equals() 的区别?
      • 接口和抽象类


Java基础上

前言

已经找到工作了,分享秋招时的笔记。祝大家都能顺利找到自己心仪的工作。


面试题

Java 语言的特点

  • 面对对象:Java 中所有的数据和方法都封装在对象
  • 跨平台性:Java 通过 Java 虚拟机,可以在不同的操作系统上运行相同的程序
  • 自动内存管理:Java 提供垃圾回收机制,不需要手动管理内存
  • 强类型语言:Java 编译器在编译时会进行类型检查
  • 多线程支持:Java 语言支持多线程
  • 异常处理:Java 使用异常处理机制来处理运行时错误

JVM JDK JRE

  • JVMJava 虚拟机,使 Java 程序在不同平台运行,JVM 将 Java 程序编译后的字节码文件,然后解释成机器码执行。
  • JDKJava 开发工具包,包括 JRE、开发工具和 Java 类库
  • JRE:JRE 是 Java 运行时环境,包括 JVM 和基本类库,没有开发工具

什么是跨平台性?原理是什么?

  • 跨平台性:程序一次编译,不需要修改,就可以在不同的系统运行
  • 原理:JVM 将 Java 程序编译后的字节码文件解释成机器码执行,JVM 针对不同的系统有不同的实现

什么是字节码?采用字节码的好处是什么?

  • 字节码是 Java 程序编译后生成的.class 文件,在 JVM 上运行
  • 好处:
    • 实现 Java 程序的平台无关性
    • 生成字节码文件的编译过程比直接解释执行速度快
    • 字节码相比于机器码,更容易维护和调试

Java 和 C++ 的区别?

  • 面对对象:Java 是面对对象的语言;C++ 支持面对对象,也有面对过程编程
  • 内存管理:Java 使用垃圾回收机制自动管理内存;C++ 需要手动管理内存
  • 跨平台性:Java 具有跨平台性;C++ 移植性差
  • 异常处理:Java 使用异常处理机制,强制处理异常情况;C++ 不强制

注释?

  • 单行注释
  • 多行注释
  • 文档注释

关键字

  • 基本类型:int; long; short; byte; char; float; double; boolean
  • 程序控制:break; contine; return; instanceof; default
  • 访问控制:private; protected; public
  • 类、方法:abstract; class; extends; final; implements; interface; native; new; static; synchronized; transient; volatile
  • 错误处理:try-catch; throw; throws
  • 包相关:import; package
  • 变量引用:super; this; void

关键字 instanceof

  • 检验是否是类对象

类型转换

  • 子类到父类的转换(向上转型):通常用来实现多态性,通过父类引用来调用子类对象的方法,实现方法的动态绑定
  • 父类到子类的转换(向下转型):强制类型转换,可能出现 ClassCastException 异常,需要使用 instanceof 关键字

关键字 this 和 super

  • this: 引用当前对象
  • super:引用父类对象

关键字 final finally finalize?

  • final:用来修饰不可变的实体,例如类、方法、变量等
  • finally:用于定义在异常处理中,无论是否发生异常,finall 中的代码一定会执行;通常用于释放资源
  • finalize:Object 类的方法,用于对象被垃圾回收前进行释放资源
    但由于 JVM 的垃圾回收是不确定的。finalize 不一定能有效回收对象资源;
    推荐使用 try-with-resource 方法

自增自减运算符

  • 前缀:先加减,后返回值 ++i
  • 后缀:先返回值,然后加减 i++

continue、break 和 return 区别?

  • contine:跳出当前循环,进行下一次循环
  • break:跳出整个循环体
  • return结束方法,并返回值

变量按照数据类型的分类?

  • 基本数据类型
    • 数值型:byte; int; short; long
    • 浮点型:float; double
    • 字符型:char
    • 布尔型:boolean
  • 引用数据类型
    • 类:class
    • 接口:interface
    • 数组:array

讲讲数组的声明?

要使用 Java 数组,分为两个步骤:声明数组分配内存

  • 数组声明后在栈内存中保存数组的名称
  • 然后在堆内存中分配数组所需要的内存
数据类型 数组名[] = null; //声明一维数组
数据名 = new 数据类型[长度]; //分配内存给数组
int array[] = null;
array = new int[5];

变量按照声明位置的分类?

  • 类变量:定义在中,使用 static 修饰,类变量在内存中只有一份
  • 实例变量:定义在中,属于类对象
  • 局部变量:定义在方法代码块

成员变量和局部变量?

  • 成员变量
    • 也称实例变量
    • 定义在类中方法体外,作用域是整个,存储在堆内存
    • 默认值
    • 可以用访问权限控制修饰符修饰
  • 局部变量
    • 定义在方法或代码块中,作用域是所在的方法或代码块中,存储在栈内存
    • 必须显式赋值
    • 只能在方法或代码块中使用,不需要访问修饰符

静态变量?

  • 也称类变量
  • 是指在类中使用 static 关键字定义的变量,属于,不属于类的任何一个对象
  • 在类加载的时候就被初始化了,存储在静态存储区,不在堆内存中
  • 在整个程序执行期间只有一份拷贝,被所有实例对象共享使用

字符型常量和字符串常量的区别?

  • 数据类型不同:
    • 字符型常量是 char 类型,表示单个字符
    • 字符串常量是 String 类型,表示多个字符组成的字符串
  • 表示形式不同:
    • 字符型常量用单引号引起来
    • 字符串常量是双引号引来的 0 个或者若干字符
  • 占内存空间不同:
    • 字符型常量占 2 个字节
    • 字符串常量占若干个字节
  • 比较方式不同:
    • 字符型常量可以使用==运算符进行比较,比较两个字符的 Unicode 编码
    • 字符串常量使用则是比较两个字符串对象的引用地址,通常使用 equal() 方法比较两个字符串的内容是否相同

方法的返回值?方法的类型?

  • 返回值:方法体执行后产生的结果
  • 方法的类型:按照是否有形参及返回值可以组合为四种

静态方法为什么不能调用非静态成员?

  • 静态方法属于在类加载的时候就会初始化,可以直接通过类名直接访问
  • 非静态成员属于实例对象,只有在对象实例化后才存在,需要通过类的对象去访问
  • 所以,非静态成员不存在时,静态方法去内存调用,属于非法操作

静态方法和实例方法?

  • 静态方法属于,通常使用类名.方法名方式访问
  • 实例方法属于对象,通过对象.方法名访问
  • 静态方法,只能调用静态成员,不能访问实例方法

重写和重载?

  • 重写:子类继承父类,重新实现父类的方法,方法名、参数列表和返回值必须和父类的方法相同
  • 重载:重载就是方法名称相同,但参数的类型和参数的个数不同。通过传递参数的个数和类型的不同可以完成不同功能的方法调用

基本类型和包装类型?

  • 基本类型: Java 中最基本的数据类型,包括 boolean,byte,int,long,short,float,double,char
  • 包装类型:将基本类型包装成一个对象的类,包括 Boolean,Byte,Integer,Long,Short,Float,Double,Character

基本类型和包装类型的不同?

  • 包装类型是引用类型,需要使用 new 创建对象,且包装类型不可变;而基本类型是值类型,不需要创建对象
  • 基本类型有默认值,成员变量的包装类型不赋值就是 null
  • 在泛型、反射中,只能使用包装类型,不能使用基本类型

自动装箱与拆箱?

  • 自动装箱:将基本类型值转换为对应的包装类型实例 valueOf()
    Integer i = 10; //等价于 Integer i = Integer.valueof(i);
  • 自动拆箱:将包装类型实例转换为对应的基本类型值 intValue()
    int n = i;//等价于 int n = i.intValue();

包装类型的缓存机制?

  • 类初始化时,提前为常见范围内的数创建了一个缓存数组
  • 例如 Integer 类型,Java 会在缓存数组中创建 -128~127 的所有整数的对象
    如果通过 valueOf() 方法传入这个范围内的整数,就会直接返回缓存中的对象,而不是创建一个新的对象
    这样就避免了频繁创建和销毁对象,提高了程序的性能
  • 对于超出缓存范围的数值,valueOf() 方法依然会创建新的对象

为什么浮点数会有精度丢失的风险?

  • 浮点数在计算机中是通过二进制小数来表示的
  • 但有一些小数无法准确用有限个二进制位来表示,这种情况就会出现精度丢失的问题

如何解决浮点数运算的精度丢失?

  • 使用 BigDecimal 类
  • 在比较浮点数是否相等时,避免直接使用 “==” 运算符

超过 long 整型的数据如何表示?

  • 使用 BigInteger 类

对象实例和对象引用有什么不同?

  • 对象实例:是一个具体的实体,在内存中有对应的存储空间。对象实例通常是根据来创建的,一个类可以 new 关键字创建多个对象实例
  • 对象引用:是一个指针,指向内存中实际的对象实例。存储的是对象在内存中地址
  • 对象实例的声明周期由 JVM 垃圾回收机制管理,对象引用声明周期由程序控制

对象的相等和引用相等的区别?

  • 对象的相等:内存中存放的内容是否相等
  • 引用相等:指向的内存地址是否相等

构造方法有哪些特点?是否可以被 override?

构造方法是一种特殊的方法,用于创建和初始化对象,具有以下特点:

  • 构造方法的名字必须和类名相同
  • 没有返回值类型
  • 如果没有显示定义构造方法,Java 会默认提供一个无参的构造方法
  • 构造方法在对象被创建的时候自动调用,不能手动调用
  • 不能被重写,如果子类需要增加属性或方法,可以使用 super() 来调用父类的构造方法,在子类的构造方法中添加新的代码

JavaBean?

  • JavaBean 是一种特殊的 Java 类,遵循一定的规范,可以被多种工具和框架使用
  • JavaBean 主要用于简化 Java 对象的创建和管理,同时提供标准化的方式来访问 Java 对象的属性

JavaBean 要求

  • 所有的属性都是私有
  • 有一个无参的构造方法
  • 有 get 和 set 方法

深拷贝 浅拷贝 引用拷贝?

  • 深拷贝
    将被复制对象完全复制一份,即在内存中重新开辟一个地址存放新对象,并且新对象和原对象没有任何关系
    修改新对象不会影响原对象

  • 浅拷贝
    拷贝对象和原对象的引用类型引用同一个对象,即在内存中开辟新空间存储一个新对象,并且这个新对象与原对象共享内存中的属性值
    即修改一个对象的属性值,另一个对象的属性值也会发生改变

  • 引用拷贝
    将被复制对象的引用地址直接复制给一个新的对象,指向同一个内存空间
    修改其中一个对象的属性值,另一个对象的属性值也会发生改变
    image-20230316163736669

Object 类的方法?

  • getClass():返回当前运行时对象的 Class 对象
  • hashCode():返回对象的哈希码
  • equals():比较对象的内存地址是否相等
  • clone():创建并返回当前对象的一份拷贝
  • toString():返回对象的字符串表示
  • notify():唤醒一个在对象监视器上等待的线程
  • notifyAll():唤醒对象监视器上等待的所有线程
  • wait()暂停线程的执行
  • finalize():实例被垃圾回收器回收时触发的操作

==和 equals() 的区别?

  • ==运算符:用于比较两个对象引用是否指向同一个对象
    如果两个对象的物理地址相同,则相同
  • equals() :用于比较两个对象的内容是否相等
    默认情况下,比较的是两个对象的物理地址,但可以通过重写来比较两个对象的内容是否相同
    在重写 equals 方法时,通常还需要重写 hashCode() 方法

接口和抽象类

接口的方法不可以有实现,并且是绝对的抽象方法。抽象类可以有实例方法用来实现默认行为
接口用来定义契约行为,也可作为两个系统间的契约进行交互
而抽象类主要用来为子类定义默认行为,也就是说所有的继承子类都需要运行相同的功能

秋招后端开发面试题系列目录
一、Java
1.1 Java基础上
1.2 Java基础下
1.3 Java集合
1.4 JavaIO
1.5 Java多线程上
1.6Java多线程下
二、JVM
2.1 JVM底层原理
2.2 垃圾回收器
2.3 垃圾回收算法
2.4 类加载机制
2.5 运行时数据区
三、MySQL
3.1 MySQL基础
3.2 事务
3.3 索引
3.4 锁机制
3.5 MVCC
四、Redis
4.1 Redis基础
4.2 缓存原理
五、中间件
5.1 RabbitMQ
六、Spring开源框架
6.1 Spring
6.2 Spring MVC
6.3 Spring Boot
6.4 MyBatis
七、操作系统
八、计算机网络
九、设计模式
十、微服务架构
十一、Spring Cloud分布式
11.1 分布式基础
11.2 Spring Cloud
11.3 GateWay
11.4 Nacos
11.5 OpenFeign
11.6 Ribbon
十二、算法
十三、项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/582033.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android数据恢复:如何在手机上恢复丢失的文件和照片

我们都有 我们错误地从手机中删除重要内容的时刻。确实如此 不一定是我们的错。其他人可以对您的手机数据执行此操作 有意或无意。这在某个时间点发生在我们所有人身上。 但是,今天市场上有各种各样的软件可以 帮助恢复已删除的文件。这些类型的软件被归类为数据恢复…

Linux命令大全 以及搭建hadoop

Liunx系统目录 ├── bin -> usr/bin # 用于存放二进制命令 ├── boot # 内核及引导系统程序所在的目录 ├── dev # 所有设备文件的目录(如磁盘、光驱等) ├── etc # 配置文件默认路径、服务启动命令存放目录 ├── home # 用户家目录&#…

UEFI安全启动模式下安装Ubuntu的NVIDIA显卡驱动

UEFI安全启动模式下安装ubuntu的nvidia显卡驱动 实践设备:华硕FX-PRO(NVIDIA GeForce GTX 960M) 一、NVIDIA官网下载驱动 1.1在浏览器地址栏输入https://www.nvidia.cn/drivers/lookup/进入网站,接着手动驱动搜索,并…

【C语言】:动态内存管理

1、为什么要有动态内存分配2、动态内存管理函数2.1 malloc2.2 free2.3 calloc2.4 realloc 3、常见的动态内存的错误3.1 对NULL指针的解引用操作3.2 对动态开辟空间的越界访问3.3 对非动态开辟内存使用free释放3.4 使用free释放一块动态开辟内存的一部分3.5 对同一块动态内存多次…

stm32单片机开发三、DMA

DMA其实就是一种将ADC的数据寄存器、串口的数据寄存器等等一些数据放到sram中特定位置,方便CPU去读取 比如ADC转换,DMA直接转换的ADC的值放在内存中的特定位置,CPU可以直接去读取 uint16_t AD_Value[4]; //定义用于存放AD转换结果的全局…

告别繁琐!小浪助手助你轻松下载学浪视频

小浪助手,一站式学浪视频下载工具,能让你轻松下载学浪视频 工具我已经打包好了,有需要的自己取一下 学浪下载器链接:https://pan.baidu.com/s/1djUmmnsfLEt_oD2V7loO-g?pwd1234 提取码:1234 --来自百度网盘超级会…

Pycharm配深度学习环境所遇到的部分问题

问题1:Anaconda prompt界面安装CUDA出现的问题: 不管是:conda install pytorch torchvision torchaudio cudatoolkit11.3 -c pytorch 还是:pip ****什么的 问题描述:EnvironmentNotWritableError: The current user does not have write p…

python应用-socket网络编程(1)

目录 1 先简单回顾下客户端和服务端通信的知识 2 服务端常用函数 3 客户端常用函数 4 服务端和客户端都用的函数 5 示例介绍客户端和服务端通信过程 6 建立服务端套接制 7 创建服务端函数socket.create_server() 8 创建客户端套接字 9 客户端连接函数socket.create_co…

用socat验证multicase(组播)和broadcast(广播) with k8s容器环境

安装socat 网络允许的话,可以使用yum install -y socat进行安装。 如果是在容器里面运行,建议使用静态链接的socat: 可以从此处下载: Release socat-v1.7.4.4 ernw/static-toolbox GitHub 确定网络接口地址和组播地址 #kubectl exec -i…

请编写函数fun,该函数的功能是:实现B=A+A‘,即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函数中输出。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法完整代码和详细的解析。 题干 请编…

ASP.NET汽车销售管理系统的设计与开发

摘 要 随着人们生活水平的不断提高,人们对汽车的消费和需求也越来越旺盛。很多汽车销售公司的业务环节仍然运用人工记账的传统方法,既容易出错又会导致账目混乱,查询和统计起来也非常不方便,费时又费力,严重时会给公…

Python | Leetcode Python题解之第58题最后一个单词的长度

题目: 题解: class Solution:def lengthOfLastWord(self, s: str) -> int:ls[]for i in s.split():ls.append(i)return len(ls[-1])

CLI举例:基于用户接入方式和终端设备类型的安全策略

组网需求 如图1所示,某企业在网络边界处部署了FW作为安全网关,连接内部网络与Internet。具体情况如下: 内部网络中已经部署了Agile Controller身份验证机制,Agile Controller服务器上存储了用户信息。内部网络中的用户可以使用不…

畅信达呼叫中心通过麒麟软件适配认证,引领行业新标准

在数字化浪潮汹涌的时代,软件兼容性已成为衡量一个企业技术实力和市场竞争力的重要标准。近日,畅信达呼叫中心产品成功通过麒麟软件适配认证,标志着产品在通用兼容性、性能及可靠性方面均达到了行业领先水平,将为用户的关键性应用…

Spring Boot整合Camunda实现工作流

文章目录 1. 环境准备2. 添加Camunda配置3. 创建并部署工作流程4. 启动Spring Boot应用程序5. 部署工作流程6. 访问Camunda Tasklist7. 执行工作流程8. 总结 🎉欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页&#xff1a…

deepflow grafana plugin 编译问题解决

修改tsconfig.js 增加"noImplicitAny": false,解决代码类型没有指定,显示Any 错误 To solve the error, explicitly set the parameters type to any, use a more specific type or set noImplicitAny to false in tsconfig.json. https://b…

vue处理查询框清除后无法查询问题,举例为日期选择

例如 在对应的查询方法添加 //我这里获取的是date,如果是其他参数改为其他的即可 if (query.date && query.date.length > 2) {conditions.noedate query.date[0] || conditions.noedate;//获取开始时间conditions.twodate query.date[1] || conditi…

CVE-2023-48795修复方法

CVE-2023-48795修复方法 1、修复原理2、检测漏洞3、修复漏洞4、成功修复 近期nessus扫描经常出现一个中危漏洞CVE-2023-48795,但网上的修复方法清一色的将openSSH升级到9.6p1版本 而我在升级当中处处碰壁,甚至于差点给服务器都干崩溃,特意研究…

基于python-flask技术的社区信息交流平台【数据库+15000文档】

预览 介绍 系统只需使用者通过电脑浏览器即可实现系统的访问和操作的WEB模式的信息化系统。为了保证系统数据的准确性、安全性的数据存储,系统应用MySQL数据库进行系统数据存储服务。根据对社区工作的深入调研和对社区居民的走访调查,详细分析整体系统的…

智慧公厕:高速服务区公厕智慧技术改造

近年来,随着科技的迅速发展,高速服务区的公共卫生设施也在不断创新。深圳光明源智能科技在这一领域做出了积极的探索和实践,通过引入智能科技,提升了高速服务区公厕的管理水平和服务质量。以下是其中一些具体的创新技术和功能&…
最新文章