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

Java SE 面试题

文章目录

  • Java SE 面试题
    • 基本知识
      • 请简要介绍 Java SE。
      • 请解释 Java 的垃圾回收机制。
      • 请解释 Java 中的访问修饰符。
    • 面向对象
      • 请解释封装、继承和多态。
      • 请解释接口和抽象类的区别。
    • 集合框架
      • 请解释 ArrayList 和 LinkedList 的区别。
      • 请解释 Set 和 Map 接口。
    • 异常处理
      • 请解释 Java 中的异常处理。
      • 请解释受检异常和非受检异常的区别。
    • 并发编程
      • 请解释 Java 中的线程和进程。
      • 请解释 synchronized 关键字的作用。
      • Java 基本类型和包装类
      • 字符串
      • 泛型
      • 输入输出 (I/O)
      • 反射
      • 注解
      • Java 内存模型
      • 序列化
      • Java 8 新特性
      • Java 9 新特性
      • Java 11 新特性



Java SE 面试题

基本知识

  1. 请简要介绍 Java SE。

    Java SE (Java Standard Edition) 是 Java 平台的基础版本,提供 Java 开发所需的所有核心功能。它包括 Java 语言规范、Java 虚拟机规范和 Java 类库。

  2. 请解释 Java 的垃圾回收机制。

    Java 的垃圾回收机制是自动内存管理的一部分,用于在堆内存中自动回收不再使用的对象。垃圾收集器会找出不再使用的对象,释放它们占用的内存,以便其他新对象使用。

  3. 请解释 Java 中的访问修饰符。

    Java 有四种访问修饰符:public、private、protected 和默认(无修饰符)。这些修饰符用于限制类、方法和变量的访问权限。

面向对象

  1. 请解释封装、继承和多态。

    • 封装:封装是将数据(变量)和操作数据的方法(函数)包装在一个类中的过程。它提供了一种隐藏实现细节并保护数据的方法。
    • 继承:继承是子类从父类继承属性和方法的过程。子类可以重写或扩展父类的方法。
    • 多态:多态是指同一操作作用于不同类型的对象时,可以有不同的行为。Java 中的多态是通过方法重写和接口实现来实现的。
  2. 请解释接口和抽象类的区别。

    • 接口:接口是一个完全抽象的类,用于定义一组方法签名。实现接口的类需要实现接口中的所有方法。接口支持多实现。
    • 抽象类:抽象类是不能实例化的类,可以包含抽象方法和具体方法。抽象方法需要子类提供实现。抽象类支持单继承。

集合框架

  1. 请解释 ArrayList 和 LinkedList 的区别。

    • ArrayList:ArrayList 是基于动态数组实现的列表,支持随机访问。它的插入和删除操作性能较低,因为需要移动元素以保持连续性。
    • LinkedList:LinkedList 是基于双向链表实现的列表,支持顺序访问。它的插入和删除操作性能较高,但随机访问性能较低。
  2. 请解释 Set 和 Map 接口。

    • Set:Set 是一个不包含重复元素的集合。它可以用于存储独特的元素,并对它们进行操作,如添加、删除、查找等。
    • Map:Map 是一个键值对的集合。它允许使用唯一的键存储和检索值。Map 的实现可以是有序的,如 TreeMap,或无序的,如 HashMap。

异常处理

  1. 请解释 Java 中的异常处理。

    异常处理是 Java 中一种处理运行时错误和异常情况的机制。Java 使用 try、catch 和 finally 代码块来处理异常。当程序中发生异常时,程序会跳到相应的 catch 代码块来处理异常。finally 代码块在异常处理完成后执行,无论是否发生异常。

  2. 请解释受检异常和非受检异常的区别。

    • 受检异常:受检异常是编译器在编译时要求处理(捕获或声明抛出)的异常。例如,IOException 和 SQLException。
    • 非受检异常:非受检异常是运行时异常,编译器不强制要求处理。例如,NullPointerException 和 ArithmeticException。

并发编程

  1. 请解释 Java 中的线程和进程。

  • 进程:进程是操作系统分配资源和调度执行的独立单位。每个进程都有自己的内存空间和系统资源。
  • 线程:线程是进程中的执行单元。一个进程可以包含多个线程,它们共享进程的资源并行执行。
  1. 请解释 synchronized 关键字的作用。

synchronized 关键字用于实现线程同步。它可以修饰方法或代码块,确保同

Java 基本类型和包装类

  1. 解释 Java 中的基本数据类型及其大小和默认值。

