- 博客(40)
- 收藏
- 关注
原创 MySQL的锁机制
MySQL的隔离性是由锁机制来保证的。锁是计算机协调多个进程或线程并发地访问某一资源你的机制。当多线程并发地访问某个数据时,尤其是在涉及金钱等安全敏感性数据的时候,需要保证数据在任意时刻最多只有一个线程可以对其进行修改,从而保证数据的一致性和完整性。
2023-12-10 11:01:31
142
原创 Mysql的事务日志
undo log:是存储引擎(innodb)生成的日志,记录的是逻辑操作日志。redo log:是存储引擎(innodb)生成的日志,记录的是物理级别上的页修改操作,比如页号XXX、偏移量yyy写入了‘zzz’数据。主要是为了保证数据的可靠性。- redo log是重做日志,提供再写入操作,恢复提交事务修改的页操纵,用来保证事务的持久性。- undo log是回滚日志,回滚记录到某个特定的版本,保证事务的原子性和一致性。事务的原子性、一致性、持久性则由redo log和Undo log来保证。
2023-12-06 17:57:38
239
原创 Mysql的索引详解
1.按照功能来分,可以分为主键索引、唯一索引、普通索引、全文索引2.按照索引字段个数来分,可以分为单列索引、联合索引3.按照物理实现方式来分,可以聚簇索引、非聚簇索引。
2023-12-03 19:07:28
423
原创 Java可重入锁synchronized以及ReentrantLock详解
Java可重入锁,synchronized以及ReentrantLock的原理解析
2023-09-15 23:08:59
342
原创 Java公平锁和非公平锁
2.使用多线程时,很重要的考虑点是线程切换的开销,当采用非公平锁时,当一个线程请求锁获取同步状态,然后释放同步状态,刚刚释放锁的线程在此刻再次获得同步状态的概率非常大,让同一个线程多次获取以及释放锁,可以减少线程来回切换的开销。1.从恢复挂起的线程到获取锁需要一定的时间,从cpu的角度来看,这个时间还是明显的,所以非公平锁能更有效的利用cpu的时间片,尽量减少cpu的空闲时间。三个线程基本轮流操作资源。基本线程一直在操作资源。
2023-09-15 18:54:20
78
原创 关于explain执行mysql语句,索引key_len计算问题
今天验证sql查询语句走了哪些索引的时候,发现key_len怎么也算不对。因为在网上找的文章对于kye_len的计算基本千篇一律,如下:varchar(10)变长字段且允许NULL = 10 * ( character set:utf8=3,gbk=2,latin1=1) + 1(NULL) + 2(变长字段)varchar(10)变长字段且不允许NULL = 10 *( character set:utf8=3,gbk=2,latin1=1) + 2(变长字段)char(10)固定字段且允许NULL =
2022-06-29 23:34:30
270
原创 Java Stream API学习随笔
Stream的创建方式大体为四种1.Collection.stream()/Collection.parallelSteam(); List<User> userList = Arrays.asList( new User("zs", 23, "bj"), new User("zs1", 23, "bj"), new User("zs3", 23, "bj"), n
2021-11-14 23:23:46
557
原创 ApplicationEvent和ApplicationListener学习
ApplicationEvent和ApplicationListener学习今日看项目看到了ApplicationEvent抽象类和ApplicationListener接口,之前没有使用过,因此学习了一下。ApplicationEvent抽象类表示的是某一类事件,比如网站注册的时候,用户注册可以作为一个事件。public class UserRegistrationEvent extends ApplicationEvent { private User user; public
2021-11-10 22:37:06
134
原创 记录关于@RequestParam注解的required=false参数遇到的问题
今天使用@RequestParam注解的required=false参数遇到了一个小bug,代码如下:@Controller@RequestMapping(value = {"/test"})public class MyController { @RequestMapping(value = "/some.do",method = {RequestMethod.POST,RequestMethod.GET}) public ModelAndView doSome(@RequestPa
2021-06-26 11:38:06
10226
2
原创 nginx的负载均衡以及动静分离
Nginx的负载均衡以及动静分离Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,其两个主要的功能就是静态解析和反向代理。静态解析的意思是Nginx可以解析静态资源,如css/js/img…等等,但是Nginx无法解析动态资源。关于反向代理,这个名词初听感觉很奇怪,其实反向代理是相对正向代理而言的。举个例子(来源于其他博客):小王(客户端)创业缺钱,想找马云(服务端)借钱,但是马云不认识他所以不会借钱给小王,但是小王的大学老师(正向代理)是马云的同学,于是小王找大学老师帮忙,
2020-09-26 00:02:25
263
原创 Failed to execute goal com.spotify:docker-maven-plugin:1.0.0:build (build-im
将项目制作成docker镜像的时候报错,原因是Dockerfile中项目jar包名称与实际项目的GAV不一致。比如我实际项目的是1.0.0,但是Dockerfile写成了1.0。所以报错,将1.0.0改成1.0即可。
2020-09-25 20:23:36
5405
1
原创 mysql的隔离级别以及悲观锁和乐观锁
隔离级别Read-Uncommitted(读未提交):会产生脏读的问题.比如事务A增加了一条数据,此时事务B正好读到了这笔数据,但是在事务B读到数据之后,事务A发生了异常,数据回滚了,那么最终这条数据是没有写入数据库的.而事务B读到了数据库不存在的数据,这就称之为:脏读.ps:新手的困惑解答,我个人当时对于上面的描述觉得很困惑的一点就是:为什么事务B能读到事务A未提交的数据,未提交不是没写进数据库吗?其实是这样的,提交是指事务整体的提交,一个事务通常包括多步对数据库的操作,举个例子:有一张学生表,字
2020-09-15 12:28:25
212
原创 前端图形验证码小结
概述: 四位的图形验证码,由阿拉伯数字及大小写字母组成前端代码:js文件:$(function () { //验证码的点击刷新 $("#imgCode").click(function () { this.src = basePath + "/loan/jcaptcha/captcha?time=" + Date.now(); });});html文件<div class="login-yzm"> <div id=
2020-09-14 10:19:56
755
原创 thymeleaf中数字的日期格式以及货币格式
日期格式:th:text="|最近登录:${#dates.format(loginUser.lastLoginTime,'yyyy-MM-dd HH:mm:ss')}|" 效果:全是数字,不会出现英文格式或者时间戳货币格式:th:text="${#numbers.formatCurrency(session.availableMoney)} 效果: 888,888,888 三位一个逗号...
2020-09-11 22:14:53
490
原创 关于使用thymeleaf模板时,接收参数时的易错点
后台的数据通过Model对象传递model.addAttribute(totalBidMoney,totalBidMoney);接收参数:`<span id="avg" th:text="${totalBidMoney}">13.8</span>`直接在${}中填写对应的key值即可获取Value后台的数据存在session作用域中session.setAttribute("availableMoney",availableMoney);接收参数:`<.
2020-09-11 21:56:48
598
原创 关于使用thymeleaf接收参数及查询返回Map的回忆
关于查询结果返回为Map的记忆梳理resultType设置为Map,那么返回的时候就是Map类型的数据Map数据是KV结构,默认不起别名的情况下,Key是表的字段名.起别名的情况下,Key是取的别名关于Thymeleaf中获取Map数据的值的梳理假设Thymeleaf接收的是一个List<Map<String,Object>> incomeRecordList的List集合嵌套Map集合参数.此处的Map相当于一个实体类,只是实体类属性满足不了数据封装需求,因此使用Map进
2020-09-11 17:28:54
1791
1
原创 正则表达式个人笔记
示例:if(!(/^1[0-9]{10}$/.test(phone))){ showError("phone","手机号格式错误") //3.验证手机是否已注册 }上面的正则表达式是常见的验证手机号码注册时的格式解释:^表示开头,表示结尾$表示结尾[0-9]{10}表示10个字符占位,这10个字符占位的输入只能是0-9之间的数字.如果去掉{10},写成[0-9],则表示1个占位,此占位的字符只能是0-9.可以看做[0-9]{1}等同于[0-9][abc]表示此占位可以写入a或者b或者c这三者中
2020-09-08 22:03:33
249
原创 在thymleaf模板中的basePath完整项目路径的获取
1.使用thymleaf内置的httpServletRequest对象2.使用内联表达式eg:<script th:inline="javascript"> var basePath = [[${#httpServletRequest.getScheme() + "://" + #httpServletRequest.getServerName() + ":" + #httpServletRequest.getServerPort() + "/p2p"}]]; &l
2020-09-08 14:23:46
464
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人