<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[a290450134的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/a290450134</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; a290450134]]></copyright><item><title><![CDATA[hashmap&concurrentHashmap&hashTable对比]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/117163373</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/117163373</guid><author>a290450134</author><pubDate>Sat, 22 May 2021 15:59:40 +0800</pubDate><description><![CDATA[hashMap
			concurrentHashmap
			hashTable
			
		初始化
			指定初始化大小数组
			图1：需要考虑线程安全，调用initTable()。
			判断sc变量是否小于0，如果不是则进行CAS抢占，将SIZECTL,sc赋值为-1。
			其他线程进入时判断如果sizectl小于0，则进行yield()让出CPU执行权。
			也就是说仅有一个线程能进行初始化操作。
			指定大小
			
		hash
			
			图2：高16位 异或^ 低...]]></description><category></category></item><item><title><![CDATA[greenplum 单表磁盘空间持续高速增长，解决办法(2)]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/109513722</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/109513722</guid><author>a290450134</author><pubDate>Thu, 05 Nov 2020 16:11:35 +0800</pubDate><description><![CDATA[描述

自上次解决空间增长问题后，又出现了此问题。初步解决方案还是上次的步骤，但是感觉治标不治本，这不是个办法，而且只有一张或两张表有这个问题。

这样就有了一个排查的入手点了。是因为频繁的插入删除么，还是频繁的更新新呢？

GP物理空间使用的特性建议去了解一下
	简单介绍一下，就是修改的动作，是逻辑删除，空间不释放
	运行一段时间后有修改的表，需要进行真空处理
发现其中一张表是有删除、插入动作，另一张表只有插入动作。尝试了一下真空还能释放空间，这就比较郁闷了。没有进行逻辑删除，那释放的空间是什么呢？

.]]></description><category></category></item><item><title><![CDATA[greenplum  单表磁盘空间持续高速增长，解决办法(1)]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/107563210</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/107563210</guid><author>a290450134</author><pubDate>Sat, 25 Jul 2020 11:13:45 +0800</pubDate><description><![CDATA[场景描述：同样的系统部署在3个环境中，问题表 正常的增长范围是每天1M，某一天线上问题说是系统宕机了，然后看了一下系统状态日志，磁盘空间满了。

处理流程：

日志本来是7天循环的，先手动删除了一下。
	有一张数据备份表，和业务流程日志表，这两个是可以删除的，然后进行了truncate。
释放了10几个G的空间，然后启动服务，开始排查问题。

select pg_size_pretty(pg_relation_size('table_name'));查看了表物理空间大小，发现有一张P表达到了300G，然后第]]></description><category></category></item><item><title><![CDATA[kafka数据顺序]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/104971637</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/104971637</guid><author>a290450134</author><pubDate>Fri, 24 Jul 2020 10:45:23 +0800</pubDate><description><![CDATA[这里的顺序指的是数据写入的数据，并不是数据发送的顺序。

红色为：leader。青色为：follower。黑色为：宕机。黄色为：恢复。



比如：


数据1 写入 partition1,partition2,partition3。完成提交
	数据2进行写操作，leader写入后宕机（还有没对副本进行同步），数据2进行retry。
	此时partition2已经变更为leader。
	...]]></description><category></category></item><item><title><![CDATA[指定次数或者条件 停止定时任务线程]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/106564809</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/106564809</guid><author>a290450134</author><pubDate>Fri, 05 Jun 2020 13:28:55 +0800</pubDate><description><![CDATA[先创建一个TASK用于执行定时任务，


@Slf4j
public class InitVisitorEntityTask implements Runnable {
    private VisitorEntityService visitorEntityService;
    private ConcurrentHashMap&lt;String,Future&gt; futuremap;
    private volatile CountDownLatch cdl;
    private A]]></description><category></category></item><item><title><![CDATA[获取druid 空闲连接数]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/106282495</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/106282495</guid><author>a290450134</author><pubDate>Fri, 22 May 2020 17:51:42 +0800</pubDate><description><![CDATA[最近项目中需要集成健康监控，我的项目里使用的连接池的druid，然后有一个需要监控的指标是当前空闲连接数，但是durid的方法中没有明显的idle字样，源码中也没发现什么注释，这就很难搞了。找了几个方法的关系也没有什么太好的方向，最后选择了从数据库入手。

首先，看一下数据库当前的连接情况：保证没有任何的其他连接情况下，有4个连接。





贴图一下druid配置,先保持5个空闲。



然后启动项目，查看初始状态下，数据库的连接状态。



启动项目后连接数是9.项目有5个连接，然后查看连接池的活动..]]></description><category></category></item><item><title><![CDATA[记录redis rdb出错导致服务异常]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/106018255</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/106018255</guid><author>a290450134</author><pubDate>Sat, 09 May 2020 17:03:48 +0800</pubDate><description><![CDATA[项目部分功能失效：

后台异常日志：只读权限不能写入

ERROR  http-nio-80-exec-1 [[dispatcherServlet].log:175] [Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [redis.clients.jedis.exceptions.JedisDataException: READONLY You can't write agai]]></description><category></category></item><item><title><![CDATA[分享一个redis分布式锁的demo]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/105998382</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/105998382</guid><author>a290450134</author><pubDate>Fri, 08 May 2020 15:57:13 +0800</pubDate><description><![CDATA[首先说一下需要使用分布式锁的场景

多实例部署,分布式系统中经常会遇到,基于jvm的锁无法满足多实例中锁的需求，synchronized，Lock只能控制在当前JVM中的资源竞争。基于数据库实现的话肯能会造成IO压力，甚至死锁，其本身的效率也比较低。zk的实现方式也是可以的。


redis作为分布式锁要注意的事项，还有用到的一些功能

注意事项：

互斥性，同一时刻，智能有一个客户端持有锁。...]]></description><category></category></item><item><title><![CDATA[GP广播与分布]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/105007381</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/105007381</guid><author>a290450134</author><pubDate>Sat, 21 Mar 2020 12:07:33 +0800</pubDate><description><![CDATA[发生重分布与广播情况：join 聚合。

目的：为了能在一个 segment上面进行数据join；





举例：对于一个人员地理位置表，分布键是人员id，位置是name，如果对 name进行group by，就需要对name字段进行重复布， 在进行重分布之 前，先对每一个机器都进行局部group by，重分布之后，同一个name的 数据都会分布在同一个segment机器上面，最后提交给m...]]></description><category></category></item><item><title><![CDATA[greenplum 关于联表的特性]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/105007242</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/105007242</guid><author>a290450134</author><pubDate>Sat, 21 Mar 2020 11:59:34 +0800</pubDate><description><![CDATA[左连接 不能将左表广播

右连接 不能将右表广播



关联表尽量使用相同的分布键，可以直接进行数据关联，不用进行重分布。



内连接：


情况1：select * from test_table_5000 as t1, test_table_10000 as t2where t1.id=t2.id关联键是分布键，不涉及重分布



情况2：select * from test...]]></description><category></category></item><item><title><![CDATA[gp的几个常用操作]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/105006475</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/105006475</guid><author>a290450134</author><pubDate>Sat, 21 Mar 2020 11:42:56 +0800</pubDate><description><![CDATA[正在执行的sql：当有慢sql正在执行时，或者接口无法加载（连接数满）。

select * wherexact_start is not null ORDER BY query_start;


杀掉查询进程

select pg_cancel_backend(procpid);


杀掉其他SQL进程

select pg_terminate_backend(procpid);


数据...]]></description><category></category></item><item><title><![CDATA[面试点：ISR总结]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/104995364</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/104995364</guid><author>a290450134</author><pubDate>Fri, 20 Mar 2020 17:51:40 +0800</pubDate><description><![CDATA[在可用性和一致性之间做一个动态平衡



ISR: 1. in-sync Replica,每一个partition都有一个leader，每一个leader都会维护一个基本与它同步的replica列表。

   2.如果一个Follower比Leader落后太多，或者超过一定时间未发起数据复制请求，则Leader将其从ISR中移除

  3. 当ISR中所有Replica都...]]></description><category></category></item><item><title><![CDATA[volatile几个特性]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/104967202</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/104967202</guid><author>a290450134</author><pubDate>Thu, 19 Mar 2020 14:37:51 +0800</pubDate><description><![CDATA[特性1：防止该声明变量上下文指令重排。 

（1、2、volatile、3、4）,其中12顺序可变，34顺序可变 但是不能跨越volatile进行排序。

特性2：强制将修改值立即写入主存，写入时对已存在CPU的缓存行做无效处理。当运用该缓存是发现无效，则重新读取主存。

特性3：不具备原子性， 线程1对变量进行读取操作之后，被阻塞了的话，并没有对inc值进行修改。然后虽然volatile能保...]]></description><category></category></item><item><title><![CDATA[GC Roots的选择]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/104964210</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/104964210</guid><author>a290450134</author><pubDate>Thu, 19 Mar 2020 11:53:22 +0800</pubDate><description><![CDATA[一个对象可以属于多个root，GC root有几下种：

Class - 由系统类加载器(system class loader)加载的对象，这些类是不能够被回收的，他们可以以静态字段的方式保存持有其它对象。我们需要注意的一点就是，通过用户自定义的类加载器加载 的类，除非相应的java.lang.Class实例以其它的某种（或多种）方式成为roots，否则它们并不是roots.


Thread ...]]></description><category></category></item><item><title><![CDATA[面试点：volatile和ThreadLocal解决了什么问题:？]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/104963983</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/104963983</guid><author>a290450134</author><pubDate>Thu, 19 Mar 2020 11:44:20 +0800</pubDate><description><![CDATA[volatile：

防止指令重排强制将修改值立即写入主存，写入时对已存在CPU的缓存行做无效处理。当运用该缓存是发现无效，则重新读取主存。



ThreadLocal：

是用于解决多线程共享类的成员变量，原理：在每个线程中都存有一个本地ThreadMap，相当于存了一个对象的副本，key为threadlocal对象本身，value为需要存储的对象值，这样各个线程之间对于某个成员变量都有自己...]]></description><category></category></item><item><title><![CDATA[intellij idea 查找变量快捷键]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/104960347</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/104960347</guid><author>a290450134</author><pubDate>Thu, 19 Mar 2020 09:43:06 +0800</pubDate><description><![CDATA[alt + F3，然后使用 F3 或 shift + F3, 上下移动。

这样是本页面搜索已选中关键字的所有匹配； like%关键字%这种形式（字符串都能匹配）





选择变量 ,ctrl+f7， 再使用 F3 或 shift + F3, 上下移动。

这样只会查找变量，不会把包含和变量名称的其他内容查出来;而且只会限定在当前方法，或者当前类中。



其他变量和字符串就不会被匹配
...]]></description><category></category></item><item><title><![CDATA[关于 Java动态追踪、线上debug的工具使用]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/104860430</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/104860430</guid><author>a290450134</author><pubDate>Sat, 14 Mar 2020 16:19:48 +0800</pubDate><description><![CDATA[这里使用的工具是阿里巴巴开源工具 arthas，在这里做几个简单的工具使用说明和示例。

前期准备：

官方文档地址：https://alibaba.github.io/arthas/quick-start.html
	测试使用demo（横云断岭）：https://github.com/hengyunabc/spring-boot-inside
	工具：https://github.com/al...]]></description><category></category></item><item><title><![CDATA[关于list在遍历中，做出删除操作的坑]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/104857169</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/104857169</guid><author>a290450134</author><pubDate>Sat, 14 Mar 2020 11:29:40 +0800</pubDate><description><![CDATA[首先介绍的是阿里规约上的一个案例：

建议如果有时间的同学可以去阿里云考一下这个认证，考试通过会发一个电子认证证书，有效期两年。


List&lt;String&gt; list = new ArrayList&lt;String&gt;();
list.add("1");
list.add("2");
for (String item : list) {
    if ("1".equals(...]]></description><category></category></item><item><title><![CDATA[@Scheduled (二) 其余方式系列用法]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/104757704</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/104757704</guid><author>a290450134</author><pubDate>Mon, 09 Mar 2020 18:10:04 +0800</pubDate><description><![CDATA[参数
			说明
			
			示例
			
		fixedDelay
			上一次执行完毕时间点之后多长时间再执行
			
			@Scheduled(fixedDelay = 1000)

			上一次执行完毕后 1秒再执行
			
		
			fixedDelayString
			
			
			上一次执行完毕时间点之后多长时间再执行

			与fixedDelay唯一不同就是支持占位，可...]]></description><category></category></item><item><title><![CDATA[@Scheduled (一) cron用法]]></title><link>https://blog.youkuaiyun.com/a290450134/article/details/104756306</link><guid>https://blog.youkuaiyun.com/a290450134/article/details/104756306</guid><author>a290450134</author><pubDate>Mon, 09 Mar 2020 17:53:19 +0800</pubDate><description><![CDATA[spring通过该注解来开启定时任务。



首先在application类上使用注解 @EnableScheduling开启使用注解；



然后在需要使用的类使用@Scheduled注解；



下面是关于cron使用方式的说明：

cron表达式是一个字符串，字符串以5或6个空格隔开，分开共6或7个域，每一个域代表一个含义。（不定性是因为年可以省略！）
cron表达式语法


[秒] ...]]></description><category></category></item></channel></rss>