大数据时代,什么都跟数据密不可分。觉得追女生是一件不需要科学的东西?那你就错了。微软数据视界近期就通过多组数据分析来告诉大家,如果能够发现这些数据的奥秘,对于你是否能够逆袭摆脱单身是很关键的。
在校的男同学们怎么追女同学:
对于已经不是学生的你,看了上面的数学公式或许会感到头大,别郁闷,还有适用于更广泛人群的数据呢。
怎么用数据追女神:
谁说宅在家里打游戏注定孤独一生?网游其实比婚恋网站更靠谱!数据证明,网游玩家比婚恋网站用户群大,在线时间更长,异性之间相互交流更多,而且网游上的男人更有魅力。关于网游,还有很多你没想到的,看看下面的信息图表(尤其是给家长们看看),然后一边尽情打网游,一边尽情把妹吧!
辛辛苦苦的熬了几个月,软件开发终于快要告一段落了。系统功能已经基本完成了,在准备按部就班的完成最后的测试时,客户突然提出要改变某些非功能性需求。这对于软件开发团队来说,不亚于晴天惊雷,这也是让所有软件开发人员感到最恐怖的事情之一。因为在多数情况下,对非功能性需求的变更都会演变成一个对系统无休止的修改过程,最终会把客户和开发团队都拖进泥潭而难以自拔。
需求变更本应是客户的权力,如果确是需要变更,当然要满足客户需要。但问题是不能让变更权力滥用,把一些无关痛痒的非功能性需求变更宠惯养成堂而皇之的变更。对于非功能性需求客户总会有新的想法,项目好像总没有办法终结。以前当出现这种情况时,我总觉得很沮丧,觉得自己非常不幸,怎样会碰上这样的客户。可在读了《设计模式精解(Design Patterns Explained)》一书的一段话后,我恍然大悟,这不是我的错,世界原来就是这样子的啊,永远不变的就是变化。
令人烦恼的非功能性需求变更
在软件开发中,大家都会遇到过这样的问题:客户的一个新想法,就推翻了之前与客户经过再三讨论而确认定下来的需求。如果是功能性需求变更还会让人容易接受一些,毕竟功能性需求 ...
软件开发的成败更多的是在于人,而不是技术。当从大学毕业时,我以为,只有精通了各种技术才能成为一名伟大的程序员,以为人件管理技术是经理们的专属领地。但事实却给我好好的上了一堂课。经常我能听到有人说人件管理技术是学不到的,是一种天份,对这种观点我不敢苟同。
没有人能生来就带有某种技能,我们都是通过观察和模仿(我们的偶像)来学习。你也许通过读书得到了这方面的一些知识,但是,我记得一句老话,我十几岁时读过的一本书的封面上印着它:“生活从书本中学不来,只能靠自己去感受。”
如果你感觉在处理人际交往方面有困难,那么,唯一的方法是去观察,去学习。就这么简单。即使你现在不是一个团队首领,没有带领任何人,学习如何做一个领袖也是;得去做的事,在我们这样一个以人为本的产业里尤其是这样。
虽然跟优秀的团队首领交往能给人非常好的感觉,但糟糕的团队首领却能凸显出领导能力的真正价。我很幸运有过这样的经历,我有机会接触了不少十分糟糕的团队首领——你可以想象他们有多糟。下面我们就来看看好的团队首领和不好的团队首领之间的对比。
不称职的团队首领会让公司破财。如果项目由一个不称职的人带领开发,最终弥补他的过失的成本会比让一 ...
系统架构
未读Wille Faler 提出了八项提升系统可伸缩性和性能的最佳实践,其中包括减少数据库操作、使用缓存、减少网络通信等实践。
1. 减少数据库操作 - 尽可能远离数据库。如无必要,就不要打开数据库连接或者启动事务。
2. 缓存带来的显著变化 - 缓存能极大地减低数据库的负担,特别是当系统通过只读方式访问数据库的时候。内存缓存优于磁盘缓存,而磁盘缓存又优于远程缓存和关系型数据库。
3. 尽可能缓存粗粒度对象 - 缓存粗粒度对象“可以省去遍历n个缓存单元的CPU开销和时间。而且,获得完整的对象关系图也省去了对象关系图的装配时间。”
4. 不要永久性保存瞬态信息 - 避免在数据库里面存储瞬态数据,比如登录的会话信息。
“状态怪物”是一只非常危险的怪兽。根据一般的规律,在持久性存储设施(数据库、磁盘等)里面只需要保存真实的、必要的、关键的,以及需要备录的业务数据,其他的都不在此列。
5. 位置、位置 - 把东西放在靠近需要使用它们的地方。相对于负载均衡器、Web服务器、应用服务器和数据库多个环节,直接经过负载均衡器和Web服务器从CDN获取数据要快一些,开销也更小。
6. 约束对有限资源的并 ...
“Java™ Desktop 的再介绍”强调了今年的 JavaOne 大会。对于那些抱怨 Swing 太慢、太难使用、界面太难看的开发人员来说,Swing 和 GUI 开发所做的更新努力,并没有带来什么受人欢迎的好消息。如果您最近没有用过 Swing,那么您会很高兴听到其中的许多问题已经得到解决。Swing 被重新设计,它能执行得更好,并能更好地利用 Java 2D API。Swing 的开发者在 1.4 版甚至最新发布的 5.0 版中提高了外观支持。Swing 从没像现在这么好过。
Swing 社区现在需要的是能够让 GUI 开发变成一个更加顺利、更加容易的过程的工具。而这正是本文的目标所在。
本文将介绍 TableModel Free(TMF)框架,这是一个 GUI 开发包,它解除了为每个 JTable 建立 TableModel 的需要(在这篇文章中,我将 TableModel 称为 传统 TableModel,以便将它们与我为该框架引入的新结构区分开来);在处理过程中,能够使您的 JTable 具备更高的可配置性和可维护性。
如果以前曾经用过 JTable,那么您可能也同时被迫 ...
如果你是一名Java开发人员,我能够确定你肯定知道ConcurrentModificationException,它是在使用迭代器遍历集合对象时修改集合对象造成的(并发修改)异常。实际上,Java的集合框架是迭代器设计模式的一个很好的实现。
Java 1.5引入了_java.util.concurrent_包,其中Collection类的实现允许在运行过程中修改集合对象。
_ConcurrentHashMap_是一个与HashMap很相似的类,但是它支持在运行时修改集合对象。
让我们通过一个简单的程序来帮助理解:
ConcurrentHashMapExample.java
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647package com.journaldev.util;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.concurre ...
java
未读Java反模式该页面收集了一些不好的代码,对于初学者来说看起来似乎并不那么糟糕。初学者经常在语言语法上挣扎。他们对标准JDK类库以及如何最好地利用它也不了解。实际上,我已经从日常初级代码中收集了所有示例。我已经修改了原始代码,为它提供了示例字符,从而突出了问题所在。SonarQube可以很容易地发现许多这些问题。我强烈推荐此工具。
其中一些可能看起来像微优化,不带概要分析的过早优化或恒定因子优化。但是,在成千上万个这样的小地方浪费的性能和内存很快就会累积起来,并将使应用程序变得越来越困难。当我说应用程序时,我指的是在应用程序服务器上运行的服务器端应用程序。那就是我的生计。在桌面GUI应用程序上,情况可能没有那么糟。但是,运行客户端Java应用程序的唯一相关平台是什么?安卓 具有非常有限的资源(内存!)的嵌入式平台。在这里,即使恒定因子优化也能很快获得回报。就像遍历数组而不是列表一样。
如果您对如何友好地绘制图感兴趣,请查看 JDK Performance Wiki。
最后,您的应用程序的很多性能取决于代码的整体质量。顺便说一句,您永远不要低估内存占用的重要性。我不能那么强调。我看到 ...
java基础
未读表面上看起来,无论语法还是应用的环境(比如容器类),泛型类型(或者泛型)都类似于 C++ 中的模板。但是这种相似性仅限于表面,Java 语言中的泛型基本上完全在编译器中实现,由编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码。这种实现技术称为 擦除(erasure)(编译器使用泛型类型信息保证类型安全,然后在生成字节码之前将其清除),这项技术有一些奇怪,并且有时会带来一些令人迷惑的后果。虽然范型是 Java 类走向类型安全的一大步,但是在学习使用泛型的过程中几乎肯定会遇到头痛(有时候让人无法忍受)的问题。
***注意:*本文假设您对 JDK 5.0 中的范型有基本的了解。
泛型不是协变的虽然将集合看作是数组的抽象会有所帮助,但是数组还有一些集合不具备的特殊性质。Java 语言中的数组是协变的(covariant),也就是说,如果 Integer扩展了 Number(事实也是如此),那么不仅 Integer是 Number,而且 Integer[]也是 Number[],在要求 Number[]的地方完全可以传递或者赋予 Integer[]。(更正式地说,如果 Number是 ...
本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java。这类文章网上有很多,但大多比较零碎。本文从认知过程角度出发,将带给读者一个系统的介绍。
进入正题前首先要知道的是Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性,由此可见JVM的重要性。所以在学习Java内存分配原理的时候一定要牢记这一切都是在JVM中进行的,JVM是内存分配原理的基础与前提。
简单通俗的讲,一个完整的Java程序运行过程会涉及以下内存区域:
l 寄存器: JVM内部虚拟寄存器,存取速度非常快,程序不可控制。
l 栈:保存局部变量的值,包括:1.用来保存基本数据类型的值;2.保存类的实例,即堆区对象的引用(指针)。也可以用来保存加载方法时的帧。
l 堆:用来存放动态产生的数据,比如new出来的对象。注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因为同一个类的对象拥有各自的成员变量,存储在各自的堆中,但是他们共享该类的方法,并不是每创建一个 ...
当我开始我的Java职业生涯的时候,对于我来说正则表达式简直是个是梦魇。本教程旨在帮助你驾驭Java正则表达式,同时也帮助我复习正则表达式。
什么是正则表达式?正则表达式定义了字符串的模式。正则表达式可以用来搜索、编辑或处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。Java正则表达式和Perl的是最为相似的。
Java正则表达式的类在 java.util.regex 包中,包括三个类:Pattern,Matcher 和 PatternSyntaxException。
Pattern对象是正则表达式的已编译版本。他没有任何公共构造器,我们通过传递一个正则表达式参数给公共静态方法 compile 来创建一个pattern对象。
Matcher是用来匹配输入字符串和创建的 pattern 对象的正则引擎对象。这个类没有任何公共构造器,我们用patten对象的matcher方法,使用输入字符串作为参数来获得一个Matcher对象。然后使用matches方法,通过返回的布尔值判断输入字符串是否与正则匹配。
如果正则表达式语法不正确将抛出PatternSyntaxEx ...
