后端面试问题(学习版)

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

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

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

相关文章

链表经典面试题之一讲

什么是链表&#xff1f; 链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。 今天给大家分享一道经典的单链表面试题 力扣题目——反转链表https://leetcode.cn/problems/reverse-linked-list/ 只给了头…

第三阶段第一章——PySpark实战

学习了这么多python的知识&#xff0c;是时候来搞点真玩意儿了~~ 春风得意马蹄疾&#xff0c;一日看尽长安花 o(*&#xffe3;︶&#xffe3;*)o 1.前言介绍 &#xff08;1&#xff09;什么是spark Apache Spark是一个开源的分布式计算框架&#xff0c;用于处理大规模数据集的…

从哪些方面做好电商系统的网站建设?

电子商务的迅猛发展&#xff0c;建设一款成功的电商系统网站成为企业取得竞争优势的重要一环。下面将从用户体验、网站设计、安全性和性能优化等方面&#xff0c;介绍如何打造一款优秀的电商系统网站。 一、用户体验 一款成功的电商系统网站必须注重用户体验&#xff0c;确保用…

康耐视深度学习ViDi-ViDi四大工具之一蓝色定位工具/Locate

目录 工具介绍使用步骤说明调整工具ROI添加特征标签生成定位姿态训练并审核模型编辑器参数说明蓝色定位工具/Locate工具 工具介绍 蓝色定位工具用于识别和定位图像中的特定特征或特征组。该工具的输出可用于为其他ViDi 工具提供位置数据。使用该工具时,您提供图像训练集,然后…

MySQL中的datetime和timestamp有什么区别

相同点: 存储格式相同 datetime和timestamp两者的时间格式都是YYYY-MM-DD HH:MM:SS 不同点: 存储范围不同. datetime的范围是1000-01-01到9999-12-31. 而timestamp是从1970-01-01到2038-01-19, 即后者的时间范围很小. 与时区关系. datetime是存储服务器当前的时区. 而timesta…

电脑怎么做图片二维码?在线制作二维码的方法

图片制作二维码是现在经常被使用的一个功能&#xff0c;比如产品照片、自拍、海报等等不同格式或者类型的文件都可以生成二维码。那么想要快速完成二维码制作&#xff0c;使用图片二维码生成器就可以快速完成制作&#xff0c;本文将给大家分享一下在电脑上制作图片二维码的操作…

Presentation Prompter 5.4.2(mac屏幕提词器)

Presentation Prompter是一款演讲辅助屏幕提词器软件&#xff0c;旨在帮助演讲者在公共演讲、主持活动或录制视频时更加流畅地进行演讲。以下是Presentation Prompter的一些特色功能&#xff1a; 提供滚动或分页显示&#xff1a;可以将演讲稿以滚动或分页的形式显示在屏幕上&a…

管理视频推广工作:新媒体团队的成功策略

目前的新媒体团队&#xff0c;在视频管理时呈现出多、杂、散的特点&#xff0c;如何有效管理视频素材是当下许多新媒体团队的管理痛点&#xff0c;也是管理要点。高效的视频推广管理是新媒体团队提升产出效率的关键。 那么新媒体行业该如何管理视频推广工作&#xff1f; 数据…

【修车案例】一波形一案例(10)

故障车型: 2005 teana 2.0日产 维修厂: 建兴汽车保养厂示波器诊断: 通道A – ABS霍尔传感器信号测量故障分析: 诊断计算机报错左后轮胎轮速异常, 速度与其他车轮差较大。 通过示波器量测ABS信号, 2线式霍尔传感器, 信道A正极接信号线, 负极接地线, 干扰较严重就不建议从蓄电池…

windows环境下PHP7.4多线程设置

windows环境下的PHP设置多线程时有一定的难度&#xff0c;难点主要是PHP版本的选择&#xff0c;多线程扩展的选择&#xff0c;以及相关的设置等。 环境 windows 10php-7.4.33-Win32-vc15-x64php_parallel-1.1.4-7.4-ts-vc15-x64phpstudy 8.1.1.2 为了快速的部署PHP环境&…

