TreeMap有Values、EntrySet、KeySet、PrivateEntryIterator、EntryIterator、ValueIterator、KeyIterator、DescendingKeyIterator、NavigableSubMap、AscendingSubMap、DescendingSubMap、SubMap、Entry共十三个内部类。Entry是在TreeMap中用于表示树的节点的内部类,已经在《TreeMap源码分析——基础分析》中分析过。下面逐一介绍上面的内部类以及TreeMap中提供的和内部类相关的方法。
TreeMap有Values、EntrySet、KeySet、PrivateEntryIterator、EntryIterator、ValueIterator、KeyIterator、DescendingKeyIterator、NavigableSubMap、AscendingSubMap、DescendingSubMap、SubMap、Entry共十三个内部类。Entry是在TreeMap中用于表示树的节点的内部类,已经在《TreeMa ...
英文原文:Software Development Lessons Learned from Poker
我以前不是做软件开发的。在加入ThoughtWorks两年之前,我主要靠玩扑克为生。当然,如果你曾跟我打听过我前臂上的纹身,那你肯定已然听过我的故事了。要是还没有,等下次我们一起喝一杯时,我可以讲给你听。
我从未因为花这么长时间玩牌而感到过遗憾,从中我学到了一些放之四海而皆准的知识。开发软件的时间愈久,我就愈加确信这二者之间具有令人难以置信的相似性。
学习
我学习打扑克和学习软件开发的方式是一样的:尽可能多读书。我用两年的时间,读完了所能找到的每一本有关扑克的书。最后竟至39本之多。编程亦如是。此刻,我面前仍然摆着接下来要读的5本书;而在过去三年ThoughtWorks的工作中,我翻烂的书亦不在少数。
我认为,无论编程还是玩牌,阅读书籍、博客与杂志都是要想有所成就的必备条件;而若要以二者为谋生之业,仅靠读书却是远远不够的。也许你可以把书本上的一切知识都装入脑中,但知道在何时应用何种规则,这才是真正高手的标志。
诚然,开卷有益。但总要走过万里路 ...
英文原文:The Best Developer Team Structure
在灭火时,有一种“水桶阵型”——队伍中所有人排成一列或几列,将水桶从水源处传递到火灾现场。这样在团队协作时甚至不需要语言交流,但显然不适用于软件开发。
Scott根据自身经验,针对软件开发总结了以下几点建议,不一定全面但是值得参考。CSDN编译如下:
组织架构是完成工作的工具,你需要好的工具来增加工作效率。没有永远最佳的组织架构,每一个项目都有最适合它的架构。
我个人的工作经历主要是关于网站早期开发,这是一门非常特定的工作,因此非常偏向于敏捷/迭代的工作模式,如果你是为银行或者航空公司做开发,肯定需要不同的工具和组织架构。
根据我的经验,通常3-5个开发者围绕这一个PM(项目经理)能够达到最佳的工作效率。PM是一个过于复杂并且常被滥用的术语,坦率地说,我非常讨厌这个词。这里我所说的PM是指“解释、阐明项目需求的人”,因此从产品战略的角度PM需要有强烈的想法,清楚需要构建的是什么,但他们更重要的任务是权衡从客户到设计师等等的全部利益相关者的需求,并据此制定计划。
...
为什么没有人知道天堂长什么样?因为,从来就没有人真地到过天堂… ——我自己
为什么没有人知道天堂长什么样?因为,从来就没有人真地到过天堂…——我自己
潘石屹写了一本书,叫《我用一生去寻找》。我很喜欢这个名字,也很喜欢这句话里面描述的状态。因为我没有仔细读过这本书,所以我可以信马由缰、肆意揣测,这个穷尽一生的东西到底为何物。我认为,一个人可能穷尽一生去寻找的,就包括一种状态,一种对的状态。
有人说,创业成功是一个小概率事件。在成功之前,摆在你面前的有很多很多的未知,很多很多的不确定性。创业者需要作出很多次正确的决策,才能一点点靠近成功,而一次错误的决策,就可能让之前的努力前功尽弃。因为人的理性是有限的,所以成功也就变得很难。我想把这个观点加以推衍,用在另外一个话题上——在人生的某个阶段,一个人要处在一个对的状态,做对的事,同样是一个小概率事件。而他要在人生的多个阶段、不同时期都处在一个对的状态,做对的事,就更难了。可以说,混沌不清、失去平衡、处于混乱,是生活最原始的面目。
因为两个原因:一.一个人从出生到逐渐长大,他的经历、经验永远是相对单薄的。二.我假定了一个人需要不断成长。
...
背景:
某日临近下班,一个同事欲任何类中获取项目绝对路径,不通过Request方式获取,可是始终获取不到预想的路径。于是晚上回家google了一下,误以为是System.getProperty(“java.class.path”)-未实际进行测试,早上来和同事沟通,提出了使用这个内置方法,结果人家早已验证过,该方法是打印出CLASSPATH环境变量的值。
于是乎,继续google,找到了Class的getResource与getResourceAsStream两个方法。这两个方法会委托给ClassLoader对应的同名方法。以为这样就可以搞定(实际上确实可以搞定),但验证过程中却发生了奇怪的事情。
软件环境:Windows XP、Resin、Tomcat6.0、Myeclipse、JDK1.5
发展:我的验证思路是这样的:
1、定义一个Servlet,然后在该Servlet中调用Path类的getPath方法,getPath方法返回工程classpath的绝对路径,显示在jsp中。
2、另外在Path类中,通过Class的getResourceAsStream读取当前工程classpa ...
英文原文:How to Get Startup Ideas,翻译:Jason Zheng
要想获得创业 idea,请别试图把创业 idea 想出来,而是要寻找未被解决的问题,最好是你自己遇到的问题。
最好的创业 idea 通常有三个相同之处:它们是创始人自己要、自己能做出来、别人不认为值得去做的东西。微软、苹果、Yahoo、Google 和 Facebook 都是这样开始的。
问题
为什么说解决你自己遇到的问题如此重要?原因之一是,这保证了问题是确实存在的。你只应该在存在的问题上面花功夫,这点再明显不过,但目前来说,创业公司所犯的最常见的错误就是试图解决一些没人有的问题。
我自己也犯过这样的错误。1995年,我开了家公司,想要把艺术画廊搬到网上。但实情是,画廊压根就没想要走到网上去。那我为什么还在这个愚蠢的主意上面花了半年时间呢?因为我没有关注用户,生造了一个与现实无关的模型,傻乎乎地埋头浪费时间。直到我试图说服用户付费时,我才明白我的模型是错的。即便如此,我还是心有不甘,费了很长的时间试图纠正回来。我自己陷进去了,在开发上花了大量时间,一心想着一定要让他们接 ...
关于大数据,有很多令人兴奋的事情,但使用它也带来了很多困惑。本文将提供一个可行的大数据定义,然后完成一系列示例,让您可以对在大数据领域领先的开源技术 Hadoop 的一些功能有直接的了解。具体来说,我们集中讨论以下几个问题。
什么是大数据、Hadoop、Sqoop、Hive 和 Pig,为什么这个领域有这么多让人兴奋的事情?
Hadoop 与 IBM DB2 及 Informix 有何关系?这些技术可以配合使用吗?
我如何开始使用大数据?有哪些简单的示例可以在单台 PC 上运行?
对于超级的急性子,如果您已经可以定义 Hadoop 并希望马上使用代码样例,那么请执行以下操作。
启动您的 Informix 或 DB2 实例。
从 Cloudera 网站下载 VMWare 映像,并将虚拟机 RAM 设置增加至 1.5 GB。
直接跳到包含代码样例的部分。
VMWare 映像中已内置了一个 MySQL 实例。如果您在没有网络连接的情况下做练习,请使用 MySQL 示例。
对于所有其他人,请继续阅读…
什么是大数据?大数据的数量庞大、捕获速度极快,且可以是结构化的也可以是非结构化的,或 ...
摘要: 虽然自己编码很重要,但是在遇到一个功能时,利用现成的代码不失为一种好方法,或许还会达到事半功倍的效果。但千万不要单纯地“用”,更多地是理解与提升,这样才会进步。
在推动技术变革上,开源运动发挥了非常显著的作用。而Linux成功地将开源转换成商务模式,给广大开源工作者带来了更大的信心和勇气。目前,开源已成为主流,在未来的几年内,它的足迹将会遍布前沿教育、航空航天(如无人驾驶飞机)等许多领域。
借鉴现有的开源项目或开源代码,对于初级开发者来说,不失为一种很好的编程手段,但千万不要单纯地“用”,更多地是理解与提升,这样才会进步。
下面为大家介绍6款源码搜索引擎,让你找到更适合你的源码。
1.Ohloh
Ohloh Code是最大且非常全面的源码搜索引擎,根据FOSS目录来看,其拥有超过10亿行代码且在不断更新,它不仅是免费的,而且还可以通过社区进行免费编辑。通过搜索可以索引到所有的文本文件,并且对43种编程语言都带有语法提示功能。此外,搜索语法非常灵活,可以为你查找到各种不同类型的类。搜索引擎目前不支持正则表达式。
2.Krugle
Krugle是一个开源的搜索门户,基 ...
在eBay,可伸缩性是我们每天奋力抵抗的一大架构压力。我们所做的每一项架构及设计决策,身前身后都能看到它的踪影。当我们面对的是全世界数以亿计的用户,每天的页面浏览量超过10亿,系统中的数据量要用皮字节(1015或250)来计算——可伸缩性是生死交关的问题。
在一个可伸缩的架构中,资源的消耗应该随负载线性(或更佳)上升,负载可由用户流量、数据量等测量。如果说性能衡量的是每一工作单元所需的资源消耗,可伸缩性则是衡量当工作单元的数量或尺寸增加时,资源消耗的变化情况。换句话说,可伸缩性是整个价格-性能曲线的形状,而不是曲线上某一点的取值。
可伸缩性有很多侧面——事务的方面、运营的方面、还有开发的方面。我们在改善一个Web系统的事务吞吐量的过程中学到了很多经验,本文总结了其中若 干关键的最佳实践。可能很多最佳实践你会觉得似曾相识,也可能有素未谋面的。这些都是开发和运营eBay网站的众人的集体经验结晶。
最佳实践 #1:按功能分割
相关的功能部分应该合在一起,不相关的功能部分应该分割开来——不管你把它叫做SOA、功能分解还是工程秘诀。而且,不相关的功能之间耦合程度越松散,就越能 ...
在前面的一些文章中,从实战的角度,讲解了有关memcached的应用、容灾、监控等等。但是缺乏对理论的讲解和原理性的剖析。本文将从理论的角度去介绍,让大家从宏观上对“分布式缓存、nosql”等技术有所了解,以便进一步学习和使用。在构建大规模的web应用时,缓存技术可以说是必备的,学习的必要性不言而喻。
分布式缓存概述
1.1 分布式缓存的特性
分布式缓存具有如下特性:
高性能:当传统数据库面临大规模数据访问时,磁盘I/O 往往成为性能瓶颈,从而导致过高的响应延迟.分布式缓存将高速内存作为数据对象的存储介质,数据以key/value 形式存储,理想情况下可以获得DRAM 级的读写性能;
动态扩展性:支持弹性扩展,通过动态增加或减少节点应对变化的数据访问负载,提供可预测的性能与扩展性;同时,最大限度地提高资源利用率;
高可用性:可用性包含数据可用性与服务可用性两方面.基于冗余机制实现高可用性,无单点失效(single point of failure),支持故障的自动发现,透明地实施故障切换,不会因服务器故障而导致缓存服务中断或数据丢失.动态扩展时自动 ...
