自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

百恼的专栏

专注于技术,实现自我突破

  • 博客(57)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 最佳实践:AtomicInteger实现边界值控制

《最佳实践:AtomicInteger实现边界值控制》这篇文章主要讲两部分,一部分简单的讲了一下AtomicInteger和LongAdder的实现对比,这部分不会讲太细,因为有更好的文章已经讲过了,而且像一些实现细节可能自己看代码会更好一些。另外一部分就讲讲AtomicInteger实现边界值控制,也就是本篇的标题,其实说这个的时候我估计很多人不知道具体讲啥,等我细细讲来的时候估计就会明白。

2015-10-10 09:31:09 8993 1

原创 存储系统的实现-探析存储的机制和原理

这里假设一个图书馆,假如说书就是要我们要放的数据,会怎么放。最土的办法就是随便往里面丢,然后毫无章法,这样每次找书我们就累死了,因为必须每一本书都要一本书一本书翻过去(有点像DB的全表扫描),如果运气好可能会在比较前面找到,最差情况下就是翻遍整个图书馆最后找到了这本书。

2014-07-21 08:17:01 3323

原创 毕业四年

直至目前毕业已经快四年,我的经历代表了大多数普通程序员的经历,没有牛人传奇的经历,甚至连进入这个职业都是一种偶然,只是因为分数不够被调剂到计算机专业。很多人可能会有和我一样的经历甚至一样的困惑。我在《我的六年程序之路》寥寥几笔记录了我的工作经历,那个时候的心态代表了一个初入职场的迷茫,而现在是一个希望获得成长的迷茫,虽然本质一样,但是阶段不一样。

2014-04-09 08:15:31 13453 59

原创 性能优化-一次OOM的解决经验分享-谈动态扩容可能导致的内存隐患

前言        OOM的问题可能很多人都碰到过,今天要讲的就是因为容器的误用内存无法释放而导致内存溢出。最后排查出来是因为定义了一个实例变量的Map,而所有的线程都对这个Map进行add数据,而没有进行释放,最后直接OOM。这个问题如果只是简单的查看log日志会发现根本找不到问题,因为最后导火索可能是操作别的类引起的,而它可能是压垮骆驼的最后一根稻草。如果去排查代码,这个时候可能真的像大海

2014-04-01 08:15:47 4579 1

原创 再谈HashMap-由一个实际问题引发的对HashMap设计吐嘈

这一篇主要想讲一讲HashMap在设计上的缺陷以及在使用的过程中留下的一些隐患。也是在实际项目中可能需要注意的一些地方。比如说我下面要介绍的一个containsKey方法,以及List里面其实有一个toArray[]方法返回的是一个Object[]数组的,其实都不是很好用的一种设计,在泛型里有点不伦不类的感觉。

2013-12-31 08:10:03 9052 19

原创 工作心得总结

这篇总结是我在实际工作中的一些心得体会。主要是我在工作中犯的错误然后进行总结,也是对自己的警示。我在这里先抛出一个观点:技术能力不等同于工作能力,只能说技术能力是工作能力的一部分,在公司里会发现有些技术不错的程序员并不得志,有些技术不如他的反而得到晋升。技术能力是一个工具,是一把刀,是一项很重要的技能,但是如何用好他就看每个人的功力。如果你有杀牛的本领,每天杀鸡有什么用。

2013-11-19 08:09:36 7705 18

原创 生产者消费者模型(二)-引入ArrayBlockingQueue

在《生产者消费者模型你知道多少》中简单的模拟了一个生产者消费者模型。有些网友对我的实现提出了很多质疑。我在文章的结尾也对抛出了一个问题。在代码中也充斥了大量的锁,可能有些锁是不需要的。在今天我将引入ArrayBlockingQueue重写这个模型,这在实际开发中可能更有意义,另外也对于java.util.concurrent这个包有一个认识。这个包在并发编程。这个包在并发编程实践里面有非常重要的作用。

2013-11-18 08:00:37 22458 9

原创 生产者消费者模型你知道多少

进入正题之前先说点故事。从最开始学java的那里开始:我是从08年下半年开始学Java,在《我的六年程序之路》中提到了一些。当时比较简单,每天看尚学堂的视频(对于初学者而言看视频好一些。),然后写代码。比较清楚的记得马士兵讲到生产者消费者模型的时候还大谈特谈要是掌握了这个工资可以+1000(现在回忆起有点像历史一样,多少有些伤感)。

