后端面试问题(学习版)

JAVA相关

JAVA语言概述

1. 一个".java"源文件中是否可以包含多个类?有什么限制?

可以。
一个源文件可以声明多个类,但是最多只能有一个类使用public进行声明
且要求声明public的类的类名与源文件相同。

2. Java的优势?

  • 跨平台性
  • 安全性高
  • 简单性
  • 高性能
  • 面向对象性
  • 健壮性
  • 社区繁荣

3. Java中是否存在内存溢出、内存泄漏?如何解决?

存在。
(内存溢出、内存泄漏:程序在执行过程中,已经不再使用的内存空间, JVM通过相关算法判定以后不认为是垃圾,于是构成内存泄漏)

4. 如何看待Java是一门半编译半解释型语言?

java源码经过编译器生成字节码(.class),字节码可以通过解释器(解释执行) | JIT编译器(编译执行)得到机器码

变量与运算符

1. 如何高效的计算2*8的值?

使用<<(左移)

2. &和&&区别?

都是表示且的关系,&左边是false时仍然执行,&&左边是false不再执行

3. Java中的基本数据类型有哪些?String时最基本的数据类型吗?

8种基本数据类型:byte,short,int,long,char,boolen,float,double
String不是,属于引用类型

4. Java开发中计算金额是是用什么数据类型?

不能使用double,float,因为精度不高
使用BigDecimal类替换,可以实现任意精度的运算

5. char变量中能不能存储一个中文汉字?

可以,应为char使用Unicode字符集,包含了世界范围的所有字符集。
char='中'

6. 代码分析

short s1=1;
s1=s1+1;	//有什么错?(右边是int类型,需要强制转换)
short s1=1;
s1+=1;	//有什么错?(没错)

7. int i=0; i++; 执行这两句话后,i的值为?

0

8. 如何将两个变量值互换

String s1 = "abc"
String s2 = "def"String temp = s1;
s1 = s2;
s2 = temp;

9. boolean占几个字节?

编译的时候不谈占几个字节。
但是JVM再给boolean类型分配内存空间是,boolean类型的变量占据一个slot(4B)。

拓展:在内存中,byte\short\char\int\boolean\float:占用1个slot
______________________________double\long:占用2个slot

10. 为什么Java中0.1+0.2≠0.3?

不是每个小数都有对应的二进制数字,可以采用四舍五入同乘同除方法进行验证,避免上述问题。

流程控制语句

1. break和continue的作用

在这里插入图片描述

2. if分支语句和switch分支语句的异同之处?

  • if-else语句优势

if语句的条件是一个布尔类型值,if条件表达式为true则进入分支,可以用于范围的判断,也可以用于等值的判断,使用范围更广

switch语句的条件是一个常量值(byte,short,int,char,枚举,String),只能判断某个变量或表达式的结果是否等于某个常量值,使用场景较狭窄

  • switch语句优势

当条件是判断某个变量或表达式是否等于某个固定的常量值时,使用if和switch都可以,习惯上使用switch更多。因为效率稍高。当条件是区间范围的判断时,只能使用if语句。

使用switch可以利用穿透性,同时执行多个分支,而if…else没有穿透性。

3. switch语句中忘写break会发生什么?

case穿透

4. Java至此和那些类型循环?

whiledo-whileforforeach

5. while和do-while循环的区别?

do-while至少会执行一次

IDEA安装与使用

1. 开发中你接触过的开发工具有哪些?

IDEAEclipse

2. 谈谈你对Eclipse和IDEA使用上的感受?

IDEA是一种智能化开发工具,Eclipse不够人性化

数组

1. 数组有没有length()这个方法?String有没有length()这个方法?

数组没有length()方法,是length属性
String有length()方法

2. 有数组int[] arr,用Java代码将数组元素顺序颠倒

for(int i=0;i<arr.length/2;i++){int temp=arr[i]arr[i]=arr[arr.length-i-1];arr[arr.length-i-1]=temp;
}

3. 为什么数组要从0开始编号,而不是1?

数组索引,表示了数组元素距离首地址的偏移量。因为第一个元素与首地址元素相同,所以偏移量为0。

4. 数组有什么排序?手写

冒泡排序,快速排序,二分算法

