- 博客(28)
- 资源 (10)
- 问答 (1)
- 收藏
- 关注
原创 解决redis缓存穿透和缓存雪崩
一.缓存穿透: 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。 解决办法: 1.布隆过滤 对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃。还有最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一...
2018-06-27 17:05:12 6490 1
转载 zookeeper实现服务注册的原理
服务提供者在启动的时候,会在ZooKeeper上注册服务。所谓注册服务,其实就是在ZooKeeper的/dubbo/com.foo.BarService/providers节点下创建一个子节点,并写入自己的URL地址,这就代表了com.foo.BarService这个服务的一个提供者。
2018-06-26 16:58:02 5563
转载 JVM调优之jstack找出最耗cpu的线程并定位代码
jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。下面我们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有ps、top、printf、jstack、grep。第一步先找出Java进程ID,服务器上的Java应用名称为mrf-center:root@ubuntu:/# ps -ef | grep mrf-c...
2018-06-25 18:13:42 2206
翻译 HBase RegionServer的核心组件MemStore
HBase系统中一张表会被水平切分成多个Region,每个Region负责自己区域的数据读写请求。水平切分意味着每个Region会包含所有的列簇数据,HBase将不同列簇的数据存储在不同的Store中,每个Store由一个MemStore和一系列HFile组成,如图所示。Region结构组成HBase基于LSM树模型实现,所有的数据写入操作首先会顺序写入日志HLog,再写入MemStore,当MemStore中数据大小超过阈值之后再将这些数据批量写入磁盘,生成一个新的HFile文件。LSM..
2018-06-20 18:39:53 1422
转载 java 敏感词之 DFA 算法(Tire Tree 算法)详解
背景想实现一个基于敏感词库的敏感词工具。遍历匹配发现如果是逐个字符遍历的话,效率实在是太低。这里我首先想到了两种算法:KMP 算法Brute-Force 算法当然单纯只是匹配,其实性能依然非常的低。正则表达式当然还有一种方式就是基于正则表达式,个人感觉这种性能也比较差。正则表达式直接查了下资料,可以使用 DFA 算法来解决这个问题。DFA 算法在实现文字过滤的算法中,DFA是比较好的实现算法。DFA 即 Deterministic Finite Aut
2018-06-20 11:56:09 1530
转载 How to avoid HBase Hotspotting(解决HBase热点问题)
HBase hotspotting occurs when large amount of traffic from various clients redirected to single or very few numbers of nodes in the cluster. The HBase hotspotting occurs because of bad row key design....
2018-06-20 00:46:09 672
转载 使用HBase Coprocessor
转载自:使用HBase CoprocessorHBase的Coprocessor是模仿谷歌BigTable的Coprocessor模型实现的。Coprocessor提供了一种机制可以让开发者直接在RegionServer上运行自定义代码来管理数据。首先必须要指明使用Coprocessor还是存在一些风险的。Coprocessor是HBase的高级功能,本来是只为HBase系统开发人员准备的。因为C...
2018-06-20 00:17:21 342
转载 HBase Scan流程分析
HBase的读流程目前看来比较复杂,主要由于:HBase的表数据分为多个层次,HRegion->HStore->[HFile,HFile,...,MemStore]RegionServer的LSM-Like存储引擎,不断flush产生新的HFile,同时产生新的MemStore用于后续数据写入,并且为了防止由于HFile过多而导致Scan时需要扫描的文件过多而导致的性能下降,后台线程会...
2018-06-20 00:05:34 816
转载 HBase Scan & Filter原理/流程详解
2.3.4 Get expect scanning resultsIn order to have a better understanding of the below explanation, I need to explain how does a KeyValue be stored in HFile.n How does a KeyValue be storedFigure 4 KeyV...
2018-06-20 00:01:52 5927
转载 Hibernate Validator 校验继承场景
问题再现交易系统对应不同类型的订单请求,公共字段是放在了一个父类里,例如:@Setter@Getterpublic abstract class BaseOrderRequest{ @NotNull @Min(1) @Max(1000000) private Long totalAmount; ......}然后不同类型的下单请求再去继承这个父类,例如微信下单请求:public class WeiXinOrderRequest ext...
2018-06-17 00:32:43 832
转载 CAS 单点登录
简介Cas介绍CAS ( Central Authentication Service ),最初由耶鲁大学的Shawn Bayern 开发,后由Jasig社区维护,经过十多年发展,目前已成为影响最大、广泛使用的、基于Java实现的、开源SSO解决方案。cas旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO )。 CAS 开始于 2001 年, 并在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS的官方网址是: https://www.apereo.o
2018-06-17 00:29:44 232
转载 jdk1.8 HashMap工作原理与power of two offset利用
3. put函数的实现put函数大致的思路为:对key的hashCode()做hash,然后再计算index; 如果没碰撞直接放到bucket里; 如果碰撞了,以链表的形式存在buckets后; 如果碰撞导致链表过长(大于等于TREEIFY_THRESHOLD),就把链表转换成红黑树; 如果节点已经存在就替换old value(保证key的唯一性) 如果bucket满了(超...
2018-06-12 18:27:26 556
转载 dubbo timeout 优先级以及最佳实践
理论一般,接口都有设置超时时间,不管是http接口,还是dubbo接口。为什么要设置超时时间?因为不设置的时候,一旦高并发,就会把系统搞挂。具体就是可能部分交易请求很慢,耗时很久,但是没有设置超时,然后就一直占着dubbo线程池的线程资源,这个时候,就会因为部分慢交易,影响和导致了整个系统,因为其他本来正常的交易,现在由于dubbo线程池满了,也处理不了了,这个时候,系统就崩溃了,所有的交易都耗时很慢。dubbo超时的维度有2个维度,一个是作用域粒度,一个是消费者还是生产者。粒度
2018-06-12 15:34:55 853
转载 CopyOnWriteArrayList工作原理
写入时复制(CopyOnWrite)思想写入时复制(CopyOnWrite,简称COW)思想是计算机程序设计领域中的一种优化策略。其核心思想是,如果有多个调用者(Callers)同时要求相同的资源(如内存或者是磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者视图修改资源内容时,系统才会真正复制一份专用副本(private copy)给该调用者,而其他调用者所见到的最初的资...
2018-06-12 10:32:25 322
转载 TreeMap工作原理
一、红黑树简介TreeMap是通过红黑树实现的,增删改查的操作底层都是对红黑树的相关操作,因此先介绍红黑树的相关性质。红黑树顾名思义就是节点是红色或者黑色的平衡二叉树,它通过颜色的约束来维持着二叉树的平衡。对于一棵有效的红黑树二叉树而言我们必须增加如下规则:1、每个节点都只能是红色或者黑色2、根节点是黑色3、每个叶节点(null节点,空节点)是黑色的。4、如果一个结点是红的,则它两个子节点都是黑的...
2018-06-12 09:43:45 1688
转载 WeakHashMap工作原理
基本原理WeakHashMap特点是,当除了自身有对key的引用外,此key没有其他引用,那么WeakHashMap会在下次对WeakHashMap进行增删改查操作时及时丢弃该键值对,节约内存使用,此特性使得WeakHashMap非常适合构建缓存系统。 WeakHashMap是主要通过expungeStaleEntries函数的来实现移除其内部不用的entry从而达到的自动释放内存的目的。基本上只...
2018-06-11 18:00:21 2730
原创 LinkedHashMap工作原理
在这篇文章中,我们将会一探LinkedHashMap的内部工作原理。LinkedHashMap VS HashMapLinkedHashMap 也是一个HashMap,但它使用额外的数据结构——双向链表,定义了遍历顺序。默认情况下,遍历顺序等同于插入顺序。它也可以是entries最近被访问的顺序,所以它也能很容易被用来当做LRU Cache。数据结构LinkedHashMap的数据结构拓展自Has...
2018-06-11 11:54:29 1707
翻译 windows ReadFile Function
ReadFile Function从特定的文件或者input/ouput(I/O)设备中读取数据。如果设备是受支持的,读操作将发生在文件指针指向的特定位置。这个函数同时支持同步操作和异步操作。如果想了解异步操作的一个简单的函数,可以看ReadFileEx。BOOL WINAPI ReadFile( _In_ HANDLE hFile, _Out_ LP...
2018-06-08 10:47:58 1778 1
转载 MySQL B+树索引和哈希索引的区别
导读在MySQL里常用的索引数据结构有B+树索引和哈希索引两种,我们来看下这两种索引数据结构的区别及其不同的应用建议。二者区别备注:先说下,在MySQL文档里,实际上是把B+树索引写成了BTREE,例如像下面这样的写法:CREATE TABLE t(aid int unsigned not null auto_increment,userid int unsigned not null defau...
2018-06-07 23:44:45 467
翻译 Windows Kernel Objects
kernel对象句柄是进程相关的。就是说,一个进程要么创建一个对象,要么打开一个已经存在的对象去获得kernel对象句柄。每个进程的kernel句柄数限制为2^24。但是,句柄是存储在paged pool里的,所以真实的可以创建的句柄数是基于可用内存。在32位windows上可以创建的句柄数是要少于2^24的。任何进程都可以创建一个新的句柄,来指向一个已经存在的kernel对象,即使这个kerne...
2018-06-07 18:05:22 509
转载 synchronized与ReenterantLock的比较
ReentrantLock是Java并发包中一个非常有用的组件,一些并发集合类也是用ReentrantLock实现,包括ConcurrentHashMap。ReentrantLock具有三个特性:等待可中断、可实现公平锁、以及锁可以绑定多个条件。Java中的ReentrantLockReentrantLock与synchronized关键字一样,属于互斥锁,synchronized中的锁是非公平的...
2018-06-06 23:44:38 785
转载 Hbase RegionServer对数据的读写流程详解
HBase深入分析之RegionServer所有的用户数据以及元数据的请求,在经过Region的定位,最终会落在RegionServer上,并由RegionServer实现数据的读写操作。本小节将重点介绍RegionServer的代码结构和功能,从实现细节上深入理解RegionServer对于数据的操作流程。1 RegionServer概述RegionServer是HBase集群运行在每个工作节点...
2018-06-04 10:12:39 3747
原创 spark2.3源码分析之UnifiedMemoryManager
概述MemoryManagerMemoryManager是spark的内存管理器,它定义了execution和storage之间共享内存的方式。execution memory指的是在shuffle、join、sort和aggregation过程中使用的内存;storage memory指的是缓存RDD和缓存broadcast广播变量占用的内存。每个JVM中都存在一个MemoryManag...
2018-06-03 22:42:03 418
转载 spark on yarn部署模式——yarn-client和yarn-cluster
一、yarn-cluster与standalone模式不同,yarn-cluster是基于yarn集群,yarn集群上有ResourceManager(RM)和NodeManager(NM)。1、发送请求到RM,请求启动AM2、RM会分配container,在某个NM上启动AM3、AM启动后,和RM通讯,请求container来启动executor4、RM会给AM提供一批c...
2018-06-03 15:36:42 2081 1
翻译 synchronization performance optimization in jdk6 官方文档
Java SE 6 includes several new features and enhancements to improve performance in many areas of the platform. Improvements include: synchronization performance optimizations, compiler performance opt...
2018-06-02 13:08:26 376
转载 Java锁消除和锁粗化
转载自:Java锁消除非商业转载,可联系本人删除概述锁消除是Java虚拟机在JIT编译是,通过对运行上下文的扫描,去除不可能存在共享资源竞争的锁,通过锁消除,可以节省毫无意义的请求锁时间。实验看如下代码:package com.winwill.lock;/** * @author qifuguang * @date 15/6/5 14:11 */public class TestLoc...
2018-06-02 12:29:49 27969 5
转载 Tomcat Architecture 官方文档
转载自:Tomcat Architecture 官方文档Architecture OverviewOverviewThis page provides an overview of the Tomcat server architecture.TermsServerIn the Tomcat world, a Server represents the whole container. Tomca...
2018-06-01 16:44:49 826
原创 模板模式之Thread与Runnable
写一个类继承自Thread类,重写run方法。用start方法启动线程。这是使用了模板模式中子类继承父类的方式。 写一个类实现Runnable接口,实现run方法。用new Thread(Runnable target).start()方法来启动。这是使用了模板模式中基于回调接口的方式。
2018-06-01 00:52:30 480
viewpager实现页面导航之三
2015-07-22
viewpager与预编译的点布局实现页面导航效果
2015-07-20
导入第三方类库却出现the importXXX can not be resolved
2015-06-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人