2013-11-12 08:07:10 41045 41

原创 项目分享-限流框架的实现

背景        开篇之前我一直在想怎么把这个项目给讲清楚。大概说一下背景:代码写于2012年下半年,后来做了一些改进。最开始的雏形是从另外一个项目上进行的,所以侵入性比较强,后面进行了剥离,实现可插拔式的监控。言归正传,当时对于性能领域的东西非常有兴趣,所以就在想如何写一个东西对于现有项目对于"类级别(严格来讲是方法级别)"做性能监控。

2013-11-06 08:12:30 11245 18

原创 深度思考Java成员变量的初始化

写Java代码的时候很少去关注成员变量的声明和初始化顺序。语言的设计者们又为什么会这样设计?比如说很常见的一种abstract(抽象)类不能采用final进行修饰。这个问题比较好理解。因为一个类一旦被修饰成了final。那么意味着这个类是不能被继承的。另外一个问题又是abstract(抽象)类又不能被实例化。这两者就会产生一个矛盾。而且从语言的角度来讲一个类既然是抽象类,那么它就是为了继承。

2013-10-30 07:58:02 26743 38

原创 项目经验分享

最近一直在想自己在项目中的一些得失,在每一个项目结束都要问自己一下:这个项目中自己获得哪些成长,下次是不是可以做到更好。长期的项目过程往往会让人陷入一种思维的定式:好像每个项目的工作都一样。这样对于个人成长而言是非常局限的,因为在每一个项目中没有任何突破性的进展。以前看过一个观点:什么叫做有效经验。有些人做了三年其实只有一年的经验,因为后面基本上是前面的copy。

2013-10-22 08:01:42 8087 15

原创 程序员的职业规划

在这个节点讲讲我对职业发展路径的理解,另外就是理一理脑子里的一些思路。过段时间再看此文又可能是另一番理解。很多路从后往前看的时候总会有遗憾,要是当初怎么怎么样就会怎么怎么样。导致这样的原因的第一个原因是人在做决策的时候由于各种不全导致了决策本身并不完美,即使当时完美可能后面看来也可能是不完美的,也有可能做出完全错误的决策(PS:如果孤立的讨论决策本身没有完全错误的决策,也可以认为是没有意义的)。有一句话叫做:早知如此,又何必当初。命运有些是自己可以掌握的,有些可能需要运气和机会。

2013-10-14 08:23:50 29256 51

原创 漫谈SOA(面向服务架构)

面向服务架构的思想在整个软件的架构中已经不是什么新鲜的东西。我简单的认为服务化是模块化的延伸,所以服务化有着和模块化类似的优点和缺点。这里不再讨论这些服务定义服务与服务之间的通信协议(像WSDL等等),我并不认为这是服务化的本质所在。即使Java语言用RMI进行服务与服务之间的通信也仍然不违背服务化的宗旨。一.为什么需要面向服务架构        1.我觉得面向服务的根本好处是便于管理,也

2013-10-11 20:29:12 18830 3

原创 程序员看婚姻

先从一句话开始吧!“你愿不愿意向对方公开你的QQ密码,微信密码,微博密码,手机短信而且各种账号唯一”。这句话极有震撼力,以前交换戒指,现在可以交换密码。当你结婚的那一刻愿不愿意交出你所有的密码。很多人会说每个人都需要有自己的私密空间。可是另外一句话确是有什么话不能跟自己老公和老婆讲的,之前所说的信任又在哪里?我先抛一个观点:在我看来结婚之后夫妻双方应该尽量保持信息透明,信息公开,互相监督。有效的监

2013-10-06 14:12:55 2580 3

原创 超市排队随想录

昨天阳光城一新超市开张,去超市晃了一圈,人山人海啊!突然感觉这抚州的消费能力不是般的强。今天讨论一个问题:队列,资源竞争和锁。        “称重处”一定是最繁忙的,因为“资源独占”,如果写代码的时候这个地方是要加锁的,不然一定会出现多线程下的并发问题。所以我一直观察这“壮烈”的场景。很多人是没有排队的,直接拥堵在周围,这里我称之为“抢占式资源竞争”。计算机内部对于任务的调度并非采用这种方式

2013-10-02 11:48:24 1765

原创 StringBuilder源码分析

