JAVA后端面试题

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被多次实例化。

复制代码
public

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 就能实现,这样也使得程序员不会更多的考虑如何对这个过程进行抽象和设计,而是单纯从效率出发,尽快的实现功能。但却使得后续的维护和扩展成本变得更高。

由于篇幅限制,笔记无法全部为大家展示出来,就以截图主要内容的形式让大家参考啦,需要完整版的小伙伴可以点击https://github.com/encode-studio-fe-coder/natural_traffic/wiki/scan_material13获取文章中的文档和资料!

相关推荐
咩咩啃树皮7 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
灯澜忆梦7 小时前
GO_并发编程---定时器
开发语言·后端·golang
鱟鲥鳚7 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
-银雾鸢尾-7 小时前
C#中的StringBuilder相关方法
开发语言·c#
-银雾鸢尾-8 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
大模型码小白9 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司9 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地10 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun31415910 小时前
TCP超时重传机制是为了解决什么问题?
java
段一凡-华北理工大学11 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化