社区服务 统计排行 帮助
  • 2570阅读
  • 27回复

植发后多久会见到效果

楼层直达
级别: 风云使者
只看该作者 10楼 发表于: 2017-11-07
Java反射机制,速度提高1000倍
引用原文:Java Reflection, 1000x Faster
作者: aka Nicolas Laurent
译者: Teixeira10
译者注:在本文中,作者例举了几个版本的代码,利用java发射机制,逐步提高代码运行速度,同时将Github上的代码进行展示。以下为译文:
几个星期前,我想让我的代码运行快1000倍,同时不改变复杂度,正如标题所说的,使用Java反射机制,可以让代码运行得更快。
首先来解释一下为什么会首先使用反射机制。
我有一个接口(表示一个树节点)和一个实现这个接口的大量类(100 )。诀窍在于,树是异构的,每个节点类型可以有不同数量的子节点,或者以不同的方式存储它们。
我需要让代码能够在这样的组合树上运行起来。简单的方法是简单地向接口添加一个children()方法 西安seo,并在每个节点中实现它。当然,这很繁琐,也很乏味。
相反,我注意到所有的子节点都是直接的字段,或者聚集在包含节点集合的字段中。所以可以用反射的方式写一小段代码,这也对每一个节点都适用 西安web前端培训!
我已经在Github上放了一个简化版的代码。我会把相关的部分联系起来。
初始化代码
这是我提出的第一版本代码:WalkerDemoSlowest.java。
它相当简单:获取节点类的方法,过滤掉那些不是getter的方法,然后只考虑返回节点或节点集合。调用这些方法,并在子节点上递归地调用walk方法。
如果我说这样的进展很慢,有人会感到惊讶吗?
缓存
有一个简单的调整,可以使它更快:使用缓存方法查找。
下面是缓存版本:WalkerDemoSlow.java
这和每个实现节点的类都是一样的,创建一个ClassData对象来缓存所有相关的getter方法,所以只需要查找一次,这会产生一个令人满意的10倍加速。
LambdaMetafactory 奇迹
不幸的是,这仍然太慢了。所以我向谷歌寻求帮助,发现了一个很有用的StackOverflow社区。
有答案建议使用LambdaMetafactory,这是一个标准的库类,它支持lambda语法调用。
细节在我看来有些模糊,但似乎通过使用这些工具,可以在代码中“打开编译器”,并优化反射机制来进行本机调用。这就是一种假设。
这是代码:walkerdemofast.java
现在,我的代码可以做到100倍的加速。然而,在写这篇文章的时候,想用一些代码片段来演示这个效果,但是没有成功。我试着给接口实现3个子类,并使用一些伪方法进行过滤,但还是没有效果。第二版和第三版的代码运行速度差不多。
我重新检查了原来的代码,一切看起来都很好。在原始代码中,树是通过解析一些源文件得到的抽象语法树(AST)。如果限制了前14个源文件的输入,我发现会得到不同的结果。
这些文件相对较短(几乎没有10行),语法简单。但仅仅有这些,第二和第三版代码仍会以同样的速度运行 疯狂极客培训怎么样。但是在第15个文件中进行输入(少于100行),那么第二个版本的代码会花费36秒,而第三个版本代码会在0.2秒内完成,这是700倍的差异。
我的假设是,如果场景足够简单,优化器会注意到正在运行的代码并选择离开。在更复杂的情况下,它会耗尽优化预算,然后回到未优化的版本以及糟糕的性能状态。但是,优化器已经足够灵活,如果有一个能击败它的示例,那似乎是非常成功的。
LambdaMetafactory可能性
我有点好奇LambdaMetafactory会有什么样的可能性。在我的示例中,它会产生奇迹,因为反射调用比简单的缓存查找要昂贵得多。但它是否也能对常规代码进行优化处理呢?这似乎不太可能让megamorphic call sites提供帮助,因为编译的方法必须以某种方式检索,而查找的成本将使收益相形见绌。
但是,如何在运行组合代码时进行优化呢?可以提供数据结构,或者为数据结构提供解释器,并使用LambdaMetafactory“编译”它们。这是否足够智能呢,可以对给定数据结构的代码进行部分评估,从而将解释器转换成等价的“plain”代码?
顺便说一下,这正是Truffle框架所采用的方法,它在Graal VM上运行,所以这个想法肯定有一定的意义。可能暂时无法使用当前的JVM,因此需要修改GraalVM。
在任何情况下,都会尽量使一些功能成为一个库,可以在“常规程序”(非编译器)中使用。编写简单的解释器通常是解决一些问题的最简单方法。
相关的主题文章:

  
   [url=http://goeasily.com/read.php?tid=230
级别: 风云使者
只看该作者 11楼 发表于: 2017-11-08
9个最佳的大数据处理编程语言
引用文章来自:CSDN大数据
西安java培训
大数据的浪潮仍在继续。它渗透到了几乎所有的行业,信息像洪水一样地席卷企业,使得软件越发庞然大物,比如Excel看上去就变得越来越笨拙。数据处理不再无足轻重,并且对精密分析和强大又实时处理的需要变得前所未有的巨大。
那么,在巨大的数据集中进行筛选的最好工具是什么?通过和数据骇客的交流,我们知道了他们用于硬核数据分析最喜欢的语言和工具包。
R语言
在这些语言名单中,如果R语言排第二,那就没其他能排第一。自1997年以来,作为昂贵的统计软件,如Matlab和SAS的免费替代品,它渐渐风靡全球。
在过去的几年时间中,R语言已经成为了数据科学的宠儿——数据科学现在不仅仅在书呆子一样的统计学家中人尽皆知,而且也为华尔街交易员,生物学家,和硅谷开发者所家喻户晓。各种行业的公司,例如Google,Facebook,美国银行,以及纽约时报都使用R语言,R语言正在商业用途上持续蔓延和扩散。
R语言有着简单而明显的吸引力。使用R语言,只需要短短的几行代码,你就可以在复杂的数据集中筛选,通过先进的建模函数处理数据,以及创建平整的图形来代表数字。它被比喻为是Excel的一个极度活跃版本。
R语言最伟大的资本是已围绕它开发的充满活力的生态系统:R语言社区总是在不断地添加新的软件包和功能到它已经相当丰富的功能集中。据估计,超过200万的人使用R语言,并且最近的一次投票表明,R语言是迄今为止在科学数据中最流行的语言,被61%的受访者使用(其次是Python,39%) 西安sem培训
此外,它的身影也渐渐出现在了华尔街。以前,银行分析师会全神贯注于Excel文件直到深夜,但现在R语言被越来越多地用于金融建模R,特别是作为一种可视化工具,Niall O’Connor,美国银行的副总裁如是说。 “R语言使我们平凡的表格与众不同,”他说。
R语言的日渐成熟,使得它成为了数据建模的首选语言,虽然当企业需要生产大型产品时它的能力会变得有限,也有的人说这是因为它的地位正在被其他语言篡夺。
“R更适合于做一个草图和大概,而不是详细的构建,”Michael Driscoll,Metamarkets的首席执行官说。 “你不会在谷歌的网页排名以及Facebook的朋友推荐算法的核心找到R语言。工程师会用R语言做原型,然后移交给用Java或Python写的模型。”
话说回来,早在2010年,Paul Butler就以R语言打造了全球的Facebook地图而著名,这证明了该语言丰富的可视化功能。尽管他现在已经不像以前那样频繁地使用R语言了。
“R正在一点点地过时,因为它的缓慢和处理大型数据集的笨重,”Butler说。
那么,他使用什么代替呢?请继续阅往下看。
Python
如果说R语言是一个神经质又可爱的高手,那么Python是它随和又灵活的表兄弟。作为一种结合了R语言快速对复杂数据进行挖掘的能力并构建产品的更实用语言,Python迅速得到了主流的吸引力。Python是直观的,并且比R语言更易于学习,以及它的生态系统近年来急剧增长,使得它更能够用于先前为R语言保留的统计分析。
“这是这个行业的进步。在过去的两年时间中,从R语言到Python已经发生了非常明显的转变,”Butler说。
在数据处理中,在规模和复杂性之间往往会有一个权衡,于是Python成为了一种折中方案。IPython notebook和NumPy可以用作轻便工作的一种暂存器,而Python可以作为中等规模数据处理的强大工具。丰富的数据社区,也是Python的优势,因为可以提供了大量的工具包和功能。
美国银行使用Python在银行的基础架构中构建新的产品和接口,同时也用Python处理财务数据。“Python广泛而灵活,因此人们趋之若鹜,”O’Donnell说。
不过,它并非最高性能的语言,只能偶尔用于大规模的核心基础设施,Driscoll这样说道。
Julia
虽然当前的数据科学绝大多数是通过R语言,Python,Java,MatLab和SAS执行的。但依然有其他的语言存活于夹缝中,Julia就是值得一看的后起之秀。
业界普遍认为Julia过于晦涩难懂。但数据骇客在谈到它取代R和Python的潜力时会不由得眉飞色舞。Julia是一种高层次的,极度快速的表达性语言。它比R语言快,比Python更可扩展,且相当简单易学。
“它正在一步步成长。最终,使用Julia,你就能够办到任何用R和Python可以做到的事情,”Butler说。
但是至今为止,年轻人对Julia依然犹豫不前。Julia数据社区还处于早期阶段,要能够和R语言和Python竞争,它还需要添加更多的软件包和工具。
“它还很年轻,但它正在掀起浪潮并且非常有前途,”Driscoll说。
JAVA
Java,以及基于Java的框架,被发现俨然成为了硅谷最大的那些高科技公司的骨骼支架。 “如果你去看Twitter,LinkedIn和Facebook,那么你会发现,Java是它们所有数据工程基础设施的基础语言,”Driscoll说。
Java不能提供R和Python同样质量的可视化,并且它并非统计建模的最佳选择。但是,如果你移动到过去的原型制作并需要建立大型系统,那么Java往往是你的最佳选择。
Hadoop和Hive
一群基于Java的工具被开发出来以满足数据处理的巨大需求。Hadoop作为首选的基于Java的框架用于批处理数据已经点燃了大家的热情。Hadoop比其他一些处理工具慢,但它出奇的准确,因此被广泛用于后端分析。它和Hive——一个基于查询并且运行在顶部的框架可以很好地结对工作。
Scala
Scala是另一种基于Java的语言,并且和Java相同的是,它正日益成为大规模机器学习,或构建高层次算法的工具。它富有表现力,并且还能够构建健壮的系统。
“Java就像是建造时的钢铁,而Scala则像黏土,因为你之后可以将之放入窑内转变成钢铁,”Driscoll说。
Kafka和Storm
那么,当你需要快速实时的分析时又该怎么办呢?Kafka会成为你的好朋友。它大概5年前就已经出现了,但是直到最近才成为流处理的流行框架。
Kafka,诞生于LinkedIn内部,是一个超快速的查询消息系统。Kafka的缺点?好吧,它太快了。在实时操作时会导致自身出错,并且偶尔地会遗漏东西。
“有精度和速度之间有一个权衡,”Driscoll说, “因此,硅谷所有的大型高科技公司都会使用两条管道:Kafka或Storm用于实时处理,然后Hadoop用于批处理系统,此时虽然是缓慢的但超级准确。”
Storm是用Scala编写的另一个框架,它在硅谷中因为流处理而受到了大量的青睐。它被Twitter纳入其中,勿庸置疑的,这样一来,Twitter就能在快速事件处理中得到巨大的裨益。
鼓励奖:
?MatLab
MatLab一直以来长盛不衰,尽管它要价不菲,但它仍然被广泛使用在一些非常特殊的领域:研究密集型机器学习,信号处理,图像识别,仅举几例。
西安web前端培训?Octave
Octave和MatLab非常相似,但它是免费的。不过,它在学术性信号处理圈子之外很少见到。
?GO
GO是另一个正在掀起浪潮的后起之秀。它由Google开发,从C语言松散地派生,并在构建健壮基础设施上,正在赢得竞争对手,例如Java和Python的份额。
相关的主题文章:

  
   Java 开源博客 Solo 2.4.0 发布
  
   北京蘑菇装修与爱空间装修哪个好
级别: 风云使者
只看该作者 12楼 发表于: 2017-11-08
Java 9的JDK中值得期待的:不仅仅是模块化
引用原文:What to expect in Java 9’s JDK: More than modularity
作者:Paul Krill
译者:Teixeira10
【译者注】在本文中,作者介绍了即将在9.21发布的Java 9新特性,除了最重要的模块化以外,还涉及到编译,工具,协议,缓存等新特点,也提及了在此次版本中移除的功能,供Java爱好者阅读和参考。
以下为译文:
在多次延期后,Java 9将于9月21日以Java开发工具包9的形式出现,这是自2014年3月以来,Java标准版的第一次重大升级。官方列出了JDK 9的大约90个新特性,模块化是最主要的一个。将Java重新配置成模块化格式,这项任务已经持续了多年,但在编译、代码缓存和JavaScript部署等领域也会有其他改进。
JDK 9的Java平台模块系统
Java 9最宝贵的特性,即模块化——以Java平台模块系统的形式——旨在将JDK分为运行、编译或构建时的一组模块。模块化被称为“可传递”的变化,这可以更好地理解跨模块的依赖关系。
Java 9的模块化方面包括应用程序打包、模块化JDK以及将源代码重新组织到模块中。在构建时,构建系统将强化编译模块并加强模块边界。JDK和Java运行环境(JRE)的镜像将被重构,以此来处理模块。同时,JavaFX UI控件和CSS java培训 API也将被模块化。
JDK 9将支持许多配置,可伸缩性、安全性和应用程序性能也会得到改进。将Java简化为小型设备是模块化工作的关键。Java平台模块系统,是Jigsaw项目的一个组件,也将被实现。
通过模块化,开发人员能够更好地为Java SE(标准版)和EE(企业版)构建和维护大型应用程序。但Oracle、IBM、Red Hat和其他公司关于如何在平台上做出彻底改变的问题上存在分歧。该模块系统在5月曾被否定,但在6月进行了第二次投票后,才获得批准。
关于模块化是否会对Java开发人员有着很大的好处,还存在争议,一些专家表示赞成,而另一些专家则不赞同。但不管怎样,Oracle一直在努力实现模块化平台。
为了实现模块化,已经多次延迟了Java 9的发布,因为Oracle一直在尝试更简单地迁移到Java 9,并且计划允许对类路径上的代码进行非法的反向访问,同时JRE会使用它来搜索类和资源文件。此功能将在Java 9之后被禁用。
在Java 9的JDK中编译
Java 9为编译代码提供了几种新功能,其中最主要的功能是提前编译。这个功能仍然处于实验阶段,此功能允许在虚拟机启动之前将Java类编译为本机代码。该特性旨在提高小型和大型应用程序的启动时间,同时对峰值性能几乎没有影响。
即时(JIT)编译器速度很快,但是Java程序已经变得如此之大,以至于JIT需要很长时间才能完全启动,这使得一些Java方法无法编译,性能也越来越弱。提前进行编译是为了解决这些问题。
但Java技术供应商Excelsior的市场总监Dmitry Leskov担心,这种时间上的编译技术还不够成熟,并希望Oracle能在Java 10后再推出更可靠的版本。
Java 9还实现了Oracle智能编译部署的第二阶段。这个特性包括改进javac工具的稳定性和可移植性,以便在JVM(Java虚拟机)能默认使用它。该工具也将被推广,因此它可以用于JDK之外的大型项目。
另一个新的实验,编译特性是java级别的JVM编译器接口(JVMCI)。这个接口允许用Java编写的编译器被JVM用作动态编译器。JVMCI的API提供了访问VM结构、安装编译代码和插入JVM编译系统的机制。
用Java编写的JVM编译器应该需要一个高质量的编译器,它比用C或c  编写的现有编译器更容易维护和改进。另外,现有支持Java编译器的项目有Graal和Metropolis。
新的编译器控制功能旨在控制JVM编译器的细粒度和方法依赖,让开发人员在运行时更改编译器控制选项,而又不会造成性能下降。该工具还可以为JVM编译器错误提供工作区 西安软件开发培训班
Java 9的JDK还将更新javac编译器,这样它就可以编译Java 9程序,以运行在一些Java的旧版本上。
Java 9实现了REPL
Java 9将会有一个read-eval-print loop(REPL)工具——这是Java的另一个长期目标,经过多年的Kulia项目开发之后,在这个版本中它将变得真实。
Java 9的REPL被称为jShell,它交互式地评估声明语句和表达式。开发人员只需输入一些代码,就可以在编译之前获得对程序的反馈。
命令行工具的功能包括结束标签和自动添加所需的终端分号。jShell API允许在IDE和其他工具中使用jShell功能,尽管工具本身并不是IDE。
人们认为,缺乏REPL工具是院校越来越不愿授课Java的一个原因(Python和Scala等语言早就有REPL了)。Scala语言的创始人Martin Odersky质疑Java的REPL的实用性,他说Java是面向语句的,而REPL是面向表达式的。
JDK 9中实行代码缓存分段
JDK 9允许将代码缓存分成几个部分,以提高性能,并允许扩展(比如细粒度的锁)。由于专门的迭代器会跳过非方法代码,所以扫描时间需要被提高。分离非方法、异形和非异形码,提高一些基准测试的执行时间。
Java 9支持更多的标准
Java 9增加了对几个标准的支持。
新的HTTP/2 西安网站建设培训 client API实现了HTTP/2协议,同时升级到Web的核心HTTP协议和WebSocket协议,基于浏览器的交互式通信。新的API可以替代HttpURLConnection API,HttpURLConnection API的问题是它包含已经失效的协议predating HTTP/1,这个太抽象,很难使用。但是,在JDK 9发布时,新的HTTP/2 API仍然处于beta测试阶段。
JDK 9还增加了对HTML5的支持。Javadoc API文档工具功能已经被增强,可以生成HTML5标记。
Java 9还将支持Unicode 8.0编码标准,该标准增加了8000个字符、10个模块和6个脚本。
对于安全性,Java 9为DTLS(数据包传输层安全性协议)添加了一个API。该协议的设计目的是防止在client/server通信中出现窃.听、篡改和消息伪造,这将为客户端和服务器模式提供一个安全模式。
JDK 9获得了更多的JavaScript支持(Nashorn项目)
Nashorn项目是为了能让JavaScript在Java上进行高性能且轻量级的运行,这是在Rhino项目后的Netscape开始进行的。Nashorn项目负责在Java应用程序中嵌入JavaScript。其实在JDK 8中已经为Java提供了一个JavaScript引擎。
JDK 9将包括一个用于ECMAScript语法树的解析器API。API将通过IDE和服务器框架实现ECMAScript代码分析,而不依赖于Nashorn项目的内部实现类。
Java 9弃用和移除了哪些功能
Java 9弃用和移除一些不再流行的特性。其中最主要的是Applet API,它将被弃用。现在,安全浏览器已经取消了对Java浏览器插件的支持,因为这些已经过时了,HTML5的出现也加速了它们的灭亡。开发人员将转向到诸如Java Web Start这样的替代方案,用于在浏览器中启动应用程序或者安装应用程序。同时,appletviewer工具也被弃用了。
Java 9将弃用Concurrent Mark Sweep (CMS)垃圾收集器,并在未来的版本中停止支持它。其目的是加速在HotSpot虚拟机中的其他垃圾收集器的开发。低暂停G1垃圾收集器将是CMS的长期替代品。
与此同时,JDK 8中被弃用的垃圾收集组合将在JDK 9中删除。这之中包括很少使用的组合,如增量CMS、ParNew   SerialOld和DefNew   CMS,因为它们增加了垃圾收集器代码库的额外复杂度。
Java 9还将对import语句进行省略Java警告,以帮助大型代码库清除lint警告。在这些代码库中,对被弃用的功能,还会支持一段时间,而且如果是有目的地要使用一个被弃用的构造,那么导入弃用的构造就不需要发出警告消息。
在启动时通过多个JRE(mJRE)特性选择JRE的功能也被弃用。这种功能很少被使用,因为这会使Java启动器的实现变得更加复杂,并且在JDK 5中首次出现时,它从未被完全地实现。
Oracle正在删除JVM TI(工具接口)hprof(堆分析)代理,它已被JVM取代。jhat工具也被删除了,它已经被高级的堆可视化工具和分析器淘汰了。
相关的主题文章:

  
   Java 9的这一基本功能,你可能从未听过
  
   吉祥物图片 风水吉祥物有哪些
级别: 风云使者
只看该作者 13楼 发表于: 2017-11-08
Spring思维导图,让Spring不再难懂(mvc篇)
写在前面
生活就像海洋,只有意志坚强的人才能到达彼岸。已经很久没有发文章了呀,想必大家都挂念我了,哈哈。温故而知新,今天一起来复习一下spring mvc的内容吧。
spring mvc简介与运行原理
Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。
主要注解
ContextLoaderListener
在讲ContextLoaderListener之前,首先来了解一下web.xml的作用。
而spring mvc启动过程大致分为两个过程:
其中ContextLoaderListener监听器它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成。
ContextLoaderListener在web.xml中的配置
<!-- 配置contextConfigLocation初始化参数 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <!-- 配置ContextLoaderListerner --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
ServletContextListener 接口有两个方法:contextInitialized,contextDestroyed
DispatcherServlet
Spring MVC框架,与其他很多web的MVC框架一样:请求驱动;所有设计都围绕着一个中央Servlet来展开,它负责把所有请求分发到控制器;同时提供其他web应用开发所需要的功能。不过Spring的中央处理器,DispatcherServlet,能做的比这更多。
下图展示了Spring Web MVC的DispatcherServlet处理请求的工作流。熟悉设计模式的朋友会发现,DispatcherServlet应用的其实就是一个“前端控制器”的设计模式(其他很多优秀的web框架也都使用了这个设计模式)。
流程图
spring mvc处理请求的流程.jpg
在web.xml中的配置
<!-- servlet定义 --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
其中
在Spring MVC中,每个DispatcherServlet都持有一个自己的上下文对象WebApplicationContext,它又继承了根(root)WebApplicationContext对象中已经定义的所有bean。这些继承的bean可以在具体的Servlet实例中被重载,在每个Servlet实例中你也可以定义其scope下的新bean。
WebApplicationContext继承自ApplicationContext,它提供了一些web应用经常需要用到的特性。它与普通的ApplicationContext不同的地方在于,它支持主题的解析,并且知道它关联到的是哪个servlet(它持有一个该ServletContext的引用)
spring mvc同时提供了很多特殊的注解,用于处理请求和渲染视图等。DispatcherServlet初始化的过程中会默认使用这些特殊bean进行配置。如果你想指定使用哪个特定的bean,你可以在web应用上下文WebApplicationContext中简单地配置它们。
其中,常用的ViewResolver的配置。以jsp作为视图为例
<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" 西安前端培训 value=".jsp" /> </bean>
配置上传文件限制MultipartResolver
<!-- 西安java 上传限制 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 上传文件大小限制为31M,31*1024*1024 --> <property name="maxUploadSize" value="32505856"/> </bean>
applicationContext.xml中的标签
文件上传
前面说到DispatcherServlet中有个特殊的Bean叫MultipartResolver,可用于限制文件的上传大小等。当解析器MultipartResolver完成处理时,请求便会像其他请求一样被正常流程处理。
表单
<form method="post" action="/form" enctype="multipart/form-data"> <input type="text" name="name"/> <input type="file" name="file"/> <input type="submit"/> </form>
控制器
@RequestMapping(path = "/form", method = RequestMethod.POST) public String handleFormUpload(@RequestParam("name") String name, @RequestParam("file") MultipartFile file) { if (!file.isEmpty()) { byte[] bytes = file.getBytes(); // store the bytes somewhere return "redirect:uploadSuccess"; } return "redirect:uploadFailure"; }
异常处理
先来说下常见的异常处理有几种方式,如下图:
Spring的处理器异常解析器HandlerExceptionResolver接口的实现负责处理各类控制器执行过程中出现的异常。也是上面提到的,是DispatcherServlet中的特殊bean,可以自定义配置处理。
某种程度上讲,HandlerExceptionResolver与你在web应用描述符web.xml文件中能定义的异常映射(exception mapping)很相像,不过它比后者提供了更灵活的方式。比如它能提供异常被抛出时正在执行的是哪个处理器这样的信息。
HandlerExceptionResolver 提供resolveException接口
public interface HandlerExceptionResolver { ModelAndView resolveException( HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex); }
在BaseController中使用 @ExceptionHandler注解处理异常
@ExceptionHandler(Exception.class) public Object exceptionHandler(Exception ex, HttpServletResponse response, HttpServletRequest request) throws IOException { String url = ""; String msg = ex.getMessage(); Object resultModel = null; try { if (ex.getClass() == HttpRequestMethodNotSupportedException.class) { url = "admin/common/500"; System.out.println("--------毛有找到对应方法---------"); } else if (ex.getClass() == ParameterException.class) {//自定义的异常 } else if (ex.getClass() == UnauthorizedException.class) { url = "admin/common/unauth"; System.out.println("--------毛有权限---------"); } String header = req.getHeader("X-Requested-With"); boolean isAjax = "XMLHttpRequest".equalsIgnoreCase(header); String method = 西安seo培训 req.getMethod(); boolean isPost = "POST".equalsIgnoreCase(method); if (isAjax || isPost) { return Message.error(msg); } else { ModelAndView view = new ModelAndView(url); view.addObject("error", msg); view.addObject("class", ex.getClass()); view.addObject("method", request.getRequestURI()); return view; } } catch (Exception exception) { logger.error(exception.getMessage(), exception); return resultModel; } finally { logger.error(msg, ex); ex.printStackTrace(); } }
在web.xml中处理异常
<!-- 默认的错误处理页面 --> <error-page> <error-code>403</error-code> <location>/403.html</location> </error-page> <error-page> <error-code>404</error-code> <location>/404.html</location> </error-page> <!-- 仅仅在调试的时候注视掉,在正式部署的时候不能注释 --><!-- 这样配置也是可以的,表示发生500错误的时候,转到500.jsp页面处理。 --> <error-page> <error-code>500</error-code> <location>/500.html</location> </error-page> <!-- 这样的配置表示如果jsp页面或者servlet发生java.lang.Exception类型(当然包含子类)的异常就会转到500.jsp页面处理。 --> <error-page> <exception-type>java.lang.Exception</exception-type> <location>/500.jsp</location> </error-page> <error-page> <exception-type>java.lang.Throwable</exception-type> <location>/500.jsp</location> </error-page> <!-- 当error-code和exception-type都配置时,exception-type配置的页面优先级高及出现500错误,发生异常Exception时会跳转到500.jsp-->
来一个问题:HandlerExceptionResolver和web.xml中配置的error-page会有冲突吗?
解答:如果resolveException返回了ModelAndView,会优先根据返回值中的页面来显示。不过,resolveException可以返回null,此时则展示web.xml中的error-page的500状态码配置的页面。
当web.xml中有相应的error-page配置,则可以在实现resolveException方法时返回null。
API文档中对返回值的解释:
return a corresponding ModelAndView to forward to, or null for default processing.
写在最后
下篇文章将会写Spring aop的内容,同样以思维导图的方式编写。可视化学习,让java不再难懂。
相关的主题文章:

  
   植发手术失败了怎么办 寻找诱因后才能进行新一轮手术
  
   HTTPS站点如何做才能让百度蜘蛛抓取
级别: 风云使者
只看该作者 14楼 发表于: 2017-11-09
折叠式餐桌优点 可折叠餐桌价格
在当前的市场上,折叠式餐桌可谓花开百样,各表一枝 西安装修公司排名,而越来越多的人选择折叠式餐桌作为的装置材质,可见其受欢迎度。那么接下来就让一起装修网小编带您去看看相关折叠式餐桌的信息,供您参考。
折叠式餐桌优点 可折叠餐桌价格
折叠式餐桌优点
其实这一种餐桌的好处在于,对居室环境的要求不高,哪怕是仅仅只有八九个平米的厨房依旧能够使用,且在使用完毕后便可以折叠起来,放到一边即可根本不会占用更多的空间。当然还有就是折叠式餐桌的好处还有就是这一种餐桌的材料耐用,特别的塑料材料不会担心,且具有较强的耐热的能力,因此,使用这点事餐桌的好处多多 西安室内装修。且还有的餐桌在经过折叠后就变成了学习桌,可以提供给孩子学习以及看报看书。那么折叠式餐桌有何优点?这就是该餐桌的优点!
可折叠餐桌价格
实木家具橡木时尚简约1.1米长方形伸缩可折叠餐桌餐台9172030元
Dyuans折叠桌便携式可折叠餐桌户外摆摊桌子正方形餐桌小户型非实木饭139元
折叠式餐桌优点 可折叠餐桌价格
随着科技的发展和进步,此产品也在不断的改良和提升中 西安装潢公司,此产品是家家户户必备的家居用品。所以大家在购买的时候一定要先了解一下相关折叠式餐桌优点、可折叠餐桌价格资讯。以上内容就是一起网小编给大家提供的相关折叠式餐桌介绍,如果您还想了解更多建材家装资讯,请持续关注一起装修网,我们将会大家提供更多、更新、更专业的装修资讯。
相关的主题文章:

  
   陈红然SEO:电商网站如何拓展长尾词
  
   FreeCMS 1.4发布,开源免费的Java CMS - Web前端 - ITeye资讯
级别: 风云使者
只看该作者 15楼 发表于: 2017-11-09
SEO获取关键词数据的方法
对于seo来说关键词就好比是销售给客户签单,只不过在这里换成跟搜索引擎签单。seo做不好关键词优化,那么很多站内优化比如网站内部用户体验优化,网站内容结构优化等优化成果将会大打折扣,因为就好比销售跟踪客户服务了很久,最终还是没签下单子一样,一切就付诸东流。


可能一直在做行业类型网站,在关键词优化上面比较喜欢挖掘关键词批量可复制的模式。而不像一些小型站点只需要选定某几个核心关键词。那么这就存在一个问题批量复制的模式下挖掘的关键词总不能完全覆盖所有用户的搜索习惯,这个时候就需要我们挖掘那些“漏网之鱼”的关键词进行独立的内容建设了。挖掘关键词就需要数据支持了,没有数据做支持,挖掘就变得没有实际价值了。那关键词数据来源主要有哪些呢?


1.百度指数
西安seo公司





这里的数据都是用户直观的搜索数据,通过这里可以知道一个关键词的日均搜索指数,以及这个关键词所延伸的相关需求的搜索,有了这个就需要我们进行整理制表,归类等其他操作,利用这个平台主要是挖掘用户需求点。其他指数平台同理,比如搜狗指数平台,360指数平台。


2.百度推广关键词挖掘工具


我们知道百度指数一次只能查5个关键词,明显更不上我们优化的需求量,于是我们就会寻找一些辅助工具,有很多辅助工具都做得比较优秀,在这里就不一一举例了,重点想说下的是百度推广工具中的关键词挖掘工具(或者百度推广后台的关键词挖掘工具),因为这个挖掘工具基于的是百度推广平台的数据信息,因此也是指导我们分析关键词优化价值的很好的一个数据源。



怎么获取这个工具就不用多说了,网上很多教程。同理就还有搜狗推旭日广后台,360点睛,谷歌adwords等


3、其他第三方工具关键词挖掘


第三方工具又分两类,一类是基于百度指数平台的工具,一类是基于百度推平台的工具。基于百度指数的比如金花关键词挖掘工具,站长工具关键词挖掘,爱站关键词挖掘,这些工具多是基于百度指数数据的工具,只不过新增加批量的功能,另一类基于百度推广数据的挖掘工具,又可以分2种,一种是基于百度推广关键词工具里面的数据,一种基于同类平台的推广关键词库,比如开眼数据平台中就有对比同行网站的推广关键词词库的功能,能够帮助我们把我们的推广词库跟同行其他网站的词库之间的差异都罗列出来


4、搜索引擎下拉,搜索引擎相关搜索


这里出现的关键词是说明用户关注度比较高的关键词,这里面的数据直接反映出用户的搜索习惯。


5、站内搜索数据


很多网站自己都有独立的检索系统和搜索功能,这个搜索功能是可以进行数据监测的,这个数据源直接放映了来你网站的用户主要是关注什么内容的。当然如果这里使用了百度站长平台提供的站内搜索,获取数据将会更加容易一些。如果没有使用,那么就需要对站内搜索框的搜索进行数据监控。


6、统计中的搜索关键词


我们知道关键词排名是动态的,今天这个关键词或许排名比较高,过段时间可能排名又下去了,那么使用百度统计中历史搜索关键词数据能够帮我们更有力的找到有优化价值的关键词。通过百度统计中的数据可以挖掘出哪些关键词流量大,其他统计类工具同理。


7、站长工具中的流量关键词


我们知道第三方有个权重的说法,这个权重表示的是通过关键词获取流量多少的一个判断指数,权重高,那么关键词获取的流量就越高。这个工具可以用来获取自己网站的流量关键词,也可以获取竞争对手的流量关键词,这些数据源是帮助我们挖掘关键词有力的支撑。


其他同类工具类网站道理也是一样的,可以查自己网站的,也可以查竞争对手网站的。
西安网站开发

西安网站优化 8、推广平台的关键词数据报告和搜索关键词数据报告


当我们采用短语或者广泛匹配模式的推广某些关键词的时候,就会产生一个叫搜索关键词的数据报告,这2个推广关键词数据报告都能够用展示,点击,消费去反映一个关键词的热度及搜索量。
相关的主题文章:

  
   装修问题:卫生间贴瓷砖要墙压地还是地压墙?
  
   植发的价格问题是多少呢
级别: 风云使者
只看该作者 16楼 发表于: 2017-11-17
了解装修合同注意事项 预防装修陷阱
相信大部分业主都知道,在我们家居装修之前都会有签订合同这一步的,要是签订合同这一步签订不好的话就会影响装修的,那么装修合同注意事项有哪些呢?下面一起装修网小编为大家介绍一下。
了解装修合同注意事项 预防装修陷阱
装修合同包含什么内容?
1、工程预算
装修合同中的工程预算,一般正规的装饰公司都会给业主出具一份较为完整的工程预算,包括工程项目、数量、单价和参考材料等等。有过装修经验的业主大都发现在工程结算时,结算金额会与自己的预期时常有差距。这个问题除因施工过程中发生项目变更外,最主要的原因在水电改造上。
由于装修公司和业主签定装修合同时,对现场的一些情况不是很清楚,所以报价时一般标注的是水电改造的项目单价,工程总费用里不包含水电改造的费用。工程结算的时候,做的是所有工程项目的结算,差异的出现也就是必然的了。因此,您在签定装修合同时,应尽量要求装修公司提代一个水电改造的参考报价。
2、设计图纸
装修合同中的设计图纸关系到装修风格的最终实现程度,如果业主与设计师在沟通上出现偏差,对于工程项目的理解产生分歧,就难以实现理想的装修效果。因此,一份设计详细的图纸,包括具体的造型、尺寸在内的设计图纸,将是消除设计师与业主理解上出现差距的有效办法。
3、施工工艺
装修合同中的施工工艺的好坏影响着家装的质量。在装修合同中施工工艺是严格执行约定工艺做法、防止偷工减料的法宝。
4、施工计划
装修合同中的施工计划,一份较为严谨的施工计划能够保证装修工程按时交付,也能确保业主在施工方开始拖延工期时发现问题。施工计划的有效执行,也是业主保护自己权益的保障。
5、甲乙双方的材料采购单
对于装修合同中双方的材料采购单,主要应在材料的品牌、采购的时间期限以及验收的办法以及验收人员等方面作出明确规定。
了解装修合同注意事项 预防装修陷阱
装修合同注意事项:
1、选择正规的家装公司,签订合同之前,业主应先审查装饰公司的手续是否齐全。
2、参观装饰公司正在施工的装修现场,检查工地施工工艺以及工人的素质,还应该着重检查施工工地的管理、卫生和防火情况。
3、对装饰公司提供的设计方案要有详细的设计样图。预算报价 西安二手房装修,客户应该严格审定,如有可能找相关专家咨询。如果委托装饰公司选择建材的话 西安装修,装饰公司一般会提供预选的材料样品,客户应该保存以便日后检查对照。
4、在签订合同时,应详细注明施工工期、几次验收程序(包括材料、隐蔽工程、局部和整体验收等)、详细制作过程的说明、甲乙双方各自提供的材料的明细表和日期等,同时还应约定好违约金的赔付比例。在约定装修的材料标准时,一定要非常细致 西安全包装修,包括外墙、内墙、顶棚、地面、厨房、卫生间、阳台等,每个部位使用材料的品牌、型号都要清楚标明,不能笼统地用“国内名牌”、“国际名牌”之类的字眼。
5、验收方式可在合同上约定由政府质检站来验收,这样你就可以不为请质检站而另付费用。
通过以上一起装修网小编的介绍,现在大家对装修合同注意事项都了解了吧。如果还有什么地方不明白或者不了解的话,可以参考一下以上装修合同注意事项具体内容。如果想要了解更多关于装修合同注意事项的相关信息,请多多关注一起装修网,一起装修网将给大家提供更全、更详细、更新的资讯信息。
全国业主装修交流群:573032185
相关的主题文章:

  
   Java 开源博客 Solo 2.4.0 发布
  
   Java反射机制,速度提高1000倍
级别: 风云使者
只看该作者 17楼 发表于: 2017-11-19
植发是什么
  人体的头发也像人体的其它组织一样是可以移植的  头发移植是通过特殊器械将头发毛囊周围部分组织一并完整切取  脱离头皮原位  然后移植到需要头发又经过一定准备  具备接受该头发条件的位置  称头发移植
级别: 风云使者
只看该作者 18楼 发表于: 2017-11-22
北京三合国际建筑装饰顶面及墙面装饰
顶面是室内装饰的重要组成部分,也是室内空间装饰中最富有变化,引人注目的界面,其透视感较强,通过不同的处理,配以灯具造型能增强空间感染力,使顶面造型丰富多彩,新颖美观。要注重整体环境效果。顶棚、墙面、基面共同组成室内空间,共同创造室内环境效果,设计中要注意三者的协调统一,在统一的基础上各具自身的特色。
北京三合国际建筑装饰顶面装饰
顶面装饰应该遵循如下的装饰设计原则:
(1)要注重整体环境效果。顶棚、墙面、基面共同组成室内空间,共同创造室内环境效果,设计中要注意三者的 协调统一,在统一的基础上各具自身的特色;
(2)顶面的装饰应满足适用美观的要求。一般来讲,室内空 间效果应是下重上轻,所以要注意顶面装饰力求简捷完整,突出重点,同时造型要具有轻快感和艺术感;
(3)顶面的装饰应保证顶面结构的合理性和安全性,不能单纯追求造型而忽视安全。
顶面的设计形式有以下5种:
(1)平整式顶棚。这种顶棚构造简单,外观朴素大方、装饰便利,适用于教室、办公室、展览厅等,它的艺术感染力来自顶面的形状、质地、图案及灯具的有机配置;
(2)凹凸式顶棚。这种顶棚造型华美富丽,立体感强,适用于舞厅、餐厅、门厅等,要注意各凹凸层的主次关系和高差关系,不宜变化过多,要强调自身节奏韵律感以及整体空间的艺术性;
(3)悬吊式顶棚。在屋顶承重结构下面悬挂各种折板、平板或其它形式的吊顶,这种顶往往是为了满足声学、照明等方面的要求或为了追求某些特殊的装饰效果,使人产生特殊的美感和情趣;
(4)井格式顶棚。其是结合结构梁形式 ,主次梁交错以及井字梁的关系,配以灯具和石膏花饰图案的一种顶棚,朴实大方,节奏感强;
(5)玻璃顶棚。现代大型公共建筑的门厅、中厅等常用这种形式,主要解决大空间采光及室内绿化需要,使室内环境更富于自然情趣,为大空间增加活力。其形式一般有圆顶形、锥形和折线形。
北京三合国际建筑装饰墙面装饰
室内视觉范围中,墙面和人的视线垂直,处于最为明显的地位,同时墙体是人们经常接触的部位,所以墙面的装饰对于室内设 计具有十分重要的意义,要满足以下设计原则:
1、 整体性。进行墙面装饰 时,要充分考虑与室内其它部位的统一,要使墙面和整个空间成为统一的整体。
2、 西安新房装修 物理性。墙面在室内空间中面积较大,地位较主要,要求也较高,对于室内空间的隔声、保暖、防火等的要求因其使用空间的性质不同而有所差异,如宾馆客房,要求高一些,而一般单位食堂,要求低一些。
3、 艺术性。在室内空间里,墙面的装饰效果,对渲染美化室内环境起着非常重要的作用,墙面的形状、分划图案、质感和室内气氛有着密切的关系,为创造室内空间的艺术效果,墙面本身的艺术性不可忽视。
墙面的装饰形式的选择要根据上述原则而定,形式大致有以下几种:抹灰装饰、贴面装饰、涂刷装饰、卷材装饰。这里着重谈一下卷材装饰,随着工业的发展,可用来装饰墙面的卷材越来越多,如:塑料墙纸、墙布、玻璃纤维布、人造革、皮革等,这些材料的特点是使用面广,灵活自由,色彩品种繁多,质感良好,施工方便,价格适中,装饰效果丰富多彩,是室内设计中大量采用的材料。
北京三合国际建筑装饰半包装修报价清单
一、材料费
1、各室内(含阳台)地砖,厨房和卫生间的墙砖铺设,所需要的水泥、河砂等辅料费用 西安装修报价;
2、涂料费,除了乳胶漆以外,涂抹墙壁的辅料费用,如白灰、腻子等;
3、客厅、餐厅、卧室天花板的吊顶材料,如石膏板、框架等;
4、门窗玻璃以及门套等费用(大家有渠道的话,也可以自行订购门窗、玻璃等)
5、自制橱柜、连墙衣柜、鞋柜、玄关等的材料费;
6、水电线路、踢脚线更换、调试等的材料费;
7、厨房、卫生间防水处理费用;
二、人工费
在装修期间,装修公司会雇佣装修工人对房屋进行装修,一般房屋装修个人的工资是按天计算的,而且现在的人力资源也比较的昂贵,有的时候房屋装修完成之后 西安二手房装修,结算时人工费具体工资金额可以达到总工程款的一半左右,所以我们在装修之前,一定要与装修公司将工人的日工资制定好。
三、额外费用
在装修的过程中还会产生其他的费用,例如:焊接费、打孔及开洞费、地漏费、材料搬运费,以及装修垃圾的清理费用等。
全国业主装修交流群 573032185
相关的主题文章:

  
   [url=http://qifubianmin.com/BBS/read.php?tid=36
级别: 风云使者
只看该作者 19楼 发表于: 2017-11-27
便秘会导致脱发 脱发的原因有哪些_脱发_快速问医生
便秘会导致脱发 脱发的原因有哪些 更新时间:2017-11-04 核心提示: 脱发是让不少人苦恼的一个问题,有的脱发严重的,可导致秃顶现象,从而大大的影响个人的外在形象,因此大家在生活中要注意做好预防脱发的工作,主要就是要了解脱发的原因,从诱因上来避免脱发,因此大家不妨可以了解一下脱发的原因。
  脱发是很多人都有的现象,而一般来说,在我们梳头或是洗头时出现少量的脱发,都属于正常现象,但如果出现大面积脱发的,则属于病理性的,要引起重视了,如长期得不到改善,可导致发量减少甚至出现秃顶现象,大大影响个人形象。因此大家要注意了解脱发的原因,以更好的避免脱发发生。那么有什么原因可引起脱发?一起来了解一下。


  很多原因可导致脱发的发生,如生活工作压力大,经常熬夜,都可影响健康,会出现脱发现象,而如果长期便秘的话,也会影响头发健康,可导致原来的脱发现象更为严重,因此脱发者有便秘现象的,也要及时调治,以防加重脱发。

  脱发的原因有很多,主要包括外在因素和外在因素,外在因素如服用某些药物,或是细菌感染,还有洗发水使用不当,使用的洗发剂太强等,都可引起脱发,还有就是油脂性头屑阻塞了毛孔,或是过频的吹、染、电、漂头发,这些都会对头发造成很大的损害,从而导致脱发的发生 男性脱发治疗

  还有一些内在因素也可导致脱发的发生,如遗传因此,年龄的增长,或是由于营养不足,饮食不均而导致缺乏维他命、氨基酸等,也可引起脱发,还有就是毛母细胞及毛囊受伤以及血管障碍,内分泌障碍,荷尔蒙分泌不协调等等,这些都会对头发造成很大的危害,从而导致脱发现象。

  上面就是关于脱发的一些原因的介绍 前额脱发,可见脱发的发生可由外因引起,也可有内因导致,不管是什么原因引起的脱发,影响都很大,因此当我们在生活中发现自己有脱发的现象时,要及时查找原因,对因治疗,同时日常生活中也要注意做好护理工作,保持好情绪,养成良好的生活饮食习惯 女性脱发治疗,注意正确梳头,这些对于脱发的防治都有一定的作用。

相关的主题文章:

  
   现在植发的价格怎么算
  
   新房收房全攻略 新房收房注意事项
快速回复

限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
上一个 下一个