spring
未读什么是 Spring 视图和视图解析器Spring MVC(Model View Controller)是 Spring 中一个重要的组成部分,而 Spring 视图和视图解析器则是 Spring MVC 中的组成部分。在介绍 Spring 视图和视图解析器前,我们先了解下在 Spring MVC 框架中,一个 Web 请求所需经历的六个阶段:
请求会首先被 Spring MVC 的前端请求分发器(Dispatcher)拦截。该拦截器是一个 Servlet, 需要在 web.xml 中配置,所有符合所配置的 URL 样式的访问请求,将都会被该拦截器拦截。Spring 提供了默认的分发器 org.springframework.web.servlet.DispatcherServlet,您可以根据需要,决定是否需要定制自己的分发器。
在接收到访问请求后,分发器会根据开发人员在 Spring 配置文件或代码中的注解(Annotation),来查找合适的控制器。
分发器在查找到合适的控制器后,将请求转交给该控制器处理。
通常,控制器会调用相应服务类来处理业务逻辑,在将请求处理后,控制器需返 ...
前言 主要强调了两个内容,一个是要相信自己,一个是要压制自己浮躁的心理。这两点都是非常重要的,倘若做不到这两点,那么在你学习的过程的当中,很有可能会碰到各种各样的问题。
比如第一点相信自己,我们主要强调的是不要攀比。试想如果你做不到这一点,在你正奋力的学习的时候,忽然发现身边的一个朋友或者同事,在你认为不应该超越自己的时候,工资忽然翻了一倍远超于你,这时候你就很可能被这些事情所影响。其实若是你不够相信自己,容易去攀比的话,那么浮躁的心理就很容易产生。
总而言之,心态很重要,非常重要,请各位准备破釜沉舟,背水一战的猿友一定要先调整好自己的心态。调整好心态以后,我们就该去付诸于实践了,也就是真正的行动起来,去进行自己的学习之旅。
对象范围 这里讨论的对象首先需要满足一点,那就是你是一个有上进心的人,倘若你的生活态度就是得过且过,吃饱喝足即可,那么本篇文章可能不太适合你。当然,这种态度没什么错,个人有个人的生活和工作上的追求,只要开心快乐,都是可取的。
本文的适读对象要满足的第二点,就是你确实有足够的上进心,但却总是因为各种各样的原因打断自己的学习,导致自己的学习效果不太理想 ...
也许你是一位项目经理,也许你是一位项目骨干成员,或者开发小组长。在我发表“如何提高代码质量”的这一系统文章后,有许多网友都向我抱怨,说他无法把握整个项目组成员的代码质量。我想,这也是所有项目组普遍存在的问题吧,它通常表现为以下几个问题:
软件项目普遍存在的问题1)新手。任何项目组成员都不可避免地出现新手,他们往往是刚刚从大学毕业的学生。这些新手由于软件开发时间太短,往往技术不成熟,没有形成良好的开发习惯,所以编写代码质量较差,问题很多。他们常常成为项目组的“鸡肋”,用多了项目质量无法得到保证,不用则又人手不够。
2)人员变动。一个维护时间稍长一点儿的软件项目,人员变动是在所难免的。老员工被调动到其它项目去了,由新员工来接替他们的工作。在我的项目组中,人员调动达到了90%,唯一没有调走的就是我自己。新员工在接替老员工进行代码维护,甚至继续进行新的开发的时,由于对原有代码以及设计思路理解的偏差,也会出现大量的低劣代码。
3)不规范的代码编写。即使除去以上两个问题的影响,项目组成员编写的代码同样会出现问题。在项目开发之初,我们往往会制定一个代码编写的规范,但在项目开发过程中,许多成员往往会忽 ...
大数据时代,什么都跟数据密不可分。觉得追女生是一件不需要科学的东西?那你就错了。微软数据视界近期就通过多组数据分析来告诉大家,如果能够发现这些数据的奥秘,对于你是否能够逆袭摆脱单身是很关键的。
在校的男同学们怎么追女同学:
对于已经不是学生的你,看了上面的数学公式或许会感到头大,别郁闷,还有适用于更广泛人群的数据呢。
怎么用数据追女神:
谁说宅在家里打游戏注定孤独一生?网游其实比婚恋网站更靠谱!数据证明,网游玩家比婚恋网站用户群大,在线时间更长,异性之间相互交流更多,而且网游上的男人更有魅力。关于网游,还有很多你没想到的,看看下面的信息图表(尤其是给家长们看看),然后一边尽情打网游,一边尽情把妹吧!
辛辛苦苦的熬了几个月,软件开发终于快要告一段落了。系统功能已经基本完成了,在准备按部就班的完成最后的测试时,客户突然提出要改变某些非功能性需求。这对于软件开发团队来说,不亚于晴天惊雷,这也是让所有软件开发人员感到最恐怖的事情之一。因为在多数情况下,对非功能性需求的变更都会演变成一个对系统无休止的修改过程,最终会把客户和开发团队都拖进泥潭而难以自拔。
需求变更本应是客户的权力,如果确是需要变更,当然要满足客户需要。但问题是不能让变更权力滥用,把一些无关痛痒的非功能性需求变更宠惯养成堂而皇之的变更。对于非功能性需求客户总会有新的想法,项目好像总没有办法终结。以前当出现这种情况时,我总觉得很沮丧,觉得自己非常不幸,怎样会碰上这样的客户。可在读了《设计模式精解(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。
最后,您的应用程序的很多性能取决于代码的整体质量。顺便说一句,您永远不要低估内存占用的重要性。我不能那么强调。我看到 ...
