当前位置: 首页 > article >正文

面试问题(一)

所有东西都不是一蹴而就的,我们往往要不断向别人学习,才能更好走出自己的道路。

我大概想要整理一个有关面试遇到的问题的系列,这些问题往往是真实提问过的,所以后续问题可能出现重复的情况,我也不做删除,毕竟出现越多,越说明面试官重视。

一、Java的特点

在听到这个问题的时候,我第一时间想到的就是面向对象,但是对其他的印象就不深了,现在系统整理一下。

平台无关性:Java的“编写一次,运行无处不在”。Java编译器将源代码编译成字节码(bytecode),该字节码可以在任何安装了Java虚拟机(JVM)的系统上运行。

面向对象:Java是一门严格的面向对象编程语言,几乎一切都是对象。面向对象编程(OOP)特性使得代码更易于维护和重用,包括类(class)、对象(object)、继承(inheritance)、多态(polymorphism)、抽象(abstraction)、封装(encapsulation)。

内存管理:Java有自己的垃圾回收机制,自动管理内存和回收不再使用的对象。这样,开发者不需要手动管理内存,从而减少内存泄漏和其他内存相关的问题。

1.封装:

就是把事物封装成类,将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

作用:尽可能地隐藏对象的内部实现细节、控制用户对类的修改和访问权限(体现:private属性) 提高代码的可维护性

2.继承:

继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力,也就是说子类继承父类

注意:Java只支持单继承 ,一个子类只能继承一个父类,不能继承多个父类 但是可以多重继承

3.多态:

1.父类的引用执行子类的对象

2.编译看左运行看右。

3.一定要有继承和重写

既然他提问你java的特点了,那么你就要多和他掰扯掰扯这些东西。

二、重写重载

这应该是面试官提问了java的特点,说到了继承的内容,所以第二次提问的时候,说了这个问题,不过重写、重载是相当简单的问题了,大家应该都没问题。

重写(Override)

  • 发生在子类中,子类对父类中已存在的方法进行重新定义。
  • 目的是修改或扩展父类方法的行为。
  • 重写的方法必须与父类中被重写的方法有相同的方法签名(方法名、参数类型、参数数量等),并且方法返回类型通常需要一致(在Java中,返回类型可以是协变类型)。
  • 重写通常用于实现多态。

重载(Overload)

  • 发生在同一个类中,方法名相同,但参数列表不同(参数个数或类型不同)。
  • 重载的目的是提高方法的灵活性,让一个方法处理不同类型的输入。
  • 重载与返回类型无关,重载仅通过参数的数量、类型或顺序来区分。

 重写是子类对父类方法的重新实现,重写是针对方法行为的修改。

重载是同一个类中方法名相同,但参数不同,用于提高方法的灵活性。

三、jvm是什么

JVM是java虚拟机,主要工作是解释自己的指令集(即字节码)并映射到本地的CPU指令集和OS的系统调用。

JVM屏蔽了与操作系统平台相关的信息,使得java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可在多种平台上不加修改的运行,这也是Java能够“一次编译,到处运行”的原因。

四、内存溢出和内存泄漏的理解

内存泄漏:内存泄漏是程序在运行过程中不再使用的对象仍然被引用,而无法被垃圾收集器回收,从而导致可用内存逐渐减少。虽然在Java中,垃圾回收机制会自动回收不再使用的对象,但如果有对象仍被不再使用的引用持有,垃圾收集器无法回收这些内存,最终可能导致程序的内存使用不断增加。

内存泄漏的常见原因:

静态集合:使用静态数据结构(如HashMap或ArrayList)存储对象,且未清理。

事件监听:未取消对事件源的监听,导致对象持续被引用。

线程:未停止的线程可能持有对象引用,无法被回收。

内存溢出:内存溢出是指Java虚拟机(JVM)在申请内存时,无法找到足够的内存,最终引发OutOfMemoryError。这通常发生在堆内存不足以存放新创建的对象时。

内存溢出

大量对象创建:程序中不断创建大量对象,超出JVM堆的限制。

持久引用:大型数据结构(如缓存、集合等)长时间持有对象引用,导致内存累积。

递归调用:深度递归导致栈溢出


http://www.kler.cn/a/573701.html

相关文章:

  • Python数据可视化——Matplotlib的基本绘图:图形、轴、标签
  • GPU 英伟达GPU架构回顾
  • 【Git】Git 初识
  • 利用PyQt简单的实现一个机器人的关节JOG界面
  • 心率提取,FFT
  • (一)Java虚拟机——JVM的组成
  • 从0开始的操作系统手搓教程21:进程子系统的一个核心功能——简单的进程切换
  • Pytorch中的ebmedding到底怎么理解?
  • el-tree右键节点动态位置展示菜单;el-tree的节点图片动态根据节点属性color改变背景色;加遮罩层(opacity)
  • 蓝桥备赛(九)- 结构体和类
  • linux检查内存
  • springboot3.x下集成hsqldb数据库
  • wxWidgets GUI 跨平台 入门学习笔记
  • 问题描述:如何将ts文件转换mp4文件
  • 人工智能】数据挖掘与应用题库(401-500)
  • todo: 使用融云imserve做登录(android)
  • xshell中bashdb 调试器的详细使用方法
  • 【全栈开发】---- 一文掌握 Websocket 原理,并用 Django 框架实现
  • 飞机大战lua迷你世界脚本
  • 软件工程与实践(第4版 新形态) 练习与实践1