<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[laifu007的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/laifu007</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; laifu007]]></copyright><item><title><![CDATA[MapReduce入门详解（三）]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/103427417</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/103427417</guid><author>laifu007</author><pubDate>Fri, 06 Dec 2019 17:52:18 +0800</pubDate><description><![CDATA[join操作

左外连接(map)-JoinMapSideMR

问题描述：
将两个文件中每行的内容拼接到一个文件中
思路分析：
准备好两个map，firstMapper和joinMapper，firstMapper负责获取文件内容，joinMapper负责拼接文件内容。利用Job开启两个firstMapper任务，获取到两个文件的内容，然后再开启一个joinMapper任务负责拼接获取到的两个文...]]></description><category></category></item><item><title><![CDATA[MapReduce入门详解（二）]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/103427401</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/103427401</guid><author>laifu007</author><pubDate>Fri, 06 Dec 2019 17:51:09 +0800</pubDate><description><![CDATA[MapReduce实践攻略

超详细入门级-WordCount

问题描述：
统计一个文件中，各种单词出现的次数
思路分析：

在map阶段，对每行数据调用一次map方法，对读取到的每行数据按空格进行切割，将分割得到的每个单词作为key，value的值给定为1传递给reduce
	在reduce阶段，从map接收到传递过来的key和value，key值相同的为同一组，对每一组只调用一次reduce...]]></description><category></category></item><item><title><![CDATA[MapReduce入门详解（一）]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/103427366</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/103427366</guid><author>laifu007</author><pubDate>Fri, 06 Dec 2019 17:49:31 +0800</pubDate><description><![CDATA[简介

Mapreduce是一个分布式运算程序的编程框架，是用户开发“基于hadoop的数据分析应用”的核心框架；Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序，并发运行在一个hadoop集群上。

MapReduce框架的结构

一个完整的mapreduce程序在分布式运行时有三类实例进程：

MapReduceApplicationMaster...]]></description><category></category></item><item><title><![CDATA[hive 突破group_by限制，取某一列数据 不需要放在group by里面（Hive笔记之collect_list/collect_set（列转行））]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/102501702</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/102501702</guid><author>laifu007</author><pubDate>Fri, 11 Oct 2019 15:10:15 +0800</pubDate><description><![CDATA[Hive中collect相关的函数有collect_list和collect_set。

它们都是将分组中的某列转为一个数组返回，不同的是collect_list不去重而collect_set去重。

select concat_ws(',',collect_list(event)) as connection ,user_id,rank from mds_user_growth_user_pat...]]></description><category></category></item><item><title><![CDATA[Java中字符串存储在JVM的哪部分？]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/93879679</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/93879679</guid><author>laifu007</author><pubDate>Thu, 27 Jun 2019 15:14:07 +0800</pubDate><description><![CDATA[原文链接：https://www.cnblogs.com/holten/p/5782596.html

现在总结一下：基本类型的变量数据和对象的引用都是放在栈里面的，对象本身放在堆里面，显式的String常量放在常量池，String对象放在堆中。

常量池的说明

常量池之前是放在方法区里面的，也就是在永久代里面的，从JDK7开始移到了堆里面。这一改变我们可以从oracle的release ver...]]></description><category></category></item><item><title><![CDATA[查看linux目录剩余空间大小]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/89916547</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/89916547</guid><author>laifu007</author><pubDate>Tue, 07 May 2019 10:56:09 +0800</pubDate><description><![CDATA[df命令是linux系统以磁盘分区为单位查看文件系统，可以加上参数查看磁盘剩余空间信息，命令格式：

df -hl 查看磁盘剩余空间

df -h 查看每个根路径的分区大小

du -sh [目录名] 返回该目录的大小

du -sm [文件夹] 返回该文件夹总M数

查看linux文件目录的大小和文件夹包含的文件数

统计总数大小

du -sh xmldb/

du -sm * | sort ...]]></description><category></category></item><item><title><![CDATA[为什么volatile在并发下也是线程不安全的]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/89850299</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/89850299</guid><author>laifu007</author><pubDate>Sun, 05 May 2019 17:06:20 +0800</pubDate><description><![CDATA[volatile修饰的变量在各个线程的工作内存中不存在一致性的问题（在各个线程工作的内存中，volatile修饰的变量也会存在不一致的情况，但是由于每次使用之前都会先刷新主存中的数据到工作内存，执行引擎看不到不一致的情况，因此可以认为不存在不一致的问题），但是java的运算并非原子性的操作，导致volatile在并发下并非是线程安全的。



最简单的例子就是多线程为一个变量连续赋值 每次做到 ...]]></description><category></category></item><item><title><![CDATA[什么是CAS机制？]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/89709695</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/89709695</guid><author>laifu007</author><pubDate>Tue, 30 Apr 2019 15:03:44 +0800</pubDate><description><![CDATA[转载声明：无法找到原作者，查到后会添加声明

我们先看一段代码：

启动两个线程，每个线程中让静态变量count循环累加100次。



最终输出的count结果一定是200吗？因为这段代码是非线程安全的，所以最终的自增结果很可能会小于200。我们再加上synchronized同步锁，再来看一下。



加了同步锁之后，count自增的操作变成了原子性操作，所以最终输出一定是count=200，代...]]></description><category></category></item><item><title><![CDATA[leetCode 142 Linked List Cycle II (java版解析)]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/89477245</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/89477245</guid><author>laifu007</author><pubDate>Tue, 23 Apr 2019 17:38:16 +0800</pubDate><description><![CDATA[大致题意：如果单链表有环，找出环的入口节点（环的连接点）



第一次相遇时slow走过的距离：a+b，fast走过的距离：a+b+c+b。
因为fast的速度是slow的两倍，所以fast走的距离是slow的两倍，有 2(a+b) = a+b+c+b，可以得到a=c（这个结论很重要！）。

public class ListNode(int x) {

int data;

ListNode...]]></description><category></category></item><item><title><![CDATA[java中for循环执行顺序]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/89189966</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/89189966</guid><author>laifu007</author><pubDate>Wed, 10 Apr 2019 18:07:39 +0800</pubDate><description><![CDATA[for（表达式1;表达式2;表达式3）
{
//循环体
}
先执行“表达式1”，再进行“表达式2”的判断，判断为真则执行“循环体”，循环体执行完以后执行表达式3.

例如

for(int i=0;i&lt;2;i++){
//TODO
}
先执行 int i = 0;
然后 判断 i&lt;2
然后执行函数体
最后执行i++
然后轮回到判断i&lt;2

...]]></description><category></category></item><item><title><![CDATA[【Java】生产者消费者模式的三种实现]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/88794618</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/88794618</guid><author>laifu007</author><pubDate>Mon, 25 Mar 2019 14:37:03 +0800</pubDate><description><![CDATA[原文地址：https://blog.youkuaiyun.com/u010983881/article/details/78554671

前言

生产者消费者问题是线程模型中的经典问题：生产者和消费者在同一时间段内共用同一存储空间，生产者向空间里生产数据，而消费者取走数据。

阻塞队列就相当于一个缓冲区，平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。



wait/notif...]]></description><category></category></item><item><title><![CDATA[Java异常(exception)性能优化]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/86626033</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/86626033</guid><author>laifu007</author><pubDate>Thu, 24 Jan 2019 14:15:14 +0800</pubDate><description><![CDATA[在Java中，构造异常对象是”十分”耗时的，其原因是在默认情况下，创建异常对象时会调用父类Throwable的fillInStackTrace()方法生成栈追踪信息，JDK中的源码如下：
public synchronized Throwable fillInStackTrace() {
        if (stackTrace != null ||
            backtrace...]]></description><category></category></item><item><title><![CDATA[java web 中两种跳转方式]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/86625935</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/86625935</guid><author>laifu007</author><pubDate>Thu, 24 Jan 2019 14:11:26 +0800</pubDate><description><![CDATA[java web 中两种跳转方式
服务器端跳转与客户端跳转：

首先我们需要理解什么是服务器端跳转，什么是客户端的跳转。简单理解所谓服务器端跳转就是指地址栏内容不变（客户端浏览器的地址栏不会显示目标地址的URL），而客户端跳转是指地址栏内容发生改变（客户端向服务器发请求，然后服务器再给客户端一个响应，然后客户端再根据服务器端给的响应中的URL再向服务器发送请求，所以是两次请求，因此地址栏改变了显示...]]></description><category></category></item><item><title><![CDATA[【算法题】要求对数组中的元素进行重新排列，负数放到前面，不改变相对顺序]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/82994852</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/82994852</guid><author>laifu007</author><pubDate>Wed, 10 Oct 2018 11:49:35 +0800</pubDate><description><![CDATA[import java.util.Scanner;

/**
 * 
题目描述 给定一个未排序的整数数组，数组中的元素有正数也有负数，要求对数组中的元素进行重新排列，
使得负数排在正数的前面，并且不改变原来正数和负数之间的相对顺序。例如，如果输入是{1,7,-5,9,-12,15}，
则输出是{-5,-12,1,7,9,15}。要求时间复杂度为O(n)，空间复杂度为O(1)
思路描述 由于不改变相...]]></description><category></category></item><item><title><![CDATA[常用负载均衡算法+nginx负载均衡实现方法]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/80454367</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/80454367</guid><author>laifu007</author><pubDate>Fri, 25 May 2018 17:16:41 +0800</pubDate><description><![CDATA[1、轮询法　　将请求按顺序轮流地分配到后端服务器上，它均衡地对待后端的每一台服务器，而不关心服务器实际的连接数和当前的系统负载。2、随机法     通过系统的随机算法，根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知，随着客户端调用服务端的次数增多，其实际效果越来越接近于平均分配调用量到后端的每一台服务器，也就是轮询的结果。3、源地址哈希法     源地址哈希的...]]></description><category></category></item><item><title><![CDATA[Tomcat中JVM内存溢出及合理配置]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/80265134</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/80265134</guid><author>laifu007</author><pubDate>Thu, 10 May 2018 11:30:02 +0800</pubDate><description><![CDATA[Tomcat本身不能直接在计算机上运行，需要依赖于硬件基础之上的操作系统和一个Java虚拟机。Tomcat的内存溢出本质就是JVM内存溢出，所以在本文开始时，应该先对Java JVM有关内存方面的知识进行详细介绍。一、Java JVM内存介绍JVM管理两种类型的内存，堆和非堆。按照官方的说法：“Java 虚拟机具有一个堆，堆是运行时数据区域，所有类实例和数组的内存均从此处分配。堆是在 Java 虚...]]></description><category></category></item><item><title><![CDATA[elasticsearch5.0安装及ik分词插件安装]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/79743775</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/79743775</guid><author>laifu007</author><pubDate>Thu, 29 Mar 2018 15:50:51 +0800</pubDate><description><![CDATA[先说一下踩的坑：su命令和su -命令最大的本质区别就是：前者只是切换了root身份，但Shell环境仍然是普通用户的Shell；而后者连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误。su切换成root用户以后，pwd，所以从root切换到非root用户时启动Es时，要用su - 用户名
ElastisSearch5.0 安装ik插件不需要再...]]></description><category></category></item><item><title><![CDATA[JVM调优总结 -Xms -Xmx -Xmn -Xss]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/79717276</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/79717276</guid><author>laifu007</author><pubDate>Tue, 27 Mar 2018 18:21:07 +0800</pubDate><description><![CDATA[堆大小设置JVM 中最大堆大小有三方面限制：相关操作系统的数据模型（32-bt还是64-bit）限制；系统的可用虚拟内存限制；系统的可用物理内存限制。32位系统下，一般限制在1.5G~2G；64为操作系统对内存无限制。我在Windows Server 2003 系统，3.5G物理内存，JDK5.0下测试，最大可设置为1478m。典型设置：java -Xmx3550m -Xms3550m -Xmn2...]]></description><category></category></item><item><title><![CDATA[数据库事务的4种隔离级别]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/79697766</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/79697766</guid><author>laifu007</author><pubDate>Mon, 26 Mar 2018 14:33:07 +0800</pubDate><description><![CDATA[数据库事务的隔离级别有4种，由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且，在事务的并发操作中可能会出现脏读，不可重复读，幻读。下面通过事例一一阐述它们的概念与联系。

Read uncommitted

读未提交，顾名思义，就是一个事务可以读取另一个未提交事务的数据。

事例：老板要给程序员发工...]]></description><category></category></item><item><title><![CDATA[http与https协议的区别]]></title><link>https://blog.youkuaiyun.com/laifu007/article/details/78720772</link><guid>https://blog.youkuaiyun.com/laifu007/article/details/78720772</guid><author>laifu007</author><pubDate>Tue, 05 Dec 2017 15:19:22 +0800</pubDate><description><![CDATA[感谢原作者，本文转载自http://www.mahaixiang.cn/internet/1233.html



超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息，HTTP协议以明文方式发送内容，不提供任何方式的数据加密，如果攻击者截取了Web浏览器和网站服务器之间的传输报文，就可以直接读懂其中的信息，因此，HTTP协议不适合传输一些敏感信息，比如：信用卡号、密码等]]></description><category></category></item></channel></rss>