<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[zjs_scallop的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/zjs_scallop</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; zjs_scallop]]></copyright><item><title><![CDATA[Spring学习]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/115252296</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/115252296</guid><author>zjs_scallop</author><pubDate>Fri, 26 Mar 2021 18:00:06 +0800</pubDate><description><![CDATA[Spring中的设计模式
控制反转（原则）


依赖注入：实现控制反转的一种设计模式


将想要创建对象的类（Person.class）和其依赖交给容器，让容器帮你创建对象


工厂模式


创建bean对象


BeanFactory

延迟注入(使用到某个 bean 的时候才会注入)
占用内存少，程序启动速度快



ApplicationContext


容器启动时一次性创建所有bean


是BeanFactory的扩展


一般使用


实现类

ClassPathXmlApplication：]]></description><category></category></item><item><title><![CDATA[Kafka学习]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/115252231</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/115252231</guid><author>zjs_scallop</author><pubDate>Fri, 26 Mar 2021 17:57:10 +0800</pubDate><description><![CDATA[Kafka

分布式流式处理平台

功能

消息队列：发布订阅模式+广播（消息发布后才订阅的消费者收不到该消息）

producer
consumer
broker
topic
partition（分区）

topic的一部分，一个topic可以有多个
可以分布在不同的broker上
可简单理解为消息队列中的队列
多副本机制，往leader写和读，follow从leader中获取信息进行同步，当leader发生故障时，follow通过选举成为新的leader（同步成度达到要求）
优点：负载均衡，可以指定副本]]></description><category></category></item><item><title><![CDATA[RocketMQ学习]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/115246081</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/115246081</guid><author>zjs_scallop</author><pubDate>Fri, 26 Mar 2021 15:14:01 +0800</pubDate><description><![CDATA[RocketMQ


一个队列模型的中间件


优点：高性能、高可靠、高实时、分布式


RocketMQ 通过使用在一个 Topic 中配置多个队列并且每个队列维护每个消费者组的消费位置 实现了 主题模式/发布订阅模式 。


成员

Broker（中间件，与Topic多对多）

有多个，实现负载均衡
集群，主从部署（从节点可以提供消费服务，但是不能写入）


NameServer（注册中心）

Broker管理
路由信息管理
集群（没有主节点）、会出现数据不一致因为互不通信，当有新服务器加入的时候不会立]]></description><category></category></item><item><title><![CDATA[消息队列基础知识学习]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/114993240</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/114993240</guid><author>zjs_scallop</author><pubDate>Thu, 18 Mar 2021 22:59:38 +0800</pubDate><description><![CDATA[优点

通过异步处理提高系统性能（减少响应所需时间）。
削峰/限流
降低系统耦合性。



缺点：

系统可用性降低
系统复杂性提高
一致性问题



JMS


java的消息服务（API是一个消息服务的标准或者说是规范）


可以实现异步的消息传输


优点

使分布式的耦合度更低
消息服务更加可靠
异步性



ActiveMQ实现的基础


消息模式

点对点（P2P）模型

Queue作为载体
满足生产者和消费者模式
一条消息只能被一个消费者使用，未被消费的消息在队列中保留直到被消费或超时

..]]></description><category></category></item><item><title><![CDATA[RabbitMQ]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/114993211</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/114993211</guid><author>zjs_scallop</author><pubDate>Thu, 18 Mar 2021 22:58:10 +0800</pubDate><description><![CDATA[采用 Erlang 语言实现 AMQP的消息中间件
消息只能存储到队列里。一个消息可投入一个或多个队列。
多个消费者可以订阅同一个队列，这时队列中的消息会被平均分摊（Round-Robin，即轮询）给多个消费者进行处理。避免重复消费。
不支持队列层面的广播消费。
特点

可靠性：使用一些机制来保证消息的可靠性，如持久化、传输确认及发布确认等。
灵活的路由：对于典型的路由功能，RabbitMQ 己经提供了一些内置的交换器来实现。针对更复杂的路由功能，可以将多个交换器绑定在一起，也可以通过插件机制来实现自己的.]]></description><category></category></item><item><title><![CDATA[volatile、CAS、synchronized]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/114992341</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/114992341</guid><author>zjs_scallop</author><pubDate>Thu, 18 Mar 2021 22:11:07 +0800</pubDate><description><![CDATA[volatile


特性：

保证可见性，不保证原子性

当写一个volatile变量时，JMM会把该线程本地内存中的变量强制刷新到主内存中去；
这个写会操作会导致其他线程中的volatile变量缓存无效。


保证顺序性：禁止指令重排

a.当程序执行到volatile变量的读操作或者写操作时，在其前面的操作的更改肯定全部已经进行，且结果已经对后面的操作可见；在其后面的操作肯定还没有进行；
b.在进行指令优化时，不能将对volatile变量访问的语句放在其后面执行，也不能把volatile变量后面的语句]]></description><category></category></item><item><title><![CDATA[重入锁（ReentranLock）]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/114992291</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/114992291</guid><author>zjs_scallop</author><pubDate>Thu, 18 Mar 2021 22:08:16 +0800</pubDate><description><![CDATA[表示该锁能够支持一个线程对资源的重复加锁
支持获取锁的时候的公平和非公平性选择

如果在绝对时间上，先对锁进行获取的请求一定先被满足，那么这个锁是公平的，反之则是不公平的。
ReentranLock提供了一个构造函数，能够控制锁是否是公平的。
公平锁机制往往没有非公平的效率高
公平锁能减少饥饿发生的概率


实现重进入

线程再次获取锁
锁的最终释放
实现：

线程获取锁的时候检查同步状态，如果为0尝试获取，如果不为0，判断持有锁的是不是当前线程，如果是增加同步状态
线程释放锁的时候减少同步状态，当同步状.]]></description><category></category></item><item><title><![CDATA[读写锁（ReadWriteLock）]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/114991360</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/114991360</guid><author>zjs_scallop</author><pubDate>Thu, 18 Mar 2021 21:26:51 +0800</pubDate><description><![CDATA[读写锁拥有比排他锁更好的并发性和吞吐量
readLock()
writeLock()
其他展示内部工作状态的方法

int getReadLockCount()：返回当前读锁被获取的次数
int getReadHoldCount()：返回当前线程获取读锁的次数
boolean isWriteLocked()：判断写锁是否被获取
int getWriteHoldCount()：返回当前写锁被获取的次数


读写状态设计

依赖自定义同步器来实现同步功能
在同步状态（一个整性变量）上维护多个读线程和一个写线程.]]></description><category></category></item><item><title><![CDATA[mysql基础知识]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/114682242</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/114682242</guid><author>zjs_scallop</author><pubDate>Thu, 11 Mar 2021 22:42:04 +0800</pubDate><description><![CDATA[mysql

关系型数据库
默认端口号：3306

存储引擎

5.7 默认的存储引擎是InnoDB

具有事务、回滚和崩溃修复能力的事务安全型表
支持行级锁、表级锁
支持外键
支持MVCC


5.5及以前默认的存储引擎是MyISAM

不支持事物、行级锁
崩溃后无法安全恢复
性能极佳



索引

哈希索引

场景：绝大部分需求为单条记录查询


BTree索引

适合大部分场景
b+树

MyISAM（非聚簇索引）

B+Tree叶节点的data域存放的是数据记录的地址
索引文件和数据文件是分离的

]]></description><category></category></item><item><title><![CDATA[Java23种设计模式之创建型模式]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/114539223</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/114539223</guid><author>zjs_scallop</author><pubDate>Mon, 08 Mar 2021 17:13:32 +0800</pubDate><description><![CDATA[学习自http://c.biancheng.net/view/8508.html
设计原则
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E8ZyTyxU-1615194675655)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20210308111154427.png)]
创建型模式

特点：将对象的创建与使用分离

单例模式


对象创建型模式


指一个类只有一个实例，且该类能自行创建这]]></description><category></category></item><item><title><![CDATA[AQS源码详解——独占锁（acquire、release）]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/114289617</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/114289617</guid><author>zjs_scallop</author><pubDate>Tue, 02 Mar 2021 17:32:14 +0800</pubDate><description><![CDATA[acquire（int arg）
获取独占资源
 public final void acquire(int arg) {
        //1、尝试获取独占资源 成功返回 失败进行下一步
        // 2、生成节点，将其添加进同步队列 竞争成功返回
        //3、若线程在不可中断的时候被中断了
        if (!tryAcquire(arg) &amp;&amp;             
            acquireQueued(addWaiter(Node.EXC]]></description><category></category></item><item><title><![CDATA[JVM_内存管理]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/113948565</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/113948565</guid><author>zjs_scallop</author><pubDate>Mon, 22 Feb 2021 18:30:42 +0800</pubDate><description><![CDATA[自动内存管理
运行时数据区



线程独享
虚拟机栈（执行Java方法也就是字节码服务）
1、局部变量表
​      1）存放信息
​             ①基本数据类型（boolean、byte、char、short、int、float、long、double）
​             ②对象引用
​                       a.reference类型
​                       b.不等同于对象本身
​                       c.可]]></description><category></category></item><item><title><![CDATA[Deque 双端队列]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/113925105</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/113925105</guid><author>zjs_scallop</author><pubDate>Sun, 21 Feb 2021 22:27:00 +0800</pubDate><description><![CDATA[Deque 双端队列

继承自Queue接口



实现类：


常用LinkedList实现。

常用方法有如下，以及Queue中的方法






第一个元素 (头部)
最后一个元素 (尾部)







抛出异常
特殊值
抛出异常
特殊值


插入
addFirst(e)
offerFirst(e)
addLast(e)
offerLast(e)


删除
removeFirst()
pollFirst()
removeLast()
pollLast()


检查
getFirst()
peekFi]]></description><category></category></item><item><title><![CDATA[getOrDefault()]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/113925092</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/113925092</guid><author>zjs_scallop</author><pubDate>Sun, 21 Feb 2021 22:23:18 +0800</pubDate><description><![CDATA[map.getOrDefault(Object key, V defaultValue)
当Map集合中有这个key时，就使用这个key对应的value值，如果没有就使用defaultValue

]]></description><category></category></item><item><title><![CDATA[Java基础知识_内部类]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/113899408</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/113899408</guid><author>zjs_scallop</author><pubDate>Sat, 20 Feb 2021 22:21:41 +0800</pubDate><description><![CDATA[1、内部类既可以访问自身数据域，也可以访问它的外围类对象的数据域

若有重名，优先调用内部类中定义的同名变量。
在其他类中，通过 外部类.内部类的形式进行访问

People.Compare compare = new Compare(); 

2、内部类中所有静态域都必须是 final。
3、局部类不能用public或private访问符进行声明。与其他内部类相比，局部类还有一个优点。它们不仅能够访问包含它们的外部类，还可以访问局部变量。不过这些局部变量必须为事实上的final。
3、由于构造器的名字必须]]></description><category></category></item><item><title><![CDATA[Java基础知识_类、方法、面向对象]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/113899141</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/113899141</guid><author>zjs_scallop</author><pubDate>Sat, 20 Feb 2021 22:09:37 +0800</pubDate><description><![CDATA[类
构造函数

和类名一致
可以进行重载
不可以重写
没有返回值
new 调用
如果没有自定义的构造函数,那么java会创建一个无参构造函数
super this（位于构造函数中有效代码的第一行）

隐式参数和显式参数

this 指向的是 谁调用这个方法就指向谁


public void setSex(int sexGet){
    this.sex = sexGet;
    //此处的this即为下文中的对象s，是该函数的隐式参数
    //sexGet为显示参数
}



Student s ]]></description><category></category></item><item><title><![CDATA[Java基础知识_基本类型的运用]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/113896314</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/113896314</guid><author>zjs_scallop</author><pubDate>Sat, 20 Feb 2021 21:11:41 +0800</pubDate><description><![CDATA[整型


int


正负20亿（）


拆箱和装箱


.valueOf();//装箱

.intValue();//拆箱



java编译器做的自动拆装箱


128陷阱[-128,127],高点可自行设置
（Integer使用较多，应用得当可节约内存）




long

128陷阱[-128,127],边界不可更改



short


byte


浮点型


float（转到int时可能会出现精度缺失）


double

相乘时会出现精度缺失的情况，可先转为BigDecimal再做乘法运算）]]></description><category></category></item><item><title><![CDATA[每天一个Linux]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/109008690</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/109008690</guid><author>zjs_scallop</author><pubDate>Sun, 11 Oct 2020 10:31:04 +0800</pubDate><description><![CDATA[转载至https://blog.youkuaiyun.com/weixin_43314519/article/details/106934678?utm_medium=distribute.pc_relevant_t0.none-task-blog-OPENSEARCH-1.add_param_isCf&amp;depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-OPENSEARCH-1.add_param_isCf
一、基本命令操作
常用键
Tab按]]></description><category></category></item><item><title><![CDATA[Java中double相乘精度缺失问题]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/109008348</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/109008348</guid><author>zjs_scallop</author><pubDate>Sun, 11 Oct 2020 10:12:26 +0800</pubDate><description><![CDATA[今天在写项目的过程中遇到了这样一个问题
10.79 * 350 = 3776.4999999999995
而不是原来应该出现的 3776.5 导致四舍五入的过程中少一变成3776
上网一查，发现是精度缺失导致的
解决办法：
相乘前将其从double类型转换为BigDecimal类型
        BigDecimal price = new BigDecimal(350);
        BigDecimal unit = new BigDecimal(10.79);
        BigDecima]]></description><category></category></item><item><title><![CDATA[如何分析算法的运行时间（以插入排序为例）]]></title><link>https://blog.youkuaiyun.com/zjs_scallop/article/details/105073725</link><guid>https://blog.youkuaiyun.com/zjs_scallop/article/details/105073725</guid><author>zjs_scallop</author><pubDate>Tue, 24 Mar 2020 16:52:20 +0800</pubDate><description><![CDATA[一个算法在特定输入上的运行时间是指执行的基本操作或步数量。

简单来说就是执行每行（）伪代码所需演的时间（）。

接下来看下面这段伪代码



行
			代码
			代价
			次数
		1
			for j = 2 to A.length
			
			n
		2
			key = A [ j ]
			
			n-1
		3
			//Insert A [ j ] into the sort...]]></description><category></category></item></channel></rss>