/*
1、冒泡排序(最经典)
思想:每一次比较“相邻(位置相邻)”元素,如果它们不符合目标顺序(例如:从小到大),就交换它们,经过多轮比较,最终实现排序。(例如:从小到大)     每一轮可以把最大的沉底,或最小的冒顶。过程:arr{6,9,2,9,1}  目标:从小到大
第一轮:第1次,arr[0]与arr[1],6>9不成立,满足目标要求,不交换第2次,arr[1]与arr[2],9>2成立,不满足目标要求,交换arr[1]与arr[2] {6,2,9,9,1}第3次,arr[2]与arr[3],9>9不成立,满足目标要求,不交换第4次,arr[3]与arr[4],9>1成立,不满足目标要求,交换arr[3]与arr[4] {6,2,9,1,9}第一轮所有元素{6,9,2,9,1}已经都参与了比较,结束。第一轮的结果:第“一”最大值9沉底(本次是后面的9沉底),即到{6,2,9,1,9}元素的最右边
第二轮:第1次,arr[0]与arr[1],6>2成立,不满足目标要求,交换arr[0]与arr[1] {2,6,9,1,9}第2次,arr[1]与arr[2],6>9不成立,满足目标要求,不交换第3次:arr[2]与arr[3],9>1成立,不满足目标要求,交换arr[2]与arr[3] {2,6,1,9,9}第二轮未排序的所有元素 {6,2,9,1}已经都参与了比较,结束。第二轮的结果:第“二”最大值9沉底(本次是前面的9沉底),即到{2,6,1,9}元素的最右边
第三轮:第1次,arr[0]与arr[1],2>6不成立,满足目标要求,不交换第2次,arr[1]与arr[2],6>1成立,不满足目标要求,交换arr[1]与arr[2] {2,1,6,9,9}第三轮未排序的所有元素{2,6,1}已经都参与了比较,结束。第三轮的结果:第三最大值6沉底,即到 {2,1,6}元素的最右边
第四轮:第1次,arr[0]与arr[1],2>1成立,不满足目标要求,交换arr[0]与arr[1] {1,2,6,9,9}第四轮未排序的所有元素{2,1}已经都参与了比较,结束。第四轮的结果:第四最大值2沉底,即到{1,2}元素的最右边
*/
public class Test19BubbleSort{public static void main(String[] args){int[] arr = {6,9,2,9,1};//目标:从小到大//冒泡排序的轮数 = 元素的总个数 - 1//轮数是多轮,每一轮比较的次数是多次,需要用到双重循环,即循环嵌套//外循环控制 轮数,内循环控制每一轮的比较次数和过程for(int i=1; i<arr.length; i++){ //循环次数是arr.length-1次/轮for(int j=0; j<arr.length-i; j++){//希望的是arr[j] < arr[j+1]if(arr[j] > arr[j+1]){//交换arr[j]与arr[j+1]int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}//完成排序,遍历结果for(int i=0; i<arr.length; i++){System.out.print(arr[i]+"  ");}}
}

面向对象(基础)

1. 代码输出

		int[] arr = new int[]{1,2,3};System.out.println(arr);char[] arr1 = new char[]{'a','b','c'};System.out.println(arr1);boolean[] arr2 = new boolean[]{true,false,false};System.out.println(arr2);

int:地址
char:abc
boolean:地址
在这里插入图片描述

2. 代码问题

编写method(a,b),输出a=100,b=200

    public static void main(String[] args) {int a = 10;int b = 10;method(a,b);System.out.println("a="+a);System.out.println("b="+b);}

解答:

    public static void main(String[] args) {int a = 10;int b = 10;method(a,b);System.out.println("a="+a);System.out.println("b="+b);}public static void method(int a,int b){a=a*10;b=b*20;System.out.println("a="+a);System.out.println("b="+b);System.exit(0);//强制退出}
  • 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参

  • 形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参

3. 面向对象,面向过程理解?

  1. 面向过程的程序设计思想(Process-Oriented Programming),简称POP
  • 关注的焦点是过程:过程就是操作数据的步骤。如果某个过程的实现代码重复出现,那么就可以把这个过程抽取为一个函数。这样就可以大大简化冗余代码,便于维护。

  • 典型的语言:C语言

  • 代码结构:以函数为组织单位

  • 是一种“执行者思维”,适合解决简单问题。扩展能力差、后期维护难度较大。

  1. 面向对象的程序设计思想( Object Oriented Programming),简称OOP
  • 关注的焦点是类:在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,用类来表示。

  • 典型的语言:Java、C#、C++、Python、Ruby和PHP等

  • 代码结构:以类为组织单位。每种事物都具备自己的属性和行为/功能。

  • 是一种“设计者思维”,适合解决复杂问题。代码扩展性强、可维护性高。

4. Java引用类型有几种?

类,数组,接口,枚举,记录,注解

5. 类和对象的区别?

类是抽象的
对象是具体的,是类的实例

6. 对象存在Java内存的哪块区域里?

堆空间

7. private、缺省、protected、public的作用区域?

在这里插入图片描述

8. main方法的public能不能换成private,为什么?

能。当修改以后就不能作为程序入口,就只是一个普通的方法。

9. 构造方法和普通方法有什么区别?

编写代码角度:声明格式,作用均不同
字节码文件角度:构造器会以<init>()方法的形态呈现,用以初始化对象

10. 构造器Constructor是否可以被overload?

可以

11. 无参构造器和有参构造器的作用和应用?

初始化属性

12. 成员变量和局部变量区别?

1、声明位置和方式

(1)实例变量:在类中方法外

(2)局部变量:在方法体{}中或方法的形参列表、代码块中

2、在内存中存储的位置不同

(1)实例变量:堆

(2)局部变量:栈

3、生命周期
(1)实例变量:和对象的生命周期一样,随着对象的创建而存在,随着对象被GC回收而消亡,而且每一个对象的实例变量是独立的。

(2)局部变量:和方法调用的生命周期一样,每一次方法被调用而在存在,随着方法执行的结束而消亡,而且每一次方法调用都是独立。

4、作用域

(1)实例变量:通过对象就可以使用,本类中直接调用,其他类中“对象.实例变量”

(2)局部变量:出了作用域就不能使用

5、修饰符(后面来讲)

(1)实例变量:public,protected,private,final,volatile,transient等

(2)局部变量:final

6、默认值

(1)实例变量:有默认值

(2)局部变量:没有,必须手动初始化。其中的形参比较特殊,靠实参给它初始化。

13. 变量赋值和构造方法加载的优先级问题?

变量显式赋值先于构造器赋值(字节码文件)

面向对象(进阶)

1. 区分方法重载和重写?

重载:方法名相同,形参列表不同。不看返回值类型。
重写:不同类中,继承以后,子类覆盖父类中方法

2. 区分 == 和 equals()

  • == 既可以比较基本类型也可以比较引用类型。对于基本类型就是比较,对于引用类型就是比较内存地址

  • equals只能用在引用数据类型上,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过默认也是==;我们可以看到String等类的equals方法是被重写过的,而且String类在日常开发中用的比较多,久而久之,形成了equals是比较值的错误观点。

  • 具体要看自定义类里有没有重写Object的equals方法来判断。

  • 通常情况下,重写equals方法,会比较类中的相应属性是否都相等。

3. 父类哪些成员可以被继承?属性可以被继承吗?

父类属性、方法、属性可以被继承。
构造器可以被子类调用

4. overload是否可以改变返回值类型?

不可以。返回值不是重载需要改变的。

5. 构造器可以被overrid?

不可以。构造器可以被重载。

6. 为什么要重载,随便命名一个别的函数不行吗?

见名知意

7. super和this的区别?

  • this关键字引用的是当前对象。它用于引用当前对象的实例变量和方法。使用this关键字可以让我们避免在代码中重复使用相同的变量名。
  • super关键字用于引用父类的成员(实例变量或方法)。它通常用于子类中,当子类需要访问父类的成员时。使用super可以明确地引用父类的成员,避免二义性。

8. 多态的理解?

广义理解:子类对象的多态性、方法的重写、方法的重载
格式:Object obj = new String("hello");父类的引用指向子类对象
多态好处:减少了大量的重载方法定义

9. 多态new出来的对象和不多态new出来的对象有什么区别?

Person p = new Man();虚对象方法,屏蔽了子类Man类特有的属性和方法
Person p = new Person();

10. 重写equals方法注意什么?

明确判定两个对象实体equals()标准。是否需要所有属性参与。
对象的属性且为自定义类型,此属性也需要重写equals()

11. Java中所有的父类是什么?都有什么方法?

Object类
equals(),toString(),clone(),finalize(),getClass(),hashCode()

面向对象(高级)

1. 对比静态变量与实例变量

  • 个数

静态变量:在内存空间中只有一份,被类的多个对象共享
实例变量:类的每一个实例(或对象)都保存着一份实例变量

  • 内存位置

静态变量:jdk6之前存放在方法区,之后存放在堆空间
实例变量:存放在堆空间的对象实体中

  • 加载时机

静态变量:随着类的加载而加载,由于类只会加载一次,所以静态变量也只有一份
实例变量:随着对象创建而加载,每个对象拥有一份实例变量

  • 调用者

静态变量:可以被类直接调用,也可以使用对象调用
实例变量:只能使用对象进行调用

  • 判断是否可以调用——>从生命周期的角度

  • 消亡时机

静态变量:随着类的卸载而消亡
实例变量:随着对象的消亡而消亡

2. 开发中,什么时候需要将属性声明为静态的?方法?

判断当前类的多个实例是否能共享此成员变量,且此成员变量的值是相同的;开发中常将一些常量声明是静态的

方法内操作的变量都是静态变量而非实例变量,则此方法将声明为静态方法;
常常将工具类声明为静态方法

3. 为什么抽象类不可以使用final关键字声明?

因为抽象类不能实例化,只能被继承,但final的类规定不能被继承

https://blog.csdn.net/weixin_50757957/article/details/127910601

4. 一个抽象类中可以定义构造器吗?

可以,因为当子类继承父类时,需要调用父类的构造器。

5.是否可以这样理解:抽象类就是比普通类多定义了抽象方法,除了不能直接进行类的实例化操作之外,没有任何不同?

抽象类里不一定有抽象方法,但抽象方法所属的类一定是抽象类。

链接:https://www.jianshu.com/p/130429e47d99

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL进阶_1.逻辑架构和SQL执行流程

文章目录 第一节、逻辑架构剖析1.1、服务器处理客户端请求1.2、Connectors1.3、第1层&#xff1a;连接层1.4、第2层&#xff1a;服务层1.5、 第3层&#xff1a;引擎层1.6、 存储层1.7、小结 第二节、SQL执行流程2.1、查询缓存2.2、解析器2.3、优化器2.4、执行器 第三节、数据库…

安装dubbo-admin报错node版本和test错误

✅作者简介&#xff1a;CSDN内容合伙人、信息安全专业在校大学生&#x1f3c6; &#x1f525;系列专栏 &#xff1a;dubbo-admin安装 &#x1f4c3;新人博主 &#xff1a;欢迎点赞收藏关注&#xff0c;会回访&#xff01; &#x1f4ac;舞台再大&#xff0c;你不上台&#xff0…

【Linux】进程的基本概念和进程控制

TOC 目录 一.冯诺依曼体系结构 二. 操作系统(Operator System) 概念 设计OS的目的 定位 总结 系统调用和库函数概念 进程 基本概念 描述进程-PCB task_struct-PCB的一种 task_ struct内容分类 组织进程 查看进程 通过系统调用获取进程标识符 进程状态 D--深度…

【笔记】原型和原型链(持续完善)

概念 原型&#xff1a;函数都具有 prototype 属性&#xff0c;称之为原型&#xff0c;也称之为原型对象 1.1 原型可以放一些属性和方法&#xff0c;共享给实例对象使用&#xff08;也就是原生方法&#xff09;。 1.2 原型可以做继承原型链&#xff1a;对象都有 __proto__ 属性…

Qt 4.8.6 的下载与安装

Qt 4.8.6 的下载与安装 Qt 4.8.6 的下载与安装下载并解压 MinGW 4.8.2Qt4.8.6 库的安装Qt Creator 3.3.0 的安装配置 Qt Creator测试 Qt 4.8.6 的下载与安装 学习《Qt Creator快速入门》&#xff08;第3版&#xff09;&#xff0c;书里面要用 Qt:phonon&#xff0c;这个组件要…

CentOS7 安装Jenkins 2.414.3 详细教程

目录 1、前提条件硬件软件-java11安装 2、安装jenkins3、启动jenkins配置用户和用户组配置JAVA_HOME 4、配置Jenkins一直处于启动状态5、测试Jenkins是否可以访问以及配置6、访问Jenkins系统 1、前提条件 硬件 内存 4G ; 硬盘 20G 软件-java11安装 上传文件jdk-11.0.21_lin…

Vue+OpenLayers 创建地图并显示鼠标所在经纬度

1、效果 2、创建地图 本文用的是高德地图 页面 <div class"map" id"map"></div><div id"mouse-position" class"position_coordinate"></div>初始化地图 var gaodeLayer new TileLayer({title: "高德地…

Perl语言用多线程爬取商品信息并做可视化处理

首先&#xff0c;我们需要使用Perl的LWP::UserAgent模块来发送HTTP请求。然后&#xff0c;我们可以使用HTML::TreeBuilder模块来解析HTML文档。在这个例子中&#xff0c;我们将使用BeautifulSoup模块来解析HTML文档。 #!/usr/bin/perl use strict; use warnings; use LWP::User…

基于Fuzzing和ChatGPT结合的AI自动化测试实践分享

一、前言 有赞目前&#xff0c;结合insight接口自动化平台、horizons用例管理平台、引流回放平台、页面比对工具、数据工厂等&#xff0c;在研发全流程中&#xff0c;已经沉淀了对应的质量保障的实践经验&#xff0c;并在逐渐的进化中。 在AI能力大幅进步的背景下&#xff0c…

Maven 从入门到精通

目录 一. 前言 二. Maven 下载与安装 2.1. 下载 2.2. 安装 三. Maven 核心概念 3.1. POM 3.2. 约定的目录结构 3.3. 坐标 3.4. 依赖管理 3.4.1. 直接依赖和间接依赖 3.4.2. 依赖的排除 3.4.3. 统一的版本管理 3.4.4. 依赖范围 3.5. 仓库 3.6. 生命周期/插件/目标…

vue3怎么获取el-form的元素节点

在元素中使用ref设置名称 在ts中通过从element-plus引入formInstance,设置formRef同名名称字段来获取el-form节点

HackTheBox-Starting Point--Tier 1---Funnel

文章目录 一 题目二 实验过程三 利用SSH隧道3.1 本地端口转发 一 题目 Tags FTP、PostgreSQL、Reconnaissance、Tunneling、Password Spraying、Port Forwarding、Anonymous/Guest Access、Clear Text Credentials译文&#xff1a;FTP、PostgreSQL、侦察、隧道技术、密码喷洒…

AD9371 官方例程 NO-OS 主函数 headless 梳理(一)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

RPA处理重复工作,助力高效资金管理

在瞬息万变的市场竞争中&#xff0c;众多企业开展多元化经营以获取最大的经济效益。然而&#xff0c;企业的多元化经营程度越高&#xff0c;协调活动可能造成的决策延误也越多&#xff0c;其资金管理往往将面临更大的考验。随着新技术的发展&#xff0c;更多具备多元产业的企业…

【蓝桥杯选拔赛真题15】C++三个数排序 第十二届青少年组蓝桥杯C++选拔赛真题解析

目录 C/C++排序 一、题目要求 1、编程实现 2、输入输出 二、算法分析

【Redis】Redis与SSM整合Redis注解式缓存Redis解决缓存问题

一&#xff0c;Redis与ssm整合 1.1 pom.xml配置 在pom.xml中配置相关的redis文件 redis文件&#xff1a; <redis.version>2.9.0</redis.version> <redis.spring.version>1.7.1.RELEASE</redis.spring.version><dependency><groupId>red…

DAIR-V2X-V 3D检测数据集 转为Kitti格式 | 可视化

本文分享在DAIR-V2X-V数据集中&#xff0c;将标签转为Kitti格式&#xff0c;并可视化3D检测效果。 一、将标签转为Kitti格式 DAIR-V2X包括不同类型的数据集&#xff1a; DAIR-V2X-IDAIR-V2X-VDAIR-V2X-CV2X-Seq-SPDV2X-Seq-TFDDAIR-V2X-C-Example: google_drive_linkV2X-Seq-…

10-27 maven概念

maven maven的概念模型: 项目对象模型(POM: Project object Model)&#xff0c;一组标准集合: pom.xml 依赖管理系统(Dependency Management System) 项目生命周期(Project Lifecycle) 项目对象模型&#xff1a; 把项目当成一个对象&#xff0c;描述这个项目&#xff0c;使用p…

sql注入学习笔记

sql注入原理 掌握sql注入漏洞的原理掌握sql注入漏洞的分类 万能用户名 777 or 11 #原句 select userid from cms_users where username ".$username." and password".md5 ( $password ) ."输入过后为 select userid from cms_users where username …