自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 收藏
  • 关注

原创 Java HashMap的死循环

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成 Race Condition,从而导致死循环。这个事情我4、5年前也经历过,本来觉得没什么好写的,因为Java的HashMap是非线程安全的,所以在并发下 必然出现问题。但是,我发现近几年,很多人都经历过这个事(在网上查“HashMap Infinite ...

2014-12-03 19:12:26 176

原创 数据库事务隔离级别

数据库事务的隔离级别有4个,由低到高依次为Read uncommitted 、Read committed 、Repeatable read 、Serializable ,这四个级别可以逐个解决脏读 、不可重复读 、幻读 这几类问题。   √: 可能出现    ×: 不会出现   脏读 不可重复读 幻读 Read uncommitted √ √ √ R...

2014-10-27 10:56:02 130

原创 Mysql锁

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的 计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一 个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。本章我们着重讨论MySQL锁机制 的特点,常见的锁问题,以及解决M...

2014-10-24 20:46:30 117

原创 CopyOnWriteArrayList

CopyOnWriteArrayList是ArrayList 的一个线程安全的变体,其中所有可变操作(add、set等等)都是通过对底层数组进行一次新的复制来实现的。      这一般需要很大的开销,但是当遍历操作的数量大大超过可变操作的数量时,这种方法可能比其他替代方法更 有效。在不能或不想进行同步遍历,但又需要从并发线程中排除冲突时,它也很有用。“快照”风格的迭代器方法在创建迭代器时使用了...

2014-10-17 13:58:09 118

原创 ConcurrentHashMap的实现细节

ConcurrentHashMap是Java 5中支持高并发、高吞吐量的线程安全HashMap实现。在这之前我对ConcurrentHashMap只有一些肤浅的理解,仅知道它采用了多个锁,大 概也足够了。但是在经过一次惨痛的面试经历之后,我觉得必须深入研究它的实现。面试中被问到读是否要加锁,因为读写会发生冲突,我说必须要加锁,我和面试 官也因此发生了冲突,结果可想而知。还是闲话少说,通过仔细阅读...

2014-10-11 16:29:30 404

原创 ThreadLocal

首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。 另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过ThreadLocal.set()来实现的,而是通过每个线程中的new 对象 的操作来创建...

2014-10-11 15:56:49 68

原创 Kafka

  Apache Kafka:下一代分布式消息系统    简介   Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。   Apache Kafka与传统消息系统相比,有以下不同:   它被设计为一个分布式系统,易于向外扩展...

2014-07-09 18:43:57 154

原创 Java 8无人谈及的八大功能

时间戳锁 一直以来,多线程代码是服务器开发人员的毒药(问问Oracle的Java语言架构师和并行开发大师Brian Goetz)。Java的核心库不断加入各种复杂的用法来减少访问共享资源时的线程等待时间。其中之一就是经典的读写锁(ReadWriteLock), 它让你把代码分成两部分:需要互斥的写操作和不需要互斥的读操作。 表面上看起来很不错。问题是读写锁有可能是极慢的(最多10倍),这已...

2014-07-09 18:37:07 108

原创 探秘Java虚拟机——内存管理与垃圾回收(补充说明)

一、对于GC的性能其实主要考虑以下两个方面:      1、吞吐率throughput【工作时间(不包括GC的时间)占总运行的时间比】      2、暂停pause(GC发生时应用程序无法响应用户的请求) 二、对于GC的性能可以从以下方面考虑: 1、整个堆空间 对于Server端的应用程序,有以下最佳实践:      1)对于JVM分配尽可能多的内存空间。      2)固定堆空间...

2014-06-30 18:32:24 96

原创 memcache的最佳实践方案

基本问题 1、memcached的基本设置 1)启动Memcache的服务器端 # /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid -d选项是启动一个守护进程, -m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB, -u是运行...

2014-06-30 18:29:38 86

原创 探秘Java虚拟机——内存管理与垃圾回收

