- 博客(11)
- 收藏
- 关注
原创 MySQL执行异常: Illegal mix of collations (utf8mb4_0900_ai_ci IMPLICIT) and (utf8mb4_general_ci...
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2022-12-12 14:52:45
10575
原创 mysql写操作优化
mysql日志和写优化日志binlogWAL和redologchange buffer两阶段提交一条更新语句的执行流程日志binlog定义:binlog是mysql归档日志,用于记录“修改数据或可能引起数据变更”的sql语句,不记录查询语句。作用:1.主从复制;2.数据恢复。三种格式:statement、row、mixed。statement记录的是sql语句,日志量小,但不够准确,会因为索引选择、limit等因素导致主从数据不一致;row记录的是受影响的数据行,不会有不一致的问题,但日志量大;
2022-01-03 00:14:15
597
原创 mysql 事务和锁
mysql事务和锁事务最基本的ACID隔离级别合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入事务事务是一组不可分割的数据操作的集合,要么全部成功,要么全部失败。mysql中事务由引擎层实现,并非所有引擎都支持事务(例如MyISAM引擎就
2021-12-30 21:05:31
725
原创 jdk线程池学习笔记
ThreadPoolExecutor:1.线程池的线程存储在HashSet中,处理流程:core pool->blocking queue->max pool->reject policy;2.核心线程池一般不会回收,除非设置了allowCoreThreadTimeOut,线程空闲时处于驻留状态(LockSupport.park);3.keepAliveTime对于超过核心线程数部分的线程有效,超过空闲时间会回收。Runnable vs. Callable:runnable无返回
2021-02-20 16:05:13
281
3
原创 浅析同步队列器AbstractQueuedSynchronizer和ReentrantLock
AbstractQueuedSynchronizer队列同步器AbstractQueuedSynchronizer是整个JUC锁框架的基石,通过同步状态量state、CAS、ConditionObject等组件和一系列操作实现线程间的状态同步,也是CountDownLatch、Semaphore等并发工具的实现基础。队列同步器包含下列核心组件:1.同步变量state,volatile修饰,CAS操作更新,两者保证状态一致性;2.内部类Node,代表竞争同步资源的线程节点,包含指向前后节点的引用,当存
2021-02-08 16:14:36
218
原创 java 线程状态和常用方法
on object moniter 意味着当前线程未持有锁Thread.sleep() vs. LockSupport.park()a.两者都释放cpu执行权,但未释放锁;b.两者均可响应中断(t.interrupt()),但Thread.sleep()需要捕获中断异常,并且重置中断状态,LockSupport.park()直接向下执行,并且不会重置中断状态;c.LockSupport.park()可以通过ockSupport.unpark(t)唤醒,Thread.sleep() 只能等待睡眠时..
2021-01-28 23:08:33
125
原创 RequestBodyAdvice全局配置请求参数
线上系统收到异常报警:org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing:public,原因是请求的requestbody内容为空导致。处理方式有两种:使用@RequestBody注解的地方设置属性required=false,但这种方式每个使用的注解的地方都需要改,费时费力且容易遗漏。自定义RequestBodyAdvice,重写handleEm
2021-01-27 23:18:59
704
原创 java.net.InetAddress.getHostName() 阻塞问题
最近在做公司项目时遇到请求慢响应,经过排查发现阻塞发生在InetAddress.getHostName() 方法,耗时在5秒左右。查询javadoc发现这是由于触发了反向DNS查询导致。当一个InetAddress创建时包含了域名信息,getHostName()方法会直接返回这个域名,否则会触发反向DNS解析,当配置的DNS服务器与目标InetAddress之前网络状况不佳就会产生延时。...
2021-01-27 15:50:17
1274
原创 一次nginx 502问题排查和解决
问题描述现象:生产环境50并发压测出现0.01%的错误率,全部为502/Bad Gateway原因分析1.通过观察nginx error log发现产生502的原因为"upstream prematurely closed connection while reading response header from upstream",也就是请求期间上游服务器关闭连接导致。2.分析发现线上nginx upstream配置了keepalive参数,但没有配置proxy_http_version和prox
2021-01-27 15:44:03
3359
原创 volatile与缓存一致性
最近在深入分析volatile关键字的实现原理,内存屏障、缓存一致性、store buffer、invalid queue等知识看了不少,但接触的资料比较零散,无法完整的把相关内容串联起来,所以抽空做些整理,也算对这段时间的学习做一个小结。众所周知,volatile最主要的特性是保证了变量的可见性,即任意线程总能读到对volatile变量的最后写入(最新值)。而可见性正是依靠缓存一致性、内存屏障等机制协同运作来保证的。下面先就volatile与缓存一致性协议之间的关系分享下一点个人理解。缓存一致性计算
2021-01-27 15:25:39
1567
1
原创 volatile与内存屏障
volatile的作用1.保证变量的可见性2.局部限制指令重排(指令重排存在多种情况:1.编译器重排;2.处理器并行重排;3.因为store buffer,invalid queue等异步机制的存在导致的内存重排)为了达到这两个目的,volatile做了两件事情:1.禁止编译器的优化和重排2.通过内存屏障限制处理器重排首先明确下排序规则,简单总结如下(参考JSR-133)a.第二个操作为volatile写,则无论第一个操作是什么,都无法重排序;b.第一个操作为volatile读,则无论第二个
2021-01-27 15:21:52
551
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人