【备战面试】每日10道面试题打卡-Day1

news/2024/12/13 0:41:36/

本篇总结的是Java基础知识相关的面试题,后续也会更新其他相关内容

文章目录

  • 1、JVM、JRE和JDK的关系?
  • 2、Java语言有哪些特点?
  • 3、Java和C++的区别有哪些?
  • 4、Java有哪些数据类型?
  • 5、访问修饰符 public、private、protected,以及不写(默认)时的 区别?
  • 6、面向对象和面向过程的区别?
  • 7、面向对象的三大特征是什么?
  • 8、抽象类和接口有哪些区别?
  • 9、成员变量与局部变量的区别有哪些?
  • 10、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?

1、JVM、JRE和JDK的关系?

答:JDK里面包含了JRE和JVM,JRE里面包含了JVM,它们分别是:

  • JVM:全名为Java Virtual Machine,是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。
  • JRE:全名为Java Runtime Environment,是Java的运行环境,里面包括了Java虚拟机和Java程序所需的核心类库,核心类库主要就是java.lang包,里面包含了运行Java程序必不可少的系统类。
  • JDK:全名为Java Development Kit,它是提供给Java开发人员使用的,其中包含了Java的开发工具和JRE,所以说安装了JDK,就不需要单独再去安装JRE了。其中的开发工具有:编译工具(javac.exe),打包工具(jar.exe)等。

2、Java语言有哪些特点?

答:Java有以下七个特征:

  • 简单易学(Java语言的语法与C语言和C++语言很接近)
  • 面向对象(封装,继承,多态)
  • 平台无关性(Java虚拟机实现平台无关性)
  • 支持网络编程并且很方便(Java语言诞生本身就是为简化网络编程设计的)
  • 支持多线程(多线程机制使应用程序在同一时间并行执行多项任务)
  • 健壮性(Java语言的强类型机制、异常处理、垃圾的自动收集等)
  • 安全性

3、Java和C++的区别有哪些?

答:Java和C++的区别有:

  • Java与C++都是面向对象的语言都支持封装、继承和多态
  • C++中有指针,但是Java中不提供指针来直接访问内存,程序内存更加安全。
  • Java的类是单继承的,C++支持多重继承(虽然Java的类不可以多继承,但是接口可以多继承)。
  • Java自动内存管理机制,不需要程序员手动释放无用内存。

4、Java有哪些数据类型?

答:Java语言是强类型语言,对于每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间,数据类型又分为基本数据类型和引用数据类型:

基本数据类型:

  • 整数类型:byte,short,int,long
  • 浮点数据类型:float,double
  • 字符型:char
  • 布尔型:boolean

引用数据类型:

  • 类:class
  • 接口:interface
  • 数组:[]
  • 字符串(特殊):String

这里给字符串类型加了个特殊,为什么说他特殊呢?详见:还在问String属于什么数据类型

一般来说,引用类型在堆里,基本类型在栈里

5、访问修饰符 public、private、protected,以及不写(默认)时的 区别?

private

  • 同类内可见
  • 使用对象:变量、方法

default

  • 同包内可见,不使用任何修饰符。
  • 使用对象:类、接口、变量、方法。

protected

  • 同包内的类所有子类可见。
  • 使用对象:变量、方法。

public

  • 所有类可见。
  • 使用对象:类、接口、变量、方法。

6、面向对象和面向过程的区别?

答:面向过程是具体化、流程化的,解决一个问题,你需要一步一步地分析,一步一步地实现。面向对象是模型化的,你只需要抽象出一个类,类就像一个封闭的盒子一样,这个盒子里面有一些解决问题的方法,我们在解决问题时直接去调用这个盒子里面的方法就行了,至于这些方法是怎么实现的我们就不需要管了,我们只需要会调用就行。

面向过程

  • 优点:性能比面向对象高,因为面向对象在创建对象时开销比较大,比较消耗资源。
  • 缺点:没有面向对象的易维护,易复用,易扩展。

面向对象

  • 优点:易维护,易复用,易扩展,由于面向对象有封装、继承、多态的特性,我们可以设计出来低耦合的系统,使系统更加灵活,更加易于维护。
  • 缺点:性能比面向过程底。

7、面向对象的三大特征是什么?

答:面向对象的三大特征是封装、继承和多态,分别是:

  • 封装封装将同一类事物的特征和功能包装在一起,只对外暴露需要调用的接口。封装也称为信息的隐藏,在Java中接口是体现封装最常用的方法,在接口中我们没有任何功能的实现(具体实现都交给实现类),只是定义了一系列抽象的方法声明用于外部调用。
  • 继承:继承是Java中面向对象最显著的一个特征,继承是从已有的类中派生出新的类,新的类可以吸收已有的属性、行为,并扩展新的能力。Java中不支持多继承,但是支持实现多接口。
  • 多态:封装和继承都是为多态来服务的,多态是指同一个行为具有多个不同的表现形式。在Java中方法的重载和重写是实现多态的2种方式。
    • 重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载。方法重载体现了编译时的多态性
    • 重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,重载对返回类型没有特殊的要求。方法重写体现了运行时的多态性

