前言基于 Swing 的富客户端开发在企业级应用开发中占据了重要的地位,而可视化开发工具尽管提高了 Swing 的开发效率,却降低了程序的可维护性。在此情况下,诸多 Swing 开发框架应运而生,Spring Richclient 便是其中一个。作为 Spring 的子项目,Spring Richclient 承袭了 Spring 对企业级应用的支持。通过 Spring 容器,Spring Richclient 将各种客户端组件以松耦合的方式组织到一起,大大增加了应用程序的灵活性。同时,Spring Richclient 对 Swing 控件进行了优雅的封装,大大提高了 Swing UI 的开发效率。在本系列的第 1 部分中,我将向您介绍如何使用 Spring Richclient 快速搭建 Swing 富客户端应用。
环境搭建首先您需要下载 Spring Richclient 相关发布包以及依赖库(查看参考资料),Spring Richclient 的最新版本为 1.1.0,由于 Spring Richclient 从 1.0 开始接口变化较大,建议您下载最新版本进行开发。
解压后, ...
常见的数据结构有数组、链表,还有一种结构也很常见,那就是树。前面介绍的集合类有基于数组的ArrayList,有基于链表的LinkedList,还有链表和数组结合的HashMap,今天介绍基于树的TreeMap。 TreeMap基于红黑树(点击查看树、红黑树相关内容)实现。查看“键”或“键值对”时,它们会被排序(次序由Comparable或Comparator决定)。TreeMap的特点在于,所得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。
常见的数据结构有数组、链表,还有一种结构也很常见,那就是树。前面介绍的集合类有基于数组的ArrayList,有基于链表的LinkedList,还有链表和数组结合的HashMap,今天介绍基于树的TreeMap。
TreeMap基于红黑树(点击查看树、红黑树相关内容)实现。查看“键”或“键值对”时,它们会被排序(次序由Comparable或Comparator决定)。TreeMap的特点在于,所得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可 ...
内核专家 Bryan Cantrill 和 Jeff Bonwick 在 2008 年 9 月的《ACM Queue》上发表了《Real-world Concurrency》 一文,提出了 15 条并发编程的建议。
内核专家 Bryan Cantrill 和 Jeff Bonwick 在 2008 年 9 月的《ACM Queue》上发表了《Real-world Concurrency》 一文,提出了 15 条并发编程的建议,这里简单摘录如下。
1. Know your cold paths from your hot paths. 弄清楚代码里的热门执行路径和冷门执行路径。
对冷门路径,用粗粒度的锁即可。对热门路径——也就是那些必须高度并发才能实现所期望的高吞吐量的代码,应该更加小心,加锁的策略必须简单明了且细粒度。
2. Intuition is frequently wrong—be data intensive. 直觉常常是错的,要靠数据说话。
【陈硕】比如线程切换到底有多大开销,普通 mutex 加锁到底有多大代价,系统调用的开销如何,gettimeofday() 在 x86 ...
java
未读以下是Java应用在运行时常见的一些问题,总结了运行时黑盒方式的一些排查方法,也希望看到的同学能给予补充,无论是补充碰到的问题,还是补充解决方法。
类装载的相关问题写过Java代码的同学估计都碰到过ClassNotFoundException/NoClassDefFoundError/NoSuchMethodException(还有一个常见的ClassCastException就不在这里说了)。
当碰到ClassNotFoundException/NoClassDefFound时,如果很确定这个class应该是从哪个路径装载的,则可以去相应的路径找下是否有对应的class文件存在,例如web应用通常会在*.war(ear)/WEB-INF/lib或classes目录下,对于lib下的jar包,可通过写个小脚本jar -tvf的方式找找;如不确定class是从哪装载的,则可以先看看日志里是否有堆栈信息,如果有的话则可以看到具体是哪个ClassLoader实现在装载class,之后则可以通过www.grepcode.com或jar包反编译( ...
摘要: 不同的公司环境会培养出不同的员工,程序员也不例外,由于大公司的开发框架十分成熟,稳定,而且充满盈利能力,所以开发者容易陷入拿来主义思维,而底层代码的编写能力正在逐渐退化。
前段时间,@developerworks在微博上向大家推荐了一篇引人深思的文章《程序员困境》,这篇文章的作者描述了在招聘内核程序员时所遇到的一个现象,一些来自大公司的“高级”程序员,却连最简单最基本的问题都无法回答,这不禁引发了作者的思考,下面是笔者的简译:
最近,我为招聘内核程序员而面试了数万个应聘者,有一些是来自有名的大公司,比如非常有名的芯片/嵌入式系统开发公司。许多人的简历制作的非常完美——涉及的各种项目、获得的各种奖项等,并有一些人声称,他们在内核研发上有10多年的工作经验,然而,令人惊奇地是,他们却无法回答一些基本的问题:当调用标准的malloc函数时,内核发生了什么?
别吃惊,当我让一个应聘者编写一个基于glib哈希函数的LRU缓存框架时,他首先声称自己从未使用过glib,于是我向他演示glib哈希API页面,并且详细地解释,然而一个小时后,他只写了几行凌乱的代码。我不知道在其它国家 ...
每当我们想连续两次做同样的事情时—我们会尝试想一个方法来自动完成此过程。每当你写的代码是完成同样的一件事时,你会开始寻找一个库;每当你启动一个类似的项目时,你会去寻找一个模板。
可能除了哲学家以外,我认为程 序员是最懒的一群人。他们的职业看起来又似乎有一定的劳动强度。
想想看,生物学家要亲自做所有的实验…给数百只小白鼠注射药物不可能自动完成。医生必须给病人进行身体检查;教授每年都要教授同样的课程;建筑师从各个角度制定方案,并手工地将方案一笔一划绘制出来。
让我们再来看看更为辛苦的一些职业,情况更糟。
营销人员要不断重复地进行同样的产品宣传;理发师日复一日地做着同样的事情;收营员每天都以相同的方式对货物进行结算…工厂工人…
你面前呈现出了一幅图片,世界上有很多这样的人,他们每一小时,每一天,每一年,有些甚至一辈子都在重复做着几乎相同的事情。
来看看程 序员
每当我们想连续两次做同样的事情时—我们会尝试想一个方法来自动完成此过程。每当你写的代码是完成同样的一件事时,你会开始寻找一个库;每当你启动一个类似的项目时,你会去寻找一个模板。
程序员的生活就是致力于消除重复的工作。
将琐碎地任务从 ...
StackOverflow 上有位网友(xenoterracide)提问:
我正试着搜集整理一个可在网上免费阅读的计算机编程书籍列表。这些书可以是某种特定编程语言,也可以计算机方面通用书籍。网上有哪些免费可用的书籍呢?
下面是一些网友在回复中的推荐资源,其中有视频、大学课程、编程语言教程网站,由伯乐在线整理编译。
一、George Stocker 提供了一大串,分类如下:
How to Design Programs: An Introduction to Computing and Programming
25 Free Computer Science Ebooks
Free Tech Books
MindView Inc
Wikibooks: Programming
Cheat Sheets (Free)
CodePlex List of Free E-Books
Book Training – On Video!
Sofware Program Managers Network – Free EBooks
EBook Share @ linbai.info
FreeB ...
释义
前缀表达式就是前序表达式。
前缀表达式就是不含括号的算术表达式,而且它是将运算符写在前面,操作数写在后面的表达式,为纪念其发明者波兰数学家Jan Lukasiewicz也称为“波兰式”。例如,- 1 + 2 3,它等价于1-(2+3)。
2求值方法对于一个前缀表达式的求值而言,首先要从右至左扫描表达式,从右边第一个字符开始判断,如果当前字符是数字则一直到数字串的末尾再记录下来,如果是运算符,则将右边离得最近的两个“数字串”作相应的运算,以此作为一个新的“数字串”并记录下来。一直扫描到表达式的最左端时,最后运算的值也就是表达式的值。例如,前缀表达式“- 1 + 2 3“的求值,扫描到3时,记录下这个数字串,扫描到2时,记录下这个数字串,当扫描到+时,将+右移做相邻两数字串的运算符,记为2+3,结果为5,记录下这个新数字串,并继续向左扫描,扫描到1时,记录下这个数字串,扫描到-时,将-右移做相邻两数字串的运算符,记为1-5,结果为-4,所以表达式的值为-4。
3公式用法前缀表达式是一种十分有用的表达式,它将中缀表达式转换为可以依靠简单的操作就能得到运算结果的表达式。例如,(a+b ...
有一对兄弟,他们的家住在80层楼上。有一天他们外出旅行回家,发现大楼停电了!虽然他们背着大包的行李,但看来没有什么别的选择,于是哥哥对弟弟说,我们就爬楼梯上去!于是,他们背着两大包行李开始爬楼梯。爬到20楼的时候他们开始累了,哥哥说“包包太重了,不如这样吧,我们把包包放在这里,等来电后坐电梯来拿。”于是,他们把行李放在了20楼,轻松多了,继续向上爬。
他们有说有笑地往上爬,但是好景不长,到了40楼,两人实在累了。想到还只爬了一半,两人开始互相埋怨,指责对方不注意大楼的停电公告,才会落得如此下场。他们边吵边爬,就这样一路爬到了60楼。到了60楼,他们累得连吵架的力气也没有了。弟弟对哥哥说,“我们不要吵了,爬完它吧。”于是他们默默地继续爬楼,终于80楼到了!兴奋地来到家门口兄弟俩才发现他们的钥匙留在了20楼的包包里了。
有人说,这个故事其实就是反映了我们的人生:20岁之前,我们活在家人、老师的期望之下,背负着很多的压力、包袱,自己也不够成熟、能力不足,因此步履难免不稳。20岁之后,离开了众人的压力,卸下了包袱,开始全力以赴地追求自己的梦想,就这样愉快地过了20年。可是到了40岁 ...
系统架构
未读为什么越来越多的企业应用开发正在转向组件框架和解决方案?组件架构是否有前途?我相信答案是肯定的,而且很快所有开发框架都将会是基于组件的——这是近在眼前的事情。下面让我来向你揭示这一切的原因。
你怎么来建设你的房子?一般你会从砌块开始。我们可以将构建 Web 应用与构建你的乡间小屋进行对比。你能够快速构建一个非常好看的应用,而且它具有所有必需的功能。同样,在你的房子里面,每一间房间都是针对具体的需求来创建的,例如厨房、起居室、卧室或浴室。房子的布局使你能够通过走廊和楼梯很方便地在房间之间移动。
现在你能够做得更好,而且能够承担建设一座更大更好的房子的投入——你也许希望拥有桑拿房、游泳池、影院以及一座满是爬行动物的巨大的水族馆☺。但要想改变房子的设计却是件非常困难的事情。若要添加额外的设施,房子最终看起来也许就不那么漂亮了。此外,由于你添加的这些设施必须放在不太方便的位置,它们也会影响房子使用的便利性,例如你必须穿过主卧室才能进入台球室。
最后,你那漂亮又整洁的房子将拥有一堆不同的功能,但它会变得笨拙又不舒适。同样的道理也适用于应用开发。
问题是,有没有可能设计一款应用,能够根据你的需求成 ...
