<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[mcj19970614的博客]]></title><description><![CDATA[日常感悟]]></description><link>https://blog.youkuaiyun.com/mcj19970614</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; mcj19970614]]></copyright><item><title><![CDATA[mysql事物]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/108970585</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/108970585</guid><author>mcj19970614</author><pubDate>Fri, 09 Oct 2020 00:05:07 +0800</pubDate><description><![CDATA[mysql事物
隔离性的实现

共享锁
排他锁
独占锁
临键锁
间隙锁：根据当前id值判断，（-%,1),(1,3),(3,4)
自增锁
意向锁

持久性：事物提交，对数据库的更新是持久的，wal日志，write ahead log 预写日志
一致性是事物的根本追求
##原子性的实现
undo log（逻辑日志）、rdo log-&gt;innodb
bin log-&gt;mysql
原子性实现原理通过undo log，操作数据前会将数据放到undo log，如果用户恢复了操作则通过undo log将数据]]></description><category></category></item><item><title><![CDATA[数据库索引]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/108968848</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/108968848</guid><author>mcj19970614</author><pubDate>Thu, 08 Oct 2020 21:26:49 +0800</pubDate><description><![CDATA[#索引
功能:索引,为了查询更快,但是修改效率降低,因为要更新索引
索引作为文件存储到磁盘中,
磁盘单位为页,4k为1页.
磁盘预读:最好将相邻的数据都加载进内存以备访问,加载的数据一般为一页的整数倍,内存与磁盘以页为单位交换数据
磁盘io为数据库瓶颈
索引是什么
索引是帮助mysql高效查找的数据结构,如某索引记录了当前索引的数据在哪一个文件中,文件中的偏移量
索引存储在文件系统中,索引的文件存储形式与存储引擎有关
索引的数据结构

b+树(叶子节点不存数据实例,可以存很多索引,底层节点用来存储数据,并将]]></description><category></category></item><item><title><![CDATA[zero copy]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/108963359</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/108963359</guid><author>mcj19970614</author><pubDate>Thu, 08 Oct 2020 14:58:18 +0800</pubDate><description><![CDATA[zero copy,没有cpu参与的拷贝
零拷贝技术,大多数网络服务器都是client-server形式的.当程序想将磁盘上的文件发给服务器时要通过:
硬盘 &gt; 内核缓冲区 &gt; 程序 &gt; socket &gt; 协议栈 4次拷贝
用户态  &gt; 内核态 &gt; 用户态 &gt; 内核态  &gt; 用户态.   4次态的切换
mmap优化:
硬盘 &gt; 内核缓冲区 &gt; socket &gt; 协议栈
用户态 &gt; 内核态 &gt; 用户态 &gt; 内核态 &gt; 用]]></description><category></category></item><item><title><![CDATA[spring mvc核心]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/108963346</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/108963346</guid><author>mcj19970614</author><pubDate>Thu, 08 Oct 2020 14:57:38 +0800</pubDate><description><![CDATA[spring mvc
一些web概念:

servlet:服务端小程序,用来接收并响应用户请求

mvc介绍:mvc是,m(model),v(view),c(controller)的缩写.mvc是一种设计规范,将业务逻辑,数据,显示分离的方法来组织代码.mvc主要降低了业务以及视图之间的耦合度.mvc是一种架构模式,mvc架构
model(模型):数据模型,提供要展示的数据.数据格式,数据模型
view(视图):负责模型数据的展示,一般是用户页面
controller(控制器):接收用户请求,委托给模型进行]]></description><category></category></item><item><title><![CDATA[syn关键字]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/108963341</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/108963341</guid><author>mcj19970614</author><pubDate>Thu, 08 Oct 2020 14:57:03 +0800</pubDate><description><![CDATA[syn关键字
以前做数据同步是使用syn关键字加锁的,直到juc包的出现,有了cas操作,锁操作效率变高
markword里记录了锁.
锁升级步骤
1,new 普通对象
2.加了syn关键字后,偏向锁
3,一旦竞争激烈,就变成轻量级锁(自旋锁),也有一种可能是轻量级锁未启动直接上升到轻量级锁
4.竞争再加剧,重量级锁(向操作系统申请)
看对象分布的第一组0000 0000的倒数两位
0 0 1 :刚new的
1 0 1:偏向锁
0 0:轻量级
1 0:重量级
偏向锁
偏向锁和轻量级锁是用户空间锁,不需要和操]]></description><category></category></item><item><title><![CDATA[spring事物]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/108952769</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/108952769</guid><author>mcj19970614</author><pubDate>Thu, 08 Oct 2020 14:56:31 +0800</pubDate><description><![CDATA[spring事物

spring事物

引言
spring中的事物

总结


spring事物原理

@Transaction
事物的传播行为
事物回滚
总结


类的调用图



引言
事物是一种概念，可以将一些分散的操作划分成一组原子性操作，要么全部成功，要么全部失败。常见的例子有银行转账操作。
事物具有4种性质（ACID）

原子性(atomicity):强调事务的不可分割.
一致性(consistency):事务的执行的前后数据的完整性保持一致.
隔离性(isolation):一个事务执行的过程中]]></description><category></category></item><item><title><![CDATA[分布式定理]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/108952758</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/108952758</guid><author>mcj19970614</author><pubDate>Wed, 07 Oct 2020 16:58:32 +0800</pubDate><description><![CDATA[分布式引入
cap定理:一致性,可用性,分区容错性

一致性:数据时刻保持一致
可用性:主节点宕机没关系,从节点补上
分区容错性:数据不一致没关系,最终一致就可以

redis单机版的可靠性是由本地磁盘保证的,如果当前机器会宕机,那么本地可靠性也没有了
akf:x、y、z轴
x轴:全量镜像,大家都一样
y轴:根据功能业务区分数据,比如订单、用户信息、页面热点数据,
z轴:在业务数据量极大,需要拆分业务数据到不同的redis里,再根据业务拆分
redis单机不行,可能会宕机,那么就x轴增强,加入多台redis]]></description><category></category></item><item><title><![CDATA[syn关键字]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/108952747</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/108952747</guid><author>mcj19970614</author><pubDate>Wed, 07 Oct 2020 16:57:47 +0800</pubDate><description><![CDATA[syn关键字
以前做数据同步是使用syn关键字加锁的,直到juc包的出现,有了cas操作,锁操作效率变高
markword里记录了锁.
锁升级步骤
1,new 普通对象
2.加了syn关键字后,偏向锁
3,一旦竞争激烈,就变成轻量级锁(自旋锁),也有一种可能是轻量级锁未启动直接上升到轻量级锁
4.竞争再加剧,重量级锁(向操作系统申请)
看对象分布的第一组0000 0000的倒数两位
0 0 1 :刚new的
1 0 1:偏向锁
0 0:轻量级
1 0:重量级
偏向锁
偏向锁和轻量级锁是用户空间锁,不需要和操]]></description><category></category></item><item><title><![CDATA[aqs]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/108952739</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/108952739</guid><author>mcj19970614</author><pubDate>Wed, 07 Oct 2020 16:56:55 +0800</pubDate><description><![CDATA[aqs
AQS(abstract queue synchronizer).为什么底层是cas+volatile
概念
aqs是一个框架,用来提供一种阻塞锁和一系列依赖等待队列的同步器框架比如reentrantlock,countdownlatch
使用方法是继承aqs并实现它的模版方法然后讲子类作为组件的内部类
是java自带的 synchronized以外的锁机制
接口
Lock接口,api

lock
trylock
unlock

实现lock接口的有很多类,比如reentrantlock,readw]]></description><category></category></item><item><title><![CDATA[JUC锁工具]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/108952474</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/108952474</guid><author>mcj19970614</author><pubDate>Wed, 07 Oct 2020 16:56:10 +0800</pubDate><description><![CDATA[锁类型
可重入锁
syn关键字就是可重入的,可以在m1方法中调用m2方法.syn中可以调用syn方法
Reentrant lock (经典消费者生产者问题)
可重入锁,用于替换syn。但是syn是自动解锁的,Reentrant lock 需要手动解锁
排他锁
生产者问题与消费者问题,原本想用两把Object锁发现不行,因为wait与notify需要有锁才可以使用不然就会出错,而线程无法先确定谁先开启唤醒,唤醒如果没有wait的线程会报错
api


lock、unlock

使用起来与syn相同



tr]]></description><category></category></item><item><title><![CDATA[锁原理]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/108952460</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/108952460</guid><author>mcj19970614</author><pubDate>Wed, 07 Oct 2020 16:40:21 +0800</pubDate><description><![CDATA[java锁原理
原子操作:原子操作可以是一个步骤,也可以是多个步骤,但是它执行的顺序不可以被打乱,也不可以被分割,只执行其中一部分操作,将整个操作视为一个整体.,资源在该操作中保持一致.
CAS(compare and swap)
CAS(Compare-And-Swap) 算法是硬件对于并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令,用于管理对共享数据的并发访问,比较与交换,首先会对内存中对数据进行比较,相同才进行赋值.内存中进行了限制,同一时间只允许一个线程进行访问内存地址,如果CAS操作失]]></description><category></category></item><item><title><![CDATA[IO原理]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/108952442</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/108952442</guid><author>mcj19970614</author><pubDate>Wed, 07 Oct 2020 16:39:37 +0800</pubDate><description><![CDATA[I/O
内核：管理硬件，设备。分层，内核存在于硬盘中。
用户空间的程序不可以直接访问内核程序。
用户程序访问内核程序需要进行系统调用。
io的发展过程，是对系统调用sc的成本优化。
BIO，讲述系统内核的实现
例如网络socket通信时进行系统调用，io-socket得到一个socket文件描述符fd，绑定到8090端口上（bind）。系统调用accept指令，等待连接。
linux下一切空间都是文件，都有文件描述符fd
accept监听客户端连接。
客户端连接后服务器，系统会发生阻塞，监听客户端发送到信息]]></description><category></category></item><item><title><![CDATA[线程本质]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/108952423</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/108952423</guid><author>mcj19970614</author><pubDate>Wed, 07 Oct 2020 16:38:51 +0800</pubDate><description><![CDATA[多线程本质
线程是进程执行的基本单位(线程的概念)
java中创建多线程,就是操作系统的一个子进程,通过clone的系统调用生成,克隆可以共享文件系统
进程与线程的区别
进程是一个程序运行起来的状态,是操作系统分配资源的基本单位.线程是执行调度的基本单位,进程分配资源最重要的是独立的内存空间
线程在linux中的实现就是一个普通进程(fork方法系统调用,c语言写的)
a父进程调用fork系统调用启动b子进程,它们共享一块内存空间.
jvm级别的线程Thread与操作系统级别的线程是一一对应的(lwp),重]]></description><category></category></item><item><title><![CDATA[es]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/108952400</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/108952400</guid><author>mcj19970614</author><pubDate>Wed, 07 Oct 2020 16:37:08 +0800</pubDate><description><![CDATA[es
Es,搜索,就是通过一个关键字或者一段描述得到正确的结果
往常搜索都用数据库精确搜索,但是数据库模糊搜索,索引不起作用,事件复杂度是o(n),性能低
倒排索引:查询小米智能nfc手机,被分词成为小米、智能、nfc、手机
在现有数据中小米手机匹配2次,小米nfc手机匹配3次,小米耳机匹配1次,相关度最高的就是小米nfc手机,用空间换时间
es中的倒排索引存的是:
包含关键字的document list,比如包含了小米关键字的,数据行id,1、2、3、4
关键词在doc里出现的次数(tf,词频,越高代表越]]></description><category></category></item><item><title><![CDATA[mq]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/108952374</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/108952374</guid><author>mcj19970614</author><pubDate>Wed, 07 Oct 2020 16:35:42 +0800</pubDate><description><![CDATA[mq
active mq
mq,消息中间件,它可以用来存储通信数据
订阅,发送模型
队列详情
功能是解耦合,将服务分开
同步模型
Step1 发送数据 step2 接收数据 step3 接收数据
异步模型
step1 发送数据 step2、step3去mq找数据
概念


消息:两台计算机之间传输的数据单位


消息队列:用来保存消息的容器,如果发送数据时,接收者不可用,那队列会保存消息直到成功传递


broker:一个实例,控制台


queue:只支持一次消费,消费端关注这个queue


topic]]></description><category></category></item><item><title><![CDATA[redis]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/108952362</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/108952362</guid><author>mcj19970614</author><pubDate>Wed, 07 Oct 2020 16:34:55 +0800</pubDate><description><![CDATA[redis
常识:数据存储在磁盘中,磁盘的寻址是ms级,带宽为g/m级别
内存寻址为ns级别,所以磁盘比内存在寻址上慢10万倍,带宽直接走cpu
io buffer:成本问题
磁盘有磁道、扇区,1扇区为512byte,区域越小,成本变大(索引4k,页)
数据也是以4k为基本单位去存储的
因为操作系统控制无论读取多少 都是以4k为单位所以设置小了没必要
数据存储在磁盘文件中,文件越大,查询越慢.为什么?
查询硬盘时io成为瓶颈.
数据库软件中以1页为单位查询,如果没有索引还是全量io也是非常慢的.索引也是4k]]></description><category></category></item><item><title><![CDATA[大话设计模式]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/84317379</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/84317379</guid><author>mcj19970614</author><pubDate>Thu, 06 Dec 2018 17:31:20 +0800</pubDate><description><![CDATA[设计的重要性
在工作中，面对着一页页的代码，脑中只有一个想法就是将需求实现。
在中午的空闲时间里仔细回想了这段时间，发现自己对于编程的理解不够深，还停留在使用代码进行业务开发的阶段。
在阅读了一些文章后，发现编程是一门艺术。
对于初学者来说，应用程序只要不会报错并且运行就可以了。
对于已经工作的人来说，应用程序不仅仅是不会报错能运行就行，你的代码面向的不仅仅是自己，还有日后的维护人员也要面对你的代...]]></description><category></category></item><item><title><![CDATA[枚举类]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/82499785</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/82499785</guid><author>mcj19970614</author><pubDate>Fri, 07 Sep 2018 17:13:17 +0800</pubDate><description><![CDATA[@Getter
@AllArgsConstructor
public enum ApiName {
    ALARM_NOW(&quot;alarmNow&quot;),
    NETWORK_CLIENT(&quot;networkClient&quot;),
    IP_LIST(&quot;ipList&quot;),
    DEPARTMENT(&quot;department&quot;),
    VIOLATION(&quot;violation&quot;);

    ...]]></description><category></category></item><item><title><![CDATA[jackson的简单应用]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/82427228</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/82427228</guid><author>mcj19970614</author><pubDate>Wed, 05 Sep 2018 17:12:07 +0800</pubDate><description><![CDATA[Jackson是我使用的第二种json序列化工具，第一种是阿里的fastjson

1.Jackson的导入



&amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;com.fasterxml.jackson.core&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;jackson-databind&amp;lt;/ar...]]></description><category></category></item><item><title><![CDATA[sql语句记录]]></title><link>https://blog.youkuaiyun.com/mcj19970614/article/details/82346393</link><guid>https://blog.youkuaiyun.com/mcj19970614/article/details/82346393</guid><author>mcj19970614</author><pubDate>Mon, 03 Sep 2018 11:30:23 +0800</pubDate><description><![CDATA[select * from table_a where a.id = x;



select * from table_a where a.id = y;



select * from table_a where a.id = z;

select * from table_a where a.id in x,y,z

查询条件为多个的时候可以使用in查询，上面的sql查询结果是一样的，只不...]]></description><category></category></item></channel></rss>