Vuex
概念在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信
主要用于多个组件共享数据
搭建vuex环境
创建文件:src/store/index.js
1234567891011121314151617181920// 引入 Vue 核心库import Vue from 'vue'// 引入 Vueximport Vuex from 'vuex'// 应用 Vuex 插件Vue.use(Vuex)// 准备 actions 对象——响应组件中用户的动作const actions = {}// 准备 mutations 对象——修改 state 中的数据const mutations = {}// 准备 state 对象——保存具体的数据const state = {}// 创建并暴露 storeexport default new Vuex.Store({ acti ...
nested exception is org.apache.ibatis.exceptions.PersistenceException
碎碎念每日一个小BUG,强身又健体💪,我一定是疯了哈哈哈哈哈哈哈哈哈
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.UnsupportedOperationException
### Cause: java.lang.UnsupportedOperationException
上网查了一下,说的原因也是很多,有的说是Mybatis配置的问题,也有的说是数据库字段类型和实体类对应不上的,但是这些对我来说都没有用,之前的话我用Mybatis collection都是喜欢自己写result不习惯用resultMap,因为我觉得这是一个意思
今天看来以后还是老老实实用resultMap吧,我把collection中的resultMap单独拿出来写就可以了,我暂且理解为Mybatis对于处理结构比较复杂的数据时只能用res ...
微信小程序子组件往父组件传值
碎碎念最近在使用uni-app编写手机端和微信小程序,在优化小程序的时候遇到一个BUG,按理说JS对象赋值的时候给的是地址,其中两个对象任意一个被修改另外一个也应该被修改,但是在小程序中子组件的值修改之后,不能同步更新到父组件,这就让我很烦😡。
解决办法虽然我也知道Vue不推荐直接修改对象的值,但是能省事我也就无所谓😁。无奈,现在只能使用Vue推荐的this.$emit方法子组件往父组件传值
全局事件总线先定义一个全局事件总线,用来传递数据,最好是在beforeCreate钩子函数中定义,这样可以保证在所有组件中都可以使用
1Vue.prototype.$bus = this
监听子组件值的变化12345678watch: { unit: { handler: function (val) { this.$bus.$emit('change', val) }, deep: true }}
父组件接收传过来的值因为我们定义了一个全局的事件总线,所以可以使用$bug来接受c ...
HashMap执行流程
HashMap执行流程图流程图https://www.processon.com/diagraming/6532431251d35763b9c31ad3
判断键值对数组table是否为空或为null,否则执行resize()进行扩容(初始化)
根据键值key计算hash值得到数组索引
判断table[i] == null,条件成立,直接新建节点添加
如果table[i] == null,不成立
判断table[i]的首个元素是否和key一样,如果相同直接覆盖value
判断table[i]是否为treeNode,即table[i]是否是红黑树,如果是红黑树,则直接在树中插入键值
遍历table[i],链表的尾部插入数据,然后判断链表的长度是否大于8,大于8的话把链表转换为红黑树,在红黑树中执行插入操作,遍历过程中若发现key已经存在直接覆盖value
插入成功后,判断实际存在的键值对数量size是否超过了最大容量threadshold(数组长度*0.75),如果超过,进行扩容
Spring源码 SpringBoot源码
Spring容器中的Bean是何时创建的?为什么我们能从容器中获取到?
非懒加载的单实例bean会在容器创建的时候创建。容器内部会创建一个beanFactory,使用beanFactory的doGetBean方法来进行创建,并且在创建后会把bean放入一个单例bean的map集合(singletonObjects)中存储。key就是我们配置的bean的名称。所以我们调用容器的getBean方法来获取对象的时候,其实也是调用了doGetBean方法。就会从对应的集合中获取到之前创建的对象
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}