后端常问面经之Java基础

news2024/9/19 17:13:19

基本数据类型

Java中有8种基本数据类型:

6种数字类型:

4种整数型:byte、short、int、long

2种浮点型:float、double

1种字符类型:char

1种布尔类型:boolean

数据类型的默认值以及所占空间如下:

注意:

  • Java里使用long类型的数据一定要在数值后面加上L,否则作为整数解析。

讲一下Java面向对象的特点

封装、继承、多态是Java面向对象编程的三大特点。

  • 封装(Encapsulation):封装是面向对象编程的基本特点之一,它将数据和方法封装在对象内部,隐藏对象的内部实现细节,只暴露必要的接口供外部访问。通过封装,可以实现信息的隐藏和保护,提高代码的安全性和可靠性。

  • 继承(Inheritance):继承是面向对象编程的重要特点,它允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以重用父类的代码,并可以通过扩展和重写来增加新的功能或修改现有功能。继承提高了代码的复用性和可维护性,同时也体现了类与类之间的关系。

  • 多态(Polymorphism):多态是面向对象编程的核心概念之一,多态是指同一个方法名可以在不同的类中有不同的实现,不同的子类可以重写父类的方法,通过父类引用指向子类对象时,根据实际对象的类型来确定调用哪个方法。多态性提高了代码的灵活性和扩展性,使得程序更易于理解和维护。

用过“多态”吗?举一个具体例子

一个具体的例子是,假设有一个动物类(Animal)和它的两个子类:狗类(Dog)和猫类(Cat)。它们都有一个名为“makeSound”的方法,但是每种动物发出的声音是不同的。

class Animal {
    public void makeSound() {
        System.out.println("Some sound");
    }
}
​
class Dog extends Animal {
    public void makeSound() {
        System.out.println("Woof");
    }
}
​
class Cat extends Animal {
    public void makeSound() {
        System.out.println("Meow");
    }
}
​
public class PolymorphismExample {
    public static void main(String[] args) {
        Animal dog = new Dog();
        Animal cat = new Cat();
        
        dog.makeSound(); // 输出:Woof
        cat.makeSound(); // 输出:Meow
    }
}

通过多态性,可以创建一个Animal类型的引用指向一个具体的Dog或Cat对象。当调用这个引用的“makeSound”方法时,根据实际指向的对象类型,会执行相应子类的方法,从而实现不同动物发出不同声音的效果。这样就体现了多态的特性,同一个方法调用可以产生不同的行为,提高了代码的灵活性和可扩展性。

多态和重载有什么关系?

重载是一种编译时多态,而多态是一种运行时多态。两者都是实现多态性的方式,但发生的时间点和机制不同。

  • 重载是指在同一个类中,方法名相同但参数列表不同的情况,通过参数个数、类型或顺序的不同来区分不同的方法。重载是静态绑定的概念,编译器在编译期间根据方法的参数列表来确定调用哪个方法。

  • 多态是指同一个方法名可以在不同的类中有不同的实现,不同的子类可以重写父类的方法,通过父类引用指向子类对象时,根据实际对象的类型来确定调用哪个方法。多态是动态绑定的概念,运行时根据对象的实际类型来确定调用哪个方法。

Java中的异常

当程序出现异常时,Java会抛出一个异常对象。Java中的异常可以分为三类:

  1. Checked Exception(受检异常):这种异常在编译时就可以被检测出来,必须要在代码中进行处理或者声明抛出,否则编译不通过。这类异常主要是由程序的外部环境引起的,例如文件不存在、网络连接失败等。常见的Checked Exception包括IOException、SQLException等。

  2. Unchecked Exception(非受检异常):这种异常通常是由程序内部错误引起的,例如NullPointerException、ArrayIndexOutOfBoundsException、IllegalArgumentException等。这类异常不需要在代码中声明抛出,也可以不进行处理,但是如果不进行处理,程序会崩溃。

  3. Error:这种异常通常是由JVM或者硬件引起的,例如OutOfMemoryError、StackOverflowError等。这类异常也不需要在代码中声明抛出,也可以不进行处理,但是如果不进行处理,程序也会崩溃。

在Java中,异常处理通常包括try-catch语句和throw语句。try-catch语句可以捕获异常并进行处理,而throw语句可以手动抛出异常。

String,StringBuilder, StringBuffer区别?单线程大量操作字符串用哪个?

回答:单线程大量操作字符串时应该使用StringBuilder,而在多线程环境下应该使用StringBuffer

补充:

String、StringBuilder和StringBuffer都是Java中用于操作字符串的类。

String是不可变的字符序列,每次对String进行修改时都会创建一个新的String对象,因此在大量操作字符串时,使用String会频繁地创建对象,导致性能较低。

