<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[瓜牛呱呱的博客]]></title><description><![CDATA[最美的不是下雨天，是曾与你躲过雨的屋檐]]></description><link>https://blog.youkuaiyun.com/Lin_wj1995</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Lin_wj1995]]></copyright><item><title><![CDATA[DataX启动流程源码解析（图）]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/125321059</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/125321059</guid><author>Lin_wj1995</author><pubDate>Thu, 16 Jun 2022 18:29:36 +0800</pubDate><description><![CDATA[DataX执行流程源码图解]]></description><category></category></item><item><title><![CDATA[没有好平台如何成长]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/120185914</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/120185914</guid><author>Lin_wj1995</author><pubDate>Wed, 08 Sep 2021 18:16:24 +0800</pubDate><description><![CDATA[本文作者：林小铂 (Paul Lin)
本文链接： http://www.whitewood.me/2017/04/02/没有好平台如何成长/
版权声明： 本博客所有文章除特别声明外，均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处！


最近还是有些许惰性的，在网上看各个大佬的励志文章，以此来督促自己继续前进
最近也是蛮想再度回到大厂的，看了这篇大佬的文章还是颇有感触，转载共勉

前段时间Spenser有篇文章，大意是平台就是本事，因为环境在绝大多数人的成长中起到决定性作用，好的平.]]></description><category></category></item><item><title><![CDATA[Flink-1.10.0 Native Kubernetes 部署方式实践]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/104928677</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/104928677</guid><author>Lin_wj1995</author><pubDate>Tue, 17 Mar 2020 20:20:23 +0800</pubDate><description><![CDATA[最新发布的Flink有了native Kubernetes的功能，可以根据需求动态的增加、减少pod，非常值得测试


前提
1、1.9版本或者以上的K8s集群，且启用了DNS
2、能够操作pod、service的 KubeConfig
3、有RBAC权限的service Account，用于创建，删除pod

测试
解压flink tar包后，执行如下命令：
./bin/kubernetes-...]]></description><category></category></item><item><title><![CDATA[JDK源码-HashMap-resize扩容方法（JDK7和JDK8）]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/83899208</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/83899208</guid><author>Lin_wj1995</author><pubDate>Fri, 09 Nov 2018 16:07:13 +0800</pubDate><description><![CDATA[
扩容操作可以认为是HashMap源码中最复杂的
resize方法的不是public的，不能通过client触发，所以只能直接进入源码查看

JDK 7
void resize(int newCapacity) {
	Entry[] oldTable = table;
	int oldCapacity = oldTable.length;
	if (oldCapacity == MAXIMUM_C...]]></description><category></category></item><item><title><![CDATA[JDK源码-HashMap-remove方法（JDK7和JDK8）]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/83895429</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/83895429</guid><author>Lin_wj1995</author><pubDate>Fri, 09 Nov 2018 11:49:21 +0800</pubDate><description><![CDATA[
测试代码
/**
 * 测试remove操作的区别
 */
@Test
public void remove(){
    HashMap&amp;amp;amp;amp;lt;String, String&amp;amp;amp;amp;gt; map = new HashMap();
    map.put(&amp;amp;amp;quot;aa&amp;amp;amp;quot;,&amp;amp;amp;quot;aa&amp;amp;amp;quot;);
    map.remove(&am]]></description><category></category></item><item><title><![CDATA[JDK源码-HashMap-put方法（JDK7和JDK8）]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/83893901</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/83893901</guid><author>Lin_wj1995</author><pubDate>Fri, 09 Nov 2018 10:34:53 +0800</pubDate><description><![CDATA[
下面是对HashMap中put方法的源码进行注释

测试代码
    /**
     * 测试put操作的区别
     */
    @Test
    public void put(){
        HashMap&amp;amp;lt;String, String&amp;amp;gt; map = new HashMap();
        map.put(&amp;quot;aa&amp;quot;,&amp;quot;aa&amp;quot;);
    }


JDK 7
...]]></description><category></category></item><item><title><![CDATA[Java实现斐波那契数列（递归、遍历、矩阵）]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/82872644</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/82872644</guid><author>Lin_wj1995</author><pubDate>Thu, 27 Sep 2018 20:23:24 +0800</pubDate><description><![CDATA[什么是斐波那契数列
其实很简单，可以理解为：
F(1)=1，F(2)=1, F(n)=F(n-1)+F(n-2)（n&amp;gt;=3，n∈N*）
比如这样一个数列：1、1、2、3、5、8、13、21、34、……
有兴趣可以看百度百科

下面我们就来实现，给定一个n，求f(n)的值
递归解法
递归方法其实是对方法定义完美的一对一实现，但是时间复杂度为O(2的n次方)
代码如下：
    /**
    ...]]></description><category></category></item><item><title><![CDATA[Java实现二叉树——增删改查]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/82785128</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/82785128</guid><author>Lin_wj1995</author><pubDate>Thu, 20 Sep 2018 13:02:54 +0800</pubDate><description><![CDATA[
今天心血来潮，突然想写个二叉树的类，哈哈~

功能代码如下：
package tree;

/**
 * 傻逼tree
 * @author lwj
 * @date 2018/9/20
 */
public class MyTree&amp;lt;K extends Comparable, V&amp;gt;{
    TreeNode root;

    /**
     * 插入操作
     * @p...]]></description><category></category></item><item><title><![CDATA[JDK1.8中TreeMap源码解析——红黑树删除]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/82769361</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/82769361</guid><author>Lin_wj1995</author><pubDate>Wed, 19 Sep 2018 13:10:04 +0800</pubDate><description><![CDATA[
在看本文之前建议先看一下二叉树的删除过程，这里有一篇文章写得不错，可以看一下

1、后继节点
在看源码之前，先说说红黑树寻找 待删除节点t 的 后继节点 的过程：

如果待删除节点t有右节点，那么后继节点为该节点右子树中最左的节点，也就是右子树中值最小的节点
如果待删除节点t无右节点，那么后继节点是向上遍历过程中 第一个向左拐的父节点

图解过程如下：

注：图片来源
该过程对应的TreeMap...]]></description><category></category></item><item><title><![CDATA[Flume中Memory Channel参数说明]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/82759976</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/82759976</guid><author>Lin_wj1995</author><pubDate>Tue, 18 Sep 2018 17:10:19 +0800</pubDate><description><![CDATA[



参数
说明




capacity
在 channel 中 最多能保存多少个 event。默认是100


transactionCapacity
在每次从source中获取数据或者将数据sink出去的一次事务操作中，最多处理的 event 数。默认是100


byteCapacity
在 channel 中最多能容纳 所有event body的总字节数。默认是 JVM最大可用内存（-...]]></description><category></category></item><item><title><![CDATA[记用 SpringBoot 消费 Kafka 过程中的一次问题排查]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/80918026</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/80918026</guid><author>Lin_wj1995</author><pubDate>Wed, 04 Jul 2018 20:35:02 +0800</pubDate><description><![CDATA[1、现象

最近在接受公司Kafka的集群，之前公司重启一台服务器的时候出现重复消费的情况，所以就跟消费端的服务一起联调查册。消费端目前有两个服务，但是在测试的过程中发现其中一个服务可以接受到数据，但是另一个服务端却接受不到数据。于是查看了一下它的日志，关键日志如下：

[INFO] org.apache.kafka.clients.consumer.internals.AbstractCoord...]]></description><category></category></item><item><title><![CDATA[Kafka Producer生产数据时数据丢失分析]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/80264599</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/80264599</guid><author>Lin_wj1995</author><pubDate>Thu, 10 May 2018 15:59:05 +0800</pubDate><description><![CDATA[
  今天在测试 Storm 程序过程中，想通过运行在 idea 的 Kafka Producer 生产一条数据来验证一下 Storm 程序，发现居然没有成功将数据生产到 Kafka 集群中，于是进行了一番测试，最终找到了原因！ 
  注：下面程序测试中使用的 kafka 的版本为 0.10.2.0，zookeeper 的版本为 3.4.5


一、情景再现

在 linux 中运行如下命令来监控...]]></description><category></category></item><item><title><![CDATA[SparkML之推荐引擎（二）—— 推荐模型评估]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/80182170</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/80182170</guid><author>Lin_wj1995</author><pubDate>Fri, 04 May 2018 10:35:24 +0800</pubDate><description><![CDATA[
  本文内容和代码是接着上篇文章来写的，推荐先看一下哈~ 
  我们上一篇文章是写了电影推荐的实现，但是推荐内容是否合理呢，这就需要我们对模型进行评估 
  针对推荐模型，这里根据 均方差 和 K值平均准确率 来对模型进行评估，MLlib也对这几种评估方法都有提供内置的函数


在真实情况下，是要不断地对推荐模型的三个关键参数 rank、iterations、lambda 分别选取不同的值，然后...]]></description><category></category></item><item><title><![CDATA[SparkML之推荐引擎（一）—— 电影推荐]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/80168885</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/80168885</guid><author>Lin_wj1995</author><pubDate>Wed, 02 May 2018 18:17:24 +0800</pubDate><description><![CDATA[
  本文将使用 SparkML 来构建推荐引擎。 
  推荐引擎算法大致分为 基于内容的过滤、协同过滤、矩阵分解，本文将使用基于属于矩阵分解的 最小二乘法 算法来构建推荐引擎。 
  对于推荐引擎模块这里将分为两篇文章，第一篇文章主要是以实现推荐功能为主，第二篇文章主要是对模型进行评估 
  文章将按照以下章节来进行书写： 需求分析、获取数据、提取特征、训练模型、使用模型（推荐）


一、需求分...]]></description><category></category></item><item><title><![CDATA[SparkStreaming Direct 方式中手动管理 Kafka Offset 的示例代码]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/80080359</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/80080359</guid><author>Lin_wj1995</author><pubDate>Wed, 25 Apr 2018 16:17:26 +0800</pubDate><description><![CDATA[在大数据的场景下，流式处理都会借助 Kafka 作为消息接入的中间件，且 SparkStreaming 中 Direct 方式的优越性，现在可以说都使用  Direct 方式来获取 Kafka 数据

Direct 方式是采用 Kafka 低级的 API 来获取数据，也就是说我们要自己来管理 这个offset 
SparkStreaming 中可以用 StreamingContext 的 chec...]]></description><category></category></item><item><title><![CDATA[Redis SortedSet 中 score 的精度问题]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/80046443</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/80046443</guid><author>Lin_wj1995</author><pubDate>Mon, 23 Apr 2018 14:39:21 +0800</pubDate><description><![CDATA[一、问题发现

通过 jedis 往 sortedset 中添加了个成员，并且设定了一个Double 类型的分数时，精度出现了问题 
测试代码如下：



@Test
public void zadd(){
    jedis.zadd(&quot;test:cli&quot;, 13.36, &quot;mb1&quot;);
}

如果用 jedis 的 api 来获取 score 的话一切正常



@Test
public vo...]]></description><category></category></item><item><title><![CDATA[【源码追踪】SparkStreaming 中用 Direct 方式每次从 Kafka 拉取多少条数据（offset取值范围）]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/80004813</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/80004813</guid><author>Lin_wj1995</author><pubDate>Thu, 19 Apr 2018 16:37:12 +0800</pubDate><description><![CDATA[我们知道 SparkStreaming 用 Direct 的方式拉取 Kafka 数据时，是根据 kafka 中的 fromOffsets 和 untilOffsets 来进行获取数据的，而 fromOffsets 一般都是需要我们自己管理的，而每批次的 untilOffsets 是由 Driver 程序自动帮我们算出来的。 
于是产生了一个疑问：untilOffsets 是怎么算出来的？ 
接下...]]></description><category></category></item><item><title><![CDATA[JVM垃圾收集器（五） —— 默认的垃圾收集器]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/79986997</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/79986997</guid><author>Lin_wj1995</author><pubDate>Wed, 18 Apr 2018 12:00:01 +0800</pubDate><description><![CDATA[
  在前面的几篇文章讲述了各种垃圾收集器，但是问题来了，我们在Linux或者Windows安装的 jdk 默认是什么收集器呢？


打开控制台，在控制台中输入一下命令：



java -XX:+PrintCommandLineFlags -version

32位的windows可以看到下面的输出：

-XX:InitialHeapSize=16777216 -XX:MaxHeapSize=2...]]></description><category></category></item><item><title><![CDATA[JVM垃圾收集器（四） —— G1收集器]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/79978116</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/79978116</guid><author>Lin_wj1995</author><pubDate>Tue, 17 Apr 2018 18:33:01 +0800</pubDate><description><![CDATA[
  前面两篇文章主要是讲了新生代和老年代的垃圾收集器，本文就来介绍一下比较特殊的垃圾收集器——G1垃圾收集器


G1是一款面向服务端应用的垃圾收集器。



一、G1的特点：

1、并行与并发：G1能充分利用多CPU、多核环境下的硬件优势，使用多个CPU（CPU或者CPU核心）来缩短Stop-The-World停顿的时间，部分其他收集器原本需要停顿Java线程执行的GC动作，G1收集器仍然可以...]]></description><category></category></item><item><title><![CDATA[JVM垃圾收集器（三） —— 老年代垃圾收集器]]></title><link>https://blog.youkuaiyun.com/Lin_wj1995/article/details/79978052</link><guid>https://blog.youkuaiyun.com/Lin_wj1995/article/details/79978052</guid><author>Lin_wj1995</author><pubDate>Tue, 17 Apr 2018 17:34:24 +0800</pubDate><description><![CDATA[
  上一篇文章讲了新生代的垃圾收集器，这篇文章我们来讲讲老年代的垃圾收集器




Serial Old收集器

1、说明：一个单线程收集器，使用“标记-整理”算法。其实就是Serial收集器老年代的版本

2、优缺点 和 运行图 和Serial收集器一样，所以这里就不多赘述了





Parallel Old收集器

1、说明：Parallel Old是Parallel Scavenge收集...]]></description><category></category></item></channel></rss>