Wireshark学习 与 TCP/IP协议分析

Wireshark简介和工具应用 如何开始抓包&#xff1f; 打开wireshark&#xff0c;显示如下网络连接。选择你正在使用的&#xff0c;&#xff08;比如我正在使用无线网上网&#xff09;&#xff0c;双击 可以先看下自己的ip地址和网关ip地址&#xff08;看抓包数据时候会用到&…

Mysql--高级(自定义函数、存储过程、视图、事务、索引)

自定义函数 语法 delimiter $$ create function 函数名称(参数列表) returns 返回类型 begin sql语句 end $$ delimiter ; 说明: delimiter用于设置分割符&#xff0c;默认为分号,主要用于命令行&#xff0c;在“sql语句”部分编写的语句需要以分号结尾&#xff0c;此时回车会…

Qt插件开发_入门教程

文章目录 前言插件的好处具体流程1. 第一,我们先创建一个主框架应用(**第一个工程**)2. GUI 设计 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f215270ccfac4e038e7261c4b4891ec1.png)3. 创建动态库项目(**第2个工程**)4. 给插件项目添加qt界面类5.在插件工程添加一个头…

Unix环境高级编程-学习-02-进程环境之进程终止、命令行参数、环境表、C程序的存储空间布局

目录 一、环境信息 二、声明 三、进程终止 1、情况分类 2、退出函数 3、退出实验 &#xff08;1&#xff09;main声明int和调用return值 &#xff08;2&#xff09;main声明int和不调用return &#xff08;3&#xff09;main声明不int和不调用return 4、atexit 5、at…

SpringBoot加载测试类属性和配置说明

一、项目准备 1.创建项目 2.配置yml文件 test:name: FOREVERlove: sing二、测试类属性 1.Value 说明&#xff1a;读取yml中的数据。 package com.forever;import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Value; import org.spr…

Linux中固定ip端口和修改ip地址

一&#xff0c;更改虚拟网络编辑器 1&#xff0c;首先启动VMware&#xff0c;选择自己要更改ip或固定ip的虚拟机&#xff0c;并找到虚拟网络配编辑器&#xff0c;点击进入 2&#xff0c;进入之后需要点击右下角获取管理员权限后才能修改&#xff0c;有管理员权限之后图片如下 …

TSINGSEE青犀车辆违停AI算法在园区道路管控场景中的应用方案

一、背景与需求 园区作为企业办公、生产制造的重要场所&#xff0c;主要道路车辆违停等违规行为会对园区的安全造成隐患&#xff0c;并且在上下班高峰期内&#xff0c;由于发现不及时&#xff0c;车辆违停行为会造成出入口拥堵现象&#xff0c;这也成为园区管理的棘手问题。 …

C++入门(二)

前言 我们上一期介绍了什么是C&#xff0c;命名空间、输入输出、以及缺省参数。本期我们来继续介绍C的入门知识&#xff01; 本期内容介绍 函数重载 引用 内联函数 auto关键字 范围for 指针空值nullptr 目录 前言 本期内容介绍 一、函数重载 什么是函数重载&#xff1f; …

Apple :苹果将在明年年底推出自己的 AI,预计将随 iOS 18 一起推出

本心、输入输出、结果 文章目录 Apple &#xff1a;苹果将在明年年底推出自己的 AI&#xff0c;预计将随 iOS 18 一起推出前言三星声称库克相关图片弘扬爱国精神 Apple &#xff1a;苹果将在明年年底推出自己的 AI&#xff0c;预计将随 iOS 18 一起推出 编辑&#xff1a;简简单…

Java关于由子类构造器生成的父类对象的反射问题

Java关于由子类构造器生成的父类对象的反射问题 问题概括一、案例准备二、问题描述 问题概括 提示&#xff1a;这里我就不绕圈子直接描述&#xff1a; Java中由子类构造器生成的父类的getclass.getName不是父类的类名而是子类的类名&#xff0c;因此不可以用子类构造器生成的…