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

Java 语言特性(面试系列1)

一、面向对象编程

1. 封装(Encapsulation)
  • 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。
  • 示例
    public class Person {private String name; // 私有属性,外部无法直接访问public String getName() { return name; } // 公开访问方法public void setName(String name) { this.name = name; }
    }
  • 优点:提高安全性,降低耦合度,便于维护。
2. 继承(Inheritance)
  • 定义:子类继承父类的属性和方法,通过extends关键字实现,支持单继承。
  • 特性
    • 子类可重写(Override)父类方法。
    • 构造器不能被继承,但可通过super()调用父类构造器。
  • 示例
    public class Student extends Person {private int studentId;// 继承了Person的name和getName()/setName()
    }

3. 多态(Polymorphism)
  • 定义:同一方法调用可表现出不同行为,通过继承、接口实现和方法重写实现。
  • 实现方式
    • 编译时多态:方法重载(Overload,参数列表不同)。
    • 运行时多态:父类引用指向子类对象,动态调用重写方法。
  • 示例
    Person p = new Student(); // 父类引用指向子类对象
    p.getName(); // 实际调用Student类重写的方法
4. 抽象类 vs 接口
特性抽象类(abstract class)接口(interface)
实例化不能实例化不能实例化
方法实现可包含抽象方法和具体方法全部是抽象方法(Java 8 + 支持默认方法)
继承 / 实现单继承可实现多个接口
访问修饰符各种修饰符默认 public
字段各种类型字段默认 public static final 常量
设计目的代码复用,抽取共性定义行为规范,实现多继承能力

二、核心类库

1. String 类
  • 不可变性String对象一旦创建,其值不可变(由final char[]实现)
    String s = "abc"; // 实际创建新对象
    s = s + "d"; // 生成新String对象"abcd"

    字符串常量池:JVM 为节省内存,相同字面量的字符串共享同一个实例。

    String s1 = "abc";
    String s2 = "abc";
    System.out.println(s1 == s2); // true(指向常量池同一对象)
  • StringBuilder vs StringBuffer
    • StringBuilder:非线程安全,性能高(推荐日常使用)。
    • StringBuffer:线程安全(方法加synchronized)。

2. Integer 类
  • 自动装箱 / 拆箱
    Integer i = 10; // 自动装箱:Integer.valueOf(10)
    int j = i; // 自动拆箱:i.intValue()

    缓存机制Integer缓存-128~127之间的对象,超出范围时创建新对象。

    Integer a = 100, b = 100;
    System.out.println(a == b); // true(缓存对象)Integer x = 200, y = 200;
    System.out.println(x == y); // false(不同对象)
3. 集合框架
  • List:有序可重复,常用实现类:
    • ArrayList:动态数组,查询快,增删慢。
    • LinkedList:双向链表,增删快,查询慢。
  • Set:无序不可重复,常用实现类:
    • HashSet:基于 HashMap,元素需重写hashCode()equals()
    • TreeSet:基于红黑树,元素需实现Comparable接口或提供Comparator
  • Map:键值对存储,常用实现类:
    • HashMap:线程不安全,无序,JDK8 后采用数组 + 链表 + 红黑树(链表长度≥8 时转换为树)。
    • ConcurrentHashMap:线程安全,分段锁实现(JDK8 采用 CAS+synchronized)。
    • TreeMap:基于红黑树,按键排序。

4. 并发包(JUC)
  • 线程池ExecutorService接口,常用实现:
    • ThreadPoolExecutor:手动配置核心参数(核心线程数、最大线程数等)。
    • Executors工具类:提供快速创建线程池的静态方法(如newFixedThreadPool)。
  • 锁机制
    • ReentrantLock:可重入锁,比synchronized更灵活(支持公平锁、可中断锁)。
    • ReadWriteLock:读写分离锁,读锁共享,写锁互斥。
  • 原子类AtomicIntegerAtomicLong等,基于 CAS(Compare-and-Swap)实现无锁原子操作。
  • 并发容器
    • ConcurrentHashMap:线程安全的 HashMap。
    • CopyOnWriteArrayList:写时复制的 List,读操作无锁,写操作复制数组。