Java 有 8 种基本数据类型:byte(8 位,默认值 0)、short(16 位,默认值 0)、int(32 位,默认值 0)、long(64 位,默认值 0L)、float(32 位,默认值 0.0f)、double(64 位,默认值 0.0d)、char(16 位,默认值 ‘\u0000’)和 boolean(1 位,默认值 false)。

  1. 说明自动装箱和自动拆箱。

自动装箱是将基本数据类型自动转换为对应的包装类对象的过程。例如,将 int 转换为 Integer。自动拆箱是将包装类对象自动转换为对应的基本数据类型的过程。例如,将 Integer 转换为 int。自动装箱和拆箱是在Java 5引入的功能,用以简化基本数据类型与包装类之间的转换操作。

  1. 解释为什么推荐使用包装类而非基本数据类型。

推荐使用包装类的原因有以下几点:

  • 包装类提供了更丰富的方法和属性,方便对数据进行操作。
  • 包装类支持 null 值,有助于表示未初始化或缺失的值。
  • 使用包装类可以将数据与对象的特性结合,使得程序更具面向对象特性。

字符串

  1. 请解释 String、StringBuilder 和 StringBuffer 的区别。
  • String:String 类的对象是不可变的,一旦创建就不能改变。对字符串进行操作时,会产生新的字符串对象。频繁操作字符串可能导致性能下降和内存浪费。
  • StringBuilder:StringBuilder 是一个可变字符串类,对字符串进行操作时,不会创建新的对象。它是线程不安全的,但在单线程环境中性能较高。
  • StringBuffer:StringBuffer 与 StringBuilder 类似,也是一个可变字符串类。不同之处在于,StringBuffer 是线程安全的,可以在多线程环境中使用,但性能略低于 StringBuilder。

泛型

  1. 解释什么是泛型,以及它的作用。

泛型是Java中一种参数化类型的机制,允许在编译时定义和检查集合或其他对象的类型。泛型的作用主要有两点:

  • 类型安全:泛型提供了编译时类型检查,避免了在运行时出现类型转换异常。
  • 代码重用:泛型使得类和方法能够处理多种类型的数据,减少了代码重复。

输入输出 (I/O)

  1. 请简要描述 Java 中的字节流和字符流。
  • 字节流:字节流用于处理原始二进制数据,如图像、音频等。字节流的两个基类是 InputStreamOutputStream
  • 字符流:字符流用于处理文本数据。字符流的两个基类是 ReaderWriter。字符流在处理字符数据时,会自动处理字符编码转换。

反射

  1. 请解释 Java 反射的概念及其用途。

Java 反射是一种动态获取和操作类、对象、方法和属性的信息的机制。通过反射,可以在运行时获取类的信息、创建对象、调用方法和访问属性。反射的用途包括:

  • 动态加载和使用类,如插件系统。
  • 实现通用的对象操作,如序列化和克隆。
  • 在运行时检查和修改类的结构和行为,如框架和库的实现。

注解

  1. 请解释 Java 注解的概念及其用途。

Java 注解是一种为类、方法、属性或参数提供元数据的机制。注解在编译时或运行时可以被读取,用于改变代码的行为或生成额外的代码。注解的用途包括:

  • 配置框架和库的行为,如 Spring 和 Hibernate。
  • 自动生成代码,如 Lombok 和 Java Persistence API。
  • 实现编译时检查和验证,如 @Override@SuppressWarnings

Java 内存模型

  1. 请描述 Java 内存模型的基本结构。

Java 内存模型主要包括堆、栈、方法区和本地方法栈。

  • :堆是用于存储对象实例的内存区域,所有线程共享。垃圾回收器负责回收堆中不再使用的对象。
  • :栈是用于存储局部变量和方法调用的内存区域。每个线程有一个独立的栈,存储着线程执行过程中的局部变量和方法调用信息。
  • 方法区:方法区存储类的元数据、常量和静态变量。所有线程共享。
  • 本地方法栈:本地方法栈用于存储本地方法(例如JNI调用)的相关信息。

序列化

  1. 请解释 Java 序列化的概念及其用途。

Java 序列化是将对象的状态(属性)转换为字节流的过程,以便将其存储在文件、数据库或通过网络传输。反序列化是将字节流重新转换为对象的过程。序列化的用途包括:

  • 持久化:将对象状态保存到文件、数据库等存储介质中。
  • 传输:通过网络将对象从一个应用传输到另一个应用。
  • 克隆:通过序列化和反序列化实现对象的深度克隆。

Java 8 新特性

  1. 请解释 Java 8 中的 Lambda 表达式。

