自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (4)
  • 收藏
  • 关注

原创 机器学习中的相似度量方法

前几天面试被问到了怎么计算相似度,我只知道余弦夹角,其他的不了解。后来查了查资料,了解到下面这些方法:1. 欧氏距离2. 曼哈顿距离3. 切比雪夫距离4. 闵可夫斯基距离5. 标准化欧氏距离6. 马氏距离7. 夹角余弦8. 汉明距离9. 杰卡德距离 & 杰卡德相似系数10. 相关系数 & 相关距离11. 信息熵

2017-12-12 16:59:07 380

原创 java7中的fork/join框架

1. 什么是Fork/Join框架Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+

2017-11-15 17:23:35 455

转载 Netty百万级推送服务

以前的项目中需要做一个app的推送平台。最开始的推送实现使用的是轮询方式,app定时调接口,很low,也会有大量无用请求。后来改进搭建了一个基于netty的推送平台,三台机器,每台机器支持60万长连接。实现的过程调研了大量资料,本文属于质量较好的一篇,特此转载过来分享一下。原文链接:http://www.blogjava.net/freeman1984/archive/2016/07/

2017-11-14 18:55:46 2815 2

转载 23种设计模式介绍

本文属于从别人的博客总结整理而来,站在巨人的肩膀上看得更远,总结的很详尽,不用重复造轮子了。一、设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板

2017-11-14 18:20:36 275

转载 Netty系列之Netty线程模型【转】

本文系转载,原文地址:http://www.infoq.com/cn/articles/netty-threading-model/1. 背景1.1. Java线程模型的演进1.1.1. 单线程时间回到十几年前,那时主流的CPU都还是单核(除了商用高性能的小机),CPU的核心频率是机器最重要的指标之一。在Java领域当时比较流行的是单线程

2017-11-14 16:16:50 739

转载 Reactor模式介绍

本文系转载,原味内容有删减http://blog.csdn.net/u010168160/article/details/53019039一、是什么1、概念      reactor设计模式,是一种基于事件驱动的设计模式。Reactor框架是ACE各个框架中最基础的一个框架,其他框架都或多或少地用到了Reactor框架。       在事件驱动的应用中,将一个或

2017-11-14 15:42:36 342

原创 网络IO模型介绍