三、高级特性

1. 反射(Reflection)
  • 定义:在运行时动态获取类的信息(字段、方法、构造器)并操作对象。
  • 核心类ClassFieldMethodConstructor
  • 应用场景:框架开发(如 Spring 的依赖注入)、JSON 反序列化。
  • 示例
    Class<?> clazz = Class.forName("com.example.Person");
    Method method = clazz.getMethod("getName");
    Object instance = clazz.getDeclaredConstructor().newInstance();
    String name = (String) method.invoke(instance);
2. 注解(Annotation)
  • 内置注解@Override@Deprecated@SuppressWarnings
  • 元注解:用于定义注解的注解(@Retention@Target@Documented@Inherited)。
  • 自定义注解
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface MyAnnotation {String value() default "";
    }
  • 应用场景:测试框架(JUnit)、ORM(MyBatis)、Spring 的@Component等。

3. 泛型(Generic)
  • 定义:参数化类型,在编译时检查类型安全。
  • 通配符
    • <? extends T>:上界通配符(只读取,不写入)。
    • <? super T>:下界通配符(只写入,不读取)。
  • 类型擦除:泛型信息在编译后被擦除,运行时无法获取
    List<String> list = new ArrayList<>();
    // 编译后等同于 List list = new ArrayList();

4. Stream API
  • 定义:用于对集合数据进行高效处理的流式操作。
  • 特性
    • 中间操作:返回 Stream(如filtermapsorted)。
    • 终端操作:返回结果(如collectforEachcount)。
    • List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
      List<String> filtered = names.stream().filter(n -> n.length() > 4).map(String::toUpperCase).collect(Collectors.toList());

5. Lambda 表达式
  • 定义:简化匿名内部类的语法糖,用于实现函数式接口。
  • 语法(参数) -> { 方法体 }
  • 示例
    // 传统方式
    new Thread(new Runnable() {@Overridepublic void run() {System.out.println("Hello");}
    }).start();// Lambda方式
    new Thread(() -> System.out.println("Hello")).start();

四、内存管理

1. GC 机制
  • 垃圾回收对象:不再被引用的对象(如Object obj = new Object(); obj = null;)。
  • 常见算法
    • 标记 - 清除(Mark-Sweep):标记无用对象后清除,产生内存碎片。
    • 复制(Copying):将存活对象复制到新区域,适用于新生代。
    • 标记 - 整理(Mark-Compact):标记后整理内存,避免碎片,适用于老年代。
  • 分代收集
    • 新生代:Eden 区 + 两个 Survivor 区,频繁 GC(Minor GC)。
    • 老年代:长期存活对象,GC 频率低(Major GC/FULL GC)。
    • 永久代 / 元空间:存储类信息、常量池(JDK8 后元空间使用本地内存)。

2. 堆与栈
内存区域存储内容线程独享 / 共享特点
堆(Heap)对象实例、数组共享内存大,GC 管理
栈(Stack)局部变量、方法调用帧独享速度快,内存小,自动分配
方法区类信息、静态变量、常量池共享JDK8 后改为元空间
3. OOM 场景及调优(Out Of Memory)
  • 常见 OOM 类型
    • Java heap space:堆内存不足(如创建大量对象)。
    • GC overhead limit exceeded:GC 耗时过长且回收内存少。
    • PermGen space/Metaspace:永久代 / 元空间溢出(如动态生成大量类)。
    • Direct buffer memory:NIO 直接内存溢出。
  • 调优工具
    • JVM 参数-Xmx(最大堆内存)、-Xms(初始堆内存)、-XX:MetaspaceSize等。
    • 分析工具:VisualVM、MAT(Memory Analyzer Tool)、GC 日志分析。
  • 调优思路
    • 减少对象生命周期,及时释放资源。
    • 调整堆内存大小和比例(如新生代与老年代比例)。
    • 避免内存泄漏(如静态集合持有大对象)

相关文章:

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...