JDK14新特性
碎碎念从哪几个角度学习新特性
语法层面: lambda表达式,switch,自动装箱、自动拆箱,enum,泛型<>,接口中的默认方法,静态方法,私有方法
API层面: StreamAPI,新的日期时间,Optional,String,集合框架
层面优化: JVM的优化,元空间,GC,GC的参数,js的执行引擎
instanceof的模式匹配(预览)这个特性很有意思,因为它为更为通用的模式匹配打开了大门。模式匹配通过更为简便的语法基于一定的条件来抽取对象的组件,而instanceof刚好是这种情况,它先检查对象类型然后再调用对象的方法或访问对象的字段,有了该功能,可以减少Java程序员中显式强制转换的数量,从而提高生产力,还能实现更精确、简洁的类型安全的代码
123if (o instanceof String str) { System.out.println(str.contains("Java"));}
非常实用的NullPointerException该特性改进了NullPointerException的可读性,能够 ...
MySQL(三)
InnoDB数据存储结构磁盘与内存交互基本单位:页InnoDB将数据划分为若干个页,InnoDB中页的大小默认为16KB。以页作为磁盘和内存之间交互的基本单位,也就是一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。也就是说,在数据库中,不论读一行,还是读多行,都是将这些行所在的页进行加载。也就是说,数据库管理存储空间的基本单位是页,数据库IO操作的最小单位是页,一个页可以存储多个行记录
记录是按照行来存储的,但是数据库的读取并不以行为单位,否则一次读取(也就是一次IO操作)只能处理一行数据,效率会非常低
页结构概述页A、页B、页C…页N这些页可以不在物理结构上相连,只要通过双向链表相关联即可,每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表,每个数据页都会为存储在它里面的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录
页的上层结构另外在数据库中,还存在着区、段和表空间的概念
区是比页大一级的存储结构,在InnoDB存储引擎中,一个区会 ...
MTMR
MTMR是一个Mac上的自定义触控栏工具,可以自定义触控栏的按钮,可以添加自定义的脚本
可以通过brew install --cask mtmr来安装,也可以直接从这里直接下载镜像来安装,整体感觉还是很好看的
Butterfly主题升级工具
GitHub Desktop是一个图形化的Git客户端,可以方便地管理本地Git仓库,也可以直接从Github上克隆仓库到本地,然后进行修改,最后提交到Github上。
可以明显的看到左右两边文件的不同,改动起来非常方便。使用之前先pull一下代码就可以了(不光是GitHub项目,Gitee项目也是可以的)
Vue中background-image的使用
Vue中background-image的url属性不能直接写字符串,需要使用require引入图片,然后使用v-bind绑定到background-image的url属性上
1<view class="loading-img" :style="{background:'url('+require('static/img/IMG_3969.jpeg')+')', backgroundSize:'cover'}"></view>
Vue监听对象集合的变化
如果只是普通的监听对象的变化,可以使用watch
123'unit.reportedValue'(newVal, oldVal) { console.log(this.unit.unitId + ' ' + newVal + ' ' + oldVal)}
但是如果是监听对象集合的变化,特别是存在子父级关系时,就需要使用watch的deep属性
123456unitList: { handler(newVal) { this.collectList = newVal; }, deep: true}
Autowired和Resource的区别
@Autowired
@Resource
Spring定义的注解
JDK自带的注解(JSR-250定义的)
默认按类型自动装配(byType)
默认按名称自动装配(byName)
一个参数:required(默认true),表示是否必须注入
七个参数:最重要的两个参数是name、type
默认按类型自动装配,如果要按名称自动装配,需要和@Qualifier一起配合
默认按名称自动装配,如果指定了name,则按名称自动装配;如果指定了type,则按类型自动装配
支持优先级,@Primary 注解修饰,该候选者会被选中,作为自动装配的 bean
不支持
作用范围:构造器、方法、参数、成员变量、注解
作用范围:类、成员变量、方法
不知道从什么时候起我的IDEA对@Autowired一直报黄色的波浪线,使用alt + enter查看IDEA给的提示是Field injection is not recommended,上网查了以下发现其实是因为现在推荐使用构造器的方式注入,而不推荐使用成员变量的方式。我以前的处理方式是直接使用@Resource,但是 ...
MySQL 8.0的新特性-全局变量的持久化
在MySQL数据库中,全局变量可以通过SET GLOBAL变量来设置。例如,设置服务器语句超时的限制,可以通过设置系统变量max_execution_time来实现:
1SET GLOBAL MAX_EXECUTION_TIME = 2000;
使用SET GLOBAL语句设置的变量值只会临时生效。数据库重启后,服务器又会从MySQL匹配文件中读取变量的默认值。MySQL 8.0版本增加了SET PERSIST命令。例如设置服务器最大连接数为1000:
1SET PERSIST GLOBAL max_connections = 1000;
MySQL会将该命令的配置保存到数据目录下的mysqlId-auto.cnf文件中,下次启动时会读取该文件来覆盖默认的配置文件。注意:这个特性对于MAC用户来说很有用,MAC下的MySQL是没有配置文件的,如果想要永久更改配置只能是自己新建一个配置文件,但是我觉得太麻烦了,现在只需要一行命令就可以永久的更改配置真的方便了很多!PERSIST命令必须要以命名行的形式执行,亲测在Navicat Premiun 16.1.2中使用会报错
触发器
1052 - Column 'id' in where clause is ambiguous
MySQL报错1052 - Column ‘id’ in where clause is ambiguous,这里记录以下错误原因
多进行多表关联的时候,很多个表如何出现相同的列表,但是你没有指明是哪个表的时候MySQL就会报此错误(我就是这个原因,太大意了😷)
在查询结果有相同的列名,但是你没有指出是哪个表,就会出现这个错误,其实本质上是一个原因只不过一个在WHERE条件中一个在SELECT中,一样的是都需要明确指出是哪个表的哪个字段
Mysql(二)
约束数据完整性是指数据的精确性和可靠性。它是防止数据中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制,从以下四个方面考虑:
实体完整性:例如,同一个表中,不能存在两条完全相同无法区分的记录
域完整性:例如,年龄范围0 - 120,性别范围男 / 女
引用完整性:例如,员工所在部门,在部分表中要能找到这个部门
用户自定义完整性:例如,用户名唯一、密码不能为空等,本部分经理的工资不得高于本部门职工的平均工资的5倍
非空约束限定某个字段 / 某列的值不允许为空。关键字:NOT NULL。默认所有的类型的值都可以是NULL,包括INT、FLOAT等数据类型;非空约束只能出现在表对象的列上,只能某个列单独限定非空,不能组合非空;一个表可以有很多列都分别限定了非空;空字符串不等于NULl,0也不等于NULL
12ALTER TABLE empMODIFY sex VARCHAR(30) NOT NULL;
唯一性约束用来限制某个字段 / 某列的值不能重复。关键字:UNIQUE。同一个表可以 ...