StringBuilder和StringBuffer都是可变的字符序列,可以对其进行多次修改而不创建新的对象。两者的区别在于线程安全性,StringBuffer是线程安全的,而StringBuilder是非线程安全的。因为StringBuffer的所有共有方法都是同步的,所以在多线程环境下使用StringBuffer可以保证线程安全,但是会降低性能。而StringBuilder没有同步方法,所以在单线程环境下使用StringBuilder性能更高。

因此,在单线程环境下进行大量的字符串操作时,应该使用StringBuilder,可以获得更好的性能。在多线程环境下,使用StringBuffer可以保证线程安全,但是会牺牲一定的性能。

综上所述,单线程大量操作字符串时应该使用StringBuilder,而在多线程环境下应该使用StringBuffer。

NIO核心组件

NIO 主要包括以下三个核心组件:

  • Buffer(缓冲区):在传统的 BIO 中,数据的读写是面向流的, 分为字节流和字符流。

    在 Java 1.4 的 NIO 库中,所有数据都是用缓冲区处理的,这是新库和之前的 BIO 的一个重要区别,有点类似于 BIO 中的缓冲流。NIO 在读取数据时,它是直接读到缓冲区中的。在写入数据时,写入到缓冲区中。 使用 NIO 在读写数据时,都是通过缓冲区进行操作。

  • Channel(通道):Channel 是一个通道,它建立了与数据源(如文件、网络套接字等)之间的连接。我们可以利用它来读取和写入数据,就像打开了一条自来水管,让数据在 Channel 中自由流动。

    BIO 中的流是单向的,分为各种 InputStream(输入流)和 OutputStream(输出流),数据只是在一个方向上传输。通道与流的不同之处在于通道是双向的,它可以用于读、写或者同时用于读写。

    Channel 与前面介绍的 Buffer 打交道,读操作的时候将 Channel 中的数据填充到 Buffer 中,而写操作时将 Buffer 中的数据写入到 Channel 中。

  • Selector(选择器):是 NIO 中的一个关键组件,它允许一个线程处理多个 Channel。Selector 是基于事件驱动的 I/O 多路复用模型,主要运作原理是:通过 Selector 注册通道的事件,Selector 会不断地轮询注册在其上的 Channel。当事件发生时,比如:某个 Channel 上面有新的 TCP 连接接入、读和写事件,这个 Channel 就处于就绪状态,会被 Selector 轮询出来。Selector 会将相关的 Channel 加入到就绪集合中。通过 SelectionKey 可以获取就绪 Channel 的集合,然后对这些就绪的 Channel 进行响应的 I/O 操作。

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

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

相关文章

C++ STL - 优先级队列及其模拟实现

