6. 快速掌握抽象类及接口
目录
- 1. 抽象类
- 1.1 抽象类语法
- 1.2 抽象类特性
- 1.3 抽象类的作用
- 2. 接口
- 2.1 接口语法
- 2.2 接口的特性
- 3. 接口案例
- 4. 常用接口
- 4.1 Comparable接口---compareTo()方法
- 4.2 clonable接口---clone方法
- 4.2 深拷贝和浅拷贝
- 5. Object类
- 5.1 equals()方法
- 5.2 toString()方法
- 5.3 hashCode()方法
- 6. 内部类
- 6.1 内部类分类
1. 抽象类
并不是所有的类都用来描述对象,如果一个类中没有足够的信息来描述一个具体的对象,那这个类就是抽象类。一个方法没有方法体,这就是抽象方法。
1.1 抽象类语法
被abstract修饰的类称为抽象类,被abstract修饰的方法称为抽象方法,abstract不修饰成员变量。
【代码演示】
abstract class Animal{//普通方法public void fun(){}//抽象方法 有抽象方法后,当前类必须也变成抽象类public abstract void fun1();
}
1.2 抽象类特性
- 抽象类中可以包含普通方法和成员
- 抽象方法不能被private,final和static修饰(因为抽象方法生来就是要被继承并重写的,被private修饰虽能被继承,但不能被重写。重写的条件就是使用抽象类的条件)
- 抽象类不能实例化,必需由子类继承并重写抽象类的全部抽象方法。若继承的子类也是抽象类,该子类也不能实例化,想使用,必须让普通类继承抽象类
- 抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类
- 抽象类可以提供构造方法,供子类创建对象时,初始化父类的成员变量
1.3 抽象类的作用
普通类也可以做到抽象类能做到的,而且抽象类使用起来不方便,为什么要有抽象类?
答:和final一样,是为了充分利用编译器的校验功能。让编译器来检查,以防不留神就作出更改。
2. 接口
接口,属于引用数据类型,是一种公共的行为规范。在实现时只要符合规范标准,就可以用。在java中,接口可以看做多个类的公共规范,比抽象类更抽象
2.1 接口语法
定义接口跟定义一个类基本相同
修饰符 interface I形容词{//抽象方法void draw(); //等价于public abstract void draw();}
【定义规则】
- 接口的命名以I开头,词性为形容词
- 根据阿里代码规范,接口中的方法和属性不要加任何修饰(因为加不加都一样),保持代码简洁
2.2 接口的特性
- 接口不能直接实例化
- 接口也有字节码文件
- 使用接口需要重写接口中的所有抽象方法
- 接口中方法必须是抽象方法,但方法可以被static和default修饰,这两个方法都不是抽象方法,需要实现方法细节
- 接口之间继承用extends,实现接口用implements。一个类若是同时用extends和implements,先extends后implements
- 接口中不能有静态/实例代码块和构造方法
- 接口解决了多继承的问题。因为把所有的方法都放到一个类会导致该类没有功能的专一性,但java有不支持继承多个类,但接口就可以。
- 接口可以被abstract修饰
3. 接口案例
【案例一】使用单接口写接口和电脑的功能
/*** 1. USB接口:包含打开设备、关闭设备功能* 2. 笔记本类:包含开机功能、关机功能、使用USB设备功能* 3. 鼠标类:实现USB接口,并具备点击功能* 4. 键盘类:实现USB接口,并具备输入功能*/interface USB{void openDevice();void closeDevice();
}
class Mouse implements USB{public void click(){System.out.println("鼠标点击");}@Overridepublic void openDevice() {System.out.println("打开鼠标");}@Overridepublic void closeDevice() {System.out.println("关闭鼠标");}
}
class keyBoard implements USB{public void input(){System.out.println("键盘输入");}@Overridepublic void closeDevice() {System.out.println("关闭键盘");}@Overridepublic void openDevice() {System.out.println("打开键盘");}
}
class Computer implements USB{public void powerOn(){System.out.println("打开电脑");}public void powerOff(){System.out.println("关闭电脑");}public void useDevice(USB usb){if(usb instanceof Mouse){Mouse mouse = (Mouse)usb;mouse.click();} else if (usb instanceof keyBoard) {keyBoard keyBoard = (keyBoard)usb;keyBoard.input();}}@Overridepublic void openDevice() {System.out.println("电脑开机");}@Overridepublic void closeDevice() {System.out.println("电脑关机");}
}public class MyInterface {public static void fun(USB usb){usb.closeDevice();}public static void main(String[] args) {fun(new keyBoard());}
}
【案例二】使用实现多接口写动物能跑 能游泳
class Animal1 {public int age;
}
interface run{void run();
}
interface swim{void swim();
}
class Dog extends Animal1 implements run,swim{@Overridepublic void run() {System.out.println("狗狗跑步");}@Overridepublic void swim() {System.out.println("狗狗游泳");}
}
public class MyInterface {public static void main(String[] args) {Dog dog = new Dog();dog.run();}
}
4. 常用接口
4.1 Comparable接口—compareTo()方法
sort方法中调用了compareTo()方法
【代码演示】
class Student{public int age;public Student(int age){this.age = age;}
}
public class Test {/*** 之前整型数组调用sort方法,进行排序* 现在要求:把几个学生对象排序*/public static void main(String[] args) {Student[] students = {new Student(20),new Student(18),new Student(25),};Arrays.sort(students);System.out.println(Arrays.toString(students));}
}//运行结果
Exception in thread "main" java.lang.ClassCastException: Student cannot be cast to java.lang.Comparable
【代码改正】
class Student implements Comparable{public int age;//重写compareTo方法,指定 到底比较引用类型的哪个变量@Overridepublic int compareTo(Object o) {Student student = (Student) o;if (this.age > student.age)return 1;else if (this.age == student.age)return 0;elsereturn -1;}//重写toString方法,改变打印效果@Overridepublic String toString() {return "Student{" +"age=" + age +'}';}public Student(int age){this.age = age;}
}
public class Test {public static void main(String[] args) {Student[] students = {new Student(20),new Student(18),new Student(25),};Arrays.sort(students);System.out.println(Arrays.toString(students));}
}//运行结果
[Student{age=18}, Student{age=20}, Student{age=25}]
4.2 clonable接口—clone方法
拷贝的是对象,不是类
Object类是所有类的子类,且有clone方法,为什么自己写的类不能调用?为什么要重写?
- 因为clone方法是protected修饰的,在不同包的子类中访问需要用super关键字,所以调用不了。
- 想调用clone方法,官方规定必须重写。
- 而且自己写的类必须实现Cloneable接口(空接口/标志接口),标志着该类有比较功能。
【代码演示】
/*** 克隆一个对象:* 1. 先实现Cloneable接口* 2. 重写Object类的clone方法* 3. 由于clone方法是protected方法,要用super关键字访问Object类的clone方法**/
class Animal implements Cloneable{public int age;public String name;//1.可以让编译器自动生成,但需要将父类强转为当前对象
// @Override
// protected Object clone() throws CloneNotSupportedException {
// return super.clone();
// }//2. 也可以自己重写clone方法@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}public Animal(int age, String name){this.age = age;this.name = name;}}
public class Test {public static void main(String[] args) throws CloneNotSupportedException {Animal animal = new Animal(20,"西西");Animal animal1 = (Animal) animal.clone();System.out.println("animal.age="+animal.age+" animal1.age="+animal1.age);}
}//运行结果
animal.age=20 animal1.age=20
4.2 深拷贝和浅拷贝
拷贝分深拷贝和浅拷贝,辨别深浅拷贝在于代码实现方式,而不是方法。
演示浅拷贝class Person{int num = 7;
}
class Animal implements Cloneable{public int age;public String name;public Person person = new Person();//1.可以让编译器自动生成,但需要将父类强转为当前对象
// @Override
// protected Object clone() throws CloneNotSupportedException {
// return super.clone();
// }//2. 也可以自己重写clone方法@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}public Animal(int age, String name){this.age = age;this.name = name;}
}public class Test {public static void main(String[] args) throws CloneNotSupportedException {Animal animal = new Animal(20,"西西");Animal animal1 = (Animal) animal.clone();animal.person.num = 10;System.out.println("animal.person.num="+animal.person.num +" animal.person.num="+animal1.person.num);}
}//运行结果,我只改了animal对象的值,
//两个对象的值却都变了
animal.person.num=10 animal.person.num=10
5. Object类
Object类需要掌握下面这些方法,可以根据图标🔒,🔓来判断该方法是否能被重写,有🔒标志的就是被private修饰的,不能重写
5.1 equals()方法
简单数据类型比较相等用==,引用数据类型比较相等用equals方法
/*** equals方法 比较引用类型* 和 == 不同*/
class P{public int age;public P(){}public P(int age){this.age = age;}//查看equals方法的源代码发现和person==person1一样的效果
//重写equals方法自己定义@Overridepublic boolean equals(Object obj) {P p = (P)obj;if (this.age == p.age)return true;elsereturn false;}
}
public class Test1 {public static void main(String[] args) {P person = new P(18);P person1 = new P(18);System.out.println(person==person1); //falseSystem.out.println(person.equals(person1));//true}
}
5.2 toString()方法
上面已演示
5.3 hashCode()方法
主要是获取“地址”,先不讲,后期会仔细讲
6. 内部类
外部类:类A中定义了一个类B,类A就是外部类
内部类:类B就是内部类
6.1 内部类分类
1.实例内部类
- 非静态类,无论是内部类还是外部类,其内部不能有static。若想定义静态的必须加final,而且该变量必须就地初始化。
- 如何实例化 实例内部类?先创建外部类对象。外部类.内部类 变量名 = 外部类对象引用.内部类();
- 在内部类中访问外部类成员,不论访问权限。类内部和类外部同名变量时,优先看内部类。若非要访问外部类的同名变量,用外部类类名.成员变量。
- 在外部类访问内部类,实例化内部类再调用即可
- 内部类也有字节码文件,命名格式为外部类类名$内部类类名.class
【代码演示】
class Out{public int a;public static int b; //报错public static final int b;private int c;//静态内部类class InnerClass{public int a = 2;public int d;public static final int e = 2;private int f;public void test(){//在内部类中访问外部类成员System.out.println(a); //优先访问内部类 2System.out.println(b); //访问外部类 0Out out = new Out();System.out.println(out.c);//访问外部类 0System.out.println(d);//优先访问内部类 0System.out.println(e);//优先访问内部类 2System.out.println(f);//优先访问内部类 0System.out.println("InnerClass");}}public void test(){//在外部类中访问内部类成员InnerClass innerClass = new InnerClass();System.out.println(innerClass.d);System.out.println(InnerClass.e);System.out.println(innerClass.f);System.out.println(a);System.out.println("Out");}
}public class test {public static void main(String[] args) {//创建 实例内部类对象//1.创建父类对象OutClass outClass = new OutClass();//2.通过 外部类对象 引用创建 内部类对象 外部类.内部类 变量名 = 外部类对象引用.内部类();OutClass.InnerClass innerClass = outClass.new InnerClass();innerClass.test();}
}
2.静态内部类(工作中用的较多)
- 如何实例化?不需要创建外部类对象。外部类.内部类
- 在内部类中访问只能访问外部类的静态成员,若要访问非静态成员,需要创建一个外部类对象,通过对象引用来调用
【代码演示】
class Out{public int a;public static int b;private int c;//静态内部类static class InnerClass{public int a = 2;public int d;public static final int e = 2;private int f;public void test(){System.out.println(a);System.out.println(b);Out out = new Out();System.out.println(out.c);System.out.println(d);System.out.println(e);System.out.println(f);System.out.println("InnerClass");}}
}public class test {public static void main(String[] args) {//创建 静态内部类对象Out.InnerClass innerClass1 = new Out.InnerClass();innerClass1.test();}
}
3.匿名内部类(多线程常用)
【代码演示】
interface A{void func();
}
public class test {public static void main(String[] args) {//创建 匿名内部类对象A a = new A(){@Overridepublic void func() {}};}
}
4.局部内部类(不常用,了解即可)
- 只能定义在外部类方法内部,只能在方法体内部使用。
- 不能被public,static等访问修饰限定符修饰
- 有自己的字节码文件,格式为外部类类名$数字内部类类名.class
【代码演示】
public class test {public static void fun(){class Inner{public int a = 89;}Inner inner = new Inner();System.out.println(inner.a);}public static void main(String[] args) {fun();}
相关文章:
6. 快速掌握抽象类及接口
目录 1. 抽象类1.1 抽象类语法1.2 抽象类特性1.3 抽象类的作用 2. 接口2.1 接口语法2.2 接口的特性 3. 接口案例4. 常用接口4.1 Comparable接口---compareTo()方法4.2 clonable接口---clone方法4.2 深拷贝和浅拷贝 5. Object类5.1 equals()方法5.2 toString()方法5.3 hashCode(…...
P6周:VGG-16算法-Pytorch实现人脸识别
🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 我的环境 语言环境:Python 3.8.12 编译器:jupyter notebook 深度学习环境:torch 1.12.0cu113 一、前期准备 1.设置GPU im…...
GPT-5 传言:一场正在幕后发生的 AI 变革
新的一年,让我们从一个引人入胜的话题开始:如果我告诉你,GPT-5 并非虚构,而是真实存在呢?它不仅真实存在,而且正在你看不见的地方悄然塑造着世界。我的基本假设是:OpenAI 已经秘密开发出 GPT-5&…...
mac配置 iTerm2 使用lrzsz与服务器传输文件
mac配置 1. 安装支持rz和sz命令的lrzsz brew install lrzsz2. 下载iterm2-send-zmodem.sh和iterm2-recv-zmodem.sh两个脚本 # 克隆仓库 git clone https://github.com/aikuyun/iterm2-zmodem ~/iterm2-zmodem# 进入到仓库目录 cd ~/iterm2-zmodem# 设置脚本文件可执行权限 c…...
一、1-2 5G-A通感融合基站产品及开通
1、通感融合定义和场景(阅读) 1.1通感融合定义 1.2通感融合应用场景 2、通感融合架构和原理(较难,理解即可) 2.1 感知方式 2.2 通感融合架构 SF(Sensing Function):核心网感知控制…...
深度学习加速性能分析与Roofline Model
深度学习加速性能分析 动因:由于深度学习加速器普遍采用时分复用(当然随着Graphcore等dataflow类型的芯片除外,他们是空间划分)。此时,硬件资源在不同时刻执行的计算发生变化,很难以单一时刻的计算类型进行硬件设计。所以寻找平均资源利用率就变得更重要方法:针对不同任…...
React 第三方状态管理库相关 -- Redux MobX 篇
一、redux 首先安装依赖: npm install redux react-redux reduxjs/toolkit 示例代码: // src/store/index.js import { configureStore } from reduxjs/toolkit import couterSlice from ./couterSliceconst store configureStore({reducer:{coute…...
“扣子”开发之四:与千帆AppBuilder比较
上一个专题——“扣子”开发——未能落地,开始抱着极大的热情进入,但迅速被稚嫩的架构模型折磨打击,硬着头皮坚持了两周,终究还是感觉不实用不趁手放弃了。今天询问了下豆包,看看还有哪些比较好的AI开发平台࿰…...
C++实现红黑树
红黑树 红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍&…...
Vue3:当v-if和v-for同时使用时产生的问题和解决办法
更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbci…...
python爬虫入门(理论)
python爬虫 学习网站 一、准备 环境搭建 requests beautifulsoup4 selenium 爬虫架构 URL管理器:管理URL,存储已爬取或待爬取的URL 网页下载器:破解网页,进行下载 网页解析器:对网页的HTML样式、连接的URL等进…...
有效提取激光雷达点云平面点
有效地面点云的提取和平面点的识别是通过一系列步骤实现的。以下是主要步骤: 高度过滤: 首先,根据激光雷达传感器的安装高度,对当前帧扫描得到的点云进行高度过滤,以初步分割出地面点云。假设第 k k k 帧的点云为 { …...
Vulnhub DC-8靶机攻击实战(一)
导语 Vulnhub DC-8靶机教程来了,好久没有更新打靶的教程了,这次我们在来更新一期关于Vulnhub DC-8的打靶训练,如下所示。 安装并且启动靶机 安装并且启动靶机,如下所示。 开始信息采集 进入到Kali中,通过如下的命令来查找到靶机的IP地址。 arp-scan -l根据上面的结…...
基于PHP的校园新闻发布管理
摘要 近年来,随着互联网技术的迅速发展,人们获取新闻的渠道也变得越来越多样化,已经不再拘束于传统的报纸、期刊、杂志等纸质化的方式,而是通过网络满足了人们获得第一手新闻的愿望,这样更加有助于实现新闻的规范化管…...
LabVIEW时域近场天线测试
随着通信技术的飞速发展,特别是在5G及未来通信技术中,天线性能的测试需求日益增加。对于短脉冲天线和宽带天线的时域特性测试,传统的频域测试方法已无法满足其需求。时域测试方法在这些应用中具有明显优势,可以提供更快速和精准的…...
组播PIM-原理介绍+报文分析+配置示例
个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。 因此本文将在PIMv2协议报文的基础上进行介绍,以详细介绍组播协议PIM。 这里需要说明的是,以下内容都针对的是ASM&a…...
规避路由冲突
路由冲突是指在网络中存在两个或多个路由器在进行路由选择时出现矛盾,导致网络数据包无法正确传输,影响网络的正常运行。为了规避路由冲突,可以采取以下措施: 一、合理规划IP地址 分配唯一IP:确保每个设备在网络中都有…...
Asp .Net Core 实现微服务:集成 Ocelot+Nacos+Swagger+Cors实现网关、服务注册、服务发现
什么是 Ocelot ? Ocelot是一个开源的ASP.NET Core微服务网关,它提供了API网关所需的所有功能,如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关,它可以与现有的服务集成,并帮助您保护、监控和扩展您的…...
【C++】非类型模板参数 || 类模板的特化
目录 1. 非类型模板参数 2. 模板特化 3. 类模板特化 3.1.全特化 3.2 部分特化 3.3 参数更进一步限制 3.4 类模板应用 1. 非类型模板参数 模板参数分类类型形参与非类型形参。类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型…...
Python基本概念与实践
Python语言,总给我一种“嗯?还能这么玩儿?”的感觉 Python像一个二三十岁的年轻人,自由、年轻、又灵活 欢迎一起进入Python的世界~ 本人工作中经常使用Python,针对一些常用的语法概念进行持续记录。 一、类与常见数据结…...
SQL Prompt 插件
SQL Prompt 插件 注:SQL Prompt插件提供智能代码补全、SQL格式化、代码自动提示和快捷输入等功能,非常方便,可以自行去尝试体会。 1、问题 SSMS(SQL Server Management Studio)是SQL Server自带的管理工具,…...
1.6 从 GPT-1 到 GPT-3.5:一路的风云变幻
从 GPT-1 到 GPT-3.5:一路的风云变幻 人工智能的进步一直是科技领域的一个重要话题,而在自然语言处理(NLP)领域,GPT(Generative Pre-trained Transformer)系列模型的发布,标志着一个又一个技术突破。从2018年发布的 GPT-1 到2022年推出的 GPT-3.5,OpenAI 的每一次更新…...
centos 7 Mysql服务
将此服务器配置为 MySQL 服务器,创建数据库为 hubeidatabase,将登录的root密码设置为Qwer1234。在库中创建表为 mytable,在表中创建 2 个用户,分别为(xiaoming,2010-4-1,女,male&…...
参数校验 Spring Validation框架
后端参数校验 解决:校验前端传入的参数是否符合预期 1、引入依赖 使用Spring Validation框架 <!-- validation参数校验框架--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validatio…...
sunrays-framework 微调
文章目录 1.common-log4j2-starter 动态获取并打印日志存储的根目录的绝对路径以及应用的访问地址1.目录2.log4j2.xml 配置LOG_HOME3.LogHomePrinter.java 配置监听器4.spring.factories 注册监听器5.测试1.common-log4j2-starter-demo 配置2.启动测试 2.common-minio-starter …...
Java正则转带中划线或下划线属性名为驼峰命名
Java正则转带中划线或下划线属性名为驼峰命名。 利用Java正则分组匹配的方式,将属性名中 -(_) 后接的字母,匹配上了去掉当前 -(_),将后接的字母转为大写,再追加拼接起来,就完成了驼峰命名。 String lineToHump(Strin…...
WebSocket实现分布式的不同方案对比
引言 随着实时通信需求的日益增长,WebSocket作为一种基于TCP的全双工通信协议,在实时聊天、在线游戏、数据推送等场景中得到了广泛应用。然而,在分布式环境下,如何实现WebSocket的连接管理和消息推送成为了一个挑战。本文将对比几…...
Linux下的dev,sys和proc(TODO)
(TODO) 还有一个sysfs 在 Linux 系统中,/dev、/sys 和 /proc 是三个特殊的虚拟文件系统目录,它们各自有特定的用途,主要用于与设备和内核交互。以下是它们的详细区别和功能说明: 1. /dev(Devi…...
JavaScript系列(32)-- WebAssembly集成详解
JavaScript WebAssembly集成详解 🚀 今天,让我们深入了解JavaScript与WebAssembly的集成,这是一项能够显著提升Web应用性能的关键技术。 WebAssembly基础概念 🌟 💡 小知识:WebAssembly(简称W…...
通过外部链接启动 Flutter App(详细介绍及示例)
通过外部链接启动 Flutter App(firebase_dynamic_links 和 app_links) 详细介绍 通过外部链接启动flutter App 的使用及示例 在我们的APP中,经常有点击链接启动并进入APP的需求(如果未安装跳转到应用商店)。Android通…...
计算机视觉模型的未来:视觉语言模型
一、视觉语言模型 人工智能已经从识别数据中的简单模式跃升为理解复杂的多模态数据。该领域的发展之一是视觉语言模型 (VLM) 的兴起。这类模型将视觉和文本之间联系起来,改变了我们理解视觉数据并与之交互的方式。随着 VLM 的不断发展,它们正在为计算机视觉设定一个新的水平…...
CTK插件框架学习-源码下载编译(01)
1、编译环境 window11、vs17、Qt5.14.0、cmake3.27.4 2、下载链接 cmake:Index of /files/v3.20 qt:Index of / vs22以前的版本需要登录下载:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 vs22下载:下载 Visu…...
Python 字符串分割时 spilt 和 re 效率对比
假设 有一些文件名是 数字_文档名 的格式,如何用python将数字提取出来? 可以使用 Python 的正则表达式模块 re 提取文件名中的数字部分。以下是实现代码: 示例代码: import re# 示例文件名列表 file_names ["1_file1.txt…...
AUTOSAR通信篇 - PDU和收发数据
点击订阅专栏不迷路 文章目录 一、概述二、OSI模型与AUTOSAR层级关系三、I-PDU、N-PDU、L-PDU及其关系3.1. L-PDU3.2. N-PDU3.3. I-PDU 四、数据流4.1. 普通数据流4.2. 诊断数据流4.3. 动态PDU数据流4.4. 安全通信数据流4.5. XCP数据流 返回总目录 一、概述 在学习Autosar通信…...
wps数据分析000002
目录 一、快速定位技巧 二、快速选中技巧 全选 选中部分区域 选中部分区域(升级版) 三、快速移动技巧 四、快速录入技巧 五、总结 一、快速定位技巧 ctrl→(上下左右)快速定位光标对准单元格的上下部分双击名称单元格中…...
【C++基础】enum,union,uint8_t,static
enum 所以有时候使用 Enum 的目的,不是为了自定义一种数据类型,而是为了声明一组常量。 from: https://github.com/wangdoc/clang-tutorial/blob/main/docs/enum.md union C 语言提供了 Union 结构,用来自定义可以灵活变更的数据结构。它内部…...
node.js的进程保活
nodejs的进程保活其实用PM2应该更好用些,不过由于原理其实并不复杂,我们可以自己手写一个服务来干这个工作。 假设我们有一个服务,可以这样来定义下它的相关信息: const svcs[ {"sid":"apl","name"…...
css中的阴影详解
在 CSS 中,阴影效果通常使用 box-shadow 和 text-shadow 来实现,它们分别适用于元素的框和文本。阴影是提升页面设计感和层次感的重要工具。下面,我会详细讲解这两个属性,并结合代码示例说明。 目录 1. box-shadow示例 2. text-sh…...
AI刷题-饭馆菜品选择问题、构造回文字符串问题
目录 一、饭馆菜品选择问题 问题描述 测试样例 解题思路: 问题理解 数据结构选择 算法步骤 最终代码: 运行结果: 二、构造回文字符串问题 问题描述 测试样例 解题思路: 解题思路 具体步骤 最终代码:…...
时间序列分析ARIMA(AutoRegressive Integrated Moving Average,自回归积分滑动平均)模型:中英双语
ARIMA模型:时间序列分析中的强大工具 在时间序列分析中,ARIMA(AutoRegressive Integrated Moving Average,自回归积分滑动平均)模型是一种广泛使用的模型。它通过结合自回归、差分和滑动平均三种方法来对时间序列进行…...
青少年编程与数学 02-007 PostgreSQL数据库应用 02课题、PostgreSQL数据库安装
青少年编程与数学 02-007 PostgreSQL数据库应用 02课题、PostgreSQL数据库安装 一、安装Windows系统安装PostgreSQL 17Linux系统安装PostgreSQL 17 二、配置Windows系统Linux系统 三、启动(一)Windows系统使用服务管理器(services.msc&#x…...
群发邮件适合外贸行业吗
一、群发邮件契合外贸行业的市场拓展需求 外贸业务的本质在于跨越地域限制,与全球各地的潜在客户建立联系。群发邮件能够突破时空限制,瞬间将产品或服务信息传递到世界各地。通过精准的市场调研与客户数据整理,企业可以针对不同国家和地区的…...
面试之《new关键字》
一问:new关键字做了什么操作,手写一个new方法,实现new关键字的作用 二问: // 第一题 / function Test(){this.name 1;return {name: 2} } const a new Test(); console.log(a.name) // 打印什么/// 第二题 / function Test2()…...
《机器学习》——SVD(奇异分解)降维
文章目录 SVD基本定义SVD降维的步骤SVD降维使用场景SVD 降维的优缺点SVD降维实例导入所需库定义SVD降维函数导入图像处理图像处理图像打印降维结果并显示处理后两个图像的对比图 SVD基本定义 简单来说就是,通过SVD(奇异值分解)对矩阵数据进行…...
【MySQL实战】mysql_exporter+Prometheus+Grafana
要在Prometheus和Grafana中监控MySQL数据库,如下图: 可以使用mysql_exporter。 以下是一些步骤来设置和配置这个监控环境: 1. 安装和配置Prometheus: - 下载和安装Prometheus。 - 在prometheus.yml中配置MySQL通过添加以下内…...
业务架构、数据架构、应用架构和技术架构
TOGAF(The Open Group Architecture Framework)是一个广泛应用的企业架构框架,旨在帮助组织高效地进行架构设计和管理。 TOGAF 的核心就是由我们熟知的四大架构领域组成:业务架构、数据架构、应用架构和技术架构。 企业数字化架构设计中的最常见要素是4A 架构。 4…...
mysql-5.7.18保姆级详细安装教程
本文主要讲解如何安装mysql-5.7.18数据库: 将绿色版安装包mysql-5.7.18-winx64解压后目录中内容如下图,该例是安装在D盘根目录。 在mysql安装目录中新建my.ini文件,文件内容及各配置项内容如下图,需要先将配置项【skip-grant-tab…...
Linux测试处理fps为30、1920*1080、一分钟的视频性能
前置条件 模拟fps为30、1920*1080、一分钟的视频 项目CMakeLists.txt cmake_minimum_required(VERSION 3.30) project(testOpenGl)set(CMAKE_CXX_STANDARD 11)add_executable(testOpenGl main.cpptestOpenCl.cpptestOpenCl.hTestCpp.cppTestCpp.hTestCppThread.cppTestCppTh…...
kubeneters-循序渐进Ingress
文章目录 overviewIngress 是什么?为什么使用 Ingress?我们会在这里做些什么?HTTP 服务器(Nginx)还能做什么?Kubernetes 中的简单示例:A) 使用 Service ClusterIPB) 手动配置 Nginx 服务作为代理…...
Shell控监Kafka积压
1、获取Kafka消息堆积情况 vi check-kafka-lag.sh #!/bin/bashTOPIC"total_random" GROUP_ID"etl-dw" BOOTSTRAP_SERVER"node-01:9092,node-02:9092,node-03:9092"# 检查第一个参数是否为数字 if ! [[ $1 ~ ^[0-9]$ ]]; thenecho &…...