StringBuilder是平常编程中比较常用的JDK下的类之一。在字符串的拼接中发挥着重大的作用。可能很多人对于StringBuilder的认识并不深刻。这里通过我的理解来阐述一下StringBuilder。1.为什么要使用StringBuilder?        这里很多人可能会说有“+”写出来的代码可能不是那么雅观,可能算做一个,另外更重要的原因是众所周知的性能。这在很多面试题里会

2013-09-14 16:34:51 4442

原创 男女25岁的资源格局

这里我只说大部分!什么不一定的就不要说了。先从一个帖子开始。无意中和同事看到一个找对象的帖子,一上来先介绍自己和一些优点,介绍的很详细,然后说自己的要求。我说这个帖子写的好。很多帖子一上来就噼里啪啦一大段要求这要求那,我只想问一句:你吸引别人的地方在哪里?言归正传,以前我说过女人25岁是一个转折点,过了25岁择偶竞争力会下降,所以女人22岁~25岁是一个黄金年龄,这个主要是大部分男

2013-07-12 10:18:37 2218 2

原创 人工智能遐想

这个话题有点营养哈!晚上吃过饭后我突然说了一句机器的智能永远无法超过人类。就这一个问题引发了将近一个小时的讨论。我的论据是所有机器的智能是人赋予的,也就是机器所有的思维模式都在人的控制之下。         坐在我旁边的小A马上不同意了。他说机器智能必将超过人类。得出这个结论的依据就是“人类的思维基于经验”。只要能够模拟人类的学习过程,机器强大的存储和计算能力必将超过人类。我突然想这套智能模型

2013-07-11 07:24:44 2319 7

原创 存储系统实现-如何删除数据

前一篇中简单的写了下关于索引的删除,这一篇中完整的介绍整个数据删除步骤。        1.根据ID查找索引数据(主要是获取具体数据地址,有点像数据库中的根据索引进行回表)        2.根据索引的数据偏移查找具体的空间ID(在第二篇中介绍了整个系统的存储结构,存储空间是分块的,一个数据对象可能存储在一个“逻辑空间”中,也有可能存储在多个存储空间中,取决于对象的大小)。

2013-06-02 16:52:36 2300

原创 存储系统实现-数据删除之索引的删除

在前几篇中一直没有提到存储删除功能。在这一篇中着重讲一下存储的删除。      可以分为两块: 1. 索引的删除;2.数据的删除。      这一节主要讲一讲索引删除,因为数据的删除会相对复杂一些。      索引的删除其实包含索引ID的复用,在存储系统中ID主键是自增的,这里主要是为了保证简单的有序插入和性能考虑,所以并未支持用户传入ID进行插入。既然有添加必然会有删除功

2013-05-31 09:04:52 2300

原创 存储系统实现-跳跃表实现索引检索

这一篇是我所实现的一个通过跳跃表的方式来实现对索引的检索。大概看了下跳跃表的基本思想,遂用自己的程序来实现这样一种检索方式。先用一张流程图来阐述我检索的步骤。顾名思义“跳跃表”就是利用跳跃读取的优势,而不用遍历整个索引表造成性能的损失。读索引整体流程图:     这里举一个例子具体的说一下检索的步骤,这里说一种检索到的情况,这里假设整个文件表10万条,id是连续自增,检索id=

2013-05-26 11:43:55 3805

原创 存储系统实现-数据文件格式

在第一篇中讲到了整个索引文件的实现方式与检索方式的实现,这一篇中讲到我实现的各个文件的结构。        存储管理文件:这个文件的作用主要是对数据文件进行分块管理,管理数据文件块是否使用,还有相应的偏移位置,申请数据文件块都需要从这里进行申请。对于文件的回收也相应的改这个文件的状态。下面画的是该文件的结构                                   索引文

2013-05-19 17:21:29 3090

原创 存储系统实现-构建自己的存储系统(一)

一直在断断续续的看Lucene源码,怎么也理不清其中千丝万缕的联系,遂想自己边写边理解。在写的过程中更加理解索引的意义,以及在开发过程中如何利用索引加快检索,如何利用跳跃表来实现快速查找。如何利用缓存来实现减少磁盘IO的开销。         这里先从整个流程说起,这里简单的模拟了一下数据存储和查找的过程。在写这个的过程中基本可以深刻理解索引的真实意义。         存储数据1.

2013-05-16 15:36:34 4218

原创 专注的性格

