JAVA后端面试题

53 阅读5分钟

2025.9.1-2025.9.5面试总结

Java后端:

1.JAVA的数据类型有哪几种?

JAVA有8种数据类型,其中6种数值型,1种字符类型,1种布尔类型。

6种数值型中4个整数型,2个浮点型.

4种整数型:byte(8位) short(16位) int(32位) long(64位)

2种浮点型:float(单精度,16位) double(双精度,32位)

字符型:char

布尔型:boolean(可以取true,false)

2.JAVA中数组和链表的区别?

内存方面:数组连续,链表不连续

数组方便查询,但是增删麻烦

链表查询困难,但是增删简单

3.是否了解JVM的特点?

参考文献:浅谈对JVM的理解

JVM主要分为三部分:

  • 类装载器(ClassLoader)子系统
  • 运行时数据区
  • 执行引擎

JVM垃圾回收机制

通过查询不同文章的过程中,我了解到Java虚拟机的由来,java是从c++进化过来的,在Java上的面向对象特性中,有很多c++的痕迹,而当时c++最常出现的问题就是内存溢出的问题,并且c++编译后有个过程叫连接,经常出现无法连接的问题,为了解决这个问题,java设计了一个配套的虚拟机,让虚拟机在所有计算机上跑,这样避免了编译好的程序直面不同硬件从而可能引发的问题。JVM相当于帮你屏蔽掉了JAVA针对硬件环境中的各种痛点与不适。

4.介绍单例模式,写一个简单的单例模式

单例模式是一种创建型设计模式,他提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,这个类负责自己给自己创建对象,同时确保只有一个对象被创建。并且这个类提供了唯一可以访问这个对象的方法,可以直接访问,不需要实例化这个类的对象。 简单来说:

  • 单例类只能有一个实例
  • 单例类必须自己创建自己的唯一实例
  • 单例类必须给所有对象提供这一实例

主要解决一个类被全局频繁的创建和销毁

应用实例:一些设备管理器常常设计为单例模式,比如一台电脑有两个打印机,在输出的时候就要处理不能两台打印机打印同一个文件。

优点:1.在内存里只有一个实例,减少了内存开销,尤其是频繁的创建和销毁实例(比如首页页面缓存)2.避免对资源的多重占用(比如写文件操作)

缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么实例化

注意事项:getInstance()方法中需要使用同步锁synchronized(Singleton.class)防止多线程同时进入instance被多次实例化。

    private static Printer printer =null;//创建一个私有的全局变量
    /*
     * 如果有多线程并发访问时,上锁,让其排队等候,一次只能一人用。
     */
    public static synchronized Printer getPrinter(){
        if(printer==null){//如果为空,创建本实例
            printer = new Printer();
        }
        return printer;
    }
    /*
     * 构造私有化,保证在系统的使用中,只有一个实例
     */
    private Printer(){
        
    }
}

参考文献:什么是单例模式?

5.你觉得c语言和Java语言的区别是什么?

这个问题,我只知道c语言是面向过程的,Java语言是面向对象编程的。但经过事后的查询,我发现他们还有很多区别

  • 内存方面:java有垃圾回收机制,但c语言需要手动进行内存管理(如malloc申请内存,结束后free释放内存)
  • 运行方式;java编译成字节码,在JVM上运行,但是c语言是编译成机器码直接在硬件上运行
  • 使用:Java有很多库可以调用,但c语言很多底层机制需要自己手动写。

附带:python语言的特点

C 语言是过程式编程语言,Java 是较纯粹的面向对象编程语言。但编程语言和编程范式的关系并不一一对应,Python,Groovy 都支持面向对象和一定程度上的函数式编程。

前面说到,Java 在设计之初,其语法很大程度上收到 C/C++ 的影响。但与 C++ 不同的是,Java 中除了 8 种基本类型之外,全部是基于对象的。Java 代码都是写在类里面的。因此说 Java 是比较纯粹的面向对象编程语言。然而 Java 8 开始引入了 Stream,提供了函数式编程的能力。

而对于 Python,Python 既支持过程式编程,也支持面向对象。因此相对而言 Python 的编程语法较为自由。

由于 Java 与 Python 的语法区别,两者在真正完成编程工作过程中的感觉也是不一样。

有一种说法是,写 Java 是自顶向下的,而写 Python 是自底向上的。

这是可能是因为 Java 的面向对象特性,使得在编程过程中会不自觉的先定义父类,然后继承父类,根据多态来定义子类应有的属性和方法。或者是先定义接口,再根据接口去实现对应的函数。这个过程会使得程序员在编程过程中不自觉的自顶向下的进行思考,会在拿到需求后先进行抽象和设计,再逐步实现。

而 Python 则有所不同。由于 Python 是一门多范式的编程语言,对过程式编程的支持使得用 Python 实现一个功能变得很方便。

同时 Python 本身内置了大量方便简洁的 API,如序列化用的 json,文件目录处理 os 等,这些 API 让程序员面对一些用 Java 来做可能需要创建好几个类才能实现的功能简单调用一下 API 就能实现,这样也使得程序员不会更多的考虑如何对这个过程进行抽象和设计,而是单纯从效率出发,尽快的实现功能。但却使得后续的维护和扩展成本变得更高。

文字来源:深度对比python和Java区别

每一次面试都是学习补漏的机会,加油!