MySQL 加锁处理分析.md
1.背景MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?会有什么样的使用风险?甚至是分析线上的一个死锁场景,了解死锁产生的原因。
注:MySQL是一个支持插件式存储引擎的数据库系统。本文下面的所有介绍,都是基于InnoDB存储引擎,其他引擎的表现,会有较大的区别。
1.1.MVCC:Snapshot Read vs Current ReadMySQL InnoDB存储引擎,实现的是基于多版本的并发控制协议——MVCC (Multi-Version Concurrency Control) (注:与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Control)。MVCC最大的好处,相信也是耳熟能详:读不加锁,读写不冲突。在读多写少的OL ...
Nginx配置HTTPS
配置步骤1、下载Nginx
1wget http://nginx.org/download/nginx.1.20.1.tar.gz
2、解压
1tar -zxvf nginx-1.20.1.tar.gz
3、进入解压目录编译
1234567891011121314151617./configure \--prefix=/usr/local/nginx \--pid-path=/var/run/nginx.pid \--lock-path=/var/lock/nginx.lock \--error-log-path=/var/log/nginx/error.log \--http-log-path=/var/log/nginx/access.log \--with-http_gzip_static_module \--http-client-body-temp-path=/var/temp/nginx/client \--http-proxy-temp-path=/var/temp/nginx/proxy \--http-fastcgi-temp-path=/var/temp/ngi ...
kafka如何实现高可用
一.高可用的由来1.1 为什么需要Replication在Kafka在0.8之前的版本中,是没有Replication,一旦某个broker宕机,则其上的所有Partition数据都不可被消费,这与Kafka的数据持久化和Delivery Guarantee设计原则相违背。
如果Producer使用同步模式则Producer则会在尝试重新发送message.send.max.retries(默认值是3)次后抛出异常,用户可以选择停止发送后续数据或者继续发送。而前者会造成数据的阻塞,后者会造成发送到Kafak数据的丢失。
如果Producer使用异步模式,则Producer会尝试重新发送message.send.max.retries(默认值是3)次后记录该异常并继续发送后续数据,这会造成数据丢失并且用户只能通过日志发现问题。同时,Kafka的Producer并没有对异步模式提供fallback接口。
由此可见,在没有Replication的情况下,一旦某机器宕机或者某个Broker停止工作会曹成整个系统的可用性的降低。随着集群规模的增加,整个集群中出现该类异常的几率大大增加,由此可见, ...
kafka选主算法 kafka选举原理
Kafka核心总控制器Controller在Kafka集群中会有一个或者多个broker,其中有一个broker会被选举为控制器(Kafka Controller),它负责管理整个集群中所有分区和副本的状态。
当某个分区的leader副本出现故障时,由控制器负责为该分区选举新的leader副本。
当检测到某个分区的ISR集合发生变化时,由控制器负责通知所有broker更新其元数据信息。
当使用kafka-topics.sh脚本为某个topic增加分区数量时,同样还是由控制器负责让新分区被其他节点感知到。
Controller选举机制在kafka集群启动的时候,会自动选举一台broker作为controller来管理整个集群,选举的过程是集群中每个broker都会尝试在zookeeper上创建一个 /controller 临时节点,zookeeper会保证有且仅有一个broker能创建成功,这个broker就会成为集群的总控器controller。
当这个controller角色的broker宕机了,此时zookeeper临时节点会消失,集群里其他broker会一直监听这个临时 ...
单点登录不同域之间
扩展上面我们Cookie的作用域是整个二级域名laogu.com。所以不需要进行用户信息在Cookie之间的传递,假如Cookie的作用域是三级域名,或者各个系统之间的二级域名都不一样如何单点登录,这样单点登录就多了一步同步Cookie。保证Client 域名下和 ssoserver域名都有一个同名同值的 Cookie。
第一次单点登录的关键
浏览器第一次访问client1什么信息没带,服务器判断未登录,命令浏览器重定向到sso-server,并且带上成功以后去哪里的地址
浏览器跑去认证中心,认证中心判断未登录过,返回登录页
填写账号密码点击登录,提交账号密码过去,还是记录了redirect..url
认证中心判断登录成功将用户信息存入Redis: UUID: userId
命令浏览器把上面生成的随机UUID保存在自己的认证中心域名对应的 cookie 中,key为“sso_user”。
命令浏览器重定向到原来位置,并且把随机UUID保存在自己的 client1 域名下
判断浏览器是否携带了cookie?(第一次没有),判断是否携带了sso_user这个固定参数(跳转回来的 ...
Docker扩展
前置一:利用Dockerfile 将一个war包生成镜像的Dockerfile
1、docker下创建项目工程名称
12345mkdir -p /usr/local/docker/yida/ cd /usr/local/docker/yida 、# 将桌面qfjy_exam.zip复制到访目录下cp yida-sync-1.0-SNAPSHOT.zip /usr/local/docker/yida/
2、创建镜像文件Dockerfile
1234567FROM tomcat WORKDIR /usr/local/tomcat/webapps/ROOT # 指定工作目录RUN rm -rf * # 删除指定目录所有内容COPY yida-sync-1.0-SNAPSHOT.zip /usr/local/tomcat/webapps/ROOT # 复制到ROOT下RUN unzip yida-sync-1.0-SNAPSHOT.zip # 解压文件RUN rm -rf yida-sync-1.0-SNAPSHOT.zip # 移除多余的压缩包WORKDIR /usr/local/t ...
酷应用接口
添加管理员请求URL1https://dingtalk.yijingcloud.com/cool/addAdmin?conversationId=cidBUESuG8PMNm3ZaVug55Zmg==&dingUserIds=3130162403784614,2842200349792907
请求体
名称
类型
必填
描述
conversationId
String
是
群组ID
dingUserIds
List
是
用户的钉钉id集合
响应体示例
Success
1234567{ "errCode":0, "errMsg":"ok", "data":{ }}
删除管理员请求URL1https://dingtalk.yijingcloud.com/cool/delAdmin?conversationId=cidBUESuG8PMNm3ZaVug55Zmg==&dingUserIds=31301624037 ...
大厂学苑之JUC并发编程与源码分析(下)
11. Java对象内存布局和对象头11.1 先从阿里及其它大厂面试题说起
你觉得目前面试,你还有那些方面理解的比较好,我没问到的,我说了juc和 jym以及同步锁机制
那先说juc吧,说下aqs的大致流程
CAS自旋锁,是获取不到锁就一直自旋吗? cas和synchronized区别在哪里,为什么cas好,具体优势在哪里,我说cas避免cpu切换线程的开销,又问我在自旋的这个线程能保证一直占用cpu吗?假如cpu放弃了这个线程,不是还要带来线程再次抢占cpu的开销?
synchronized底层如何实现的,实现向步的时候用到cas了吗?具体哪里用到了
我说上个问题的时候说到了对象头,问我对象头存储哪些信息,长度是多少位存储
Object object = new Object()谈谈你对这句话的理解?一般而言JDK8按照默认情况下,new一个对象占多少内存空间
位置所在 JVM里堆→新生区→伊甸园区
构成布局 头体?想想我们的HTML报文
Object object = new Object() 谈谈你对这句话的理解?
一般而言JDK8按照默认情况下,ne ...
大厂学苑之JUC并发编程与源码分析(中)
8. CAS8.1 没有CAS之前
多线程环境不使用原子类保证线程安全(基本数据类型)
1234567891011121314151617181920212223 package com.atguigu.juc.prepare;import java.util.concurrent.atomic.AtomicInteger;/** * @auther zzyy * @create 2020-04-15 10:41 */public class T3{ volatile int number = 0; //读取 public int getNumber() { return number; } //写入加锁保证原子性 public synchronized void setNumber() { number++; }}
多线程环境 使用原子类保证线程安全(基本数据类型)
12345678910111213141516171819202 ...
大厂学苑之JUC并发编程与源码分析(上)
JUC并发编程与源码分析1. 本课程前置要求说明JUC四大口诀
高内聚低耦合前提下,封装思想,线程操作资源类
判断、干活、通知
防止虚假唤醒,wait方法要注意
注意标志位flag,可能是volatile的
JUC要求的知识内容
ReentrantLock
ReentrantReadWriteLock
Condition
工具类
CountDownLatch
CyclicBarrier
Semaphore
线程池与阻塞队列
ForkJoinPool与ForkJoinTask
Java8新特性函数式编程、方法引用、lambda Express
原子操作类Atomic
volatile
Callable和FutureTask
本课程的难度对标
阿里P6—P7
阿里P6、P7对高级Java开发工程师的要求明细
技术栈
阿里手册规范
大厂面试题
1、闲聊,自我介绍,负责业务,技术栈
【JUC】
2、synchronized作用、底层实现
3、说下什么是偏向锁,什么时候触发锁升级
4、jmm内存模型,说一下理解、这种内存模型会导致什么问题
5、把你 ...