目录 0. 引言 1. priority_queue 介绍 1.1 构造函数 1.2 priority_queue 接口函数使用 1.3 仿函数 1.4 题目练习 2. priority_queue 模拟实现 2.1基本框架: 2.2 默认构造函数 2.3 基本函数 2.4 堆的向上以及向下调整 0. 引言 优先队列 (priority_queu…

Flask python :logging日志功能使用

logging日志的使用 一、了解flask日志1.1、Loggers记录器1.2、Handlers 处理器1.3、Formatters 格式化器 二、使用日志2.1、官网上的一个简单的示例2.2、基本配置2.3、具体使用示例2.4、运行 三、写在最后 一、了解flask日志 日志是一种非常重要的工具,可以帮助开发…

[技术杂谈]解决windows上出现文件名太长错误

最近执行python setup.py install总是失败,提示文件名太长发现网上有取消限制文件名长度,测试发现改完注册表无需重启cmd就生效了。但是有时候会失败,现在方法放这。 转到Windows“开始”,然后键入REGEDIT。选择注册表编辑器 选…

Linux内核中的进程调度-进程调度基础

前言 一、进程的概念 1.概述 2.ps和top命令 3.总结 二、进程的生命周期 1.进程状态文字描述 2.进程状态程序中的体现 3.进程状态的切换 三、task_struct数据结构简述 1.数据结构成员简述 2.需要注意的成员: 3.进程优先级 ①、优先级的代码表示 ②、Linux内核下的进…

蓝桥杯2023真题-幸运数字

目录 进制转换: 思路 代码 题目链接: 0幸运数字 - 蓝桥云课 (lanqiao.cn) 本题就考的进制转换问题,要将十进制5转换成二进制,通过%2,和/2的交替使用即可完成,所得余数就是转换成的二进制各位的值,转换…

浅谈如何自我实现一个消息队列服务器(3)—— 细节分析

文章目录 2.2 消息存储在文件时涉及到的流对象2.3 序列化、反序列化的方法2.3.1 JSON的ObjectMapper2.3.2 ObjectOutputStream 、 ObjectInputStream2.3.3 第三方库的Hessian2.3.4 protobuffer2.3.5 thrift 2.4 使用类MessageFileManager封装文件存储操作2.4.1 sendMessage()实…

ubuntu20.04云服务器安装LXDE轻量级桌面和XRDP远程连接工具

云服务器一般都是安装命令行系统,用SSH连接,但是有时我们需要桌面来做更好的管理。 首先我们明确一下需要的东西。 一个桌面系统:LXDE(最轻量级桌面),为了节省资源,我们只要功能够用就行。一个…

[套路] 浏览器引入Vue.js场景-WangEditor富文本编辑器的使用 (永久免费)

系列文章目录 [套路] el-table 多选属性实现单选效果[套路] 基于服务内存实现的中文拼音混合查询[套路] Bypass滑块验证码 目录 系列文章目录前言一、实现1.1 场景1.2 Window对象简介1.3 引入WangEditor1.4 页面配置 前言 公司使用freemarker的老旧SpringBootWeb后台项目, 前…

【蓝桥杯】填空题技巧|巧用编译器|用Python处理大数和字符|心算手数|思维题

目录 一、填空题 1.巧用编译器 2.巧用Excel 3. 用Python处理大数 4.用Python处理字符 5.心算手数 二、思维题 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站】 一、填空题 …

Python编程入门:环境搭建与基础语法

目录 1. 引言 2. Python环境搭建 3. Python基础语法 3.1. 变量与数据类型 3.2. 运算符与表达式 3.3. 控制结构:条件语句与循环 3.4. 函数定义与使用 3.5. 输入与输出 3.6. 列表操作 4. 总结 1. 引言 Python作为一种简洁易学、功能强大的编程语言&#xff…

hadoop伪分布式环境启动时web端访问不到

在搭建hadoop伪分布式环境时,开启hdfs-site.sh后,web端访问不到,但是节点已经正常开启: 在尝试关闭防火墙后也没有效果,后来在/etc/hosts文件中加入本机的ip和主机名映射后,重新初始化namenode,…

电脑桌面记事本便签软件,记事本软件哪个好用

正在电脑前忙碌工作,突然想起今晚有个重要的会议,或者是明天有一个重要的任务需要完成,但是手头的工作又无法让你离开电脑,这时候,你多么希望有一个便捷的电脑桌面记事本便签软件,可以让你快速记录下这些重…

2016年认证杯SPSSPRO杯数学建模D题(第二阶段)NBA是否有必要设立四分线全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 D题 NBA是否有必要设立四分线 原题再现: NBA 联盟从 1946 年成立到今天,一路上经历过无数次规则上的变迁。有顺应民意、皆大欢喜的,比如 1973 年在技术统计中增加了抢断和盖帽数据;有应运而生、力…

软件测试/测试开发丨Docker环境安装配置(Mac、Windows、Ubuntu)

macOS 安装 Docker brew cask install docker运行 Docker Ubuntu 安装 Docker # 更新 apt update # 安装依赖 apt install apt-transport-https ca-certificates curl software-properties-common -y # 添加 key curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/…

python 读取jpg图片

pillow读取图片 from PIL import Image import numpy as np img_path ./Training/meningioma/M546.jpg # 读取图片 image Image.open(img_path) width, height image.size print("图片的宽度为{},高度为{}".format(width,height)) print("图片的mode为{}&qu…

如何做到无感刷新Token?

为什么需要无感刷新Token? 自动刷新token 前端token续约 疑问及思考 图片 为什么需要无感刷新Token? 「最近浏览到一个文章里面的提问,是这样的:」 当我在系统页面上做业务操作的时候会出现突然闪退的情况,然后跳转…

vulhub打靶记录——cybox

文章目录 主机发现端口扫描web渗透nikto扫描目录扫描 提权 主机发现 使用nmap扫描局域网内存活的主机,命令如下: nmap -sP 192.168.56.0/24192.168.56.1:主机IP;192.168.56.100:DHCP服务器IP;192.168.56.…

通科技新品亮相:4K60编解一体,USB透传无忧

在信息化快速发展的今天,音视频技术的需求与应用场景日益丰富,特别是在对视频画质和实时性要求极高的领域中,如军警、公安、金融等,对音视频处理设备的性能要求更为严格。为满足这些高端应用场景的需求,视通科技紧跟时…

2024年【道路运输企业安全生产管理人员】考试及道路运输企业安全生产管理人员考试技巧

题库来源:安全生产模拟考试一点通公众号小程序 道路运输企业安全生产管理人员考试是安全生产模拟考试一点通总题库中生成的一套道路运输企业安全生产管理人员考试技巧,安全生产模拟考试一点通上道路运输企业安全生产管理人员作业手机同步练习。2024年【…

【PLC】PROFIBUS(一):介绍

1、简介 PROFIBUS (Process Fieldbus),德国SIEMENS和其它机构联合开发; 1999年,PROFIBUS成为国际工业现场总线协议标准IEC61158的组成部分; PROFIBUS 由三部分组成:PROFIBUS-DP、PROFIBUS-PA 和 PROFIBUS-FMS&#xf…