<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[tmac937436的博客]]></title><description><![CDATA[Just gonna have to be a different man]]></description><link>https://blog.youkuaiyun.com/tmac937436</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; tmac937436]]></copyright><item><title><![CDATA[异步编程CompletableFuture]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/108696119</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/108696119</guid><author>tmac937436</author><pubDate>Sun, 20 Sep 2020 17:53:03 +0800</pubDate><description><![CDATA[异步编程CompletableFuture
​
package com.huawei.util;

import org.junit.Test;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 异步编程  所谓异步其]]></description><category></category></item><item><title><![CDATA[Hbase入门]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/78639205</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/78639205</guid><author>tmac937436</author><pubDate>Sun, 26 Nov 2017 23:17:11 +0800</pubDate><description><![CDATA[一.Hbase安装与配置（伪分布式）

1.版本和Hadoop版本保持一致


2.修改hbase-env.sh


3.修改Hbase-site.xml(编辑Hbase打开分布式模式)


4.启动HBase及验证


二.使用HBase进行相应数据操作
1.HBase逻辑结构


2.进入HBase并创建表


member是表名,member_id,]]></description><category></category></item><item><title><![CDATA[浅谈Docker入门]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/78416763</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/78416763</guid><author>tmac937436</author><pubDate>Sat, 25 Nov 2017 15:58:25 +0800</pubDate><description><![CDATA[什么是Docker？
docker是一个开源的引擎，可以轻松的为任何应用创建一个轻量级的，可移植的，自给自足的容器。开发者和系统管理员在笔记本上便已测试通过的容器可以批量地在生产环境中部署，包括VMs(虚拟机)，bare metal,OpenStack集群，云端，数据中心和其它的基础应用平台。]]></description><category></category></item><item><title><![CDATA[Joda]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/78624631</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/78624631</guid><author>tmac937436</author><pubDate>Fri, 24 Nov 2017 14:50:43 +0800</pubDate><description><![CDATA[/**
 * 计算两个日期之间相差的天数
 *
 * @author liuchao
 * @since 19/10/2017
 */
public static int daysBetween(Date startDate, Date endDate) {
    Period period=new Period(startDate.getTime(),endDate.getTime(),Per]]></description><category></category></item><item><title><![CDATA[消息中间件kafka+zookeeper集群部署、测试与应用]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/78376809</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/78376809</guid><author>tmac937436</author><pubDate>Sat, 28 Oct 2017 16:15:42 +0800</pubDate><description><![CDATA[业务系统中，通常会遇到这些场景：A系统向B系统主动推送一个处理请求；A系统向B系统发送一个业务处理请求，因为某些原因（断电、宕机。。），B业务系统挂机了，A系统发起的请求处理失败；前端应用并发量过大，部分请求丢失或后端业务系统卡死。。。。这个时候，消息中间件就派上用场了--提升系统稳定性、可用性、可扩展性。
一、消息中间件
消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁]]></description><category></category></item><item><title><![CDATA[动态解析包含JSONObject的JSONArray]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/78359406</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/78359406</guid><author>tmac937436</author><pubDate>Thu, 26 Oct 2017 22:16:27 +0800</pubDate><description><![CDATA[首先给定的JSON格式为：
  {"contentType":"OBJECT","entity":{"FUN_STORE_RECALLUSER":[{"total":3469}]},"elapsed":357}
  需求是取出total对应的数值“3469”,那如何实现呢？
   1.构建一个普通的Java类
public class ReCallUser {

        priva]]></description><category></category></item><item><title><![CDATA[生产者和消费者之BlockingQueue（阻塞队列）详解]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/78171275</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/78171275</guid><author>tmac937436</author><pubDate>Sat, 07 Oct 2017 20:09:17 +0800</pubDate><description><![CDATA[注意：该随笔内容完全引自http://wsmajunfeng.iteye.com/blog/1629354，写的很好，非常感谢，复制过来算是个积累，怕以后找不到。

一. 前言

　　在新增的Concurrent包中，BlockingQueue很好的解决了多线程中，如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类，为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍]]></description><category></category></item><item><title><![CDATA[2017--就业分享之IT校招现状和面试经历]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/78169460</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/78169460</guid><author>tmac937436</author><pubDate>Sat, 07 Oct 2017 14:27:33 +0800</pubDate><description><![CDATA[在介绍自己整个春季和夏季实习求职经历之前，先给大家公布一则新闻----2017届互联网校招薪酬报告：
      

先说下对16年17届校招的总体看法：本该是个不大不小的年，结果被华为一己之力搞成了个大年。

白菜价22W：

14、15K*15/16，90%的主流公司都给了这数；

青菜价30W：

BAT一般在25~30W（15~18K*15/16），其他家一般30W±]]></description><category></category></item><item><title><![CDATA[Promise 异步流程控制]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/78166828</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/78166828</guid><author>tmac937436</author><pubDate>Fri, 06 Oct 2017 20:16:14 +0800</pubDate><description><![CDATA[网页中预加载20张图片资源，分步加载，一次加载10张，两次完成，怎么控制图片请求的并发，怎样感知当前异步请求是否已完成？





然而能全部答上的很少，能够给出一个回调 + 计数版本的，我都觉得合格了。那么接下来就一起来学习总结一下基于 Promise 来处理异步的三种方法。




本文的例子是一个极度简化的一个漫画阅读器，用4张漫画图的加载来介绍异步处理不同方式的实现和]]></description><category></category></item><item><title><![CDATA[深入浅出妙用 Javascript 中 apply、call、bind]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/78166800</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/78166800</guid><author>tmac937436</author><pubDate>Fri, 06 Oct 2017 20:11:00 +0800</pubDate><description><![CDATA[apply、call




在 javascript 中，call 和 apply 都是为了改变某个函数运行时的上下文（context）而存在的，换句话说，就是为了改变函数体内部 this 的指向。




JavaScript 的一大特点是，函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念。




先来一个栗子：




]]></description><category></category></item><item><title><![CDATA[深入理解 Java String.intern() 内存模型]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/78164690</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/78164690</guid><author>tmac937436</author><pubDate>Fri, 06 Oct 2017 12:25:27 +0800</pubDate><description><![CDATA[大家知道，Java中string.intern()方法调用会先去字符串常量池中查找相应的字符串，如果字符串不存在，就会在字符串常量池中创建该字符串然后再返回。




字符串常量池是一个固定大小的HashMap，桶的数量默认是1009, 从Java7u40开始，该默认值增大到60013。在Java6当中，字符串常量池是放在Perm空间的，从Java7开始，字符串常量池被移到Heap空间。]]></description><category></category></item><item><title><![CDATA[NIO]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/78148006</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/78148006</guid><author>tmac937436</author><pubDate>Sun, 01 Oct 2017 17:07:03 +0800</pubDate><description><![CDATA[Java NIO 虽然提供了非阻塞的网络通信编程框架，但它的设计带来了很多编程难题。

1 难懂的 ByteBuffer

　　Java NIO 抛弃了我们所熟悉的 Stream、byte[]等数据结构，设计了一个全新的数据结构—— ByteBuffer，ByteBuffer 的主要使用场景是保存从 Socket 中读取的输入字节流，并循环利用，以降低 GC 的压力。第一眼看到它的广告介绍]]></description><category></category></item><item><title><![CDATA[Google's BigTable]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/78070325</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/78070325</guid><author>tmac937436</author><pubDate>Sat, 23 Sep 2017 13:27:31 +0800</pubDate><description><![CDATA[题记：google 的成功除了一个个出色的创意外，还因为有 Jeff Dean 这样的软件架构天才。
                                                欢迎订阅作者微博  ------ 编者
官方的 Google Reader blog 中有对BigTable 的解释。这是Google 内部开发的一个用来处理大数据量的系统。这种系统适合处理半结构化]]></description><category></category></item><item><title><![CDATA[Google File System]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/78070314</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/78070314</guid><author>tmac937436</author><pubDate>Sat, 23 Sep 2017 13:23:38 +0800</pubDate><description><![CDATA[Google文件系统 
GFS是一个可扩展的分布式文件系统，用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上，但可以提供容错功能。它可以给大量的用户提供总体性能较高的服务。 
1、设计概览 
（1）设计想定 
GFS与过去的分布式文件系统有很多相同的目标，但GFS的设计受到了当前及预期的应用方面的工作量及技术环境的驱动，这反映了它与早期的文件系统明显不同的设想。这就]]></description><category></category></item><item><title><![CDATA[MapReduce:超大机群上的简单数据处理]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/78070305</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/78070305</guid><author>tmac937436</author><pubDate>Sat, 23 Sep 2017 13:21:01 +0800</pubDate><description><![CDATA[摘要

MapReduce是一个编程模型,和处理,产生大数据集的相关实现.用户指定一个map函数处理一个key/value对,从而产生中间的key/value对集.然后再指定一个reduce函数合并所有的具有相同中间key的中间value.下面将列举许多可以用这个模型来表示的现实世界的工作.

以这种方式写的程序能自动的在大规模的普通机器上实现并行化.这个运行时系统关心这些细节:分割输入数]]></description><category></category></item><item><title><![CDATA[ArrayList和Vector的区别]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/77635479</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/77635479</guid><author>tmac937436</author><pubDate>Mon, 28 Aug 2017 09:36:42 +0800</pubDate><description><![CDATA[Vector和ArrayList这两个集合类的本质并没有太大的不同，它们都实现了List接口，而且底层都是基于Java数组来存储集合元素。

在ArrayList集合类的源代码中可以看到如下一行。


//采用elementData数组来保存集合元素
private transient Object[] elementData;
在Vector集合类的源代码中也可看到类似的一行。
]]></description><category></category></item><item><title><![CDATA[HashMap实现原理及源码分析]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/77629535</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/77629535</guid><author>tmac937436</author><pubDate>Mon, 28 Aug 2017 09:17:06 +0800</pubDate><description><![CDATA[当我们执行如下操作时：

HashMapString, Float> map = new HashMapString, Float>();
map.put("语文", 86.5f);
map.put("数学", 93.0f);
map.put("英语", 90.0f);
对于HashMap而言，采用一种所谓的“Hash算法”来决定每个元素的存储位置。当程序执行
 map.put(“语文”,]]></description><category></category></item><item><title><![CDATA[Java并发编程之读写锁]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/77435459</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/77435459</guid><author>tmac937436</author><pubDate>Sun, 20 Aug 2017 23:05:42 +0800</pubDate><description><![CDATA[读写锁维护了一对相关的锁，一个用于只读操作，一个用于写入操作。只要没有writer，读取锁可以由多个reader线程同时保持。写入锁是独占的。


可重入读写锁 ReentrantReadWriteLock


ReentrantReadWriteLock对象提供了readLock()和writeLock()方法, 用于获取读取锁和写入锁.

读取锁允许多个reader线程同时持有]]></description><category></category></item><item><title><![CDATA[TreeMap实现原理及源码分析]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/77435111</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/77435111</guid><author>tmac937436</author><pubDate>Sun, 20 Aug 2017 22:18:33 +0800</pubDate><description><![CDATA[TreeMap是一个有序的key-value集合，基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序，或者根据创建时提供的Comparator进行排序、

对于TreeMap而言，每个Entry都被当成“红黑树”的一个节点对待，示例如下：

public class TreeMapTest {
    public static void main(Strin]]></description><category></category></item><item><title><![CDATA[Iterator迭代器]]></title><link>https://blog.youkuaiyun.com/tmac937436/article/details/77435057</link><guid>https://blog.youkuaiyun.com/tmac937436/article/details/77435057</guid><author>tmac937436</author><pubDate>Sun, 20 Aug 2017 22:12:54 +0800</pubDate><description><![CDATA[Iterator是一个迭代器接口，它专门用于迭代各种Collection集合，包括Set集合和List集合。如果查阅JDK的API文档将发现，Iterator迭代器接口只有一个Scanner实现类。显然Scanner并不能用于迭代Set、List集合，那迭代List、Set集合的Iterator迭代器实现类在哪里

下面测试使用Iterator迭代各种集合所返回的Iterator对象。

]]></description><category></category></item></channel></rss>