Java
平静大海
这个作者很懒,什么都没留下…
展开
-
controller 接收页面list,数组,等数据的问题
本文转自http://jxd-zxf.iteye.com/blog/2072300 Spring MVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctype (MIME编码)是application/json,因此发送POST请求时需要设置请求报文头信息,否则Spring MVC在解析集合请求参数转载 2018-01-08 21:07:27 · 2585 阅读 · 1 评论 -
Java奇淫巧技之Lombok
背景 我们在开发过程中,通常都会定义大量的JavaBean,然后通过IDE去生成其属性的构造器、getter、setter、equals、hashcode、toString方法,当要对某个属性进行改变时,比如命名、类型等,都需要重新去生成上面提到的这些方法,那Java中有没有一种方式能够避免这种重复的劳动呢?答案是有,我们来看一下下面这张图,右面是一个简单的JavaBean,只定义了两个转载 2017-10-10 10:15:55 · 343 阅读 · 0 评论 -
lombok的使用和原理
一、项目背景 在写Java程序的时候经常会遇到如下情形: 新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter和setter方法 lombok项目的产生就是为了省去我们手动创建getter和setter方法的麻烦,它能够在我们编译源码的时候自动帮我们生成getter和setter方法。即它最终能够达到的效果是:在源码中没有getter和setter转载 2017-10-10 10:02:27 · 359 阅读 · 0 评论 -
@Data 注解引出的 lombok 小辣椒
今天在看代码的时候, 看到了这个注解, 之前都没有见过, 所以就查了下, 发现还是个不错的注解, 可以让代码更加简洁.这个注解来自于 lombok,lombok 能够减少大量的模板代码,减少了在使用@Data 注解时, 需要导入lombok.Data,下面列举下 lombok提供的注解:val : 和 scala 中 val 同名, 可以在运行时确定类型;@NonNull :转载 2017-10-10 09:48:22 · 1676 阅读 · 0 评论 -
JVM调优总结(十)-调优方法
VM调优工具Jconsole,jProfile,VisualVMJconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。详细说明参考这里 JProfiler:商业软件,需要付费。功能强大。详细说明参考这里 VisualVM:JDK自带,功能强大,与JProfiler类似。推荐。转载 2017-09-22 13:48:52 · 193 阅读 · 0 评论 -
JVM调优总结(九)-新一代的垃圾回收算法
垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限。但是他无法解决的一个问题,就是Full GC所带来的应用暂停。在一些对实时性要求很高的应用场景下,GC暂停所带来的请求堆积和请求失败是无法接受的。这类应用可能要求请求的返回时间在几百甚至几十毫秒以内,如果分代垃圾回收方式要达到这个指标,只能把最大堆的设置限制在一个转载 2017-09-22 13:47:32 · 172 阅读 · 0 评论 -
JVM调优总结(八)-典型配置举例2
常见配置汇总 堆设置 -Xms:初始堆大小 -Xmx:最大堆大小 -XX:NewSize=n:设置年轻代大小 -XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4 -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。转载 2017-09-22 13:39:54 · 169 阅读 · 0 评论 -
JVM调优总结(七)-典型配置举例1
以下配置主要针对分代垃圾回收算法而言。 堆大小设置年轻代的设置很关键JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设转载 2017-09-22 13:33:30 · 288 阅读 · 0 评论 -
JVM调优总结(六)-分代垃圾回收详述2
分代垃圾回收流程示意 选择合适的垃圾收集算法串行收集器 用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高。但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器。当然,此收集器也可以用在小数据量(100M左右)情况下的多处理器机器上。可以使用-XX:+UseSerialGC打开。转载 2017-09-22 13:25:26 · 197 阅读 · 0 评论 -
maven的离线模式
Q:什么时候需要maven离线模式? A:没有网络,只有本地库,又是用maven来管理项目,在编译或者下载第三方Jar的时候,老是去中央仓库上自动下载,导致出问题 1.全局设置setting.xml的offline Eclipse中使用,一般默认位置${user.home}/.m2/settings.xml, 如果Eclipse中配置了Maven插件,那应该转载 2017-10-10 13:18:13 · 26293 阅读 · 1 评论 -
JAVA启动参数大全之三:非Stable参数
前面我们提到用-XX作为前缀的参数列表在jvm中可能是不健壮的,SUN也不推荐使用,后续可能会在没有通知的情况下就直接取消了;但是由于这些参数中的确有很多是对我们很有用的,比如我们经常会见到的-XX:PermSize、-XX:MaxPermSize等等;下面我们将就Java HotSpot VM中-XX:的可配置参数列表进行描述;这些参数可以被松散的聚合成三类:行为参数(Behav转载 2017-10-30 11:01:33 · 385 阅读 · 1 评论 -
Spring下配置几种常用连接池
1、连接池概述 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免转载 2017-10-23 16:06:44 · 4906 阅读 · 0 评论 -
controller 接收页面list,数组,等数据的问题
本文转自http://jxd-zxf.iteye.com/blog/2072300 Spring MVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctype (MIME编码)是application/json,因此发送POST请求时需要设置请求报文头信息,否则Spring MVC在解析集合请求参数转载 2018-01-08 19:01:24 · 27453 阅读 · 3 评论 -
HTTP Status 500 - java.lang.NoClassDefFoundError: org/apache/tomcat/util/descriptor/LocalResolver
头次发现,使用tomcat7很长时间,今天项目突发上面的情况,试了很多方法都无效,最后把版本更新T到omcat 7.0.72,问题解决;分析过程:1 首先打包自己项目,排除jar依赖的影响2 查看代码历史记录,发现没有更改过3 删除idea中的target 4 升级Tomcat版本解决,更高版本没试过。原创 2017-11-20 16:19:34 · 1989 阅读 · 1 评论 -
HBase java API 使用实例(一)——增加、修改、删除
上一篇文章(http://blog.csdn.net/wild46cat/article/details/53288537)已经能够使用java api对HBase进行增加、删除、修改了,那么这篇文章主要是讲的是什么呢?这篇文章主要是对上一篇文章中的代码的重构,首先把一些已经废弃的方法进行了替换,然后是对生产环境的一个测试,最后在返回数据时,已经把数据转换成类似JSON的格式了。这样重构之后,在使转载 2017-11-17 11:21:15 · 1087 阅读 · 1 评论 -
ElasticSearch 常用的查询过滤语句
query 和 filter 的区别请看: http://www.cnblogs.com/ghj1976/p/5292740.html Filter DSL term 过滤term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型): { "term": { "age": 26转载 2017-11-12 22:04:37 · 316 阅读 · 1 评论 -
Spring MVC +Spring + Mybatis 构建分库分表总结 SSM搭建以及分库分表的实现
分库分表在小型公司很少能遇到也很少使用,毕竟数据量没有那么大,当数据量大,所有数据都压在一张表时,如果单从数据库的角度考虑是可以分库分表处理来存储数据。分库分表 顾名思义就是根据查询条件动态的去获取数据所在的库和表的位置.例如一个系统有唯一的标识userNum,所有路由规则都可以根据userNum做库表的定位工作.本文测试用3个库5个表做测试.三个库book_00,book_01,book_0转载 2017-10-17 14:00:26 · 1262 阅读 · 0 评论 -
spring注解与xml同时使用:bean命名问题及冲突
主程序如下,基于spring的依赖注入:public class UserServImpl implements UserServ{@autowiredprivate UserDao userDao;....}1、xml中配置bean id 与类名一致:UserDao" class="com.db.UserDao" />转载 2017-10-16 11:39:20 · 3517 阅读 · 0 评论 -
Spring容器初始化过程
一、Spring 容器高层视图Spring 启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表,然后根据这张注册表实例化Bean,装配号Bean之间的依赖关系,为上层应用提供准备就绪的运行环境。二、内部工作机制该图描述了Spring容器从加载配置文件到创建出一个完整Bean的作业流程:1、Resour转载 2017-10-16 10:58:58 · 10947 阅读 · 0 评论 -
从一个例子学习 instanceof 和 getclass 的区别
判断两个对象是否为同一类型,时常用到getclass 和 instanceof ,而这两个函数又是时常让人混淆。下面从一个例子说明两者的区别:public class Test_drive { public static void main(String[] args){ A a = new A(); B b = new B();转载 2017-11-09 15:15:46 · 270 阅读 · 1 评论 -
JVM调优总结(五)-分代垃圾回收详述1
为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。 在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象、线程、Socket连接,这类对象跟业务直接挂钩,因此生命周期比较长。但是还有一些对象,主要是转载 2017-09-22 13:19:52 · 159 阅读 · 0 评论 -
JVM调优总结(四)-垃圾回收面临的问题
如何区分垃圾 上面说到的“引用计数”法,通过统计控制生成对象和删除对象时的引用数来判断。垃圾回收程序收集计数为0的对象即可。但是这种方法无法解决循环引用。所以,后来实现的垃圾判断算法中,都是从程序运行的根节点出发,遍历整个对象引用,查找存活的对象。那么在这种方式的实现中,垃圾回收从哪儿开始的呢?即,从哪儿开始查找哪些对象是正在被当前系统使用的。上面分析的堆和栈的区别,其中栈转载 2017-09-22 12:52:52 · 172 阅读 · 0 评论 -
JVM调优总结(三)-基本垃圾回收算法
可以从不同的的角度去划分垃圾回收算法:按照基本回收策略分引用计数(Reference Counting):比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。 标记-清除(Mark-Sweep): 此算法执行分两阶转载 2017-09-22 12:48:58 · 172 阅读 · 0 评论 -
Maven POM中的各种scope的行为总结
compile:默认的scope。任何定义在compile scope下的依赖将会在所有的class paths下可用。maven工程会将其打包到最终的arifact中。如果你构建一个WAR类型的artefact,那么在compile scope下引用的JAR文件将会被集成到WAR文件内。provided:这个scope假定对应的依赖会由运行这个应用的JDK或者容器来提供。最好的例转载 2017-09-24 21:39:30 · 261 阅读 · 0 评论 -
JVM调优总结(十一)-反思
垃圾回收的悖论 所谓“成也萧何败萧何”。Java的垃圾回收确实带来了很多好处,为开发带来了便利。但是在一些高性能、高并发的情况下,垃圾回收确成为了制约Java应用的瓶颈。目前JDK的垃圾回收算法,始终无法解决垃圾回收时的暂停问题,因为这个暂停严重影响了程序的相应时间,造成拥塞或堆积。这也是后续JDK增加G1算法的一个重要原因。 当然,上面是从技术角度出发解决垃圾回收带来转载 2017-09-22 13:54:11 · 170 阅读 · 0 评论 -
Map与List性能比较
1.Collection接口与Map的总体框架图Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap 由上图可以看出:List和Set都源自Collection,而Map自转载 2017-02-28 15:22:44 · 1740 阅读 · 0 评论 -
使用 Redis 实现分布式锁
引用:http://www.oschina.net/translate/redis-distlock分布式锁是一个在很多环境中非常有用的原语,它是不同进程互斥操作共享资源的唯一方法。有很多的开发库和博客描述如何使用Redis实现DLM(Distributed Lock Manager),但是每个开发库使用不同的方式,而且相比更复杂的设计与实现,很多库使用一些简单低可靠的方式来实现。转载 2017-06-20 14:26:15 · 581 阅读 · 0 评论 -
Spring--使用注解和自动装配
Spring支持用注解配置Bean,更简便。 上面的组件,是根据实际情况配的。比如写的一个类,是做业务处理的,那就用注解@Service表示服务层组件,以此类推。将整体分成不同部分。 要在xml加入context命名空间 指定Spring IOC容器扫描的包 -->2 context:component-scan base-package转载 2017-03-10 11:03:56 · 462 阅读 · 0 评论 -
JAVA设计模式--单例模式
单例设计模式Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点。核心知识点如下:(1) 将采用单例设计模式的类的构造方法私有化(采用private修饰)。(2) 在其内部产生该类的实例化对象,并将其封装成private static类型。(3) 定义一个静态方法返转载 2017-03-03 15:01:52 · 244 阅读 · 0 评论 -
HashMap与ArrayList的PK
原地址:http://blog.csdn.net/qiulongtianshi/article/details/8146717本周要闻,这一周自己先干了两天的代码优化工作,优化自己的导入代码,在虎哥的指引下自己一步步理解优化这个过程很艰辛啊,其中在这个过程中理解到了,一个好的设计并非那么容易,同样一段程序如何让这段代码学的非常有精髓,有思想,这一点是非常不容易的。转载 2017-02-28 15:50:48 · 487 阅读 · 1 评论 -
HashSet和HashMap的性能选项
对于HashSet及其子类而言,它们采用hash算法来决定集合中元素的存储位置,并通过hash算法来控制集合的大小; 对于HashMap、Hashtable及其子类而言,它们采用hash算法来觉得Map中key的存储,并通过hash算法来增加key集合的大小。hash表里可以存储元素的位置被称为“桶(bucket)”,在通常情况下,单个“桶”里存储一个元素时,此时拥有最好的性能:has转载 2017-02-28 15:25:03 · 952 阅读 · 0 评论 -
Java绝对/相对路径获取与getResourceAsStream()方法
Java路径 Java中使用的路径,分为两种:绝对路径和相对路径。具体而言,又分为四种: 一、URI形式的绝对资源路径 如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b URL是URI的特例。URL的前缀/协议,必须是Java熟悉的。URL可以打开资源,而URI则不行。 URL和URI对象可以转载 2017-09-25 11:36:07 · 6329 阅读 · 0 评论 -
解决 IDEA 中src下xml等资源文件无法读取的问题
该问题的实质是,idea对classpath的规定。在eclipse中,把资源文件放在src文件夹下,是可以找到的;但是在idea中,直接把资源文件放在src文件夹下,如果不进行设置,是不能被找到的。下面说说几种解决方法,网上说的都很混乱,我这里做一个总结:推荐方法41.将所有资源文件放在resources文件夹下这样做很方便,比较容易想转载 2017-09-25 11:46:39 · 705 阅读 · 0 评论 -
MyBatis传入参数与parameterType
1. 传入简单类型 Java代码:public User get(Long id) { return (User) getSqlSession().selectOne("com.liulanghan.get" , id); } MAPPER : select * from user where id = #{id};转载 2017-09-26 10:40:34 · 1041 阅读 · 0 评论 -
JVM调优总结(二)-一些概念
Java对象的大小 基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。 在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句:Object ob = new Object(); 这样在程序中完成了一个Java对象的生命,但是它所占的空间为:4b转载 2017-09-22 12:43:29 · 134 阅读 · 0 评论 -
JVM调优总结(一)-- 一些概念
数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress转载 2017-09-22 12:38:04 · 163 阅读 · 0 评论 -
SpringMVC与LogBack集成
最近在做项目中需要用到日志,本来选取的是Log4j,最后经过对比之后还是发现LogBack在性能上比Log4j有优势。至于有什么好处,请参考下面这篇文章。从Log4j迁移到LogBack的理由 下面废话不多说了,就看一下,如何来把LogBack集成到我们的web项目中吧。本人前台用的是SpringMVC。 jar包配置 如果要使用LogB转载 2017-09-21 17:29:36 · 485 阅读 · 0 评论 -
Spring+MyBatis多数据源配置实现
最近用到了MyBatis配置多数据源,原以为简单配置下就行了,实际操作后发现还是要费些事的,这里记录下,以作备忘不多废话,直接上代码,后面会有简单的实现介绍jdbc和log4j的配置#定义输出格式ConversionPattern=%d %-5p [%t] %c - %m%nlog4j.rootLogger=DEBUG,Consolelog4j.logger.com转载 2017-09-29 21:24:31 · 243 阅读 · 0 评论 -
Spring AOP不拦截从对象内部调用的方法原因
拦截器的实现原理很简单,就是动态代理,实现AOP机制。当外部调用被拦截bean的拦截方法时,可以选择在拦截之前或者之后等条件执行拦截方法之外的逻辑,比如特殊权限验证,参数修正等操作。 但是最近在项目中要在一个事务中跨数据源进行操作。数据库跨源就不在这里说了,可以自行百度。 这里出现的问题就是,如果我们要拦截某个类的多个方法,且在该类的方法中使用this调用要拦截的方法时会导致拦转载 2017-09-21 15:27:50 · 719 阅读 · 0 评论 -
spring中bean的配置详解
IOC其实是从我们平常new一个对象的对立面来说的,我们平常使用的对象一般直接使用关键字类new一个对象,患处很显然,使用new那么就表示当前模块已经不知不觉和new出的对象耦合了,而我们通常都是更高层次的抽象模块调用底层实现模块,这样就产生模块依赖于具体的实现,这与我们JAVA中提倡的面向接口面向抽象编程是相冲突的,而且这样做也带来系统的模块架构问题。很简单的例子,在进行数据库操作的时候,总是业转载 2017-09-29 13:06:33 · 314 阅读 · 0 评论