早上在空间看到一篇如何教育小孩的文章,有些感想。专注的性格很难得。用一句话来说就是一个时间做一件事,需要工作,需要学习,也需要玩,明确各“系统”之间的边界和通信方式,降低系统之间的耦合,整个系统就会清晰,用软件工程的思想就是这样。        合理安排时间和估计时间也算一种比较重要的能力。小时候很容易拖沓,比如说把作业放到最后一天写,或者在写作业的时候注意力不集中,也跟小时候的培养有关系。

2013-05-07 07:54:18 1706 1

原创 JDBC学习之-如何获取Connection

JDBC是作为连接数据库的渠道之一,封装了一些与数据库交互的接口。看了一些源码,现在就来探寻一下JDBC的原理。JDK中给了几个接口比如说Connection,Statement,ResultSet。这些都是在用JDBC中比较常用的接口,这些接口定义了与数据库的交互规则。具体的实现都由具体的类库或者厂商实现。目前比较常用的数据库有Mysql,Oracle,Sql Server。这些具体的数据库

2013-04-08 16:25:36 12176 1

原创 实时机票/火车票抓取系统整体架构

实时机票/火车票抓取系统是一个带有业余性质的系统,主要是作为技术的训练场。比如说ActiveMq,RMI,WebService,即使最原始的Socket也在这里一展拳脚。        大概可以分为几个模块:对外服务模块:WebService(Axis2),RMI的方式,原始Socket流方式(主要学习用),HTTP JSON方式。日志监控:提供对抓取的监控,监控抓取网站的规则变化

2013-03-28 13:32:32 4095 5

原创 动态代理的分析与应用

今天给同事简单的演示了一下JDK的代理写法,在此也把代码贴出来,作为一个学习笔记。        动态代理的核心思想是不修改原有类和方法的基础上能添加一些功能,Spring的AOP是一个经典实现。好了,废话不多说,上代码。       第一段代码是一个接口,没什么好说的。public interface Handler { public void handle();}

2013-03-22 15:34:57 2081

原创 远程服务化的思路整理

这里客户端和远程服务都是具体和业务相关的,比如说会员服务需要独立部署。远程服务框架是要做的工作就是屏蔽具体和远程接口交互的细节,方便调用方进行调用,比如说配上接口名,服务器IP就能实现通信。实际应用中也不会太关心具体的机器IP。假如说会员服务是一个集群服务,那么对于客户端而言并不需要关心具体的IP,它所关心的只有服务,具体路由到哪台机器去处理也将是目标服务需要做的事情。并非客户端去做的事情。

2013-02-23 14:07:18 1379 1

原创 流量监控实战

前言     流量监控(后面简称流控)是一个比较大的领域,也是互联网行业比较关注的领域。当业务发展到一定阶段的时候,性能网往往会成为业务发展的主要瓶颈。一个好的应用除了最基本的可以在低并发下对外服务之外,能否支撑高并发访问是大型互联网网站比较关心的问题。拿火车订票网(12306)来说,在平时低并发下都没有什么问题,很容易的可以登录系统,订到票,一旦到了春节等节假日就出现问题,这点如果在12

2013-01-08 18:59:31 4002

原创 实时机票/火车票抓取系统概述

整个项目大部分出于学习的目的,时间跨度也是从2009年至今。最原始版完全是为了实现业务需求,也就是实现抓取机票的功能。后来又增加火车票以及酒店评论。       web端是ASP,而抓取端是Java,为了实现这种交互,使用了最为普遍的Ajax,这种方式最为实用。后来学习通信方面的知识,自己写了简易的C#与Java通信框架(说框架有点夸大)。在这个基础上又不断扩充。运用的知识和框架也越来越多

2013-01-07 12:07:42 1698 2

原创 IO流自我实现之MemoryOutputStream

先简单的描述一下需求。再用Freemarker的时候需要根据模板文件来生成目标对象,Freemarker可以把生成的目标对象回写到文件中,这种方式并不是我想要的。我需要直接拿到对象进行传输。       看看常规Freemarker的处理方式: 下面的图是代表我要的方式,重点是最后一步:   Freemarker是以管道流的方式进行对数据读出/写入的操作。看了目前的IO流,

2012-12-23 12:58:12 2387 1

原创 深入探析Java线程锁机制

