Java基础42 枚举与注解
枚举与注解
- 一、枚举(enumeration)
- 1.1 自定义类实现枚举
- 1.2 enum关键字实现枚举
- 1.2.1 enum的注意事项
- 1.2.2 enum的使用练习
- 1.2.3 enum的常用方法
- 1.2.4 enum的使用细节及注意事项
- 1.2.5 enum练习
- 二、注解(Annotation)
- 2.1 @Override(☆)
- 2.2 @Deprecated(☆)
- 2.3 @SuppressWarnings
- 2.4 元 Annotation
- 2.4.1 @Retention
- 2.4.2 @Target
- 2.4.3 @Documented
- 2.4.4@Inherited
- 注解小结
一、枚举(enumeration)
枚举(enum):一组常量的集合,属于一种特殊的类,里面只包含一组有限的特定的对象。
● 枚举的两种实现方式:
- 自定义类实现枚举
- 使用enum关键字实现枚举
1.1 自定义类实现枚举
- 不需要提供setXxx方法,因为枚举对象值通常为只读。
- 对枚举对象 / 属性使用 final + static 共同修饰,实现底层优化。
- 枚举对象通常使用全部大写,常量的命名规范。
- 枚举对象根据需要,也可以有多个属性
● 自定义枚举应用案例:
要求创建季节(Seanson)对象,给出属性、构造器等结构,再添加枚举去实现调用并输出结果。
public class Enumeration01{public static void main(String[] args){System.out.println(Season.AUTUMN);System.out.println(Season.SPRING);}
}class Season{ //类private String name;private String desc; //描述public static final Seanson SPRING = new Season("春天","温暖");public static final Seanson WINTER = new Season("冬天","寒冷");public static final Seanson AUTUMN = new Seanson("秋天","凉爽");public static final Seanson SUMMER = new Seanson("夏天","炎热");//1.将构造器私有化,目的是防止直接创建对象//2.去掉setXxx方法,防止属性被修改//3.在Season内部,直接创建固定的对象//4.优化:加入final修饰符private Season(String name,String desc){this.name = name;this.desc = desc;}public String getName(){return name;}public String getDesc(){return desc;}public String toString(){return "Seanson{"+"name=" + name + '\'' +",desc=" + desc + '\'' + '}';}
}
运行效果
● 自定义类实现枚举小结
- 构造器私有化
- 本类内部创建一组对象【比如上面代码的春夏秋冬】
- 对外暴露对象(通过对象添加public final static 修饰符)
- 可以提供get方法,但是不要提供set方法
1.2 enum关键字实现枚举
使用enum来实现前面的枚举案例
如果使用了enum来实现枚举类
- 使用关键字 enum 替代 class
- public static final Season SPRING = new Season(“春天”,“温暖”)可以替换为:
SPRING(“春天”,“温暖”) ==> 常量名(参数列表)- 如果有多个常量(对象),使用 " , " 号间隔即可
- 如果使用 enum 来实现枚举,要求将定义常量对象,写在最前面。
public class Enumeration01{public static void main(String[] args){System.out.println(Season.AUTUMN);System.out.println(Season.SPRING);}
}enum Season{ //类//public static final Season SPRING = new Season("春天","温暖")可以替换为://SPRING("春天","温暖") ==> 常量名(参数列表)SPRING("春天","温暖"),WINTER("冬天","寒冷"),AUTUMN("秋天","凉爽"),SUMMER("夏天","炎热");private String name;private String desc; //描述private Season(String name,String desc){this.name = name;this.desc = desc;}public String getName(){return name;}public String getDesc(){return desc;}public String toString(){return "Seanson{"+"name=" + name + '\'' +",desc=" + desc + '\'' + '}';}
}
运行效果
1.2.1 enum的注意事项
- 当我们使用 enum 关键字开发一个枚举时,默认会继承Enum类,而且是一个final类。
- 传统的 public static final Season SPRING = new Season(“春天”,“温暖”);简化成SPRING(“春天”,“温暖”),这里必须知道,它调用的是哪个构造器。(这里指的是:有两个字符串的构造器)
- 如果使用无参构造器 创建 枚举对象,则实参列表和小括号都可以省略。【如果我们使用的是无参构造器,创建常量对象,则可以省略( )】
SUMMER("夏天","炎热"),Season;
- 当有多个枚举对象时,使用,间隔,最后一个分号结尾。
enum Season{spring,summer;
}
- 枚举对象必须放在枚举类的行首。
enum Season{spring,summer;构造器...
}
1.2.2 enum的使用练习
- 下面代码是否正确,并说明表示的含义。
enum Gender{BOY,GIRL;
}
答案:
上面的语法是正确的;有一个枚举类:Gender,没有属性;有两个枚举对象 BOY,GIRL,使用的是无参构造器创建。
如果修改一下上面的代码,添加一个有参构造器的话,结果又会怎么样?
enum Gender{BOY,GIRL;private Gender(String name){}
}
答案:
因为添加了构造器,程序检测时就会把原本默认的构造器给覆盖(把原本默认的无参构造器给覆盖了),变为有参构造器,所以添加了构造器的Gender类需要加上无参构造器。
enum Gender{BOY,GIRL;private Gender(String name){}private Gender(){}
}
1.2.3 enum的常用方法
在使用关键字enum时,会隐式继承Enum类,这样我们就可以使用Enum类相关的方法。
常用的enum方法有:
方法名 | 详细描述 |
---|---|
valueOf | 传递枚举类型的Class对象和枚举常量名称给静态方法valueOf,会得到与参数匹配的枚举常量 |
toString | 得到当前枚举常量的名称。一般可以通过重写这个方使得到的结果更易读。 |
equals | 在枚举类型中可以直接使用 " == " 来比较两个枚举常量是否相等。 |
hashCode | Enum实现了hashCode()来和equals()保持一致。它也是不可变的。 |
getDeclaringClass | 得到枚举常量所属枚举类型的Class对象。可以用它来判断两个枚举常量是否属于同一个枚举类型。 |
name | 得到当前枚举常量的名称。建议先试用toString()。 |
ordinal | 得到当前枚举常量的次序 |
compareTo | 枚举类型实现了Comparable接口,这样可以比较两个枚举常量的大小(按照声明的顺序排列) |
clone | 枚举类型不能被Clone,为了防止子类实现克隆方法,Enum实现了一个仅抛出CloneNotSupporttedException异常的不变Clone()。 |
1. name:得到当前枚举常量的名称。建议先试用toString()。
//使用Season2 枚举类,来演示各种方法
Season2 autumn = Season2.AUTUMN;
//输出枚举对象的名字
System.out.println(autumn.name());
运行效果
2. ordinal:输出的是该枚举对象的次序/编号,从0开始编号
//ordinal() 输出的是该枚举对象的次序/编号,从0开始编号
//AUTUMN 枚举对象是第三个 , 因此输出2
System.out.println(autumn.ordinal());
运行效果
这里补充一个增强for
//这里补充一个增强forint[] nums = {1,2,9};//普通的for循环System.out.println("=====普通的for=====");for(int i = 0; i < nums.length; i++){}System.out.println("=====增强的for=====");
//执行流程是:依次从nums数组中取出数据,赋给i,如果取出完毕,则退出forfor(int i : nums){System.out.println("i=" + i);}
}
运行效果
3. values :从反编译可以看出values方法,返回Season2[]含有定义的所有枚举对象
注意:Java编译器会自动在enum类型中插入values方法,Enum类里面没有
//从反编译可以看出values方法,返回Season2[]含有定义的所有枚举对象
Season2[] values = Season2.values();
System.out.println("===遍历输出枚举对象(增强for)====");
for(Season2 season: values){//增强for循环System.out.println(season);
}
运行效果
4. values:返回当前枚举类中所有的常量
//从反编译可以看出,values方法,返回Season2[]//含有定义的所有枚举对象Season2[] values = Season2.values();System.out.println("===遍历取出枚举对象(增强for)====");for(Season2 season : values){System.out.println(season);}
运行效果
5. valuesOf:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常!
valuesOf的执行流程:
- 根据你输入的值,到枚举对象去查找。
- 如果找到了,就返回,如果没有找到,则报错。
Season2 autumn1 = Season2.valuesOf("AUTUMN");
system.out.println("autumn1=" + autumn1);
system.out.println(autumn == autumn1);
运行结果
6. compareTo:比较两个枚举常量,比较的就是位置号(编号)!
compareTo运行流程:
就是把一个枚举对象与另一个枚举对象的编号进行比较
//这里的compareTo就是把Season2.AUTUMN枚举对象的编号和Season2.SUMMER枚举对象的编号进行比较
//而此时的Season2.AUTUMN的编号为:[2] - Seaso.SUMMER的编号:[3],所以得到结果为:-1
System.out.println(Season2.AUTUMN.compareTo(Season2.SUMMER));
运行效果
1.2.4 enum的使用细节及注意事项
- 使用enum关键字后,就不能再继承其它类了,因为enum会隐式继承Enum,而Java是单继承机制。
- 枚举类和普通类一样,可以实现接口,形式如下:
enum 类名 implements 接口1,接口2{}
enum实现的枚举类,仍然是一个类,所以还是可以实现接口的。
interface IPlaying{public void playing();
}
enum Music implements IPlaying{CLASSICMUISC;public void playing(){System.out.println("播放音乐...");}
}
1.2.5 enum练习
题目如下:
- 声明Week枚举类,其中包含星期一至星期日的定义;
MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY、SUNDAY; - 使用values返回所有的枚举数组,并遍历,输出下图的效果。
代码实现:
public static void main(String[] args){//获取到所有的枚举对象,即数组Week[] weeks = Week.values();//遍历,使用增强forSystem.out.println("===所有星期的信息如下===");for(Week week : weeks){System.out.println(vweek + '/n');}
}Week class{//定义Week的枚举对象MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),THURSDAY("星期四"),FRIDAY("星期五"),SATURDAY("星期六"),SUNDAY("星期日");private String name;//构造器private Week(String name){this.name = name;}//重写toStringpublic String toString(){return name;}
}
运行效果
二、注解(Annotation)
● 注解的理解
- 注解(Annotation)也被称为元数据(Metadata),用于修饰解释:包类、方法、属性、构造器、局部变量等数据信息。
- 和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。
- 在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。
● Annotation的使用
使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素
● 三个基本的Annotation:
- @Override:限定某个方法,是重写父类方法,该注解只能用于方法。
- @Deprecated:用于表示某个程序元素(类、方法等)已过时
- @SuppressWarnings:抑制编译器警告
2.1 @Override(☆)
@Override:限定某个方法,是重写父类方法,该注解只能用于方法
- Overrdie注解,表示指定重写父类的方法(从编译层面验证),如果父类没有此方法,则会报错。
- 但是如果没有写Override,它依旧还是会重写父类。
- 如果你写了@Override注解,编译器就会去检查该方法是否真的重写了。如果的确重写了,则编译通过,如果没有构成重写,则编译错误。
- @Override 只能修饰方法,不能修饰其他类,包,属性等等。
- @Target是修饰注解的注解,称为元注解。
Override使用演示
class Father{ //父类public void fly(){System.out.println("Father fly...");}
}class Son extends Father{ //子类//1.Overrdie注解,放在fly方法上,表示子类的fly方法时重写了父类的fly//2.这里如果没有写@Override,还是重写了父类fly//3.如果你写了@Override注解,编译器就会去检查该方法是否真的重写了//父类的方法,如果的确重写了,则编译通过,如果没有构成重写,则编译错误//4.@Override的定义//如果发小@interface,则表示一个注解类/*@Target(ElementType.METHOD)@Retention(RetentionPolicy.SOURCE)public @interface Override{}*/@Override //说明public void fly(){System.out.println("Son fly....");}
}
2.2 @Deprecated(☆)
@Deprecated:用于表示某个程序元素(类、方法等)已过时
@Deprecated的说明:
- 用于表示某个程序元素(类,方法等)已过时
- 可以修饰方法、类、字段、包、参数等等
- 查看@Deprecated的注解:@Target(value={CONSTRUCTOR,FIELD,LOCAL_VARIABLE,METHOD,PACKAGE,PARAMETER、TYPE})
- @Deprecated的作用可以做到新旧版本的兼容和过渡
public class Deprecated01{public static void main(String[] args){A a = new A();a.hi();System.out.println();}
}@Deprecated
class A {public int n1 = 10;public void hi(){}
}
如果在n1和hi的上面添加上Deprecated,则在你使用n1和hi的时候,会有中划线。
修改后:
@Deprecated
class A {@Deprecatedpublic int n1 = 10;@Deprecatedpublic void hi(){}
}
主方法调用时的中划线:
2.3 @SuppressWarnings
@SuppressWarnings:抑制编译器警告
当我们不希望看到系统给的黄色警告时,我们可以使用@SuppressWarnings注解来抑制警告信息
● SuppressWarnings作用范围
关于SuppressWarnings作用范围是和你放置的位置相关,比如:
@SuppressWarnings放置在main方法,那么抑制警告的范围就是main
通常我们可以放置具体的语句,比如:方法、类。
@SuppressWarnings使用演示
在使用Idea工具时,往往会出现很多黄色的警告,比如下面的代码,在写完时Idea右上角就会出现黄色的三角警告:
public class SuppressWarnings01{public static void main(String[] args){List list = new ArrayList();list.add("");list.add("");list.add("");int i;System.out.println(list.get(1));}
}
三角警告
如果我们不希望看到这些警告的时候,就可以使用@SuppressWarnings注解来抑制这些警告:
//在{""}中,可以写入你希望抑制的(不显示)警告信息
public class SuppressWarnings01{@SuppressWarnings({"rawtypes"})public static void main(String[] args){List list = new ArrayList();list.add("");list.add("");list.add("");int i;System.out.println(list.get(1));}
}
这时候就可以看见右上角的警告变少了
再加上其他的类型,就可以屏蔽掉所有的警告了。
@SuppressWarnings({"rawtypes","unchecked","unused"})
● SuppressWarnings能指定的警告类型有:
all | 抑制所有警告 |
---|---|
boxing | 抑制与封装/拆装作业相关的警告 |
cast | 抑制与强制转换型作业相关的警告 |
dep-ann | 抑制与淘汰注释相关的警告 |
deprecation | 抑制与淘汰的相关警告 |
fallthrough | 抑制与switch陈述式中遗漏break相关的警告 |
finally | 抑制与未传回finally区块相关的警告 |
hiding | 抑制与隐藏变数的取余变数相关的警告 |
incomplete-switch | 抑制与switch陈述式(enum case)中遗漏项目相关的警告 |
javadoc | 抑制与javadoc相关的警告 |
nls | 抑制与非nls子串文字相关的警告 |
null | 抑制与空值分析相关的警告 |
rawtypes | 抑制与eaw类型相关的警告 |
resource | 抑制与使用Closeable类型相关的资源相关的警告 |
restnicthon | 抑制与使用不建议或进制参照相关的警告 |
serial | 抑制与可序列化的类别遗漏serialVresionUID栏位相关的警告 |
static-access | 抑制与静态存取不正确相关的警告 |
static-method | 抑制与可能警告为static的方法相关的警告 |
super | 抑制与置换方法相关但不含super呼叫的警告 |
synthetic-access | 抑制与内部类别的存取未最佳化相关的警告 |
sync-override | 抑制因为置换同步方法面遗漏同步化的警告 |
unchecked | 抑制与未检查的作业相关的警告 |
unqualified-field-access | 抑制与栏位存取不合格相关的警告 |
unused | 抑制与未用的程式码及停用的程式码相关的警告 |
● @SuppressWarnings注解的各种值
- unchecked : 忽略没有检查的警告
- rawtypes : 忽略没有指定泛型的警告(传参时没有指定泛型的警告错误)
- unused : 忽略没有使用某个变量的警告错误
- @SuppressWarnings : 可以修饰的程序元素为:
查看@Target
@Target({TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})@Retention(RetentionPolicy.SOURCE)public @interface SuppressWarnings{String[] value();
}
(1) 可修饰的值就为大括号内的值:TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE
(2)该注解类有数组 String[] values() 设置一个数组,比如{“rawtypes”,“unchecked”,“unused”}
- 生成@SuppressWarnings时,不用背,直接点击左侧的黄色提示,就可以选择(注意可以指定生成的位置)
2.4 元 Annotation
● 元注解的基本介绍
JDK 的元 Annotaion 用于修饰其他 Annotation
元注解:本身作用不大,主要是看源码时知道是个什么东西。
● 元注解的种类(使用不多,了解,不用深入)
1)Retention //指定注解的作用范围,三种SOURCE,CLASS,RUNTIME
2)Target //指定注解可以在哪些地方使用
3)Documented //指定该注解是否会在javadoc体现
4)Inherited //子类会继承父类注解
2.4.1 @Retention
@Retention:用于指定该Annotation可以保留多长时间,只能用于修饰一个Annotation定义。
@Retention包含一个RetentionPolicy类型的成员变量,使用@Retention时必须为该value成员变量指定值
● @Retention的三种值
- RetentionPolicy.SOURCE:编译器使用后,直接丢弃这种策略的注释
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override{
}
- RetentionPolicy.CLASS:编译器将把注解记录在class文件中,当运行Java程序时,JVM不会保留注解。【这是默认值】
- RetentionPolicy.RUNTIME:编译器将把注释记录在class文件中,当运行Java程序时,JVM会保留注解,程序可以通过反射获取该注解。
2.4.2 @Target
Target:用于修饰Annotation定义。
用于修饰Annotation定义,用于指定被修饰的Annotation能用于修饰程序的元素为:
@Target({TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,PACKAGE,PARAMETER})
@Target也包含一个名为value的成员变量。
2.4.3 @Documented
@Documented:用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档,即在生成文档时,可以看到该注解。
注意:
定义为Documented的注解必须设置Retention值为RUNTIME。
2.4.4@Inherited
Inherited:被它修饰的Annotation将具有继承性,如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解
注意:
实际应用中,使用较少,了解即可。
注解小结
- @Override:限定某个方法,是重写父类方法,该注解只能用于方法
- @Deprecated:用于表示某个程序元素(类、方法等)已过时
- @SuppressWarnings:抑制编译器警告
相关文章:
Java基础42 枚举与注解
枚举与注解一、枚举(enumeration)1.1 自定义类实现枚举1.2 enum关键字实现枚举1.2.1 enum的注意事项1.2.2 enum的使用练习1.2.3 enum的常用方法1.2.4 enum的使用细节及注意事项1.2.5 enum练习二、注解(Annotation)2.1 Override&am…...
shell的变量和引用
文章目录二、变量和引用2.1 什么是变量2.2变量的命名2.3 变量的类型2.3.1 根据数据类型分类2.3.2 根据作用域分类2.4 变量的定义2.5 shell中的引用2.6 变量的运算练习:二、变量和引用 在程序设计语言中,变量是一个非常重要的概念。也是初学者在进行Shel…...
基于PHP的招聘网站
摘要在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括在线招聘的网络应用,在外国在线招聘已经是很普遍的方式,不过国内的在线招聘可能还处于起步阶段。招聘网站具有招聘信息功能的双向选择,…...
轻松使用 Python 检测和识别车牌(附代码)
车牌检测与识别技术用途广泛,可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计算机视觉和人工智能。 本文将使用Python创建一个车牌检测和识别程序。该程序对输入图像进行处理,检测和识别车牌,最后显示车牌字符,作为…...
DVWA—CSRF-Medium跨站请求伪造中级
注意: 1、这里对XSS(Stored)关卡不熟悉的可以从这里去看http://t.csdn.cn/ggQDK 2、把难度设置成 Medium 一、这一关同样我们需要埋下伏笔,诱使用户点击来提交,首先从XSS(Stored)入手。 注意:在前面介绍…...
【电商】后台订单生成
结合商品流转的电商系列介绍了一些了,商品已经采购入库、价格税率设置好了、活动及相关模板也已经准备完毕,下面就应该上架销售了,现在接着聊下订单的生成。 订单从产生到最终的关闭需要经历很多的环节,订单也是电商系统的核心数据…...
作为公司,这个5款在线软件工具赶紧安利起来!
2023年了 ,您的企业还没使用在线软件工具吗?自从用了在线工具之后,感觉打开了新办公世界的大门,效率蹭蹭蹭地往上涨啊。对于喜欢追求效率和便捷的我来说,在线实在是太棒了!今天安利几个非常不错的在线软件工…...
面试(七)为什么一般希望将析构函数定义为虚函数
class B { public:~B() // 基类析构函数不为虚函数{cout << "B::~B()" << endl;} };class D : public B { public:~D(){cout << "D::~D()" << endl;} };void Test(B* t) {delete t;t nullptr; }int main() {B *pb new B;Test…...
MySQL必会四大函数-时间函数
一、时间日期获取函数 获取当前日期(date)函数:curdate() mysql> select curdate(); 2023-02-09 获取当前时间(time)函数:curtime() select curtime(); 08:49:27 获取当前时间戳(date &…...
震惊!邻桌的程序猿做可视化报告竟然比我还快,带着好奇心我打开了他的电脑,发现惊天秘密,原因竟是...
其实,本文就是想分享一个做可视化的捷径! 制作可视化的方式有千千万。 Excel 控若能轻车熟路驾驭 VBA,能玩出各种花来,再不济借助图表插件外援也能秒杀一众小白选 手。 会编程的,Echarts 几十行代码,分分…...
mathtype7与word冲突,无法安装,不显示工具栏的问题解决
首先无法安装,或安装出错时,要清理注册表防止以后再次出现该问题,以此记录留作备份。打开注册表的方法是键盘winr键同时按(win就是Alt旁边像窗户图标的键),正常的话会跳出一个叫“运行”的家伙,…...
IBM AIX 升级Openssh 实现篇(编译安装)
升级成功佐证 !!!本文所有内容仅作参考,请在测试环境中具体测试完毕后才能应用于生产环境!!! [1]备份和恢复方案 开启telnet 服务,防止ssh 掉线后无法重连维护。在修复漏洞后关闭telnet。 备份该服务相关的所有文件,以便恢复。 root@TEST:/etc# vi inetd.conf #ftp…...
linux的睡眠框架及实现
睡眠 4 种模式:S2I (Suspend-to-Idle): 挂起系统,IO进入低功耗模式。需配置CONFIG_SUSPEND。Standby:执行S2I后,把AP (nonboot CPU) 离线。除了CONFIG_SUSPEND的支持外,还需要向suspend子系统注册ÿ…...
Java面试知识点
工作也有好些年了,从刚毕业到前几年看过无数的面试题,总想着自己写一个面试总结,随着自我认识的变化,一些知识点的理解也越来越不一样了。写下来温故而知新。很多问题可能别人也总结过,但是答案不尽相同,如…...
PTA Advanced 1159 Structure of a Binary Tree C++
目录 题目 Input Specification: Output Specification: Sample Input: Sample Output: 思路 代码 题目 Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, a binary tree can be un…...
CDN绕过技术总汇
注 本文首发于合天网安实验室 首发链接:https://mp.weixin.qq.com/s/9oeUpFUZ_0FUu6YAhQGuAg 近日HVV培训以及面试,有人问了CDN该如何绕过找到目标真实IP,这向来是个老生常谈的问题,而且网上大多都有,但是有些不够全面…...
算法训练营DAY51|300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
本期是求子序列的新的一期,题目前两道有一些相似之处,思路差不多,第三道有一点难度,但并不意味着第一道没有难度,没有做过该类型题的选手,并不容易解出题解。 300. 最长递增子序列 - 力扣(Leet…...
mac:彻底解决-安装应用后提示:无法打开“XXX”,因为无法验证开发者的问题;无法验证此App不包含恶意软件
mac从浏览器或其他电脑接收了应用,但是打开报错 目录报错解决办法一次性方法永久解决方法验证恢复应用验证报错 截图如下: 错误信息 无法打开“XXX”,因为无法验证开发者的问题;无法验证此App不包含恶意软件 解决办法 一次性方…...
CPU 指标 user/idle/system 说明
从图中看出,一共有五个关于CPU的指标。分别如下: User User表示:CPU一共花了多少比例的时间运行在用户态空间或者说是用户进程(running user space processes)。典型的用户态空间程序有:Shells、数据库、web服务器…… Nice N…...
Thinkphp大型进销存ERP源码/ 进销存APP源码/小程序ERP系统/含VUE源码支持二次开发
框架:ThinkPHP5.0.24 uniapp 包含:服务端php全套开源源码,uniapp前端全套开源源码(可发布H5/android/iod/微信小程序/抖音小程序/支付宝/百度小程序) 注:这个是全开源,随便你怎么开,怎么来&a…...
hgame2023 WebMisc
文章目录Webweek1Classic Childhood GameBecome A MemberGuess Who I AmShow Me Your BeautyWeek2Git Leakagev2boardSearch CommodityDesignerweek3Login To Get My GiftPing To The HostGopher Shopweek4Shared DiaryTell MeMiscweek1Where am I神秘的海报week2Tetris Master…...
67. Python的绝对路径
67. Python的绝对路径 文章目录67. Python的绝对路径1. 准备工作2. 路径3. 绝对路径3.1 概念3.2 查看绝对路径的方法4. 课堂练习5. 用绝对路径读取txt文件6. 加\改写绝对路径6.1 转义字符知识回顾6.2 转义字符改写7. 总结1. 准备工作 对照下图,新建文件夹和txt文件…...
VHDL语言基础-组合逻辑电路-加法器
目录 加法器的设计: 半加器: 全加器: 加法器的模块化: 四位串行进位全加器的设计: 四位并行进位全加器: 串行进位与并行进位加法器性能比较: 8位加法器的实现: 加法器的设计&…...
内存检测工具Dr.Memory在Windows上的使用
之前在https://blog.csdn.net/fengbingchun/article/details/51626705 中介绍过Dr.Memory,那时在Windows上还不支持x64,最新的版本对x64已有了支持,这里再总结下。 Dr.Memory源码地址https://github.com/DynamoRIO/drmemory,最新发…...
J6412四网口迷你主机折腾虚拟机教程
今天给大家做一个四网口迷你主机折腾虚拟机的安装教程,主机采用的是maxtang大唐NUC J6412 intel i226V四网口的迷你主机,这款主机它是不能直接装上NAS的,必须使用虚拟机系统,近期研究了下然后做了一个教程分享给大家。 首先需要做…...
电子招标采购系统—企业战略布局下的采购寻源
智慧寻源 多策略、多场景寻源,多种看板让寻源过程全程可监控,根据不同采购场景,采取不同寻源策略, 实现采购寻源线上化管控;同时支持公域和私域寻源。 询价比价 全程线上询比价,信息公开透明ÿ…...
elasticsearch 之 mapping 映射
当我们往 es 中插入数据时,若索引不存在则会自动创建,mapping 使用默认的;但是有时默认的映射关系不能满足我们的要求,我们可以自定义 mapping 映射关系。 mapping 即索引结构,可以看做是数据库中的表结构,…...
2023年rabbitMq面试题汇总2(5道)
一、如何确保消息接收⽅消费了消息?接收⽅消息确认机制:消费者接收每⼀条消息后都必须进⾏确认(消息接收和消息确认是两个不同操作)。只有消费者确认了消息,RabbitMQ才能安全地把消息从队列中删除。这⾥并没有⽤到超时…...
电视剧《狂飙》数据分析,正片有效播放市场占有率达65.7%
哈喽大家好,春节已经过去了,朋友们也都陆陆续续开工了,小编在这里祝大家开工大吉!春节期间,一大批电视剧和网剧上映播出,其中电视剧《狂飙》以不可阻挡之势成功成为“开年剧王”。这里小编整理了一些《狂飙…...
cas单点登录后重定向次数过多问题以及调试cas-dot-net-client
问题描述: web项目应用cas作为单点登录站点,登录后无法打开WEB项目的页面,报错,说重定向次数过多。 老实说,这种问题,以前遇到过不少,是我这种半桶水程序员的噩梦。解决这种问题,不…...
做网站主要是做什么/搜索引擎优化的基础是什么
在API网关开放API服务后,如何保障服务的稳定性,怎么能够实时监控API的情况?及时处理API服务异常,是API开放者关注的重点。本文将主要介绍API网关提供的API监控报警功能,通过简单的配置,即可帮助您实现API的…...
中学生网站源码/媒体宣传推广方案
硬件工程师跟结构工程师交互的文件,就只有结构图了,也就是PCB板框,这类文件一般是由AutoCAD导出的DWG、DXF文件,当然,也有只给你3D图的(如SolidWorks、Pro-E等),让你自己导。 这里以…...
低价企业网站搭建/9 1短视频安装
1 修改配置文件 /etc/my.conf (为了命令 mysqldump能省略输入密码执行,mysql5.5 之后已经不建议控制台直接输入密码的方式)增加如下配置[client]hostlocalhostuserrootpassword‘password‘2 创建任务 shell# !/bin/shdd"$(date "%Y%m%d%H%M%S")&qu…...
吴忠网站设计公司/四川网站seo
备份文/爱掏蜂窝的熊(简书作者)原文链接:http://www.jianshu.com/p/0b6f5148dab8著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。序 在日常开发中,app难免会发生崩溃。简单的崩溃…...
网站推广费用ihanshi/什么软件可以排名次
当你需要将DWG或者DXF格式的CAD图纸转为BMP图片格式的时候,你会怎么做呢?在网上找格式转换的软件?先截图再修改格式?......其实,并不需要那么麻烦,因为轻量级CAD绘图软件——浩辰CAD看图王电脑版中直接就有…...
广东免费建站公司/南京百度推广
2816. Troywar loves Maths ★★☆ 输入文件:Troy_1.in 输出文件:Troy_1.out 简单对比 时间限制:1 s 内存限制:256 MB 【题目描述】 众所周知,Troywar总是不好…...