服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(Blocking IO):即传统的IO模型。(2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。(3)IO多路复用(IO Multiplexi

2017-11-14 15:40:02 231

原创 java异常处理机制

一. 概念异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件。当条件生成时,错误将引发异常。在 Java 中,所有的异常都有一个共同

2017-11-10 18:55:16 162

转载 mybatis介绍

简介:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。MyBatis并不

2017-11-10 17:34:07 235

原创 java8新特性回顾(六)---跟OOM:permGen说再见

方法区(method area):是JVM规范中定义的一个概念,用于存储类信息、常量池、静态变量、JIT编译后的代码等数据。Permanent Generation space,是Oracle-Sun Hotspot虚拟机特有的概念,针对方法区的一种实现。代表内存的永久保存区域,用于存放Class和Meta的信息,Class在被Load的时候被放入PermGen space区域

2017-11-09 23:41:36 449

原创 java8中concurrentHashmap的改进

ConcurrentHashMap是conccurrent家族中的一个类,由于它可以高效地支持并发操作,以及被广泛使用,经典的开源框架Spring的底层数据结构就是使用ConcurrentHashMap实现的。与同是线程安全的老大哥HashTable相比,它已经更胜一筹,因此它的锁更加细化,而不是像HashTable一样为几乎每个方法都添加了synchronized锁,这样的锁无疑会影响到性能。

2017-11-09 23:26:12 1869

转载 java8中Hashmap改进

发现别人已经总结的很详尽了,就不重复造轮子了。本文系转载,原文地址:http://www.importnew.com/20386.htmlJava为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示:下面针对各个实现类的特点

2017-11-09 23:20:01 7603 4

原创 java8新特性回顾(五)---并发增强之stampedLock

锁分离思想和饥饿现象读不阻塞写:在读的时候如果发生了写,则应当重读而不是在读的时候直接阻塞写在StampedLock中使用了CLH自旋锁:如果发生了读失败,不立刻把读线程挂起,锁当中维护了一个等待线程队列。所有申请锁但是没有成功的线程都会记录到这个队列中,每一个节点(一个节点表示一个线程)保存一个标记位(locked),用于判断当前线程是否已经释放锁。当一个未标记到队列中的线程试图获得锁时

2017-11-07 22:58:02 378

原创 lamda表达式的底层原理

1.   这篇文章是我本地Debug后记录下来的所见所闻, 不一定完全正确, 如有错误, 请务必指出.2.环境   JDK: Oracle JDK1.8.0_05 64位   ,    Eclipse4.4 3.过程   初看Lambda时以为Lambda就是编译器帮我们把Lambda表达式给编译成了一个匿名内部类, 然后调用, 但是偶然间看到字节码文件后, 发现有点不同, 于

2017-11-07 22:49:35 884

原创 java8新特性回顾(四)---并发增强之Striped64和longAdder

Striped64JDK 8 的 java.util.concurrent.atomic 下有一个包本地的类 Striped64 ,它持有常见表示和机制用于类支持动态 striping 到 64bit 值上。设计思路这个类维护一个延迟初始的、原子地更新值的表,加上额外的 “base” 字段。表的大小是 2 的幂。索引使用每线程的哈希码来masked。这个的几乎所有声明都是包

2017-11-07 22:36:11 961

原创 java8新特性回顾(三)

1.java.time api为什么需要新的日期/时间API:可变性:像时间和日期这样的类应该是不可变的。而java.util.Date与java.util.Calendar中的所有属性都是可变的,给计算和传参造成不便。偏移性:Date中的年份是从1900开始的,而月份都是从0开始的。格式化:格式化只对Date有用,Calendar则不行。用于格式化和解析的类在另一个java.te

2017-11-07 22:33:29 153

原创 java8新特性回顾(二)---stream api

接下来聊聊stream api1.外部迭代和内部迭代for (Shape shape : shapes) {  shape.setColor(RED);}* 外部迭代: for-each、for、while等外部迭代方式缺点;Java 的 for 循环是串行的,而且必须按照集合中元素的顺序进行依次处理;集合框架无法对控制流进行优化,例如通过排序、并行、短路(sh

2017-11-07 22:09:03 187

原创 java8新特性回顾(一)---函数式接口和lamda表达式

java9已经发布一阵子了,但是很多程序员还停留在jdk 6 7版本。一方面是因为老系统很难升级改造,另一方面jdk6也能满足绝大多数日常开发需求。就我个人而言,14年刚毕业进入工作时就开始接触java8,但直到今年来新公司接触的同事发现多数没有关注或者应用java8的新特性,且在一些场景下这些新特性确实能带来开发效率和代码质量的提升,因此前阵子做了个技术分享,也在这里做一下总结笔记。1.函数

2017-11-07 21:44:51 416

原创 zookeeper实现配置中心

最近做新系统,搞了个配置中心。本地用ehcache,配置最终存储在zookeeper上。系统启动连接zk,检查指定节点目录是否存在。若不存在,则创建。随后设置监听。节点内容变化则触发监听程序,更新数据到本地缓存。读数据时本地缓存不命中,则读取zk对应路径节点内容到本地。相关代码示例如下:1.连接zk逻辑private static ZooKeeper getInstance

2017-11-07 18:35:49 2531

转载 Redisson分布式锁的使用及源码分析

原文链接:http://blog.jobbole.com/99751/在分布式场景下,有很多种情况都需要实现最终一致性。在设计远程上下文的领域事件的时候,为了保证最终一致性,在通过领域事件进行通讯的方式中,可以共享存储(领域模型和消息的持久化数据源),或者做全局XA事务(两阶段提交,数据源可分开),也可以借助消息中间件(消费者处理需要能幂等)。通过Observer模式来发布领域事件可以提供

2017-10-31 18:04:11 479

翻译 Redission--基于redis的分布式协调客户端

简介Redisson - 是一个高级的分布式协调Redis客服端,能帮助用户在分布式环境中轻松实现一些Java的对象 (Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue, Deque,

2017-10-31 17:30:13 1245

原创 zookeeper基本原理介绍

1 Zookeeper简介-分布式服务框架   ZooKeeper为分布式应用程序提供高效且可靠的分布式协调服务,提供的服务:配置管理、统一命名服务、分布式同步、组服务等,是Google Chubby的开源实现,Hadoop和Hbase的重要组件;是一个典型的分布式数据一致性的解决方案,分布式应用程序可基于它实现诸如数据发布/订阅、负载均衡、分布式协调/通知、集群管理、Master选举、分布式

2017-10-31 14:49:56 372

原创 druid连接池监控

项目中使用的数据库连接池是阿里开源的druid连接池,经常会有一些场景需要监控和统计数据源、sql的执行情况,因此引入druid提供的监控druid monitor。Druid是一个开源项目,源码托管在github上:https://github.com/alibaba/druidDruid 0.1.18之后版本都发布到maven中央仓库中,所以你只需要在项目的pom.xm

2017-10-31 14:19:58 6053 1

原创 记录一次cpu 100%线上问题排查

功能问题,通过日志,单步调试相对比较好定位。 性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底。 最近做项目时碰到线上某台实例不时出现CPU 100%的报警:线上部署了若干tomcat实例,即若干垂直切分的Java站点服务,以及若干Java微服务,突然收到运维的CPU异常告警。问:如何定位是哪个服务进程导致CPU过载,哪个线程导致C

2017-10-31 14:06:50 2268

原创 kafka学习笔记

Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。在大数据系统中,常常会碰到一个问题,整个大数据是由各个子系统组成,数据需要在各个子系统中高性能,低延迟的不停流转。传统的企业消息系统并不是非常适合大规模的数据处理。为了已在同时搞定

2017-10-30 21:47:21 159

原创 项目开发中git分支规范

最近做新项目,团队需要用git来做代码版本控制。因此我们自己制定了一套git分支管理规范。目的:为了规范代码库分支管理和版本管理,使得版本库的演进保持简洁,主干清晰,各个分支各司其职、井井有条,并避免由于维护造成的错误的版本发布等问题。1、主分支mastermaster分支有且仅有一个,用于存储正式发布的历史,在版本库初始化时自动生成。master分支是所有开发活动的核心分

2017-10-30 21:42:43 2268

转载 Apache kafka 工作原理介绍

消息队列消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上, 队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。在分布式计算环境中,为了集成分布式应用,开发者需要对异构网络环境下的分布式应用提供有效的通信手段。为了管理需要共享的信息,对应用提供公共的信息交换机制是重要的。常

2017-10-30 21:28:01 199

原创 dubbo自定义路由规则实际应用

最近遇到这么个场景:由于多个业务系统都实现了同一个服务,在调用中通过读取相关配置可以知道此次调用是限制请求到哪几个服务提供者上,而不是所有提供者中任取一个,这个就需要在dubbo上自定义自己的路由规则。具体做法:实现Router接口,重写route方法,从注册中心所有服务提供者列表中选出符合规范的提供者列表并返回即可。还有一种取巧的方法,就是在最后确定服务提

2017-10-29 18:34:37 8510 3

原创 项目中sharding-jdbc的实际应用

简单介绍下最近项目中遇到的场景:敝司最近发展酒店业务,需要从各个供应商接入酒店数据、报价等信息,国内现有正宗酒店大约80万,每个酒店有很多房型(标间、大床间 豪华间等),每个房型有会有多个销售套餐(如含早不含早、有无有窗、带不带优惠等),每个供应商都会有自己的销售套餐和对应的报价(一般支持90天),预计供应商会有40家,这样会有80w 酒店* 15 房型 * 10销售套餐 * 90天报价 ≈ 10

2017-10-29 18:03:09 1207

原创 java String源码分析

String类介绍  String 类是日常开发中使用最频繁的类之一,同时也是非常重要的一个类,因此很有必要针对String类的进一步的理解和分析,而不能仅仅停留在会用的地步。如下图所示,String类实现了Serializable, Comparable, CharSequence接口。String类被final所修饰,也就是说String对象是不可变类,是线程安

2017-10-28 16:03:13 140

转载 maven和gradle对比

Java世界中主要有三大构建工具:Ant、Maven和Gradle。经过几年的发展,Ant几乎销声匿迹、Maven也日薄西山,而Gradle的发展则如日中天。笔者有幸见证了Maven的没落和Gradle的兴起。Maven的主要功能主要分为5点,分别是依赖管理系统、多模块构建、一致的项目结构、一致的构建模型和插件机制。我们可以从这五个方面来分析一下Gradle比起Maven的先进之处。依赖管

2017-10-28 15:35:26 1780

原创 使用Jenkins进行持续集成

首先,我们从Jenkins官方网站https://jenkins.io/下载最新的war包。虽然Jenkins提供了Windows、Linux、OS X等各种安装程序,但是,这些安装程序都没有war包好使。我从未见过Jenkins这样把Java包做得如此简单的项目。只需要运行命令:java -jar jenkins.warJenkins就启动成功了!它的war包自带Jetty服务器,

2017-10-28 15:14:13 145

转载 git flow介绍

Git Flow 是什么Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践。Git Flow是一套使用Git进行源代码管理时的一套行为规范和简化部分Git操作的工具。2010年5月,在一篇名为“一种成功的Git分支模型”的博文中,@nvie介绍了一种在Git之上的软件开发模型。通过利用Git创建和管理分支的能力,为每个分支设定具

2017-10-28 15:11:05 172

原创 git概念和原理

工作区 Working Directory电脑上能看到的目录即工作目录,比如:/e/git_repo/版本库Repository工作区有一个隐藏目录.git,这个不算工作区,而是git的版本库。git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有git为我们自动创建的第一个分支master,以及指向maste

2017-10-28 15:07:19 3306

原创 git思想

直接记录快照,而非差异比较Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有

2017-10-28 14:54:05 370

原创 红黑树介绍

R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。红黑树的特性:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色

2017-10-28 14:39:49 230

转载 Spring @Transactional原理及使用

本文主要讨论Spring声明式事务中使用注解@Transactional的方式、原理及注意事项,主要包括以下内容:Spring @Transactional的配置使用;Spring @Transactional的传播行为和隔离级别;Spring @Transactional的工作原理;Spring @Transactional的注意事项;Spring @Transactional自我调用中

2017-10-18 18:35:27 337

原创 排序算法的java实现-归并排序

原始数组:49, 38, 65, 97, 76, 13, 27,49分组:[49, 38, 65, 97] [76, 13, 27,49]继续分组:[49,38] [65,97] [76,13] [27,49]第一次合并:[38,49] [65,97] [13,76] [27,49]第二次合并:[38,49,65,97] [13,27, 49, 76]第三次合并:[13, 27, 38,

2017-10-18 18:10:56 134

原创 排序算法的java实现-冒泡排序

1. 基本思想:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。2. 排序过程:设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"漂浮",如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。【示例】:原始

2017-10-18 14:12:09 155

原创 排序算法的稳定性分析

(1)冒泡排序         冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。 (2)选择排序 

2017-10-18 14:03:49 119

JAVA代码优化实用策略

非常实用的java代码优化策略详解,从变量声明、初始化、字符串链接、异常处理、IO、数组等各个方面进行优化,非常有参考价值。

2012-12-27

非常实用的java代码优化详解

非常实用的java代码优化详解,从对象声明、循环、初始化 堆栈、异常等各个方面进行优化,非常有用

2012-12-27

lucene算法详解

lucene搜索算法文档详解,让你全方位的了解lucene这个实用的搜索引擎框架。精通其中的妙用

2012-12-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除