今天在iteye上提了一个关于++操作和线程安全的问题,一位朋友的回答一言点醒梦中人,至此我对Java线程锁有了更加深刻的认识。在这里也做个总结供大家参考。      先看几段代码吧!   代码一:public class TestMultiThread2 implements Runnable{ private static Object o = new Object();

2012-12-17 15:23:18 9763 10

原创 学习笔记-操作系统虚拟内存篇

内存管理问题:如何进行内存分配如何管理空闲内存如何找到合适的内存空闲块给进程使用?使用什么算法?使用合种方式对内存进行管理?如何处理内存碎片内存交换技术解决什么问题,很明显解决程序所需内存大于内存的大小优点,局部性,可以不需要一次把所有的程序load到内存缺点,很明显,由于磁盘的读写速度的限制,当程序增大时会整个交换技术会变的很慢虚拟内存虚拟内存的概念,

2012-12-16 14:29:39 4982

原创 Java技术导图

简单的画了一张有关Java的技术导图,其中不免纰漏,作为自己学习的一个指导方向。

2012-12-08 15:12:38 1813

原创 面试那些事儿

刚刚看到一篇关于面试的文章,遂也写一篇自己的感受。         面试本身非常考验面试官的洞察力,需要简单的几个问题能考察出一个人的各方面素质。说实话在中国非常会考试的国家,面试本身是可以准备的,也就是所说的捷径。如果面过很多公司的人肯定就会有这种感觉问的问题其实都差不多,多面几次就有经验了。回去好好准备一下就OK了。其实这对面试者来说是一个好消息。可是对企业来说未必是一件好事。其实对于广大

2012-11-24 16:53:59 2006 1

原创 进大公司还是进小公司

对于这个问题始终没有一个固定的答案,就像两条路始终都有人失败和成功。因为成长的道路上会有太多的因素在影响着我们。这里我想举一个可能不是特别恰当的例子但是相似的例子就是读大学。一个好的大学和一个普通大学都可能出人才,可是它们的概率一样吗?他们在学校的资源又是一样吗?出了校门所享受的社会资源又是一样吗?        所以结论也很简单,如果你刚毕业,有实力进大公司不要唐突的选择一个公司就进去了

2012-11-16 20:22:43 4793 6

原创 你为什么得不到晋升

写这个题目的时候其实多半是对自己的一个真实写照,也是经常问自己的一句话,每天都在思考决定成长的因素是什么,技术在这中间又占多少成分,如何把自己的技术更好的展现出来得到大家的认可。     下面是一张简单晋升图,或许这也是很多人所希望的升职路径。很多人也觉得自己在多少年后可以达到某个位置。有些人止步于开发工程师,有些人则可以做到架构师或者项目经理。更少的人可以做到CTO。     曾经小

2012-11-09 20:00:19 2437 4

原创 HashMap源码分析

HashMap作为最常用的容器类之一不一定每个人都对它非常了解。即使面试题也仅仅会比较几种容器的性能和线程安全问题。       HashMap如此常用确实有着它精巧的设计,即使我现在也无法真正理解其hash()策略是如何想到的。这里就把我一些理解的写出来,一方面是自己的笔记,另一方面是可以和广大程序员作一个交流,说不定能解开我一些无法解答的迷。       这里先提几个问题作为引子。

2012-11-06 22:32:48 3338 3

原创 内存缓存策略探析

我在《性能调优思考》一文中粗略的谈到了有关于内存缓存。这里我再另开一文并结合我自己写的一个例子来谈谈有关于内存缓存。       内存缓存的用途场景会比较多,其实这里结合计算机硬件分层的思想从高级缓存,主存再到磁盘就可以知道内存缓存的用途。一般web应用最基本的场景是就是存数据和取数据,比如存储介质是数据库,其实数据库不完全都是磁盘IO,数据库本身也会在内存中开辟一块空间用来存一些热点数据

2012-11-04 15:00:20 2875

原创 我的六年程序之路

以前看刘未鹏的《我在南大的七年》,就在感叹每个人的人生迥异。和大牛之间的差异加重了我对自己的卑微。写下这篇日志一方面是为了记录我这和计算机的六年,也是缅怀过去,反思自己。或许大部分程序员有着一样的迷茫和困惑,在程序员的路上也同样走了很多弯路。       一切都从2006年开始,高考完之后估分的时候我的分数差不多就比二本高不了多少。这样的分数我也没有过多的选择。当时的我认为农业会是将来的发

2012-11-03 13:44:14 16253 93

ideajad反编译提供下载

ideajad反编译提供下载

2016-09-02

Redis缓存文件

缓存文件

2016-09-02

ideajad反编译

ideajad

2016-09-02

GenerateToString

GenerateToString

2016-09-02

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

TA关注的人

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