<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[QiuYang18的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/QiuYang18</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; QiuYang18]]></copyright><item><title><![CDATA[记pykafka的一个问题]]></title><link>https://blog.youkuaiyun.com/QiuYang18/article/details/88667889</link><guid>https://blog.youkuaiyun.com/QiuYang18/article/details/88667889</guid><author>QiuYang18</author><pubDate>Tue, 19 Mar 2019 17:29:52 +0800</pubDate><description><![CDATA[pykafka的使用问题

由于业务需要，需使用kafka，由于底层使用的是python，要是使用python的API
现有的包有kafka-python和pykafka，前者需要自己手动管理消费者的offset，比较麻烦，pykafka可使用zk管理offset，相对简单

pykafka Demo

在选定号方案之后，一个简单的Demo如下：

# encoding:utf-8
"""
使用p...]]></description><category></category></item><item><title><![CDATA[spark常用RDD的练习]]></title><link>https://blog.youkuaiyun.com/QiuYang18/article/details/84651349</link><guid>https://blog.youkuaiyun.com/QiuYang18/article/details/84651349</guid><author>QiuYang18</author><pubDate>Fri, 30 Nov 2018 14:48:02 +0800</pubDate><description><![CDATA[spark的核心RDD
1.RDD是什么？（5个特性）

RDD是由一系列partition组成
算子是作用与partition上的（而非RDD）
RDD之间有依赖关系
分区器是作用在K-V格式的RDD上
partition对外提供最佳计算位置，利于数据处理的本地化

2.RDD的理解

hdfs有多个block块（128M），它是hdfs最小的存储单元，RDD由partition构成，parti...]]></description><category></category></item><item><title><![CDATA[spark的wordcount（scala与java版本）]]></title><link>https://blog.youkuaiyun.com/QiuYang18/article/details/84651151</link><guid>https://blog.youkuaiyun.com/QiuYang18/article/details/84651151</guid><author>QiuYang18</author><pubDate>Fri, 30 Nov 2018 14:45:41 +0800</pubDate><description><![CDATA[Scala与java版本的WordCount
1.Scala版本
-涉及算子

textFile,非算子，读取数据，生成一个RDD，RDD的每个元素是文件的一行
flatmap算子：一对一的映射
map算子：一对多的映射
reduceByKey算子：先分组，再reduce
sortBy算子:参数1指定排序字段，参数2指定正反序（Java的pairRDD不存在该算子）
sortByKey算子：参数指...]]></description><category></category></item><item><title><![CDATA[spark的持久化]]></title><link>https://blog.youkuaiyun.com/QiuYang18/article/details/84649846</link><guid>https://blog.youkuaiyun.com/QiuYang18/article/details/84649846</guid><author>QiuYang18</author><pubDate>Fri, 30 Nov 2018 14:29:52 +0800</pubDate><description><![CDATA[spark的持久化

cache
persisit
checkpoint
以上算子都可以将RDD持久化，持久化的单位是partition。cache和persist都是懒执行的。必须有一个action类算子触发执行。checkpoint算子不仅能将RDD持久化到磁盘，还能切断RDD之间的依赖关系。

1. cache
默认将RDD的数据持久化到内存中。cache是懒执行。
注意：cache () ...]]></description><category></category></item><item><title><![CDATA[设计模式-策略模式]]></title><link>https://blog.youkuaiyun.com/QiuYang18/article/details/80320108</link><guid>https://blog.youkuaiyun.com/QiuYang18/article/details/80320108</guid><author>QiuYang18</author><pubDate>Tue, 15 May 2018 11:58:40 +0800</pubDate><description><![CDATA[1.策略模式（Strategy Pattern）的适用场景    策略模式就是用来封装算法的，但在实践中，我们发现可以用它来封装几乎任何类型的规则，只要在分析过程中听到需要在不同时间应用不同的业务规则，就可以考虑使用策略模式处理这种变化的可能性。2.策略模式的特点（1）策略模式是一种定义一系列算法的方法，从概念上看，所有的这些算法完成的都是相同的工作，只是实现不同，它可以以相同的方式调用所有的算法...]]></description><category></category></item><item><title><![CDATA[单例设计模式总结-5种常见写法+防止发射反序列化]]></title><link>https://blog.youkuaiyun.com/QiuYang18/article/details/78312276</link><guid>https://blog.youkuaiyun.com/QiuYang18/article/details/78312276</guid><author>QiuYang18</author><pubDate>Sun, 22 Oct 2017 19:20:50 +0800</pubDate><description><![CDATA[单例模式是设计模式中最常见的，也是最简单的一种，所谓单例，是需要在任何时候只存在一个对象实例，故显然需要私有化构造器，构造器私有了，要想获得这个实例，故必须在类内部创建对象实例，同时必须提供静态方法来获取，静态方法只能操作静态属性，故内部对象实例需要被static修饰，由于单例，可用final修饰；
单例存在多种写法，有各自不同的特点，下面介绍常用的写法，并且这些写法有些存在漏洞，如发射、发序列]]></description><category></category></item><item><title><![CDATA[Java中的volatile关键字详解及单例模式双检锁问题分析]]></title><link>https://blog.youkuaiyun.com/QiuYang18/article/details/77609306</link><guid>https://blog.youkuaiyun.com/QiuYang18/article/details/77609306</guid><author>QiuYang18</author><pubDate>Sat, 26 Aug 2017 22:49:30 +0800</pubDate><description><![CDATA[【参考文献】http://www.cnblogs.com/dolphin0520/p/3920373.html
看了好多关于volatile关键字的文章，这篇应该是讲得最清楚的了吧，从Java内存模型出发，结合并发编程中的原子性、可见性、有序性三个角度分析了volatile所起的作用，并从汇编角度大致说了volatile的原理，说明了该关键字的应用场景；我在这补充一点，分析下volatile是怎]]></description><category></category></item><item><title><![CDATA[Java可重入锁与其释放]]></title><link>https://blog.youkuaiyun.com/QiuYang18/article/details/77606749</link><guid>https://blog.youkuaiyun.com/QiuYang18/article/details/77606749</guid><author>QiuYang18</author><pubDate>Sat, 26 Aug 2017 20:45:25 +0800</pubDate><description><![CDATA[在学习Java多线程相关的知识时，通常都会涉及锁这个概念，常见的synchronized、Lock均为可重入锁。为了更好的理解可重入锁，需要先理解一下几个问题：

1、谁持有了锁？  
2、锁的对象是谁？
3、可重入锁的可重入是什么意思？
一、synchronized关键字
synchronized关键字可有效解决线程安全问题，其内部原理也是通过对所作用的代码块加锁，synchroni]]></description><category></category></item><item><title><![CDATA[深入分析集合并发修改异常（源码分析）java.util.ConcurrentModificationException]]></title><link>https://blog.youkuaiyun.com/QiuYang18/article/details/61916984</link><guid>https://blog.youkuaiyun.com/QiuYang18/article/details/61916984</guid><author>QiuYang18</author><pubDate>Mon, 13 Mar 2017 14:25:42 +0800</pubDate><description><![CDATA[在我们迭代操作集合时，有时可能需要改变集合的元素，若操作不当，经常都会出现不正确的结果或者并发操作异常，如下：Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
	at ja]]></description><category></category></item><item><title><![CDATA[JAVA语法细节-中间变量缓存机制]]></title><link>https://blog.youkuaiyun.com/QiuYang18/article/details/61913806</link><guid>https://blog.youkuaiyun.com/QiuYang18/article/details/61913806</guid><author>QiuYang18</author><pubDate>Mon, 13 Mar 2017 10:19:02 +0800</pubDate><description><![CDATA[在程序设计中，我们经常遇到 i++ 或 ++i 等变量自加操作，一般来说，如 i=0; x=i++ 很容易就会思考到 i 是先使用，后自加，然后x=0; i=1;  对于 x=++i ; 则是先自加，再引用， i=i+1,即i=1 ;再执行x=1;  这也是通常老师上课为大家这么分析的，那么对于 i=i++ 呢？看下面的例子
	public static void main(String[] a]]></description><category></category></item><item><title><![CDATA[二叉树的非递归遍历---JAVA实现]]></title><link>https://blog.youkuaiyun.com/QiuYang18/article/details/61912847</link><guid>https://blog.youkuaiyun.com/QiuYang18/article/details/61912847</guid><author>QiuYang18</author><pubDate>Mon, 13 Mar 2017 09:24:04 +0800</pubDate><description><![CDATA[二叉树的递归遍历方式是很简单的，当需要用非递归的方式遍历时，就需要借助栈这种数据结构，以前序遍历为例，其定义为先访问根节点，再以前序方式访问左子树，再以前序遍历方式访问右子树，这是个递归的定义。对于前序遍历，最先访问的是根，然后是根左边的孩子，在继续访问孩子的左边孩子，走到底部，再从底部开始倒退回来，逐渐访问右边孩子，很自然的想到使用栈这种数据结构......（可以画一个二叉树看看其前序遍历的过程]]></description><category></category></item><item><title><![CDATA[由浅入深：求给定两个树节点的最低公共祖先（二叉树、普通树结构）JAVA实现]]></title><link>https://blog.youkuaiyun.com/QiuYang18/article/details/58245626</link><guid>https://blog.youkuaiyun.com/QiuYang18/article/details/58245626</guid><author>QiuYang18</author><pubDate>Mon, 27 Feb 2017 20:34:38 +0800</pubDate><description><![CDATA[最近看了一道面试题目，觉得很有意思，而且常常被问到，今天综合归纳了一下这道题目，并给出了各种变形题目，附上JAVA版的程序解答。
题目是这样的：寻找二叉树的最低公共祖先？（其中隐含着一个盲点：树是什么树？排序二叉树、普通二叉树、或者不是二叉树？）所以要分别考虑哈各种情况哈

形式一：当树为二叉排序树，如何寻找给定两节点的最低公共祖先？
形式二：当树为普通树，但每个节点中有指针指向其父节点，]]></description><category></category></item><item><title><![CDATA[判断一棵二叉树是否为另一棵二叉树的子结构（JAVA版本）]]></title><link>https://blog.youkuaiyun.com/QiuYang18/article/details/58232579</link><guid>https://blog.youkuaiyun.com/QiuYang18/article/details/58232579</guid><author>QiuYang18</author><pubDate>Mon, 27 Feb 2017 20:09:00 +0800</pubDate><description><![CDATA[分析：判断root1是否为root2的子树？首先，必须先找到树1中与树2的根节点相同的节点，然后判断从该节点开始root1中是否root2的结构；若有，则返回true,若没有，则返回false？答案是No! 因为二叉树root1中可能含有值相同的节点，所以，如果没有找到，就需要继续遍历root1.
Way: 先设计一个函数，isSame(root1,root2)判断给定相同根节点的两子树是否一样]]></description><category></category></item><item><title><![CDATA[Java多线程-基础篇（一）]]></title><link>https://blog.youkuaiyun.com/QiuYang18/article/details/56680537</link><guid>https://blog.youkuaiyun.com/QiuYang18/article/details/56680537</guid><author>QiuYang18</author><pubDate>Thu, 23 Feb 2017 20:57:54 +0800</pubDate><description><![CDATA[多线程---基础篇，本文主要针对多线程的基础进行复习，内容包括线程的理解，创建方式，Thread类函数理解；
1、线程的理解：OS系统角度：每个运行的程序都会被操作系统创建对应的进程（包括分配的资源、PCB等），进程是操作系统分配资源的基本单位（理解：程序运行需要空间，操作系统创建对应进程时就为之分配了相应的空间），切换进程时需要作中断处理、保护现场等，使得系统的并发度受到一定影响；为了提高并发]]></description><category></category></item><item><title><![CDATA[JAVA泛型总结]]></title><link>https://blog.youkuaiyun.com/QiuYang18/article/details/55271659</link><guid>https://blog.youkuaiyun.com/QiuYang18/article/details/55271659</guid><author>QiuYang18</author><pubDate>Thu, 16 Feb 2017 20:31:39 +0800</pubDate><description><![CDATA[最近复习了一下关于JAVA泛型方面的内容，在此做一下简单的总结，分一下几个方面介绍：
1、泛型带来的优点
2、泛型类泛型接口和泛型方法
3、通配泛型
4、泛型的限制
泛型简单的说，就是指参数化类型的能力，在未使用泛型之前，如ArrayList类，其中可以存放任意类型的对象，其方法大部分的参数类型都是Object类型，而实际中，我们常常仅需要存储一种类类型，如String类型，以方便进行S]]></description><category></category></item></channel></rss>