<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[blade1122的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/blade1122</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; blade1122]]></copyright><item><title><![CDATA[Spring IOC与AOP]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/108229587</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/108229587</guid><author>blade1122</author><pubDate>Mon, 07 Sep 2020 19:21:20 +0800</pubDate><description><![CDATA[Spring入门
一 IOC
1.1 Spring容器
分类：

Bean工厂，BeanFactory
应用上下文，ApplicationContext，常用

获取ApplicationContext：
通过ClassPathXmlApplicationContext对象来获取
	ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

1.2 创建Bean
Spring中有四种方式配置对象]]></description><category></category></item><item><title><![CDATA[Zookeeper基本实践]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/107737320</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/107737320</guid><author>blade1122</author><pubDate>Sat, 01 Aug 2020 21:48:32 +0800</pubDate><description><![CDATA[增删改查节点
package com.org.zookeeper.crud;

import com.org.zookeeper.ClientFactory;
import lombok.extern.slf4j.Slf4j;
import org.apache.curator.framework.CuratorFramework;
import org.apache.zookeeper.AsyncCallback;
import org.apache.zookeeper.CreateMode;
impor]]></description><category></category></item><item><title><![CDATA[Reactor反应器模式示例]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/106874390</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/106874390</guid><author>blade1122</author><pubDate>Wed, 08 Jul 2020 08:36:59 +0800</pubDate><description><![CDATA[单线程版本Reactor模式范例
Reactor反应器
/**
 * 单线程版的反应器模式demo
 */
public class EchoServerReactor implements Runnable {
    Selector selector;
    ServerSocketChannel serverSocketChannel;

    public static void main(String[] args) {
        new Thread(new EchoServerRe]]></description><category></category></item><item><title><![CDATA[NIO简单应用]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/106770303</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/106770303</guid><author>blade1122</author><pubDate>Mon, 15 Jun 2020 20:08:30 +0800</pubDate><description><![CDATA[NIO简单应用
使用FileChannel完成文件复制
public class FileNIOCopyDemo {
    public static void main(String[] args) {
        nioCopyResourceFile();
    }

    /**
     * 复制两个资源目录下的文件
     */
    private static void nioCopyResourceFile() {
        String sourcePath = Ni]]></description><category></category></item><item><title><![CDATA[Kafka消息丢失与消费精确一次性]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/106043159</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/106043159</guid><author>blade1122</author><pubDate>Sun, 10 May 2020 22:00:08 +0800</pubDate><description><![CDATA[Kafka消息丢失与消费精确一次性
消息丢失
消息丢失的场景



生产者丢失数据
如果Kafka Producer使用“发后即忘”的方式发送消息，即调用producer.send(msg)方法来发送消息，方法会立即返回，但此时并不能说明消息已经发送成功。（我所在的项目中目前使用的都是这种方法发送消息。。。难怪每次都要和平台扯皮，我说我发了，他说他没收到。。。）消息发送方式详见初次邂逅Kafka生产者。
如果在消息过程中发生了网络抖动，那么消息就会丢失；或发送的消息本身不符合要求，如大小超过Broker端的]]></description><category></category></item><item><title><![CDATA[快速入门Kafka消费者]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/104763580</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/104763580</guid><author>blade1122</author><pubDate>Sun, 19 Apr 2020 22:29:21 +0800</pubDate><description><![CDATA[消费者与消费者组
消费者（Consumer）负责订阅Kafka中的主题（Topic），并且从主题上拉取消息。Kafka中还存在消费者组（Consumer Group）的概念。每一个消费者都有一个对应的消费者组。当消息发布到主题后，会被投递给订阅它的消费者组中的一个消费者。
客户端开发一般流程
订阅主题与分区
消费消息
位移提交
指定位移消费
重平衡
消费者拦截器
消息消费的多线程实现

...]]></description><category></category></item><item><title><![CDATA[《PostgreSQL修炼之道》读书笔记 - PostgreSQL逻辑结构管理和核心架构]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/105583866</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/105583866</guid><author>blade1122</author><pubDate>Sun, 19 Apr 2020 17:20:15 +0800</pubDate><description><![CDATA[第六章 逻辑结构管理
6.9 索引
6.9.2 索引的分类
PostgreSQL支持以下几类索引：

B-tree：最常用，适合处理等值查询和范围查询；
Hash：只能处理简单等值查询；
Gist：可用于图形操作符；
SP-GiST：空间分区GiST索引；
GIN：反转索引

6.9.3 创建索引
CREATE INDEX indexname on tablename(column_name)
6...]]></description><category></category></item><item><title><![CDATA[初次邂逅Kafka生产者]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/104622676</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/104622676</guid><author>blade1122</author><pubDate>Sun, 08 Mar 2020 15:17:57 +0800</pubDate><description><![CDATA[Kafka生产者
客户端开发
客户端开发一般包含以下几个基本流程：

配置生产者客户端参数及创建生产者实例；
构建待发送的消息；
发送消息；
关闭生产者实例。

示例代码：
public class KafkaProducerAnalysis {
    public static final String brokerList = "localhost:9092";
    public sta...]]></description><category></category></item><item><title><![CDATA[Redis基本数据类型之List]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/104456168</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/104456168</guid><author>blade1122</author><pubDate>Sun, 23 Feb 2020 20:29:25 +0800</pubDate><description><![CDATA[List
List是Redis的另一种基本数据类型，Redis中的List是以双向链表形式存在的，key持有对链表头元素和尾元素的索引。向双向链表的头部或尾部添加数据的时间复杂度是常数级别的。
基本命令
1.向列表中添加元素
既然list是双向链表，那就必然支持从两端向list中添加元素。对应的命令分别为:
lpush key value [value …],
rpush key value [v...]]></description><category></category></item><item><title><![CDATA[Redis基本数据类型之String]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/104167361</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/104167361</guid><author>blade1122</author><pubDate>Mon, 10 Feb 2020 21:45:42 +0800</pubDate><description><![CDATA[Redis中的Key

Redis中的key是二进制安全的，可以使用任意二进制序列作为key，即如字符串或者图片的内容都可以作为key，注意：空字符串在Redis中也被认为是有效的key。
key不宜过长，一是从存储角度来讲比较耗费内存，而且在查找key时对key进行比较将会增加开销。
推荐使用中划线或冒号将描述字段分隔，整体作为key，如：“student:id”、“student:age”。
...]]></description><category></category></item><item><title><![CDATA[初识Redis-安装部署]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/104145524</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/104145524</guid><author>blade1122</author><pubDate>Mon, 03 Feb 2020 10:48:03 +0800</pubDate><description><![CDATA[什么是Redis
官方定义：

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.

Redis是一个开源的、基于内存的数据结构存储器，可以用作数据库、缓存和消息中间件。
It supports data struc...]]></description><category></category></item><item><title><![CDATA[BeanFactory与FactoryBean的区别]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/103334571</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/103334571</guid><author>blade1122</author><pubDate>Sun, 01 Dec 2019 14:00:37 +0800</pubDate><description><![CDATA[BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件，如AOP功能、Web应用等。ApplicationContext接口,它由BeanFactory接口派生而来，ApplicationContext包含BeanFactory的所有功能，通常建议比BeanFa...]]></description><category></category></item><item><title><![CDATA[Spring学习笔记（二）：bean的注册加载]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/103334552</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/103334552</guid><author>blade1122</author><pubDate>Sun, 01 Dec 2019 13:56:46 +0800</pubDate><description><![CDATA[Spring学习笔记（二）：bean的注册加载
@Conditional条件注册bean

场景：向IoC容器注册bean时，当操作系统为Windows时，注册Sansa实例，当操作系统为Linux时，注册Rob实例。
解决方案：使用@Conditional注解进行定制化条件选择注册bean。


配置类

@Configuration
public class MainConfig {
    ...]]></description><category></category></item><item><title><![CDATA[Spring学习笔记（一）：配置类、组件扫描和懒加载]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/103333898</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/103333898</guid><author>blade1122</author><pubDate>Sun, 01 Dec 2019 12:30:53 +0800</pubDate><description><![CDATA[Spring学习笔记（一）：配置类、组件扫描和懒加载
Configuration注解配置类
使用@Configuration来注解配置类，可以替代beans.xml配置文件
    //配置类==配置文件
    @Configuration
    public class MainConfig {
        //向IoC容器中注册一个bean，类型为返回值的类型
        @Bea...]]></description><category></category></item><item><title><![CDATA[Java并发编程-解决可见性与有序性问题]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/103325045</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/103325045</guid><author>blade1122</author><pubDate>Sat, 30 Nov 2019 15:21:34 +0800</pubDate><description><![CDATA[从可见性与有序性问题的原因着手

导致可见性问题的原因是缓存，导致有序性问题的原因是编译优化，那么解决二者的最直接方法就是禁用缓存和编译优化。但是这样程序的性能将会受到很大程度降低。

这里较为合理的方案是按需禁用缓存和编译优化。Java内存模型规范了JVM如何提供按需禁用缓存和编译优化的方法。具体包括：volatile、synchronized和final关键字和Happens-Before规则...]]></description><category></category></item><item><title><![CDATA[并发编程的Bug源头：可见性、原子性和有序性问题]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/103324946</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/103324946</guid><author>blade1122</author><pubDate>Sat, 30 Nov 2019 15:13:23 +0800</pubDate><description><![CDATA[学习极客时间上的《Java并发编程实战》课程之余，结合自己的理解整理一部分笔记以巩固知识。

并发编程的起源

1.硬件设备发展的核心矛盾：CPU、内存、I/O设备三者间存在的速度差异。根据木桶原理，程序整体性能最终受制于速度最慢的I/O设备。
	2.为了平和三者速度差异，计算机体系结构、操作系统、编译程序都做出了贡献，主要体现为：
	（1）CPU增加了缓存，以均衡与内存的速度差异；
	（2）操作...]]></description><category></category></item><item><title><![CDATA[markdown编辑器使用手册]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/103209912</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/103209912</guid><author>blade1122</author><pubDate>Sat, 23 Nov 2019 02:02:56 +0800</pubDate><description><![CDATA[这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题，有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能，丰富你的文章UML 图表FLowchart流程图导出与导入导出导入
欢迎使用Ma...]]></description><category></category></item><item><title><![CDATA[《疯狂Java讲义》chapter 5 面向对象（上）]]></title><link>https://blog.youkuaiyun.com/blade1122/article/details/53493412</link><guid>https://blog.youkuaiyun.com/blade1122/article/details/53493412</guid><author>blade1122</author><pubDate>Tue, 06 Dec 2016 21:10:34 +0800</pubDate><description><![CDATA[第五章 面向对象（上）
5.1 类和对象
static修饰的方法中不能使用this引用（静态成员不能直接访问非静态成员）。
同理，对象（实例）也无法调用static修饰的成员（底层依然使用该实例）。
 
5.2 方法详解
在Java语言里，方法不能独立存在，方法必须属于类或对象。
 
Java里的方法的参数传递方式只有一种：值传递
 
5.2.3 形参个数可变的方法P119
]]></description><category></category></item></channel></rss>