Lambda 表达式是 Java 8 引入的一种简洁的表示匿名函数的方法。Lambda 表达式可以用于实现函数式接口,即只包含一个抽象方法的接口。Lambda 表达式使得编写简洁的代码变得更容易,特别是在处理集合和并行编程时。

  1. 请解释 Java 8 中的 Stream API。

Java 8 的 Stream API 是一种用于处理集合的新方式。它允许以声明式和函数式的方式对集合进行操作,如过滤、映射、排序和聚合。Stream API 支持并行处理,可以有效地利用多核处理器,提高性能。

Java 9 新特性

  1. 请解释 Java 9 中的模块系统。

Java 9 引入了模块系统,称为 Jigsaw 项目。模块系统允许将代码分割成更小、更易于管理的模块。每个模块可以定义它所依赖的其他模块以及暴露给其他模块的接口。模块系统有助于提高代码的可维护性、封装性和可重用性。

Java 11 新特性

  1. 请简要介绍 Java 11 中的新特性。

Java 11 是一个长期支持版本(LTS),引入了一些新特性,如:

  • 局部变量类型推断的扩展:可以在 lambda 表达式的形式参数中使用 var
  • 新的垃圾回收器 ZGC:一个低延迟、可扩展的垃圾回收器。
  • 新的 HTTP 客户端 API:一个现代化的、支持 HTTP/2 和 WebSocket 的 HTTP 客户端 API。
  • 删除了一些过时的 API 和功能。

相关文章:

Java SE 面试题

文章目录 Java SE 面试题基本知识请简要介绍 Java SE。请解释 Java 的垃圾回收机制。请解释 Java 中的访问修饰符。 面向对象请解释封装、继承和多态。请解释接口和抽象类的区别。 集合框架请解释 ArrayList 和 LinkedList 的区别。请解释 Set 和 Map 接口。 异常处理请解释 Ja…...

Linux 之十九 编译工具链、.MAP 文件、.LST 文件

.map 文件和 .lst 文件是嵌入式开发中最有用的俩调试辅助文件。现在主要从事 RISC-V 架构,开始与 GCC 打交道,今天就重点学习一下 GCC 的 .map 文件、.lst 文件,并辅助以 ARMCC 和 IAR 作为对比。 编译工具链 .map 文件和 .lst 文件都是由编…...

小 C 的数学(math)

祝大家劳动节快乐!!小手动起来 言归正传┏ (゜ω゜)☞ 题目描述 小 C 想要成为一名 OIer,于是他提前学习数学,为 OI 做好铺垫。这一天,他的数学老师给了一道题:给定正整数 a,以及给定一个区间 …...

应用运行环境实时洞察,亚马逊云科技Cisco AppDynamics展优势

Cisco AppDynamics(APM)产品,现已正式上线亚马逊云科技Marketplace(中国区域)。可以通过亚马逊云科技Marketplace(中国区域)网站,灵活便捷地部署该解决方案,以便充分利用云原生APM(应用性能管理…...

C++程序设计——lambda表达式

一、问题引入 在C98中,如果想对一个数据集合中的元素进行排序,可以使用sort()方法,但如果待排序元素为自定义类型,就需要用户自己定义排序时的比较规则。 随着C语法的发展,人们开始觉得其编写比较复杂,每次…...

Unity 高级程序员应该具备怎样的能力?要怎样成长为 Unity 高级程序员?

如何从零基础小白成长为 Unity 高级程序员?【全篇学习内容免费!快来白嫖】 高能预警,下文包含从零基础新手到高级程序员一站式技术学习、学习方法、心态等内容,供各个阶段的同学进行参考。 从零基础到高级程序员 上干货 话不多说…...

禁止触摸屏触控板手指缩放,需要这样处理

要禁止触摸屏的手指缩放&#xff0c;可以使用如下的CSS 只要在页面上使用css样式touch-action: none&#xff0c;就能禁止web在手机或平板上的缩放了。 <html style"touch-action: none;">注意&#xff1a; 使用 touch-action: none作用于html元素上&#xff0…...

opencv cuda版本windows编译

目录 1. 编译准备2. 编译3. 遇到的问题及解决方案3.1 boostdesc_bgm.i,vgg_generated_48.i等文件的缺失3.2 fatal error: features2d/test/test_detectors_regression.impl.hpp: 没有那个文件或目录 1. 编译准备 编译工具是cmakevisual studio2022&#xff0c;首先安装这两个工…...

python哲学

进入python编辑器模式下&#xff0c;输入import this 会打印python之禅(The Zen of Python) Beautiful is better than ugly. 优美胜于丑陋。 Explicit is better than implicit. 明了胜于晦涩。 Simple is better than complex. 简单胜过复杂。 Complex is better than co…...

(2023)用AIGC写iOS项目单元总结

尝试开发的项目 项目功能 用 ChatGPT 开发了一个视频播放器。需要它编写的功能包括&#xff1a; ☆ 本地文件&#xff0c;在线 URL 播放&#xff0c;暂停 ☆ 点击空白区域弹出操作菜单&#xff0c;再点击消失 ☆ 手动横竖屏切换 ☆ 播放速度调整&#xff0c;限定 0.5, 1.0, …...

k8s扩容node节点会影响上面已存在的pod吗?

理论上不影响 扩容 Kubernetes 集群中的节点不会影响已经运行的 Pod&#xff0c;因为 Pod 是在节点上运行的&#xff0c;而不是在集群中运行的。当您添加新的节点时&#xff0c;Kubernetes 调度器会在新节点上启动新的 Pod&#xff0c;而已经运行的 Pod 会继续在它们当前的节点…...

深度学习 -- pytorch 计算图与动态图机制 autograd与逻辑回归模型

前言 pytorch中的动态图机制是pytorch这门框架的优势所在&#xff0c;阅读本篇博客可以使我们对动态图机制以及静态图机制有更直观的理解&#xff0c;同时在博客的后半部分有关于逻辑回归的知识点&#xff0c;并且使用pytorch中张量以及张量的自动求导进行构建逻辑回归模型。 …...

计算机网络学习03(OSI、TCP/IP网络分层模型详解))

