- 博客(33)
- 收藏
- 关注
原创 Conversion not supported for type java.time.LocalDateTime
在使用mybatis-plus中,使用自动生成的代码,entity会将时间类型生成为为localdatetime,但是实际查询时并不一定能转化,会出现Conversion not supported for type java.time.LocalDateTime,这个时候请检查数据库驱动包版本。各种依赖版本不能过低。建议以下为准。可高不要低<dependency> <groupId>mysql</groupId> &
2021-09-22 13:28:38 2728 1
原创 略读hashMap源码
开始前的准备 首先我们需要认识几个hashMap中经常使用的属性,知道他们的意思1、loadFactor : 负载因子。默认是0.75f2、threshold:阀值。默认是123、transient Node<K,V>[] table: 数组。hashMap中的数据就存储在这里4、transient int size: hashMap具有的键值对个数。5、static final int DEFAULT_INITIAL_CAPACITY = 1 << 4:默认的table
2021-07-13 17:17:58 164
原创 mysql中InnoDB引擎的多版本并发控制MVCC
以下内容基于个人理解,如果不同意见,可私信沟通,共同进步。大多事务型数据库并不是简单地实现了行级锁。基于并发考虑大部分都实现了多版本并发控制MVCC,尽管他们的实现方式不大相同。咱们这里讲一下innoDb的多版本并发控制,innodb存储数据的时候会有两个隐藏的列,一个是创建时间,一个是删除时间。但实际上存储的是操作时的系统版本号。在实际操作的时候就是这样,每开始一个新的事物,就会把系统版本号作为事物版本号,并使系统本版号自增。select只查询创建时间小于或者等于当前事物版本的的记录。只查询
2021-07-08 10:25:27 122
原创 springboot排除起步依赖
springboot添加依赖大家都很清楚,但是项目中,一个依赖往往可能包含着其他的依赖,那么如何排除自己不需要的依赖呢。方法就是使用标签,下面是示例用法,排除web起步依赖的tomcat的部分 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions&
2021-07-08 09:20:02 1638
原创 当字段可以为null时,mysql会做哪些操作?
mysql设计表的时候字段尽量不要可为null当字段可以为null时,mysql会做哪些操作?首先,在性能优化的时候,把null设置为not null 并不会使性能带来很大提升。并不建议把这个修改作为性能提升的首选。当字段可以为null时,mysql会做哪些操作? 1,当字段可以为空时,首先在存储数据的时候,会多一位字节用来标志数据是否为null。 2,当timestamp类型时,数据为null可能会报错。 3,NULL值到非NULL的更新无法做到原地更新,更容易发生索引分裂,从而影响性能。
2021-07-01 14:55:47 248
原创 redis的字典结构
redis的字典结构如上图,字典结构底层采用hash实现,目前hash值得计算采用的是murmurhash2算法,1,redis采用的hashtable是一个数组,数组中的每个元素都会存储一个指向dictEntry结构的指针,dictentry结构。dictentry结构的v可以存储一个指针,也可以存储一个uint64或者int64的整数,此外他还存储了指向下一个节点的指针。这样就解决了hash冲突的问题,跟java1.8之前的hash解决冲突的方式一样,都是维护了一个链表。dictht中.
2021-03-11 17:15:48 232
原创 node开始-创建一个服务器监听端口。
var http = require("http");function onRequest(request, response) { console.log("函数开始执行"); response.writeHead(200, {"Content-type":"text/plain"}); response.wirte("hello"); response.end();}http.createServer(onRequest).listen(8888);consol...
2021-02-25 10:58:27 493
原创 rabbitmq在springboot上的使用
1,导包org.springframework.bootspring-boot-starter-amqp2,发消息前置工作,创建配置类加上@Configuration注解2.1,配置rabbitmq的工厂//使用value注解读取配置文件中的rabbit的账号密码端口号等信息@Bean(“rboxConnectionFactory”)public ConnectionFactory connectionFactory(@Value("spring.rabbitmq.host")Stri
2021-02-19 17:51:49 153
原创 使用可视化界面来配置Rabbit交换机绑定队列
一:添加交换机二,创建队列三,绑定队列和交换器选中需要绑定的队列,点进去填写需要绑定的交换器和队列的路由键绑定完成。在交换器界面,选中某个交换器,进入这个交换器的配置页面,然后通过publish message来发送消息了。在队列配置界面中的get message来消费消息...
2021-01-28 15:10:58 443 1
原创 jpa中的小问题-修改后查询到旧数据的可能性一
在同一个事务中,如果对一条数据查询出来后使用自己编写的修改语句进行修改后,再次查询该数据,虽然数据库中已经修改,但是缓存未刷新。所以会查到修改之前的旧数据。如果使用jpa自带的save方法则不会出现这些问题。它会自动更新缓存。...
2020-11-16 16:51:03 809
原创 jpa中的小问题,save方法
asOrderEntity.setLastUpdatedAt(LocalDateTime.now()); asOrderEntity.setLastUpdatedBy(UserHelper.getUserId());asOrderRepository.save(asOrderEntity);jpa自带的save方法保存修改数据很方便,但是你知道他是如何保存修改数据的么?save方法保存修改数据首先会根据标注为主键的字段去查询是否存在这样一条数据,如果存在则是修改,如果不存在则是添加。那么问题就来
2020-11-16 11:04:45 3866 2
原创 redis中的数据结构-linkedlist
链表提供了高效的节点重排能力,和顺序性查找方法,以及快速的增删链表元素的功能。很多的语言都实现了链表结构,但是redis所使用的C语言并没有内置这种结构,所以redis构造了自己的链表结构。同时,这种结构也是列表键的实现方式之一,如果列表键包含了众多的元素,或者包含了比较长的字符串,则会采用链表实现。除了列表键以外,订阅预发布,慢查询和监视器等功能也用到了链表。 redis链表的结构和一般的链表并没有什么区别,都是头结点,尾结点,数据。但是redis的链表一般会用一个数据结构记录adlis...
2020-09-02 21:06:11 248
原创 redis的动态字符串SDS
redis虽然是用c来实现的,但是他的字符类型并没有完全采用c的类型,c字符串只是字符串字面量,只有在用一些不需要变化的字符串时才会采用c字符串。比如打印日志,而在使用需要变化的时候使用SDS,比如当键值对的值是字符串时。还被用作缓冲区至于为什么这样做,则是考虑到了redis的应用场景,redis一般被用作缓存,和处理需要快速完成的业务,这个时候虽然c字符串很优秀,但是c字符串的格式是字符串加空字符的结构,每次拼接都要重新分配内存,而且还有内存溢出的危险。SDS的结构sdshdrfr
2020-08-31 19:54:16 102
原创 spring data jpa 入门
导包:org.springframework.bootspring-boot-starter-data-jpa配置:spring.jpa.properties.hibernate.hbm2ddl.auto=nonespring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialectspring.jpa.show-sql=truespring.jpa.properties.hibernate.for
2020-07-30 19:03:42 146
原创 boot使用中的数据库错误:链接失败,时区解析失败The server time zone value ‘�й���ʱ��‘ is unrecognized or represents...
The server time zone value ‘�й���ʱ��‘ is unrecognized or represents…原因可能是spring-boot-starter-parent 1.5.9.RELEASE和2.2.5.RELEASE依赖的mysql-connect-java的版本不同。2.2.5版本的mysql-connect的版本超过6.0。如果使用2之上的版本,则需要在修改驱动为com.mysql.cj.jdbc.Driver,并且需要指定时区spring.datasour
2020-07-29 10:28:36 205
原创 git中的HEAD
HEAD是一个符号引用,他指向你正在工作的分支,他总是指向你最近的一次提交记录,如果想看 HEAD 指向,可以通过 cat .git/HEAD 查看, 如果 HEAD 指向的是一个引用,还可以用 git symbolic-ref HEAD 查看它的指向。 可以使用git checkout 提交记录对应的hash值,来切换到对应的提交上,可以使用git log来查看对应的提交和hash值,万幸的是你可以不必输入全部的hash值,只需要输入可以独特表示这次提交记录的值,比如fed2da64c0efc5293
2020-07-29 10:17:41 1279
原创 git 的常用操作
拉取代码git clone http://163.43.245.69:10080/Kevin.Gu/ecr.gitgit的每次commit都会保存一份快照,并生成一个对象。#git 新建分支git branch 分支名#git 新建并切换分支git checkout -b 分支名#git合并分支git merge 分支名#git查看分支git branch -a##git推送代码#添加代码到缓存区git add#忽略所有文件修改git checkout .#添加被忽略的文件到缓
2020-07-29 10:16:23 121
原创 redis过期策略和内存淘汰机制
我们一般用redis来做缓存,所以我们可以在设置key的时候设置过期时间 expire key 20,但是key到达过期时间后并不是直接就会删除key,因为redis不可能遍历所有设置了过期的key,那样做简直是灾难,redis的过期策略有两个,定期删除和惰性删除,定期删除是说,redis每隔100ms就会随机抽取一些设置了过期时间的key,看看这些key有没有过期的,如果过期了,就删除这些key。惰性删除是说当用户调用了设置过期时间的key时,redis会检查被调用的key是否过期,如果过期,就会把
2020-07-16 17:27:50 147
原创 为什么redis是单线程的并且那么快
因为redis是在内存上进行操作的数据库,而cpu处理速度非常的快,读取1mb的数据大概需要250us,多线程是cpu模拟的多线程,从a线程切换到b线程的上下文切换操作大概需要1500ns,假设读取1mb需要切换1000此线程,光是切换线程所用的时间就达到了1500us,还不算读取的时间,所以单线程是最适合redis的也是最快的。那么,什么时候采用多线程呢 :下层的存储的速度很慢的情况,比如磁盘,完成读取写入操作是很慢的,比较好的方法是先把请求的线程放入缓存区,等缓存区满了再调用处理线程去执行,Java中
2020-07-15 13:34:07 150
原创 范型里面的extends 和super
private static void test(List<? extends A> a){ System.out.println(""); } //已知b是a的子类public static void main(String[] args) { List<A> a =new ArrayList<>(); List<B> b = new ArrayList<>(); .
2020-07-14 14:09:10 146
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人