本文主要是基于Sun JDK 1.6 Garbage Collector(作者:毕玄)的整理与总结,原文请读者在网上搜索。 1、Java虚拟机运行时的数据区 2、常用的内存区域调节参数 -Xms:初始堆大小,默认为物理内存的1/64(<1GB);默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制 -Xmx:最大堆大...

2014-06-30 18:27:09 85

原创 程序员需要知道的十大算法

  算法一:快速排序算法   快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的 架构上很有效率地被实现出来。   快速排序使用分治法(Divide and conq...

2014-06-20 16:11:29 126

原创 内部类 静态内部类 成员内部类 局部内部类 匿名内部类

内部类: 使用内部类减少了命名冲突。 一个内部类可以定义在一个类中,一个方法中甚至一个表达式中。 内部类分为四种: 静态内部类(static inner classes) 成员内部类(member inner classes) 局部内部类(local inner classes) 匿名内部类(anonymous inner classes) 1、静态内部类(static inner ...

2014-05-29 11:29:36 86

原创 Memcached常用命令及使用说明

一、存储命令 存储命令的格式: 1 2 <command name> <key> <flags> <exptime> <bytes> <data block> 参数说明如下: <command name> set/add/replace &am

2014-05-15 14:23:43 101

原创 一致性哈希算法

  问题描述: 例如手机朋友网有n个服务器,为了方便用户的访问会在服务器上缓存数据,因此用户每次访问的时候最好能保持同一台服务器。已 有的做法是根据ServerIPIndex[QQNUM%n]得到请求的服务器,这种方法很方便将用户分到不同的服务器上去。但是如果一台服务器死掉了, 那么n就变为了n-1,那么ServerIPIndex[QQNUM%n]与ServerIPIndex[QQNUM%(n...

2014-05-14 17:46:59 83

原创 应对高并发攻击

近半个月过得很痛苦,主要是产品上线后,引来无数机器用户恶意攻击,不停的刷新产品各个服务入口,制造垃圾数据,消耗资源。他们的最好成绩,1秒钟 可以并发6次,赶在Database入库前,Cache进行Missing Loading前,强占这其中十几毫秒的时间,进行恶意攻击。 为了应对上述情况,做了如下调整:   更新数据时,先写Cache,然后写Database(双写),如果可以,写操作交...

2014-05-14 17:43:04 827

原创 XMemcached&Spring集成

一、Memcached Client简要介绍 Memcached Client目前有3种: Memcached Client for Java SpyMemcached XMemcached 这三种Client一直存在各种争议: Memcached Client for Java 比 SpyMemcached更稳定、更早、更广泛; SpyMemcached 比 Memcac...

2014-05-14 17:41:10 84

原创 安装&常规错误&监控

08年的时候接触过Memcached,当时还对它的客户端产品嗤之以鼻,毕竟手工代码没有各种ORM原生XML配置方便。尽管如此,Memcached现在已经成了服务器架构里不可或缺的一部分!一、下载 1.Libevent 简单的说就是一个事件触发的网络库,Memcached离不开它。 Shell代码   wget http://cloud.github.com/download...

2014-05-14 17:39:59 103

原创 mongo查询内嵌文档

在mongo根据内嵌文档查询实例 Sql代码   > db.teacher.find ()   {   “_id” : ObjectId(“4e255ad2717ed94f4532ac08″),“subject”:”Chinese”   “students” : [   {   "name" : "tom",   "age" : "14",   "hob...

2014-05-09 19:43:07 151

原创 Spring for Mongodb

安装Spring for Mongodb Spring项目为方便对Mongodb的操作,建立了spring-data的子项目,地址在: http://www.springsource.org/spring-data/mongodb,目前版本是1.0.0M2阶段,已支持对 Mongodb的一系列基本操作。我们先从http://www.springsource.org/spring-data/m...

2014-04-23 14:34:11 90

原创 mongodb备份与恢复

mongodb数据库同样离不开必要的维护,如备份、恢复、导入、导出。 其实备份和恢复比导入和导出要方便些,而且一般不会出错,所以大部分时候使用备份和恢复操作就可以了 1. 备份Mongodb mongodump -h test.xxxx.com:52000 -d dataname -o /home/aa/dev/mongodb/data mongodump mongo导出数据库命令 mo...

2014-04-23 14:31:09 79

原创 java操作mongodb

上一篇文章: http://blog.csdn.net/wangpeng047/article/details/7705588介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过前一篇文章我们对MongoDB有了全面的认识和理解。现在我们就用Java来操作MongoDB的数据。   开发环境: System:Windows IDE:eclipse、MyEclipse 8...

2014-04-23 14:13:48 80

原创 mongodb数据库命令操作

上一节我们讲解了对于mongodb的一些认识和概念,那么接下来就要切实步入mongodb的学习中了。 mongodb不像关系型数据库有很强大的GUI客户端,虽然mongodb也有,但功能和稳定性实在不敢恭维,所以操作mongodb我们大部分 都是用类似cmd命令的方式(mongodb称为shell操作)来完成,因此学好mongodb shell操作是非常重要的基础。 一、准备工作 1、...

2014-04-23 12:53:40 129

原创 MongoDB入门简介

一、基本概念 MongoDB 是一个高性能,开源,无模式的文档型数据库,是当前NoSQL 数据库产品中最热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式,MongoDB 使用C++开发。MongoDB 的官方网站地址是:http://www.mongodb.org/,大家可以在此获得更详细的信息。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非...

2014-04-23 12:47:58 58

原创 向量空间模型与Lucene的打分机制以及影响打分的几种方式

向量空间模型请参照全文检索的基本原理的blog 问题: 在你的文章中提到了: 于是我们把所有此文档中词(term)的权重(term weight) 看作一个向量。    Document = {term1, term2, …… ,term N}    Document Vector = {weight1, weight2, …… ,weight N}    同样我们把查询语句看作...

2014-02-26 15:47:33 132

原创 影响lucene的评分的几种方法

评分功能,在全文检索中也算是一个非常重要的模块,因为评分的好坏,直接决定着用户搜索匹配的相关性,试想一下假如用户输入了一个搜索词,搜索引擎返回了一大堆不相关的信息,或者没有层次性,重点性的结果,那么看起来将是一件多么糟糕的事情。 lucene默认的评分机制,用的VSM(Vector  Space Model)空间向量模型,基于TF-IDF的评选方式,TF-IDF(term frequency–i...

2014-02-26 15:32:58 211

原创 跳表SkipList

  1.聊一聊跳表作者的其人其事 2. 言归正传,跳表简介 3. 跳表数据存储模型 4. 跳表的代码实现分析 5. 论文,代码下载及参考资料    <1>. 聊一聊作者的其人其事    跳表是由William Pugh发明。他在 Communications of the ACM June 1990, 33(6) 668-676 发表了Skip list...

2014-02-25 17:00:42 97

原创 Lucene的索引文件格式

Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙。 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程。 Lucene的搜索过程,就是按照此文件格式将索引进去的信息读出来,然后计算每篇文档打分(score)的过程。 本文详细解...

2014-02-25 16:54:38 138

原创 Lucene学习总结之二:Lucene的总体架构

Lucene总的来说是: 一个高效的,可扩展的,全文检索库。 全部用Java实现,无须配置。 仅支持纯文本文件的索引(Indexing)和搜索(Search)。 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。 在Lucene in action中,Lucene 的构架和过程如下图, 说明Lucene是有索引和搜索的两个过程,包含索引创建,索引,搜索三个要点...

2014-02-25 16:14:17 61

原创 Lucene学习总结之一:全文检索的基本原理

一、总论 根据http://lucene.apache.org/java/docs/index.html定义: Lucene是一个高效的,基于Java的全文检索库。 所以在了解Lucene之前要费一番工夫了解一下全文检索。 那么什么叫做全文检索呢?这要从我们生活中的数据说起。 我们生活中的数据总体分为两种:结构化数据和非结构化数据。 结构化数据:指具有固定格式或有限长度的数据,...

2014-02-25 15:49:02 128

原创 Trie数据结构

/**********************************************************数据结构:Trie树,又称单词查找树或字典树,是一种树形结构,是一种哈希树的变种;基本原理:Trie树的核心思想是空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的;应用:用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计;...

2014-02-25 15:00:22 84

原创 lucene

转自 Lucene/Solr开发经验[原] 作者 张驰有道   注意:该文章所属Blog中的日记遵循Creative Commons(创作共用)授权 ,您可以任意转载,转载时请务必以超链接形式标明文章原始出处 和作者信息 及本声明 。   [开篇语 ]按照惯例应该写一篇技术文章了,这次结合Lucene/Solr来分享一下开发经验。 Lucene是一个使用Java语言写的全文检索开发...

2014-02-24 17:45:13 125

原创 死锁产生的原因及四个必要条件

产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。产生死锁的四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的...

2013-12-10 23:02:11 85

原创 数据库访问杂谈

    一直想写一篇数据库访问的博客,之前很忙,一直没有时间。想写的数据库访问的这个博客不涉及到具体的数据库操作,比如增删改查或者一些ORM框架的使用,比如mybaitis、Hibernate,也不涉及到高阶的事务处理。就是想概况的写一下。     那什么是数据库访问呢,很简单——访问数据库呗。对,就是这么简单,咱们用图来说话,如下图所示:       客户端程序,比如Java程序(因为本...

2013-12-10 22:01:00 122

原创 java并发之yield(),sleep(),wait()区别详解

1、sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据。注意该方法要捕捉异常。 例如有两个线程同时执行(没有synchronized)一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有Sleep()方法,只有高优先级的线程...

2013-09-05 13:45:22 68

原创 java并发之Exchanger

两个线程可以交换对象的同步点。每个线程都在进入 exchange 方法时给出某个对象,并接受其他线程返回时给出的对象。   用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。 构造方法摘要 Exchanger() 创建一个新的 Exchanger。 方法摘要 V ex...

2013-09-04 18:10:25 92

原创 Java多线程-工具篇-BlockingQueue

一:前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。 二:认识BlockingQueue 阻塞队列,顾名思义,首先它是一个队列,而一个...

2013-09-03 23:22:55 70

为KeySet遍历HashMap辟谣---效率问题

听某位高级软件开发工程师说遍历HashMap的三种方式,用KeySet遍历的方式会非常慢,效率特别低,所以推荐使用EntrySet的方式遍历HashMap,这两种都是可以获取到HashMap的key-value对,另外一种遍历HashMap的方式是调用HashMap的values方法,但是无法得到key的值。当听到说keyset特别慢,效率低下的时候,我就在想,如果这样真的那么慢的话,那么...

2013-08-06 10:58:11 318 1

浅谈java中的代理+即将工作一年感想

还有20天 ,就工作一年了,感觉时间过得真快,当然有的时候也会觉得时间过得很慢,当然觉得慢的时候是觉得怎么离发工资还有那么久的时间,回顾这一年的时间,从刚开始的生手到现在得到一个技术牛人的认可,经历了很多。当然,能让自己进步唯有学习。。自己本身非常喜欢技术,不是很喜欢管理,觉得管理人员的事比较多,比较杂,比较费心、劳心,所以以后还是想走技术路线,争取早日实现自己的一个目标-成为架构师。废话不多说...

2013-07-08 09:21:36 116

原创 Java:单例模式的七种写法

第一种(懒汉,线程不安全):  1 public class Singleton {   2     private static Singleton instance;   3     private Singleton (){}    4     public static Singleton getInstance() {   5     if (instance == null) {...

2013-07-04 16:22:39 84

空空如也

空空如也

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

TA关注的人

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