} private static void thread2() { //该线程是期望创建一个共享列表的独立镜像,然后对镜像进行费时的操作
)、Return(退货)、Checked(已确认)Fulfilled(已配货)、 线程状态:创建、就绪、运行、阻塞、死亡 当需要定义一组常量时,强烈建议使用枚举类 当我们想要表示一组信息,这组信息只能从一些固定的值中进行选择...@EnumValue @EnumValue是Mybatis Plus框架中的一个注解,用于指定枚举类型属性在数据库中的映射值。...当我们使用Java中的枚举类型作为实体类的属性时,如果想要将枚举类型属性的值映射到数据库中以便于查询和存储,就需要使用@EnumValue注解来定义枚举类中具体的映射值。...不过我们对于枚举类型都给了对应的int的值,所以这里我们只需要进行一个配置,就可以将枚举类型作为数字插入到数据库中,为属性gender,添加上@EnumValue注解 【5】修改枚举类 public...,发现可以成功添加数据,而枚举类型的值也作为数据被插入到数据库中 字段类型处理器 为什么需要字段类型处理器 在某些场景下,我们在实体类中是使用Map集合作为属性接收前端传递过来的数据的,但是这些数据存储在数据库时
将以上代码拷贝到文本文件中,命名为 Main.java。 2,编译执行 Java是一种解释型语言,其java源码需要被编译成class字节码运行在Java虚拟机上。...它其实就是一组目录的集合,它设置的搜索路径与操作系统相关。 例如,在Windows系统上,用;分隔,可能长这样。...通过enum定义的枚举类,其实也是一个class,只不过它有以下几个特点: 定义的enum类型总是继承自java.lang.Enum,且无法被继承; 只能定义出enum的实例,而无法通过new操作符创建...构造方法没有return返回值,也没有void声明。 如果一个类没有定义任何构造方法,那么编译器会自动为我们生成一个默认构造方法,它没有参数,也没有执行语句。...没有在构造方法中初始化属性时,引用类型的字段默认是null,int类型默认值是0,布尔类型默认值是false。 我们可以为一个类定义多个构造方法,使用时可以根据参数类型和数量自动进行匹配。
数据验证和使用的数据库种类无关,终端用户也无法跳过,而且容易测试和维护。...数据验证的方式主要有数据库原生约束、客户端验证和控制器层验证: 数据库约束无法兼容多种数据库,难以测试和维护,但是如果其他应用也要使用这个数据库,最好能够在数据库层做一些约束。...新建并保存会执行 SQL INSERT 操作,更新记录会执行 SQL UPDATE 操作,一般情况下,数据验证发生在执行这些SQL语句之前,如果验证失败,对象会被标记为无效, Active Record...执行验证之后,错误可以通过实例方法 errors.message 获取,这个方法返回一个错误集合,如果为空,则说明对象是有效的。需要注意的是,如果没有验证数据,这个方法返回的也是一个空集合。 ?...,这个方法不会在数据库中创建唯一性约束,所以有可能两次数据库连接创建的记录具有相同的值,所以最好在数据库字段上建立唯一性约束。
,由允许NULL值且无默认值的定义属性,变更为不允许存储NULL值和制定枚举类型字段的默认值,这个过程需要表级锁,锁住表堵塞其他事务性操作,与其他数据类型的字段属性变更是一样的。...,只是修改默认值为不同默认值的操作,是不需要重新建表与锁表,也是与其他数据类型字段的字段属性变更一样。...,即使符合MySQL数据库使用索引条件要求的SQL语句,也无索引信息可用,也即MySQL数据库枚举类型字段值域列表中的存储序列编号,无法做到替代索引的作用,也即依然需要显式创建数据库索引,加速数据查找速度...MySQL数据库枚举类型字段与其他数据类型一样,进行DDL变更操作可能产生的影响; b....,会导致数据库表存储的数据出现错乱对照关系,以及需要锁表等操作; 删除枚举类型字段的枚举数据值域列表中,某个枚举元素值,会导致数据库表已存储的数据行出现截断,以及需要锁表等操作; 枚举类型字段内部的枚举数据与存储序号之间的对照关系
,譬如int8+int16会报错 5、switch语法与objc差别很大,执行一个分支马上停止,不需要break语句跳出,反而想要穿透到下面分支还要用fallthrough语句。...24 、感叹号跟在实例后面,其作用就是断言实例不为空,若真为空就崩溃,相当断言效果。 25、nil合并运算符??类似三目操作符?...那么guard语句的作用到底是什么呢?顾名思义,就是守护。guard语句判断其后的表达式布尔值为false时,才会执行之后代码块里的代码,如果为true,则跳过整个guard语句。...在swift中,枚举是值类型,而值类型的方法不能对self进行修改,如果希望值类型方法能修改self,需要标记这个方法为mutating。...与强制展开可空实例一样,一旦出现错误程序就会崩溃。该用法谨慎使用,少用。 还有第三种情况,可以用try? 调用一个可能抛出异常的函数,得到函数原本的返回值对应的可空类型返回值。
冗余: 存储两倍数据,冗余可以使系统速度更快 1)查询时可能经常需要在多个表之间进行连接查询;而进行连接操作会降低查询速度 2)学生的信息存储在student表中...视图中的那个数据对应原表中多个数据时也无法修改 2、为什么要有视图 1)可以简化查询 2)可以进行权限限制(将一部分列放到视图中让其他人操作) 3)大数据分表时可以用到...使用触发器 触发器无法由用户直接调用,而是由于对表的【增/删/改】操作被动引发的 ---- 事物 1、事务的介绍 1)事务就是用户定义的一系列执行SQL语句的操作,...2、事务的使用场景 1)在日常生活中,有时我们需要进行银行转账,这个银行转账操作背后就是需要执行多个SQL语句,假 如这些SQL执行到一半突然停电了,那么就会导致这个功能只完成了一半...commit后命令执行结果是正真的写入硬盘了(rollback也无法撤回) MySQL数据库默认采用自动提交(autocommit)模式, 也就是说修改数据(insert、update、delete
支持的两个核心操作是get(Object key)以及put(K key, V value),分别用来获取键对应的值以及向映射表中插入键值对。...对于“try-catch-finally”,若try语句块中包含“return”语句,finally语句块会执行吗? 会执行。...只有两种情况finally块中的语句不会被执行:** 调用了System.exit()方法; JVM“崩溃”了。 Java中的异常层次结构 Java中的异常层次结构如下图所示: ?...IOException及其子类属于已检查异常,编译器会检查我们是否为所有可能抛出的已检查异常提供了异常处理器,若没有则会报错。...而在等待某通道变为可读/写期间,请求对通道进行读写操作的线程可以去干别的事情。 反射的作用与原理 反射的作用概括地说是运行时获取类的各种定义信息,比如定义了哪些属性与方法。
登录时保存好key-value,登出时让他失效 垂直扩展:IP哈希 IP的哈希值相同的访问同一台服务器 session的一致性:只要用户不重启浏览器,每次http短连接请求,理论上服务端都能定位到session...,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果。...对数据库加锁(乐观锁 与 悲观锁) 悲观锁依赖数据库实现: select * from account where name=”Erica” for update 这条sql 语句锁定了account...写法: for each语句是java5新增,在遍历数组、集合的时候,for each拥有不错的性能。...虽然能遍历数组或者集合,但是只能用来遍历,无法在遍历的过程中对数组或者集合进行修改。
我们使用DropDownList等控件获取表内容时,需要连接到数据库进行查询,潜在地影响性能。 同时,我们也注意到三点: 此表一般会在数据库联合查询中使用到。...).ToString(); // 输出文本值 我们想更新订单的状态为 “已提交”: myOrder.StatusId = (int)BookingStatus.已提交; 当状态为“已取消”时我们想执行某个操作...当我们使用枚举存储状态时,myOrder对象的StatusId最好为BookingStatus枚举类型,而非int类型,这样操作会更加便捷一些,但为了和前面使用数组时的情况保持统一,这里StatusId...以上三种情况使用枚举都显得非常的流畅,直到我们需要绑定枚举到DropDownList下拉列表的时候:我们知道,可以绑定到下拉列表的有两类对象,一类是实现了IEnumerable接口的可枚举集合,比如ArrayList...); } } 这里field的Name属性获取了枚举的文本,GetRawConstantValue()方法获取了它的int类型的值。
它的好处是,当我们给枚举增加成员时,编译器就会提示开发者:switch语句并未处理所有的枚举。...对此,笔者有个教训,又一次在switch语句中将“默认分支”设置为枚举中的第一项,自以为这样写可以让程序更健壮,结果后来导致了严重的崩溃。...并且在dealloc方法中也不能调用属性的存取方法,因为很有可能在这些方法里还有其他操作。而且这个属性还有可能处于键值观察状态,该属性的观察者可能会在属性改变时保留或者使用这个即将回收的对象。...第48条:多用块枚举,少用for循环 当遍历集合元素时,建议使用块枚举,因为相对于传统的for循环,它更加高效,而且简洁,还能获取到用传统的for循环无法提供的值: 我们首先看一下传统的遍历: 传统的for...我们可以察觉到,如果在这个方法里执行过多的操作的话,会使得程序难以维护,也可能引起其他的bug。
在类模块中引发事件分两步: 1.在类模块中声明事件 2.使用RaiseEvent引发该事件 下面是修改后的CCells类模块中的代码: '创建枚举常量 Public Enum anlCellType...End Property '获取属性值 Property Get Cell() As Excel.Range Set Cell = mrngCell End Property '获取属性值...Property Get CellType() As anlCellType CellType = muCellType End Property '获取属性值 '转换枚举常量为文本 Property...图1 注意,为了更有效地避免内存泄漏,当不需要某个对象时,建议将其显示地设置为空,尽量不要依赖VBA来完成这些操作: Set gclsCells = Nothing 此外,当两个对象中分别保存着对彼此的引用时...遍历集合中所有对象,并执行它们各自的Terminate方法,最后,将gclsCells对象实例设置为空。
登录时保存好key-value,登出时让他失效 垂直扩展:IP哈希 IP的哈希值相同的访问同一台服务器 session的一致性:只要用户不重启浏览器,每次http短连接请求,理论上服务端都能定位到session...,当标记在一个方法上时表示该方法是支持缓存的,Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果。...对数据库加锁(乐观锁 与 悲观锁) 悲观锁依赖数据库实现: select * from account where name=”Erica” for update 这条sql 语句锁定了account...写法: for each语句是java5新增,在遍历数组、集合的时候,for each拥有不错的性能。...虽然能遍历数组或者集合,但是只能用来遍历,无法在遍历的过程中对数组或者集合进行修改。
属性类型要与数据库字段类型相匹配 数据库字段的bigint必须与类属性Long类型相对应 禁止使用构造方法BigDecimal(double) 的方式将double值转化为BigDecimal对象:...RPC方法的返回值和参数必须使用包装数据类型 所有的局部变量使用基本数据类型 定义DO,DTO,VO等POJO类时,不要设定任何属性默认值 序列化类新增属性时,不能修改serialVersionUID...()方法打印属性值,便于排查问题 禁止在POJO类中,同时存在对应属性Xxx的isXxx() 和getXxx() 方法 框架在调用属性Xxx的获取方法时,不能确定哪个方法一定是被优先调用到的 使用索引访问用...控制语句 在一个switch块内: 每个case要通过break或者return来终止 或者注释说明程序将继续执行到哪一个case为止 必须包含一个default语句并且放在最后,即使是空代码 当Switch...插入赋值语句 循环体中的语句要考量性能,以下操作尽量移动至循环体外处理: 定义对象,变量 获取数据库连接 进行不必要的try - catch操作(考虑这个try - catch操作是否可以移动至循环体外
请注意,此“脏”计算是“乐观”的;大多数属性设置或集合修改操作都将将实例标记为“脏”,并将其放入此集合中,即使属性的值没有净变化。...在刷新时,将每个属性的值与其先前保存的值进行比较,如果没有净变化,则不会执行任何 SQL 操作(这是一项更昂贵的操作,因此仅在刷新时执行)。...这样,当合并操作填充本地属性并级联到相关对象和集合时,值可以原样“打印”到目标对象上,而不会生成任何历史记录或属性事件,并且无需将传入数据与可能未加载的任何现有相关对象或集合进行协调。...请注意,这种‘脏’计算是‘乐观的’;大多数属性设置或集合修改操作都会将实例标记为‘脏’并将其放入此集合中,即使属性的值没有净变化也是如此。...这样,当合并操作填充本地属性并级联到相关对象和集合时,值可以“按原样”放置到目标对象上,而不会生成任何历史或属性事件,并且无需将传入的数据与可能未加载的任何现有相关对象或集合进行协调。
注入不止有传统的SQL数据库,NoSQL型数据库也一样存在注入漏洞,在比赛中跟传统的注入相比也算新题型,不少同学可能还不太了解,本文向大家科普MongoDB数据库的常见操作以及攻击的方法——NoSQL注入和未授权访问...//find操作后键值a会自增1 $set,存在则修改,不存在则创建,就像sql语句的 REPLACE一样 db.collection.update({"_id": "xxxxxx"}, {"$set"...: {key: value}}) $unset,set的逆操作 $push,修改文档数组,因为 JavaScript的数组增删元素就是用 push& pop $each,批量修改数组 db.collection.update...的未授权访问和Redis数据库是差不多的,这里我们利用一个工具NoSQLMap来进行数据库信息枚举,有SQLMap那么也就有针对NoSQL数据库的NoSQLMap,它可以注入以及利用未授权访问漏洞 ?...我将数据库不开启auth启动,然后NoSQLMap的1选项设置想关信息 接着点击2选项,提示存在未授权访问漏洞 ? 点击枚举数据库信息 ?
应该尽可能地使用 for-each 循环。...遗憾的是,有三种常见的情况是无法使用 for-each 循环的: 过滤——如果需要遍历集合,并删除选定的元素,就需要使用显式地迭代器,以便可以调用它的 remove 方法。...假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。...枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。...一般的做法是通过类 Introspector 来获取某个对象的 BeanInfo 信息,然后通过 BeanInfo 来获取属性的描述器 (PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的
领取专属 10元无门槛券
手把手带您无忧上云