【Java】接口interface学习
参考资料::黑马程序员·入门到飞起上
1 概述
在学习完抽象类后,我们了解到抽象类中既可以包含抽象方法,也能有普通方法、构造方法以及成员变量等。而接口则是一种更为彻底的抽象形式。在JDK7及之前的版本中,接口内全部为抽象方法,并且接口同样无法创建对象。
在Java中,接口(Interface)在JDK 7之前和之后(主要是JDK 8及更高版本)有显著的区别,主要体现在功能扩展上。以下是主要差异:
2 JDK7和它之后版本的区别
特性 | JDK 7及之前 | JDK 8及之后 |
---|---|---|
抽象方法 | 仅支持 | 支持 |
默认方法 | 不支持 | 支持(default ) |
静态方法 | 不支持 | 支持 |
私有方法 | 不支持 | JDK 9+支持 |
常量字段 | 支持 | 支持 |
函数式接口 | 无明确支持 | 支持(@FunctionalInterface ) |
3 接口成分的特点
在JDK7及之前,接口主要包含抽象方法和常量。
3.1抽象方法
需要注意的是,接口中的抽象方法默认会自动添加public abstract
修饰,程序员无需手动书写。按照规范,日后在接口中定义抽象方法时,建议省略public abstract
,因为系统会自动添加。
3.2 常量
在接口中定义的成员变量,默认会被public static final
修饰。这意味着接口中定义的成员变量实际上是常量。经public static final
修饰后,变量值不可修改,且由于其静态化特性,可直接通过接口名访问,因此称为常量。常量命名规范建议全部字母大写,多个单词间用下划线连接。
3.3 案例演示
以下通过具体代码示例展示接口的定义:
public interface InterF {// 抽象方法!// public abstract void run();void run();// public abstract String getName();String getName();// public abstract int add(int a, int b);int add(int a, int b);// 它的最终写法是:// public static final int AGE = 12 ;int AGE = 12; //常量String SCHOOL_NAME = "黑马程序员";
}
4 基本的实现
4.1 实现接口的概述
在Java中,类与接口之间存在实现关系,即类实现接口。实现接口的类被称为接口的实现类,也可称作接口的子类。实现的操作类似于继承,格式相似,只是使用的关键字不同,实现使用implements
关键字。
4.2 实现接口的格式
接口实现的格式如下:
/**接口的实现:在Java中接口是被实现的,实现接口的类称为实现类。实现类的格式:*/
class 类名 implements 接口1,接口2,接口3...{}
从上述格式可以看出,一个类可以实现多个接口,即接口支持多实现。这是因为接口代表一种规范,一个类可以遵循多种不同的规范,以满足不同方面的功能需求。
4.3 类实现接口的要求和意义
- 实现类必须重写其所实现的全部接口中的所有抽象方法。
- 如果一个类实现了接口,但未重写全部接口的所有抽象方法,那么这个类必须被定义为抽象类。
- 意义:接口体现的是一种规范,它对实现类具有强制性的约束。实现类要么完整实现接口所声明的功能,要么自身定义为抽象类。这种强制性规范确保了程序的一致性和规范性,不同的实现类按照统一的接口规范实现特定功能,便于代码的组织和维护。
情况 1:普通类不实现全部方法(❌ 编译错误)
interface Animal {void eat();void sleep();
}class Dog implements Animal { // ❌ 编译错误:必须实现所有接口方法@Overridepublic void eat() {System.out.println("Dog is eating.");}// 缺少 sleep() 的实现
}
错误信息:
Error: Dog is not abstract and does not override abstract method sleep() in Animal
情况 2:抽象类不实现全部方法(✔️ 合法)
如果类声明为 abstract
,则可以 不实现接口的部分或全部方法,但子类仍需实现剩余方法。
interface Animal {void eat();void sleep();
}abstract class AbstractDog implements Animal { // ✔️ 合法:抽象类可以不实现接口方法@Overridepublic void eat() {System.out.println("AbstractDog is eating.");}// 未实现 sleep(),由子类完成
}class RealDog extends AbstractDog { // 子类必须实现剩余的 sleep()@Overridepublic void sleep() {System.out.println("RealDog is sleeping.");}
}
情况 3:接口有默认方法(Java 8+ ✔️ 合法)
如果接口方法有 default
实现,实现类可以 选择不重写。
interface Animal {void eat();default void sleep() { // 提供默认实现System.out.println("Animal is sleeping.");}
}class Dog implements Animal { // ✔️ 合法:只需实现 eat()@Overridepublic void eat() {System.out.println("Dog is eating.");}// 不重写 sleep(),直接使用接口的默认实现
}
调用:
Dog dog = new Dog();
dog.eat(); // 输出: Dog is eating.
dog.sleep(); // 输出: Animal is sleeping. (使用默认方法)
场景 | 是否合法 | 说明 |
---|---|---|
普通类不实现全部方法 | ❌ | 编译错误,必须实现所有抽象方法 |
抽象类不实现全部方法 | ✔️ | 剩余方法由子类实现 |
接口有 default 方法 | ✔️ | 可选择性重写 |
4.4 类与接口基本实现案例
以定义一个运动员的接口(规范)为例,代码如下:
/**接口:接口体现的是规范。* */
public interface SportMan {void run(); // 抽象方法,跑步。void law(); // 抽象方法,遵守法律。String compittion(String project); // 抽象方法,比赛。
}
接下来定义一个乒乓球运动员类作为接口的实现类,代码如下:
package com.itheima;
/*** 接口的实现:* 在Java中接口是被实现的,实现接口的类称为实现类。* 实现类的格式:* class 类名 implements 接口1,接口2,接口3...{*** }* */
public class PingPongMan implements SportMan {@Overridepublic void run() {System.out.println("乒乓球运动员稍微跑一下!!");}@Overridepublic void law() {System.out.println("乒乓球运动员守法!");}@Overridepublic String compittion(String project) {return "参加" + project + "得金牌!";}
}
以下是测试代码:
public class TestMain {public static void main(String[] args) {// 创建实现类对象。PingPongMan zjk = new PingPongMan();zjk.run();zjk.law();System.out.println(zjk.compittion("全球乒乓球比赛"));}
}
4.5 类与接口的多实现案例
类与接口之间支持多实现关系,即一个类可以同时实现多个接口。
首先定义两个接口,代码如下:
/** 法律规范:接口*/
public interface Law {void rule();
}/** 这一个运动员的规范:接口*/
public interface SportMan {void run();
}
然后定义一个实现类:
/*** Java中接口是可以被多实现的:* 一个类可以实现多个接口: Law, SportMan** */
public class JumpMan implements Law, SportMan {@Overridepublic void rule() {System.out.println("尊长守法");}@Overridepublic void run() {System.out.println("训练跑步!");}
}
从上述代码可以看出,类与接口之间的多实现关系使得一个类能够遵循多种不同的规范,这在实际编程中具有重要意义,它允许类在不同的功能维度上进行扩展和实现。
5 接口与接口的多继承
在Java中,接口与接口之间支持多继承关系,即一个接口可以同时继承多个接口。需要明确的是,类与接口是实现关系,而接口与接口是继承关系。接口继承接口的本质是将其他接口的抽象方法与本接口进行合并。
以下是案例演示:
public interface Abc {void go();void test();
}/** 法律规范:接口*/
public interface Law {void rule();void test();
}** 总结:* 接口与类之间是多实现的。* 接口与接口之间是多继承的。* */
public interface SportMan extends Law, Abc {void run();
}
6 扩展:接口的细节
在接口的使用过程中,有一些语法细节需要注意。这些细节无需刻意背诵,当在开发工具(如IDEA)中出现报错时,能够知道如何修改即可。理解这些细节的关键在于把握抽象的本质。
-
当两个接口中存在相同抽象方法的时候:
只需要在实现类中重写一次该方法。此时这个重写的方法,既满足了第一个接口的抽象方法重写要求,也满足了第二个接口的要求。 -
实现类能否在继承A类的同时实现其他接口:
可以。继承的父类可类比为“亲爸爸”,实现的接口可类比为“干爹”。实现类能够在继承一个类的同时,实现多个接口,但需要将接口中的所有抽象方法全部实现。 -
实现类能否在继承一个抽象类的同时实现其他接口:
同样可以。实现类在继承一个抽象类的同时,实现其他多个接口时,需将抽象类和接口中的所有抽象方法全部重写。 -
实现类Zi实现了一个接口,还继承了一个Fu类,且接口与父类中有相同方法时:
- 处理办法一:若父类中的方法体能够满足当前业务需求,子类中可不重写该方法。
- 处理办法二:若父类中的方法体无法满足当前业务需求,则需要在子类中重写该方法。
-
如果一个接口中有10个抽象方法,但在实现类中只需要使用其中一个:
可以在接口与实现类之间新建一个中间类(也称为适配器类)。让这个适配器类实现接口,并对接口中的所有方法进行空重写。然后让子类继承这个适配器类,根据实际需求重写需要使用的方法。由于中间类通常不具备实际业务意义,一般将其定义为抽象类,以防止外界创建对象。这种方式在实际开发中能够有效减少实现类的代码冗余,提高代码的灵活性和可维护性。
相关文章:
【Java】接口interface学习
参考资料::黑马程序员入门到飞起上 1 概述 在学习完抽象类后,我们了解到抽象类中既可以包含抽象方法,也能有普通方法、构造方法以及成员变量等。而接口则是一种更为彻底的抽象形式。在JDK7及之前的版本中,接口内全部为抽象方法&…...
数据结构实验7.1:二叉树的遍历
文章目录 一,实验目的二,实验描述三,基本要求四,算法分析五,实验操作六,示例代码七,运行效果一,实验目的 深入理解树与二叉树的基本概念,包括节点、度、层次、深度等,清晰区分二叉树与一般树的结构特点,为后续学习和应用打下坚实基础。熟练掌握用递归方法实现二叉树…...
seata db模式,nacos注册中心,spring boot ,spring cloud ,jdk1.8 完成的配置步骤
1. 环境准备 确保以下环境已经安装并正常运行: JDK 1.8MySQL(或其他支持的数据库)Nacos Server(用于注册中心和配置中心)Seata Server 2. 配置 Seata Server (1) 下载并解压 Seata 从 Seata 官方 GitHub 下载最新版…...
C++进阶-多态
文章目录 C进阶--多态概念多态的定义及实现多态的构成条件实现多态的两个重要条件虚函数虚函数的重写及覆盖协变析构函数的重写(面试被问及最好需要举例说明)override和final关键字重载,重写(覆盖),隐藏&am…...
Linux教程-常用命令系列三
文章目录 1. 网络安全常用命令1. su (Switch User)2. chmod (Change Mode)3. chown (Change Owner)4. ps (Process Status)5. who6. top7. free8. kill9. gedit10. find总结 2. 字符串显示命令2.1 基本语法2.2 常用选项2.3 核心功能与示例2.3.1 输出字符串2.3.2 输出变量2.3.3 …...
GIS开发笔记(9)结合osg及osgEarth实现三维球经纬网格绘制及显隐
一、实现效果 二、实现原理 按照5的间隔分别创建经纬线的节点,挂在到组合节点,组合节点挂接到根节点。可以根据需要设置间隔度数和线宽、线的颜色。 三、参考代码 //创建经纬线的节点 osg::Node *GlobeWidget::createGraticuleGeometry(float interv…...
nuxt3前端开发以及nuxt3和nuxt2项目的详细差异点
以下是 Nuxt 3 前端开发的详细指南以及与 Nuxt 2 的核心差异总结,涵盖配置、开发模式、API 变化等关键方面: 一、Nuxt 3 前端开发核心要点 1. 项目初始化 # Nuxt 3 npx nuxi init <project-name> cd <project-name> npm install npm run dev# Nuxt 2 (对比) np…...
Android学习总结之APK打包流程
一、预处理阶段(编译前准备) 1. AIDL 文件处理(进程间通信基础) 流程: 用于实现 Android 系统中不同进程间的通信(IPC)。在项目构建时,AIDL 编译器会将 .aidl 文件编译为 Java 接口…...
java面试篇(常见的集合底层原理)
集合 1、arraylist源码分析 三种构造方法: 扩容的逻辑: 2、ArrayList的底层实现原理是什么? ArrayList listnew ArrayList(10)中的list扩容几次 3、如何实现数组和List之间的转换 4、LinkedList和arraylist的区别 5、hashmap的实现原理 二叉…...
RAG框架精选2
原文链接:https://i68.ltd/notes/posts/20250406-llm-rag2/ 清华Hyper-RAG 使用超图驱动的RAG对抗LLM幻觉论文链接:https://arxiv.org/pdf/2504.08758项目仓库:https://github.com/iMoonLab/Hyper-RAG清华Hyper-RAG:利用超图建模高阶关系,让DeepSeek/Q…...
Redis进阶学习
什么是Redis? Redis是一个key-value结构的非关系型数据库,将数据存储在内存中,结构简单(五种数据结构:string、list、set、zset、hash),数据读写速度快,还可以将数据持久化到硬盘上。…...
【读书笔记·VLSI电路设计方法解密】问题63:为什么可测试性设计对产品的财务成功至关重要
可测试性设计至关重要,因为我们不希望将劣质或故障部件交付给客户。向客户交付过多不良部件意味着财务灾难,更会损害企业声誉并导致商业机会流失。 若设计中未嵌入可测试性设计(DFT),区分良品与不良品的唯一方法就是由应用工程师或客户在实际应用环境中测试芯片。此时芯片…...
Federated Weakly Supervised Video Anomaly Detection with Multimodal Prompt
标题:联邦弱监督视频异常检测的多模态提示方法 原文链接:https://ojs.aaai.org/index.php/AAAI/article/view/35398 源码链接:https://github.com/wbfwonderful/Fed-WSVAD 发表:AAAI-2025 摘要(Abstract) …...
计算机视觉与深度学习 | LSTM原理,公式,代码,应用
LSTM(长短期记忆网络)详解 一、原理 LSTM(Long Short-Term Memory)是RNN的改进版本,通过引入门控机制(输入门、遗忘门、输出门)和细胞状态(Cell State),有效解决传统RNN的梯度消失/爆炸问题,擅长捕捉长距离依赖关系。 核心思想: 细胞状态(C_t):贯穿整个时间步…...
UI界面工程,如何使用控制台
我们通常会使用print函数向控制台输出调试信息。但创建UI界面工程时,默认不会显示控制台。 通过如下方法切换到控制台 项目属性—链接器—系统—子系统—窗口改为控制台...
mysql——基础知识
关键字大小写不敏感 查看表结构中的 desc describe 描述 降序中的 desc descend 1. 数据库的操作 1. 创建数据库 create database 数据库名;为防止创建的数据库重复 CREATE DATABASE IF NOT EXISTS 数据库名;手动设置数据库采用的字符集 character set 字符集名;chars…...
UE虚幻4虚幻5动画蓝图调试,触发FellOutOfWorld事件和打印输出,继续DeepSeek输出
找到了一个pdf,本来想写个翻译的,但还是算了,大概看了下,这类文档很全面,内容很多,但都不是我要的,我想要一个动画蓝图,搜索Montage,或者Anim 只占了一行(几百…...
52单片机LED实验
文章目录 前言点亮一个LEDLED闪烁 LED灯亮灭交替LED流水灯 前言 我所用的板子是普中的STC89C52RC,创建文件的过程中如果你发现keil文件找不到单片机依赖,那怎么办呢 下面从创建新项目讲起 首先打开keil软件,点击project new一个新的projec…...
【C++详解】C++入门(一)命名空间、缺省参数、函数重载
文章目录 一、命名空间命名空间的基本特性命名空间的使用 二、C输入输出用法三、缺省参数(默认参数)定义用法 四、函数重载 一、命名空间 命名空间的基本特性 #include <stdio.h> #include <stdlib.h>int rand 10;int main() {// 编译报错:error C23…...
AWS Linux快速指南:5分钟搭建多用户图形界面
一、概述 本指南将帮助您在AWS上快速部署一个支持多用户、带图形界面和浏览器的Linux环境。我们将使用Ubuntu Server作为基础,配合轻量级的Xfce桌面环境和VNC服务。同时,我们还将提供不同用户规模下的实例规格推荐。 二、实例规格推荐 根据您的用户规模,我们推荐以下EC2实例…...
kotlin,编码、解码
kotlin写程序确实简洁,就是函数式编程对我这种用惯了过程的,换思想有难度。package org.exampleimport java.io.File import java.io.FileNotFoundExceptionval byteToHanzi mapOf(0x00 to "凡", 0x01 to "周", 0x02 to "张&q…...
从零创建 Docker 镜像(基于 OCI 格式)
更现代的 OCI 镜像格式,采用了 OCI Image Format Specification,其中文件引用使用 blobs/sha256/<hash> 的形式,层和配置存储在 blobs/sha256/ 目录下,并且包含 LayerSources 字段。这种格式在较新的 Docker 版本和 OCI 兼容…...
JavaScript 版本号比较
问题描述: 实现 : <script>const compare function(v1,v2){const arr1 v1.split(.)const arr2 v2.split(.)for(let i 0;i<arr1.length||i<arr2.length;i){const a arr1[i]||0const b arr2[i]||0if(a>b){return 1}else if(a<b){…...
MySQL为什么默认使用RR隔离级别?
大家好,我是锋哥。今天分享关于【MySQL为什么默认使用RR隔离级别?】面试题。希望对大家有帮助; MySQL为什么默认使用RR隔离级别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 默认使用 RR(Repeatable Read)…...
第37讲|AI+农业气象建模:预测极端天气对农业的影响
目录 ✨ 导语:天气不可控,但影响可以预测 📦 一、数据准备:融合农业与气象 ⚡ 二、极端天气如何“定义”? 🔧 三、模型选择与结构设计 🔁 时间序列模型:LSTM 🎯 非时序模型:XGBoost / LightGBM 🧪 四、案例实战:用LSTM预测小麦产量下降风险(受极端天气…...
(done) 吴恩达版提示词工程 1. 引言 (Base LLM 和 Instruction Tuned LLM)
url: https://www.bilibili.com/video/BV1Z14y1Z7LJ/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 LLM 有两种: 1.基础 LLM,通过文本训练数据预测后面的内容。 这种 LLM 当你给它提问:What is…...
Vue如何实现样式隔离
1. 使用 CSS Modules CSS Modules 允许你在 Vue 组件中定义局部作用域的 CSS,这样可以避免全局样式的冲突 步骤如下: 在你的 Vue 组件中,创建一个 <style> 标签并添加 module 属性。 <template><div :class"$style.c…...
Sentinel源码—6.熔断降级和数据统计的实现二
大纲 1.DegradeSlot实现熔断降级的原理与源码 2.Sentinel数据指标统计的滑动窗口算法 2.Sentinel数据指标统计的滑动窗口算法 (1)滑动窗口介绍 (2)StatisticSlot使用滑动窗口算法进行数据统计 (1)滑动窗口介绍 一.滑动窗口原理 滑动窗口不会指定固定的时间窗口起点与终点…...
B+树删除和测试
B树删除和测试 5.1 高级接口:B 树作为键值存储 在本章中,我们将实现 B 树的高级接口,使其能够作为键值存储(Key-Value Store)使用。这些接口包括插入和删除操作,并处理根节点的维护。 1. 插入接口 1.1 I…...
常用算法解析:从基础排序到图论应用
一、算法基础与设计原则 算法是计算机解决问题的核心工具,其五大基本特性决定了程序的可靠性: 有穷性:算法必须能在有限步骤内终止确定性:每步操作无歧义可行性:可被计算机执行输入输出:具备数据交互能力…...
Java Web项目(一)
框架 java web项目总工分为两部分:客户端(前端)和服务端(后端) 客户端发起请求,服务端接受请求并进行处理 发起请求的方式:from表单、jQuery ajax from表单 造成全局的变化,在发…...
兴达易控DP主站网关数据映射快速配置案例
兴达易控DP主站网关数据映射快速配置案例 在工业自动化的领域,不同通讯协议之间的转换是常见的需求。特别是Profibus DP与Modbus-RTU这两种广泛应用于不同系统和设备的通讯协议,它们之间的数据转换显得尤为重要。本文将详细探讨兴达易控Profibus DP主站…...
Tailwindcss 入门 v4.1
以 react 为例,步骤如下: npm create vitelatest my-app -- --template react 选择 React 和 JavaScript 根据上述命令的输出提示,运行以下命令 cd my-app npm install npm run dev 一个 React App 初始化完成。 安装 Tailwindcss theme …...
通过 WebSocket 接收和播放 WSS 协议视频流
1.创建wss协议视频 1.1必备包 npm install ws ffmpeg-installer/ffmpeg fluent-ffmpeg 说明:安装以下三个包。 1.2代码实现 说明:创建WebSocket服务器,端口为8080 import { WebSocket, WebSocketServer } from ws; // 导入 WebSocket 和 W…...
HTML 如何改变字体颜色?深入解析与实践指南
网页上的字体颜色是网页设计中至关重要的元素之一,它像字体大小一样,对于提升用户体验起着举足轻重的作用。精心选择和运用字体颜色,能够增强页面的可读性、突出重点信息、营造特定的情感氛围,甚至直接影响用户的视觉感受和品牌认…...
tigase源码学习杂记-组件化设计
前言 tigase官方号称高度抽象和组件化。这篇文章就记录一下我研究组件化的相关设计 概述 我的理解tigase高度组件化是所有的关键的功能的类,它都称之为组件,即只要继承于BasicComponent,它都可以成为组件,BasicComponent类实现…...
十二、人工神经网络及其应用
写在前面 这部分内容老师说很重要,不管是实验还是考试占比都非常大 AIGC的全称是“Artificial Intelligence Generated Content”,即人工智能生成内容。这一术语通常用于指代通过人工智能技术自动生成的各种类型的内容,如文本、图像、音频和视频等。随着AI技术的发展,AIG…...
vscode使用技巧
一、符号定位技巧 跳转到定义 F12 或右键「Go to Definition」跳转到符号定义位置CtrlClick 直接点击符号跳转(支持变量/函数/类) 符号大纲视图 CtrlShiftO 打开文件符号大纲,支持模糊搜索符号名输入: 分类显示符号(…...
测试基础笔记第七天
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、cat命令二、ls -al命令三、>重定向符号四、>>追加重定向符号五、less/more命令六、grep命令七、|管道符八、clear命令九、head命令十、tail命令十一、…...
FOC控制中的正弦PWM和空间矢量PWM对比与理解
参考: simple foc:https://docs.simplefoc.com/docs_chinese/foc_theory博客:https://blog.csdn.net/qq_43332314/article/details/126449398 一、无刷电机基础原理 1., 原理图:至少三个绕组线圈(定子&…...
【Oracle专栏】函数中SQL拼接参数 报错处理
Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 最近同事反馈了一个很奇怪的问题,即有一个函数,入参是当前年月,主要作用是通过SQL语句将不合规的数据插入到指定表中,插入数据时带上入参的年月参数。当前问题:单独测试SQL没有问题可以执行成功,…...
无意间发现的宝藏项目:开源世界中的演示项目精选合集
🌟无意间发现的宝藏项目:开源世界中的演示项目精选合集 最近在 GitHub 上随手翻了翻 Spring 官方代码仓库,意外发现一个超有趣的演示项目 —— spring-petclinic。一个轻量但结构完整的 Spring 全家桶演示,让人忍不住一探究竟。 这…...
OpenCSG AutoHub v0.5.0 版本发布
OpenCSG AutoHub v0.5.0 版本发布 作为一款智能化自动化操作的浏览器插件,AutoHub不断致力于为用户提供更加高效、便捷的网页浏览体验。本次 v0.5.0版本 的发布,不仅进一步强化了核心功能,还引入了一些创新特性,旨在帮助用户更智…...
基于Python智能体API的Word自动化排版系统:从零构建全流程模块化工作流与版本控制研究
基于Python智能体API的Word自动化排版系统:从零构建全流程模块化工作流与版本控制实践研究 1. 引言2. 研究背景与意义3. 自动排版工作流的设计原理3.1 文档内容提取与解析3.2 样式参数与格式化规则3.3 智能体API接口调用3.4 自动生成与批量处理3.5 与生成式AI的协同4. 系统架构…...
在 Node.js 中设置响应的 MIME 类型
在 Node.js 中设置响应的 MIME 类型是为了让浏览器正确解析服务器返回的内容,比如 HTML、CSS、图片、JSON 等。我们通常通过设置响应头中的 Content-Type 字段来完成。 ✅ 一、什么是 MIME 类型(Content-Type)? MIME(…...
jsch(shell终端Java版)
学习笔记 Java SSH库使用简介:Apache sshd和JSch(Java Secure Channel) github - fork of the popular jsch library JSch学习笔记 web-shell - gitee代码 - 纯Java实现一个web shell登录Linux远程主机,技术选型 SpringBoot …...
Redis分布式锁RedLock机制详解
一、RedLock机制解决的问题 核心场景:解决传统Redis单节点/主从架构下分布式锁的不可靠问题。当主节点故障时,若从节点未同步锁信息,可能导致多个客户端同时持有锁,破坏互斥性。 典型问题案例: 主从切换锁丢失&…...
Vivado中Tri_mode_ethernet_mac的时序约束、分析、调整——(五)调试注意的问题
一、几个注意点 1、每个bank中IO的组织形式 1Bank的52Pins分4 Byte Group,每Byte Group 13PinsNibble_up 7Pins Nibble_low 6Pins。 每个nibble一个bitslice_control管理自己的6~7个pins 。 每个pin对应一个bitslice,它内部又包含多个component&#…...
MFC文件-写MP4
下载本文件 本文件将创作MP4视频文件代码整合到两个文件中(Mp4Writer.h和Mp4Writer.cpp),将IYUV视频流,PCM音频流写入MP4文件。本文件仅适用于MFC程序。 使用方法 1.创建MFC项目。 2.将Mp4Writer.h和Mp4Writer.cpp文件复制到项目目录下。 3…...
PyTorch 深度学习实战(39):归一化技术对比(BN/LN/IN/GN)
在上一篇文章中,我们全面解析了注意力机制的发展历程。本文将深入探讨深度学习中的归一化技术,对比分析BatchNorm、LayerNorm、InstanceNorm和GroupNorm四种主流方法,并通过PyTorch实现它们在图像分类和生成任务中的应用效果。 一、归一化技术…...