- 博客(78)
- 收藏
- 关注
原创 温故而知新-二叉树遍历
温故而知新-二叉树便利本文主要介绍 二叉树的深度优先遍历及广度优先遍历:BinaryTreepublic class BinaryTree{ static class TreeNode{ int value; TreeNode left; TreeNode right; TreeNode(int va...
2018-07-06 12:38:37 249
原创 堆排序、中序排序算法实现
现有一无序数组,用两种算法进行排序。int[] ints = {5,7,2,5,8,9,3,4,6};第一种:堆排序 算法:从数组索引的第一个位置开始构建二叉树(从左到右,最多两个子节点)构建最大堆: 从下倒上,从右到左比较最大儿子节点,如果最大儿子比父节点大,则对换; 确定节点关系 : 父节点个数PC=(L-1)/2 ;父节点的索引方式(反向遍历,由PC - 1);子节点的索引:
2017-09-20 12:14:24 1007
转载 缓存使用案例分析
现象: Redis单个key超过10G原因: 使用了Redis的Hash结构,不支持针对Hash中的key设置超时总结: Redis的Hash结构,不支持对Hash中的key设置超时时间。如果需要对Hash的key设置超时时间,放入单独的Redis key中现象: 某历史项目系统负载升高,响应变慢,应用频繁 GC原因: Hibernate 中开启
2017-09-19 19:01:32 662
转载 netstat 命令使用
一般用netstat -an 来显示所有连接的端口并用数字表示。netstat命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知有哪些网络连接正在运作。[1] 使用时如果不带参数,netstat显示活动的 TCP 连接。该命令的一般格式为 : netstat [-a][-e][-n][-o][-p Protocol][-r][-s][Interval]选项 命令中各选项的含义如下:
2017-09-18 15:54:27 1191 1
原创 ConcurrentHashMap 之性能演进
书接上文,为什么ConcurrentHashMap 底层实现由之前的数组加链表的结构演变为数组加红黑树?下面我们来分析一下底层数据结构上的性能差异。首先我们来看下O(n) 与 O(logn) 的性能差距:O(n)于O(logn)的区别: 通过上图我们可以直观的看到对数曲线与线性伽码在性能方面的区别,随着时间的推移,负载量级逐渐增大的过程中,对数的性能消耗趋于平稳,而线性伽码的性能消耗则继续增
2017-09-15 10:33:03 408
原创 HashMap源码分析
本文对HashMap的源码进行分析,以及解析ConcurrentHashMap是如何保证并发情况下的线程安全。 HashMap是基于Map接口来实现的,并且允许空值和空键,而且HashMap不保证有序,特别强调的是元素的顺序会随着HashMap的扩展而变化,这一点我们在下面会有所强调。 HashMap的扩容因子默认为0.75f,设置扩容因子的目的就是当capacity * loadFactor 大于
2017-09-14 16:10:31 274
原创 JAVA 自定义动态代理实现
在正式介绍自定义动态代理之前,先提出以下几个问题: 1、为什么叫做动态代理,它得动态表现在哪些方面? 2、动态代理得声明,才是我们写代码得地方,实现了 invocationHandler接口的类叫做声明? 3、声明类中的invoke方法到底是谁用的 ? 4、动态代理类$Proxy0还原? 5、JDK内存中的动态代理是没有对被代理类进行任何操作的?下
2017-09-13 15:39:22 1176
原创 简述 ThreadPoolExecutor 处理流程
ThreadPoolExecutor继承自抽象类AbstractExecutorService,该抽象类实现了ExecutorService接口。ThreadPoolExecutor也是我们运用最多的线程池。public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,
2017-09-12 17:50:59 649
转载 JVM参数配置
前阵子遇到几个面试题都是关于对Java内存控制的,因此从网上找到这篇文章,希望自己对Java的内存分配有重新的认识 /usr/local/jdk/bin/java -Dresin.home=/usr/local/resin -server -Xms1800M -Xmx1800M -Xmn300M -Xss512K -XX:PermSize=300M -XX:MaxPermSize=300M -XX
2017-09-11 18:36:33 258
转载 JAVA字节码指令集
网上找的没有指令码这列 自己把它加上 更方便查阅 指令从0x00-0xc9 没有0xba常量入栈指令指令码操作码(助记符)操作数描述(栈指操作数栈)0x01aconst_null null值入栈。0x02iconst_m1
2017-09-11 14:23:28 309
原创 jdk 动态代理简单应用
相信大家在项目开发应用服务过程中都曾遇到很头疼的事情,比如服务中依赖的中间件升级,必须要强制升级应用系统,让应用服务系统做些与之无关的事情,下面给大家简单介绍一个场景_ 上面中 RPCServiceFacade 为 RPC 服务接口,RPCServiceFacadeAdapter 为本地代理接口,实现了RPC 服务接口, BusinessMgrServiceImpl 为
2017-09-08 18:36:33 425
转载 JVM GC 算法CMS
前言CMS,全称Concurrent Low Pause Collector,是jdk1.4后期版本开始引入的新gc算法,在jdk5和jdk6中得到了进一步改进,它的主要适合场景是对响应时间的重要性需求 大于对吞吐量的要求,能够承受垃圾回收线程和应用线程共享处理器资源,并且应用中存在比较多的长生命周期的对象的应用。CMS是用于对tenured generation的回收,也就是年老代的回收,目标是尽
2017-07-17 18:01:09 266
转载 Javassist简介
要想将编译时不存在的类在运行时动态创建并加载,通常有两种策略:动态编译动态生成二进制字节码(.class)对于第二种策略,实际上已经有诸多比较成熟的开源项目提供支持,如CGLib、ASM、Javassist等。这些开源项目通常都具备两方面的功能:动态创建新类或新接口的二进制字节码动态扩展现有类或接口的二进制字节码其中,CGLib的底层基于ASM实现,是一个高效高性能的生成库;而ASM是一
2017-03-17 11:43:02 355
转载 Instrumentation介绍
Java Instrumentation指的是可以用独立于应用程序之外的代理(agent)程序来监测和协助运行在JVM上的应用程序。这种监测和协助包括但不限于获取JVM运行时状态,替换和修改类定义等。 Java SE5中使用JVM TI替代了JVM PI和JVM DI。提供一套代理机制,支持独立于JVM应用程序之外的程序以代理的方式连接和访问JVM。Instrumentation 的最大作用就是类定
2017-03-17 11:32:40 1480
转载 多线程传递Context multi-thread context(MTC)
多线程传递Context multi-thread context(MTC)在使用线程池等会缓存线程的组件情况下,完成多线程的Context传递。JDK的java.lang.InheritableThreadLocal类可以完成父子线程的Context传递。但对于使用线程池等会缓存线程的组件的情况,线程由线程池创建好,并且线程是缓存起来反复使用的。这时父子线程关系的上下文传递已经没有意义,应用中要做
2017-03-15 13:47:00 3064
原创 javassist使用样例
javassist是jboss的一个子项目,其主要的优点,在于简单,而且快速。直接使用java编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成类。 本次样例是 通过注解以及文件列表 方式获取需要增强方法,动态织入方法的开始与结束时间。public class MonitorTransformer implements ClassFileTransformer {
2016-10-12 18:20:39 681
原创 java编程之方法模板模型
java编程之方法模板模型 在日常开发过程中,难免遇到相对独立的功能模块的开发,如 监控告警 功能 , 如何将此部分代码有效的管理起来,保证代码的可读性及易维护性是我们经常需要考虑的问题。 下面为大家介绍一种简单有效的编程模型- 方法模板模型,现以 监控告警 这个功能作为样例,为大家介绍‘方法模板模型’的使用。监控告警功能-方法模板关系模型Visio代码部分方法模板关系模型Vis
2016-10-12 17:19:40 1263
原创 java泛型使用demo
java泛型使用demo本demo 以 入参校验 为例,为大家说明泛型在实际应用中如何使用:Visio代码部分Visio 图:代码部分/** * 请求校验器接口 */public interface Validator<R> { void validate(R obj);}/** * <p>请求校验器基类。</p> * * @param <R> 请求类型参数,必须继承自
2016-10-11 17:36:54 1504
原创 javassist使用样例
javassist是jboss的一个子项目,其主要的优点,在于简单,而且快速。直接使用java编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成类。本次样例是 通过注解以及文件列表 方式获取需要增强方法,动态织入方法的开始与结束时间。public class MonitorTransformer implements ClassFileTransformer {
2016-09-26 22:03:21 1140
原创 netty 4.0.13 使用样例
public boolean connect(final int port ,final String host, final NettyEntity entity) throws Exception { Thread.sleep(5000); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { Bo
2016-09-26 21:34:00 372
转载 zookeeper配置文件详解
配置参数详解(主要是%ZOOKEEPER_HOME%/conf/zoo.cfg文件)参数名说明clientPort客户端连接server的端口,即对外服务端口,一般设置为2181吧。dataDir存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir
2015-12-04 15:13:35 436
转载 大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合
个人观点:大数据我们都知道hadoop,但并不都是hadoop.我们该如何构建大数据库项目。对于离线处理,hadoop还是比较适合的,但是对于实时性比较强的,数据量比较大的,我们可以采用Storm,那么Storm和什么技术搭配,才能够做一个适合自己的项目。下面给大家可以参考。可以带着下面问题来阅读本文章:1.一个好的项目架构应该具备什么特点?2.本项目架构是如何保证数据准确性的?3
2015-10-22 13:52:16 501
转载 如何在高并发分布式系统中生成全局唯一Id
博文示例:1. GUID生成Int64值后是否还具有唯一性测试2. Random生成高唯一性随机码 今天分享的主题是:如何在高并发分布式系统中生成全局唯一Id。但这篇博文实际上是“半分享半讨论”的博文:1) 半分享是我将说下我所了解到的关于今天主题所涉及的几种方案。2) 半讨论是我希望大家对各个方案
2015-10-20 15:59:17 717
转载 开源大数据处理工具汇总(下)
接上一部分:开源大数据处理工具汇总(上),第二部分主要收集整理的内容主要有日志收集系统、消息系统、分布式服务、集群管理、RPC、基础设施、搜索引擎、Iaas和监控管理等大数据开源工具。日志收集系统一、Facebook Scribe贡献者:Facebook简介:Scribe是Facebook开源的日志收集系统,在Facebook内部已经得到大量的应用。它能够从各种日志源上收集日志
2015-10-20 15:55:08 842
转载 开源大数据处理工具汇总(上)
本文一共分为上下两部分。我们将针对大数据开源工具不同的用处来进行分类,并且附上了官网和部分下载链接,希望能给做大数据的朋友做个参考。下面是第一部分。查询引擎一、Phoenix贡献者::Salesforce简介:这是一个Java中间层,可以让开发者在Apache HBase上执行SQL查询。Phoenix完全使用Java编写,代码位于GitHub上,并且提供了一个客户端可嵌入的JDB
2015-10-20 15:53:35 1099
转载 Elasticsearch基础教程
Elasticsearch基础教程 翻译:潘飞(tinylambda@gmail.com)基础概念 Elasticsearch有几个核心概念。从一开始理解这些概念会对整个学习过程有莫大的帮助。 接近实时(NRT) Elasticsearch是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个
2015-10-19 11:33:50 423
转载 使用elasticsearch遇到的一些问题以及解决方法
1.由gc引起节点脱离集群 因为gc时会使jvm停止工作,如果某个节点gc时间过长,master ping3次(zen discovery默认ping失败重试3次)不通后就会把该节点剔除出集群,从而导致索引进行重新分配。解决方法:(1)优化gc,减少gc时间。(2)调大zen discovery的重试次数(es参数:ping_retries)和超时时间(es参数:ping_ti
2015-10-16 18:12:49 3893
转载 Disruptor的使用
本文代码托管在 https://github.com/hupengcool/disruptor-starterIntruduction关于吹牛逼的话就不说了。。。Disruptor是Java实现的用于线程间通信的消息组件。其核心是一个Lock-free的Ringbuffer,Disruptor使用CAS而不是Lock。与大部分并发队列使用的Lock相比,CAS显然要快很多。CAS是
2015-10-12 14:38:09 1222
转载 javassist用法
Javassist是一个执行字节码操作的强而有力的驱动代码库。它允许开发者自由的在一个已经编译好的类中添加新的方法,或者是修改已有的方法。但是,和其他的类似库不同的是,Javassist并不要求开发者对字节码方面具有多么深入的了解,同样的,它也允许开发者忽略被修改的类本身的细节和结构。字节码驱动通常被用来执行对于已经编译好的类的修改,或者由程序自动创建执行类等等等等相关方面的操作。这就
2015-09-24 18:09:28 385
转载 [Elasticsearch] 控制相关度 (三) - 通过查询结构调整相关度以及boosting查询
本章翻译自Elasticsearch官方指南的Controlling Relevance一章。通过查询结构调整相关度ES提供的查询DSL是相当灵活的。你可以通过将单独的查询子句在查询层次中上下移动来让它更重要/更不重要。比如,下面的查询:quick OR brown OR red OR fox我们可以使用一个bool查询,对所
2015-09-16 14:58:53 524
转载 [Elasticsearch] 控制相关度 (二) - Lucene中的PSF(Practical Scoring Function)与查询期间提升
本章翻译自Elasticsearch官方指南的Controlling Relevance一章。Lucene中的Practical Scoring Function对于多词条查询(Multiterm Queries),Lucene使用的是布尔模型(Boolean Model),TF/IDF以及向量空间模型(Vector Space Model)
2015-09-16 14:58:17 399
转载 [Elasticsearch] 控制相关度 (一) - 相关度分值计算背后的理论
本章翻译自Elasticsearch官方指南的Controlling Relevance一章。控制相关度(Controlling Relevance)对于仅处理结构化数据(比如日期,数值和字符枚举值)的数据库,它们只需要检查一份文档(在关系数据库中是一行)是否匹配查询即可。尽管布尔类型的YES|NO匹配也是全文搜索的一个必要组成,它们本身是不够的
2015-09-16 14:57:21 568
转载 [Elasticsearch] 部分匹配 (四) - 索引期间优化ngrams及索引期间的即时搜索
本章翻译自Elasticsearch官方指南的Partial Matching一章。索引期间的优化(Index-time Optimizations)目前我们讨论的所有方案都是在查询期间的。它们不需要任何特殊的映射或者索引模式(Indexing Patterns);它们只是简单地工作在已经存在于索引中的数据之上。查询期间的灵活性是有代价的:搜
2015-09-16 14:56:31 386
转载 [Elasticsearch] 部分匹配 (三) - 查询期间的即时搜索
本章翻译自Elasticsearch官方指南的Partial Matching一章。查询期间的即时搜索(Query-time Search-as-you-type)现在让我们来看看前缀匹配能够如何帮助全文搜索。用户已经习惯于在完成输入之前就看到搜索结果了 - 这被称为即时搜索(Instant Search, 或者Search-as-you-type)。这
2015-09-16 14:55:34 472
转载 [Elasticsearch] 部分匹配 (二) - 通配符及正则表达式查询
通配符和正则表达式查询wildcard查询和prefix查询类似,也是一个基于词条的低级别查询。但是它能够让你指定一个模式(Pattern),而不是一个前缀(Prefix)。它使用标准的shell通配符:?用来匹配任意字符,*用来匹配零个或者多个字符。以下查询能够匹配包含W1F 7HW和W2F 8HW的文档:GET /my_index/address/_search
2015-09-16 14:54:52 5892 1
转载 [Elasticsearch] 部分匹配 (一) - 前缀查询
部分匹配(Partial Matching)敏锐的读者可能已经发现到目前为止,介绍的查询都是在整个词条层面进行操作的。匹配的最小单元必须是一个词条。你只能找到存在于倒排索引(Inverted Index)中的词条。但是如果你想匹配词条的一部分,而不是整个词条呢?部分匹配(Partial Matching)允许用户指定词条的一部分然后找到含有该部分的任何单词。匹配词条一部分这
2015-09-16 14:53:30 857
转载 [Elasticsearch] 邻近匹配 (三) - 性能,关联单词查询以及Shingles
提高性能短语和邻近度查询比简单的match查询在性能上更昂贵。match查询只是查看词条是否存在于倒排索引(Inverted Index)中,而match_phrase查询则需要计算和比较多个可能重复词条(Multiple possibly repeated)的位置。在Lucene Nightly Benchmarks中,显示了一个简单的term查询比一个短语查询快大概10倍,比一
2015-09-16 14:53:03 510
转载 [Elasticsearch] 邻近匹配 (二) - 多值字段,邻近程度与相关度
多值字段(Multivalue Fields)在多值字段上使用短语匹配会产生古怪的行为:PUT /my_index/groups/1{ "names": [ "John Abraham", "Lincoln Smith"]}运行一个针对Abraham Lincoln的短语查询:GET /my_index/groups/_search{ "q
2015-09-16 14:52:05 741
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人