SpringBoot开发中的一些小细节(八)

SpringBoot开发中的一些小细节(八)

2019, Mar 14    

前言

主要用来记录整理最近一周工作学习中遇到,学到的一些小知识,积少成多,聚沙成塔

小细节

Swagger-ui显示枚举类型的时候

定义的枚举类型的头上不需要加一些莫名其妙的注解,就可以在Swagger-ui界面自动生成

	public enum GreyTaskType {
	    SCALE,
	    PERSON,
	    DEMAND,
	    HOST
	    ;
	}

例子

Swagger-ui的参数显示的问题

这个是在帮忙解决朋友的问题的时候发现的,其实就是Getter的问题,他定义了俩Getter,这样就会有俩参数跑出来了。

双向的验证

在两个模块相互依赖的时候,一方在进行某些操作的时候,需要判断另一方的状态,同样,另一方在进行某些操作的时候,也需要对这边的状态进行判断。 (主要是在删除和发布操作的时候)

Burp Suite和Kali系统

能够用于web应用攻击的,主要使用这个工具来进行网络安全方面的测试。而Kali系统主要就是黑客使用的系统了,用于网络渗透

Spring cloud配置中心

能够使用这个工具,实现项目发布在不同环境的情况下, 自行加载对应环境下的配置,而不再用手动修改

配置的优先级顺序:
  • 配置中心的/-(env).yml (一般不存在)
  • 配置中心的application-env.yml (一般不存在)
  • 配置中心的 /-test.yml
  • 配置中心的application-test.yml
  • 配置中心的 /.yml
  • 配置中心的application.yml
  • 项目内的application.yml

从上到下,优先级依次降低

debug的时候的细节

在debug的时候,停到某一行的时候,可以按optional+f8,可以单独对函数进行调试,包括修改参数等等操作

栈和队列有什么区别

吃多了拉就是队列,吃多了吐就是栈(段子区看到的23333对栈和队列最形象生动的解释了)

Java中的装箱和拆箱

这个是一个前辈教授于我的,同时还推荐了一些书籍给我

spring 相关书籍推荐

spring boot 编程思想 原生类型,装箱和拆箱(int 和Integer) https://www.cnblogs.com/dolphin0520/p/3780005.html

为什么会有装箱和拆箱

我的理解,是将一个基本类型装箱,变成一个类,比如int 比那成Integer,这样做了之后,就能赋予这个类其他的各种方法和函数操作。
当然这只是我很浅显的理解,下面是我在网上查阅相关的资料所了解到原因

为什么会有装箱和拆箱 深入浅出java装箱和拆箱

  • 将一个基本类型包装成一个类, 可以使得这个类有很多可以调用的方法
  • java还不算纯面向对象的语言,真正的面向对象,是没有基本数据类型的
  • 在java的泛型中,基本类型是不能够作为泛型参数的,因此需要使用包装类的类型解决泛型参数的问题
  • 这也是早期java的设计缺陷,基本的数据类型是数据,不是对象,也不是Object的子类,因此需要装箱,才能和其他的Object子类公用一个接口
基本数据类型和对应的包装类
基本数据类型 包装类
int(4字节) Integer
byte(1字节) Byte
short(2字节) Short
long(8字节) Long
float(4字节) Float
double(8字节) Double
char(2字节) Character
boolean(未定) Boolean
装箱和拆箱的过程
  • 装箱过程:通过调用包装器的valueOf方法实现的
  • 拆箱过程:通过调用包装器的xxxValue方法实现的。(xxx代表对应的基本数据类型)。
其他注意点
  • 通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象。有面试题考察Integer A=100,B=100,问A==B结果是什么,答案是true,但是如果是200的话,答案就是false。原因就是前面所说的那样。
  • Double类的valueOf方法会采用与Integer类的valueOf方法不同的实现,因此上面那一点里面的题,如果是200.0的话,答案都是false。原因是因为,在某个范围内的整型数值的个数是有限的,但是浮点数的个数可以说是无数个。(Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。而Double、Float的实现方式是类似的)
  • Boolean类型,在遇到上面的问题的时候,答案都是true
  • Integer i = new Integer(xxx)和Integer i =xxx;这两种方式的区别,前者不会触发自动装箱,后者会触发自动装箱,其次,在一般情况下,第二种执行方式在执行效率和资源占用方面优于第一种情况
  • 对于包装类型,equals函数不会触发自动转换,