<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[打破沉默的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/cocoivan1992</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; cocoivan1992]]></copyright><item><title><![CDATA[FST在Lucene的实现原理]]></title><link>https://blog.youkuaiyun.com/cocoivan1992/article/details/122972708</link><guid>https://blog.youkuaiyun.com/cocoivan1992/article/details/122972708</guid><author>cocoivan1992</author><pubDate>Wed, 16 Feb 2022 21:55:31 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[Spring IOC容器初始化过程]]></title><link>https://blog.youkuaiyun.com/cocoivan1992/article/details/121468684</link><guid>https://blog.youkuaiyun.com/cocoivan1992/article/details/121468684</guid><author>cocoivan1992</author><pubDate>Mon, 22 Nov 2021 11:54:46 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[MySQL知识点思维脑图]]></title><link>https://blog.youkuaiyun.com/cocoivan1992/article/details/120156450</link><guid>https://blog.youkuaiyun.com/cocoivan1992/article/details/120156450</guid><author>cocoivan1992</author><pubDate>Tue, 07 Sep 2021 13:55:30 +0800</pubDate><description><![CDATA[MySQL知识点思维脑图
脑图


]]></description><category></category></item><item><title><![CDATA[Java运行时数据区和常用指令]]></title><link>https://blog.youkuaiyun.com/cocoivan1992/article/details/117337797</link><guid>https://blog.youkuaiyun.com/cocoivan1992/article/details/117337797</guid><author>cocoivan1992</author><pubDate>Thu, 27 May 2021 20:59:38 +0800</pubDate><description><![CDATA[从一道面试题谈起


第一个截图代码运行结果是8
第二个截图代码运行结果是9
jvms 2.4 2.5
指令集分类

基于寄存器的指令集
基于栈的指令集
Hotspot中的Local Variable Table = JVM中的寄存器

Runtime Data Area

PC 程序计数器

存放指令位置
虚拟机的运行，类似于这样的循环：
while( not end ) {
​	取PC中的位置，找到对应位置的指令；
​	执行该指令；
​	PC ++;
}

JVM Stack


Frame - 每个方]]></description><category></category></item><item><title><![CDATA[对象在内存中的存储布局]]></title><link>https://blog.youkuaiyun.com/cocoivan1992/article/details/117337666</link><guid>https://blog.youkuaiyun.com/cocoivan1992/article/details/117337666</guid><author>cocoivan1992</author><pubDate>Thu, 27 May 2021 20:54:55 +0800</pubDate><description><![CDATA[可使用JavaAgent测试Object的大小

对象的创建过程

对象大小（64位机）
观察虚拟机配置
java -XX:+PrintCommandLineFlags -version
普通对象


对象头：markword  8字节


ClassPointer指针：-XX:+UseCompressedClassPointers 为4字节 不开启为8字节


实例数据

引用类型：-XX:+UseCompressedOops 为4字节 不开启为8字节



Padding对齐，8的倍数


数组对象
.]]></description><category></category></item><item><title><![CDATA[JMM（Java内存模型）]]></title><link>https://blog.youkuaiyun.com/cocoivan1992/article/details/116895068</link><guid>https://blog.youkuaiyun.com/cocoivan1992/article/details/116895068</guid><author>cocoivan1992</author><pubDate>Sun, 16 May 2021 16:16:10 +0800</pubDate><description><![CDATA[Java并发内存模型

hanppens-before原则


计算机缓存模型

缓存行及伪共享

基于计算机的缓存模型，计算机认为相邻的数据大概率在计算时一起被用到，为了提高效率，CPU从L3读取数据到工作内存（L2）时，默认读取64bytes的数据，会将多个数据值读到工作内存，由此引发缓存一致性问题（两个CPU均读取相同的64kb数据，其中一个CPU修改x数据，另一个CPU修改y数据，两个CPU的工作内存数据需要同步）。
解决缓存一致性问题的方案，现在CPU的数据一致性实现=缓存锁+总线锁


总线锁
]]></description><category></category></item><item><title><![CDATA[JVM入门（Class格式及类加载）]]></title><link>https://blog.youkuaiyun.com/cocoivan1992/article/details/116653967</link><guid>https://blog.youkuaiyun.com/cocoivan1992/article/details/116653967</guid><author>cocoivan1992</author><pubDate>Tue, 11 May 2021 14:50:40 +0800</pubDate><description><![CDATA[java执行流程

从图中可以看出，java文件先会被编译成.class字节码文件，由jvm的类加载器加载到内存中，通过字节码解释器或即时编译器编译成汇编语言在操作系统上执行
Class File Format
整个class其实就是二进制的字节流，供jvm解析


整个class文件的构成，基本可以分为几个部分：

magic—魔数（不同类型后缀的文件，文件前缀都不一样，称为魔数，.class文件的魔数前缀是CAFE BABE，占4个字节）
minor_version：jvm小版本号
major_vers]]></description><category></category></item><item><title><![CDATA[分布式事务之使用MQ异步解耦的消息最终一致性方案]]></title><link>https://blog.youkuaiyun.com/cocoivan1992/article/details/100522607</link><guid>https://blog.youkuaiyun.com/cocoivan1992/article/details/100522607</guid><author>cocoivan1992</author><pubDate>Tue, 03 Sep 2019 17:07:53 +0800</pubDate><description><![CDATA[为什么要做成异步的并使用MQ

上文已经说过，不管是2PC、3PC都没有根本解决性能问题，而如果通过MQ的事务消息来进行异步解耦，会提升系统性能。
	服务进行模块化拆分，便于提高系统模块重用度，使开发和维护可以并行进行，提高效率。
	系统扩展性更高。
	团队协作流程也会得到改善。




异步/分布式会出现消息一致性的问题







消息生成者发送消息
	MQ收到消息，将消息进行...]]></description><category></category></item><item><title><![CDATA[SpringBoot集成Redis和配置Redis做缓存]]></title><link>https://blog.youkuaiyun.com/cocoivan1992/article/details/93192104</link><guid>https://blog.youkuaiyun.com/cocoivan1992/article/details/93192104</guid><author>cocoivan1992</author><pubDate>Fri, 21 Jun 2019 16:06:43 +0800</pubDate><description><![CDATA[Redis介绍

Redis是一个开源的、高性能的、基于键值对的缓存与存储系统，通过提供多种键值数据类型来适应不同场景下的缓存与存储需求，直观的存储结构使得通过程序交互十分简单。
Redis数据库中所有数据都存储在内存中，由于内存的读写速度远快于硬盘，因此Redis在性能上对比其他基于硬盘存储的数据库有非常明显的优势，而且Redis提供了对持久化的支持，即可以将内存中的数据异步写入到硬盘中，且不影...]]></description><category></category></item><item><title><![CDATA[Spring MVC 项目配置Kaptcha验证码]]></title><link>https://blog.youkuaiyun.com/cocoivan1992/article/details/71292788</link><guid>https://blog.youkuaiyun.com/cocoivan1992/article/details/71292788</guid><author>cocoivan1992</author><pubDate>Sat, 06 May 2017 20:10:20 +0800</pubDate><description><![CDATA[Spring MVC 项目配置Kaptcha验证码一般的网站注册和登录验证码都是用前端JS来实现的，只要前端验证成功就可以发送注册和登录的请求，这样如果受到来自网页和爬虫的攻击，验证码相当于形同虚设，后台服务器可能收到大量的http请求，严重影响服务器的性能。由此可见，如果由后台生成验证码之后展现给页面，页面每次的请求带上验证码信息到后台来比对会安全一些，成功再进行之后的操作，失败则返回提示信息。配]]></description><category></category></item></channel></rss>