<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Chujian的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/s3395719</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; s3395719]]></copyright><item><title><![CDATA[大数据日志采集工作笔记]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/87904678</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/87904678</guid><author>s3395719</author><pubDate>Sun, 24 Feb 2019 19:51:58 +0800</pubDate><description><![CDATA[数据采集概念
许多网站背后都会有一套日志采集系统，负责记录用户的行为数据，再根据自身业务，从各种的行为数据中提取、分析出有商业价值的数据。
流程粗略分为：数据采集，数据处理，数据落地(存储)。
数据处理分为：实时计算、离线计算。
实时计算：要求系统实时处理数据，得到结果，一般应用在实时性要求高的场景，如各个电商、新闻推送网站，通常用户点击几个同类的链接，就会立马计算出用户喜好。
离线计算：适合非实...]]></description><category></category></item><item><title><![CDATA[基于zookeeper实现"有序"的分布式锁]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/87901326</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/87901326</guid><author>s3395719</author><pubDate>Sun, 24 Feb 2019 11:29:21 +0800</pubDate><description><![CDATA[场景
说起分布式锁，第一时间想到的就是使用Redis来实现简单便捷，但是Redis实现的分布式锁是无序的、不公平的。当有业务需求要求保证用户的访问顺序时，redis分布式锁是无法满足业务需求的。(ps:可能是我能力有限)
想到zookeeper也能实现分布式锁，上网一搜，果然zk不管有序无序都OJBK。
zookeeper特点
树形结构。zk类似于文件系统，同样是树形结构，从根节点出发，不断地扩展...]]></description><category></category></item><item><title><![CDATA[新手搭建zookeeper集群]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/86483899</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/86483899</guid><author>s3395719</author><pubDate>Mon, 14 Jan 2019 21:00:07 +0800</pubDate><description><![CDATA[zookeeper集群的搭建非常简单，随便网上一搜都几百篇搭建教程，本来不想写这文章的，但后来想想还是为学习留下一点记录吧。
步骤:

从网上下载zookeeper包并解压
修改zookeeper配置文件
把zookeeper文件夹拷贝到集群其他服务器(节点)
新建dataDir目录和myId文件
启动zookeeper，搭建成功

一、下载zookeeper
地址：https://www-us....]]></description><category></category></item><item><title><![CDATA[Java对象锁的理解]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/81065279</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/81065279</guid><author>s3395719</author><pubDate>Mon, 16 Jul 2018 14:57:27 +0800</pubDate><description><![CDATA[Java 
以前理解Java的锁机制认为：锁的类型分为‘类锁’，’方法锁‘，’对象锁‘。 
1.类锁(synchronize(静态对象))：类的所有对象都要竞争锁。 
2.方法锁(在方法前加synchronize)： 同一对象同一方法需要竞争锁。 
3.对象锁(synchronize(对象))：同一对象代码块竞争锁。

以上都是在学习Java锁的基础理解

其实上面所有的锁，都是“对象锁” 
类锁...]]></description><category></category></item><item><title><![CDATA[阿里云直播初步体验]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/80832346</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/80832346</guid><author>s3395719</author><pubDate>Fri, 06 Jul 2018 11:47:26 +0800</pubDate><description><![CDATA[直播的基本思路：

本地打开设备录播 -&amp;amp;amp;amp;gt; 数据实时推送到服务器 -&amp;amp;amp;amp;gt; N个客户端拉取数据到本地



原理通俗理解： 在服务器上创建一个文件，A直播不断地写入数据，别人不停地读取数据。

阿里云直播使用记录： 
打开阿里云直播的控制台，会提示你开通XXXLive权限。全部开通，确认。

域名配置 
我在域名的配置上卡了很多时间，虽然跟着官方文档做，但是总会有意想不到的错误导致视频直播...]]></description><category></category></item><item><title><![CDATA[JVM垃圾回收算法的优缺点]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/80640455</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/80640455</guid><author>s3395719</author><pubDate>Sun, 10 Jun 2018 17:38:13 +0800</pubDate><description><![CDATA[最近在学习JVM的一些知识，所以特意写下学习笔记来简单记录知识点，由于只是初步的学习，下面本人所总结的内容都比较简单且不一定正确，如果有什么错误希望大家能指出来，我看到后会进行修正。




垃圾分析算法

功能：分析JVM堆上哪些对象是“垃圾”

引用计数法 
每一个对象都有一个引用计数器，当被引用一次时，它都会 +1，引用取消时 -1，当执行GC时，所有引用计数器为 0 的对象都会被视为“垃圾...]]></description><category></category></item><item><title><![CDATA[Java设计模式——模板方法模式]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/78925581</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/78925581</guid><author>s3395719</author><pubDate>Thu, 28 Dec 2017 19:32:27 +0800</pubDate><description><![CDATA[概述 
通俗点讲，模板方法模式就是在一个模板方法中，按既定顺序执行一组步骤(方法)，并将部分步骤(抽象方法)延迟到子类实现。该模式把抽象父类设计为一个模板，所有子类都必须按照模板设定的骨架去按顺序执行方法。抽象类负责实现骨架中的公用方法(通用),子类负责实现必须改变的抽象方法(细节)。作用 
所有继承了抽象类的子类都会按照父类骨架编码。通用方法由父类实现，减少代码冗余。应用场景 
定制系统项目开发大]]></description><category></category></item><item><title><![CDATA[Java设计模式——外观模式]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/78854430</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/78854430</guid><author>s3395719</author><pubDate>Wed, 20 Dec 2017 16:40:33 +0800</pubDate><description><![CDATA[外观模式非常的简单，很容易理解。设计目的： 把功能复杂的系统接口，封装成简单易用的接口直接引用 《Head First》里的类图下面是一个复杂的家庭设备系统，有爆米花机、屏幕、投影仪、DVD等设备。可能截图并不是很清晰，但是没关系，只需要知道这个系统很复杂就行。 
从类图可以看出了，设备系统有很多的设备，而且每种设备又有很多方法。如果要从外部直接调用，就需要写很繁琐的代码。下面的类图使用了一个简单的]]></description><category></category></item><item><title><![CDATA[Java设计模式——适配器模式]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/78850184</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/78850184</guid><author>s3395719</author><pubDate>Wed, 20 Dec 2017 11:36:02 +0800</pubDate><description><![CDATA[设计目的： 使旧接口兼容新接口，不改或少改原业务代码使用场景： 公司系统框架上有一个接口A，程序员为了实现业务，创建一个实现了接口A的类并且在业务代码上大量使用接口A提供的方法。过了几个月，公司由于某种原因，要求放弃旧接口A，改用新接口B，但是旧接口A的实现类已经被大量使用在业务代码了，直接实现接口B需要修改大量代码，很容易造成大面积的bug。使用适配器模式解决上述问题类图白话描述：把接口B“塞到”]]></description><category></category></item><item><title><![CDATA[Java设计模式——命令模式]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/78795891</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/78795891</guid><author>s3395719</author><pubDate>Thu, 14 Dec 2017 12:21:08 +0800</pubDate><description><![CDATA[概述命令模式是把“请求动作或操作”封装成一个“命令对象”，“调用者”通过该“命令对象”把“命令”发送到“接受者”执行“操作”。(看不懂没关系，我刚看命令模式的介绍也不懂，看例子很容易明白了)
例子举一个来自《Head First设计模式》的例子：“在餐厅点餐”场景：顾客到餐厅点餐，写菜单给服务员，服务员把菜单给厨师，厨师按照菜单要求做菜。人物：顾客(发起者)、服务员(调用者)、厨师(接收者)。分析：]]></description><category></category></item><item><title><![CDATA[Java设计模式——装饰者模式]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/78488110</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/78488110</guid><author>s3395719</author><pubDate>Thu, 09 Nov 2017 12:04:41 +0800</pubDate><description><![CDATA[应用场景：一个人身高175cm，他觉得太矮泡不到妹子，穿了一双加厚的袜子增加1cm，嗯感觉效果不明显，再踩在一双加厚1cm的鞋垫，最后还不满意，再穿了一双内置增高3cm的鞋子,成功地把自己的身高“提高”到180cm+，他就被装饰成“大长腿”了。什么是装饰者模式？装饰者模式简单来说就是你想拓展A的功能，但是又不想把它拆了重建，这时你可以创建B，模仿(装饰)A的所有功能，然后在某些方面上模仿(装饰)得比]]></description><category></category></item><item><title><![CDATA[Java设计模式——观察者模式]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/78477878</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/78477878</guid><author>s3395719</author><pubDate>Wed, 08 Nov 2017 13:54:24 +0800</pubDate><description><![CDATA[概述观察者模式是把两个对象分为被观察者与观察者，它们是一对多的关系，当被观察者状态改变时，所有的观察者都能收到通知。类似于微信公众号，可以把文章推送到关注了这个公众号的用户。举例现在看SSM/SSH框架，xxxService,xxxDao…尼玛这不就观察者模式？在Java Swing中，如JButton的监听器，button.addListenner(new XXXListenner());单击、双]]></description><category></category></item><item><title><![CDATA[Java设计模式——策略模式]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/78455024</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/78455024</guid><author>s3395719</author><pubDate>Mon, 06 Nov 2017 10:18:58 +0800</pubDate><description><![CDATA[策略模式是什么？要获得某一结果，往往有多种解决方式，每一种方式就是一种策略。比如吃饭方式，每个人可以有多种应对的策略，用筷子，汤匙，刀叉吃饭等等。策略模式就是把对象(人)与具体行为(吃饭方式)分离，各自有自己的实现体系，实现代码解耦和复用。为什么使用策略模式？主要的作用是为了代码解耦和复用。不使用设计模式： 
 
如图所示，使用类继承的方式，父类具体实现了eat()方法，由于每个人吃饭方式都可能不同]]></description><category></category></item><item><title><![CDATA[搭建SpringMVC+Spring+MyBatis简要过程]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/78316344</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/78316344</guid><author>s3395719</author><pubDate>Mon, 23 Oct 2017 10:39:00 +0800</pubDate><description><![CDATA[准备搭建一个个人网站，由于以前没搭建过SSM框架，上一间公司虽然使用Struts2+Spring+MyBatis,但是基本上是在框架之上写业务，对几大传统的框架理解还是很浅，而现在工作的公司使用的是Play框架，有别于SSM这类框架，是一种非常轻量级的框架。本来有打算用play的，但是考虑一些ssm太久没使用过了，这次就顺便当练手吧。不打算去记录搭建的每一个步骤，因为这类型的文章实在太多了。基本上网]]></description><category></category></item><item><title><![CDATA[子类和父类实现同一个接口的意义]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/78140088</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/78140088</guid><author>s3395719</author><pubDate>Sat, 30 Sep 2017 10:26:36 +0800</pubDate><description><![CDATA[在阅读Java.util.ArrayList源码的过程中，我产生了一个小疑惑，ArrayList实现了List这个接口(这没问题，学Java的都知道)，但ArrayList的抽象父类AbstractList同样实现了List接口。






想了很久这样设计有什么特别的作用？
 父类已经实现了接口，子类继承父类的所有方法，同样能实现接口的所有方法啊，完全没必要子类再去实现该接口！]]></description><category></category></item><item><title><![CDATA[Java爬虫入门之Jsoup使用]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/77703569</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/77703569</guid><author>s3395719</author><pubDate>Wed, 30 Aug 2017 10:16:26 +0800</pubDate><description><![CDATA[刚刚开始学习爬虫，因为本人是一枚初级Java工程师，平时基本上都是使用Java的，所以选择了用Java语言进行爬虫的入门语言，至于现在很热门的Python语言暂时还不熟悉，这个以后再去了解。概述 
 Jsoup是Java中用于解释Html语言的API。用户可以用它来解析文本html代码，也可以直接解析url地址。把html代码加载到内存，能按需要提取所有或特定的标签或内容。Jsoup还提供selec]]></description><category></category></item><item><title><![CDATA[动态代理异常com.sun.proxy.$Proxy0 cannot be cast to]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/76064217</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/76064217</guid><author>s3395719</author><pubDate>Tue, 25 Jul 2017 11:57:48 +0800</pubDate><description><![CDATA[本人在学习动态代理的时候，做了些练习，结果报出了 Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to异常；

与网上其他人写的例子进行仔细对照，发现了原来



改回来后就运行成功了。PS: Work是接口，Hello是实现类


特意在网上查了一下，发现自...]]></description><category></category></item><item><title><![CDATA[Object[]数组与String[]数组转换问题]]></title><link>https://blog.youkuaiyun.com/s3395719/article/details/75334563</link><guid>https://blog.youkuaiyun.com/s3395719/article/details/75334563</guid><author>s3395719</author><pubDate>Wed, 19 Jul 2017 09:37:56 +0800</pubDate><description><![CDATA[在一本书中看到Object[] 与 String[] 的转换。发现有点很奇怪

Object[] ob = {"hello","World"};
String[] str = (String[]) ob;
//报异常Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be c]]></description><category></category></item></channel></rss>