多态的三要素:继承 、重写、父类指向子类引用

8、抽象类和接口有哪些区别?

答:抽象类是用来捕捉子类的通用特性的,接口抽象方法的集合
从设计层面来讲,抽象类对类的抽象,是一种模板设计接口行为的抽象,是一种行为的规范

相同点

  • 接口和抽象类都不能被实例化
  • 都位于继承的顶端,用于被实现或继承。

不同点
在这里插入图片描述

9、成员变量与局部变量的区别有哪些?

答:成员变量:方法外部,类内部定义的变量 ;局部变量:类的方法中的变量。 成员变量和局部变量的区别如下:

1. 作用域

  • 成员变量:针对整个类内有效。
  • 局部变量:只在某个范围内有效(一般指的就是方法,语句体内)。

2. 存储位置

  • 成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中。
  • 局部变量:在方法被调用,或者语句被执行的时候存在,存储在栈内存中。当方法调用完,或者语句结
    束后,就自动释放。

3. 生命周期

  • 成员变量:随着对象的创建而存在,随着对象的消失而消失
  • 局部变量:当方法调用完,或者语句结束后,就自动释放。

4. 初始值

  • 成员变量:有默认初始值
  • 局部变量:没有默认初始值,使用前必须赋值

使用原则

在使用变量时需要遵循的原则为:就近原则,首先在局部范围找,有就使用;接着在成员位置找(由小变大)。

10、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?

答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性

重载:发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不 同、顺序不同),与方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分
重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父
类,访问修饰符大于等于父类
(里氏代换原则);

如果父类方法访问修饰符为private则子类中就不是重写。


http://www.ppmy.cn/news/29040.html

相关文章

A Comprehensive Tool for Modeling CMOS Image-Sensor-Noise Performance论文总结及翻译

A Comprehensive Tool for Modeling CMOS Image-Sensor-Noise Performance Author: Ryan D. Gow Link: https://ieeexplore.ieee.org/document/4215175/metrics#metrics Select: ⭐️⭐️⭐️⭐️ Type: Academic Journal 备注: CMOS图像传感器噪声性能建模的综合工具 总结 …

【C++】STL——list的模拟实现

list的模拟实现 文章目录list的模拟实现一、list三个基本类的模拟实现总览二、节点类接口实现模拟实现构造函数三、迭代器类接口实现1.正向迭代器默认成员函数构造函数六种运算符重载 */->//--/!/2.反向迭代器四、list类接口实现1.默认成员函数1.1.构造函数1.2.析构函数1.3.…

2023年超全前端面试题-背完稳稳拿offer(欢迎补充)

HTML、CSS相关 HTML5 HTML5新特性 增强了表单,input新增了一些type: color----定义调色板 tel-----定义包含电话号码的输入域 email—定义包含email地址的输入域 search–定义搜索域 number–定义包含数值的输入域 date----定义选取日、月、年的输入域…

【LeetCode】剑指 Offer(12)

目录 题目:剑指 Offer 30. 包含min函数的栈 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 30. 包含m…

如何使用SpringBoot ⽇志?

Spring Boot自定义日志的打印:在一个类中先获取到打印日志对象(日志框架提供的日志对象,而日志框架默认已经集成到Spring Boot里了,springboot默认使用 slf4jlogback);注意:得到日志对象Logger ->来自于slf4j2、使用目志对象提…

【Shell学习笔记】6.Shell 流程控制

前言 本章介绍Shell的流程控制。 Shell 流程控制 和 Java、PHP 等语言不一样&#xff0c;sh 的流程控制不可为空&#xff0c;如(以下为 PHP 流程控制写法)&#xff1a; 实例 <?php if (isset($_GET["q"])) {search(q); } else {// 不做任何事情 }在 sh/bash…

[Ansible系列]ansible JinJia2过滤器

目录 一. JinJia2简介 二. JinJia2模板使用 2.1 在play中使用jinjia2 2.2 template模块使用 2.3 jinjia2条件语句 2.4 jinjia2循环语句 2.5 jinjia2过滤器 2.5.1 default过滤器 2.5.2 字符串操作相关过滤器 2.5.3 数字操作相关过滤器 2.5.4 列表操作…

span标签的使用场景

目录 前言 一、span标签是什么&#xff1f; 二、span常用 1.可以嵌套a标签。 2.直接使用 3.加样式使用 4.加按钮使用 5.加a标签的综合使用 6.跟table结合使用 总结 前言 本篇章主要记录一下开发日常中&#xff0c;所常遇见的使用span标签的场景。 一、span标签是什么…