1、OSI 七层模型 OSI 七层模型 是国际标准化组织提出一个网络分层模型&#xff0c;其大体结构以及每一层提供的功能如下图所示&#xff1a; 每一层都专注做一件事情&#xff0c;并且每一层都需要使用下一层提供的功能比如传输层需要使用网络层提供的路由和寻址功能&#xff0…...

ChatGPT是什么?ChatGPT里的G、P、T分别指什么

文章目录 ChatGPT是什么GTP中的 生成式 是什么意思GTP中的 预训练 是什么意思GTP中的 变换模型 是什么意思 什么是Transformer什么是注意力机制 监督学Xi、无监督学Xi、强化学Xi ChatGPT是什么 GPT: Generative Pre-trained Transformer 生成式预训练变换模型 ChatGPT是由Ope…...

Linux服务使用宝塔面板搭建网站,并发布公网访问 - 内网穿透

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 转载自远程内网穿透的文章&#xff1a;Linux使用宝塔面板搭建网站&#xff0c;并内网穿透实现公网访问 前言 宝塔面板作为简单好用的服务器运维管理面板&#…...

TDA4VH j784s4 使用

// sdk https://www.ti.com/tool/PROCESSOR-SDK-J784S4 // Jacinto Processors TDA4AP-Q1/TDA4VP-Q1/TDA4AH-Q1/TDA4VH-Q1 EVM User’s Guide https://www.ti.com/lit/ug/spruj62/spruj62.pdf?ts1682337275236&ref_urlhttps%253A%252F%252Fwww.ti.com%252Fsitesearch%252…...

CSS布局基础(字体,文本,背景)

字体 常见字体设置 body {font-family: font-family: "Microsoft YaHei", Tahoma, Arial, Hiragino Sans GB,sans-serif; }浏览器从前到后匹配&#xff0c;找到可用字体结束&#xff0c;都没匹配上&#xff0c;使用浏览器默认字体 常用字号 不同浏览器默认字号可…...

Redis入门指南:深入了解这款高性能缓存数据库

本文将带您了解Redis的基本概念、数据类型、特性以及如何在实际项目中应用Redis。通过阅读本文&#xff0c;您将更好地理解如何利用Redis优化您的应用程序性能。 1. 什么是Redis&#xff1f;2. Redis的数据类型3. Redis的特性4. 如何使用Redis4.1 安装与启动4.2 基本命令4.3 应…...

# 数据结构和算法面试题系列-随机算法总结

0 概述 随机算法涉及大量概率论知识&#xff0c;有时候难得去仔细看推导过程&#xff0c;当然能够完全了解推导的过程自然是有好处的&#xff0c;如果不了解推导过程&#xff0c;至少记住结论也是必要的。本文总结最常见的一些随机算法的题目&#xff0c;是几年前找工作的时候…...

windows中vscode配置C/C++环境

首先要把MinGW的环境安装完&#xff0c;我一般是下载带有MinGW的codeblocks&#xff0c;这样省去自己安装MinGW。因为安装MinGW还挺麻烦的。 安装完codeblocks&#xff0c;找到其安装目录&#xff0c;把bin文件配置到环境变量去&#xff1a; 将bin添加到环境变量 然后打开vsco…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...