- 博客(83)
- 资源 (6)
- 收藏
- 关注
原创 再见 2016
一大清早被应用报警短信吵醒,虽然自己不是应用的owner,但还是想看看究竟发生了什么,于是起床上线查看应用情况,折腾了两三个小时。发现现在应用当中潜在的问题其实还是蛮多的,LOG、CACHE、GC,所以一时兴起,重构代码,折腾到天黑。今天跟一个公众号的作者互动了一下,人虽然在美国,而且还有时差问题,对读者却是很认真,这样的态度很是感动。其实一进12月,各种总结就开始出来了,尤其是最近一周。
2016-12-31 22:46:46
1574
2
原创 tomcat如何正确的开启远程调试功能
在日常开发中,有时需要对远程服务器上的应用进行远程调试,对于tomcat,要进行远程调试其实很简单,只需要在启动tomcat时开启jpda服务即可。什么是JPDA呢?JPDA(Java Platform Debugger Architecture) 是 Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程序。JPDA 主要由三个
2015-10-17 23:25:35
54514
5
原创 IDEA 14在MAC下如何对tomcat进行远程调试
在开发过程中,有时需要进行远程调试,使用IDEA如何进行远程调试呢,其实很简单,首先tomcat需要开启远程调试,如何开启呢?参考另一篇文章。然后在IDEA中设置如下:1、打开配置页面2、添加远程调试配置3、进行参数配置其中Host为远程服务器的地址,当然如果host是localhost,表示是本机的tomcat,Port为远程debug的端口,注意
2015-10-15 23:19:30
9718
原创 MySQL如何有效的存储IP地址及字符串IP和数值之间如何转换
在看高性能MySQL第3版(4.1.7节)时,作者建议当存储IPv4地址时,应该使用32位的无符号整数(UNSIGNED INT)来存储IP地址,而不是使用字符串。但是没有给出具体原因。为了搞清楚这个原因,查了一些资料,记录下来。相对字符串存储,使用无符号整数来存储有如下的好处:节省空间,不管是数据存储空间,还是索引存储空间便于使用范围查询(BETWEEN...AND),且效率更高
2015-09-22 13:49:47
16317
1
原创 我的阅读清单
学习是一个长期的旅程,在此记录一下我的阅读清单。在读的书重构 改善既有代码的设计设计模式 可复用面向对象软件的基础高性能MySQL第3版已读的书Effective Java第1版Effective Java第2版Java核心技术I-基础知识 第8版Java核心技术II-高级特性 第8版java编程思想第3版java编程思想第4版深入理解Java虚拟机:JVM高级
2015-09-15 21:49:10
2479
1
原创 细说JDK动态代理的实现原理
关于JDK的动态代理,最为人熟知的可能要数Spring AOP的实现,默认情况下,Spring AOP的实现对于接口来说就是使用的JDK的动态代理来实现的,而对于类的代理使用CGLIB来实现。那么,什么是JDK的动态代理呢?JDK的动态代理,就是在程序运行的过程中,根据被代理的接口来动态生成代理类的class文件,并加载运行的过程。JDK从1.3开始支持动态代理。那么JDK是如何生成动态代理的
2015-09-15 21:12:35
49266
43
原创 细说java.util.HashMap
HashMap是我们最常用的类之一,它实现了hash算法,虽然使用很简单,但是其实现有很多值得研究的地方。HashMap存储的是key-value形式的键值对,这个键值对在实现中使用一个静态内部类Entry来表示,它存储了key、value、hash值、以及在hash冲突时链表中下一个元素的引用。HashMap底层实现使用了一个数组来存储元素。它的初始容量默认是16,而且必须容量必须是2的
2015-09-01 00:02:24
9424
原创 java中的计数信号量(Counting Semaphore)
信号量(Semaphore)又称为信号量、旗语,它以一个整数变数,提供信号,以确保在并行计算环境中,不同进程在访问共享资源时,不会发生冲突。是一种不需要使用忙碌等待(busy waiting)的一种方法。信号量的概念是由荷兰计算机科学家艾兹格·迪杰斯特拉(Edsger W. Dijkstra)发明的,广泛的应用于不同的操作系统中。在系统中,给予每一个进程一个信号量,代表每个进程目前的状态,未得
2015-08-29 19:38:58
4746
原创 关于@Override在1.5和1.6之后的区别
@Override注解是作用于源代码的注解,用于表明注解的方法重写了父类型的方法,但是这个注解在1.5和1.6及以后是区别的。1.5中,只能用于在继承某个类时,重写父类中的方法,而在实现一个接口中的方法时,是不能使用该注解的,从1.6开始,才支持实现父接口的方法使用该注解。但是在@Override源代码上的注解或文档中,1.6没有对这个变化进行说明,到1.7才进行了说明。下面是1.5和1.6的
2015-08-29 15:53:38
2931
原创 java枚举类型的实现原理
Java从JDK1.5开始支持枚举,也就是说,Java一开始是不支持枚举的,就像泛型一样,都是JDK1.5才加入的新特性。通常一个特性如果在一开始没有提供,在语言发展后期才添加,会遇到一个问题,就是向后兼容性的问题。像Java在1.5中引入的很多特性,为了向后兼容,编译器会帮我们写的源代码做很多事情,比如泛型为什么会擦除类型,为什么会生成桥接方法,foreach迭代,自动装箱/拆箱等,这有个术语叫
2015-08-29 14:47:09
24932
9
原创 细说java.util.Timer
Timer是用于管理在后台执行的延迟任务或周期性任务,其中的任务使用java.util.TimerTask表示。任务的执行方式有两种:按固定速率执行:即scheduleAtFixedRate的两个重载方法按固定延迟执行:即schedule的4个重载方法具体差别会在后面详细说明。一、使用方式Timer的具体使用方法非常简单,比如: Timer timer = n
2015-08-29 00:59:38
9439
2
原创 一次内存溢出的填坑经历
在项目运行过程中,可能会出现内存溢出,内存溢出的原因多种多样,而在内存溢出后,我们如何查找和分析内存溢出的原因呢?这里来说一说我遇到的次遇到的内存溢出经历。大致情况是这样的:应用在启动后,过一段时间(这个时间不确定),内存忽然爆满,然后频繁的YGC,一会过后,老年代爆满,然后是频繁的FGC,最终撑爆内存,抛出OOM。重启应用后,还是这个过程。1、查看java进程的内存使用情况和GC情况
2015-08-28 16:51:22
8623
原创 spring-mvc 3.2.12及以后<mvc:resource>配置处理的变化
在web应用中,对于静态资源,一般不会经常变化,所以通常会使用缓存,以提高效率。在spring-mvc中提供了几种方式来处理静态资源,其中一种是通过配置资源的位置和映射的路径等信息。但是在3.2.12(包含3.2.12)以后,在配置的处理上有变化,这就是location属性不能使用通配符模式,比如这种方式,在3.2.12以前可以正常工作,但是在3.2.12及以后,不能正常工作,如请求/res/jq
2015-08-18 13:55:47
7313
原创 java中什么是bridge method(桥接方法)
在看spring-mvc的源码的时候,在解析handler方法时,有关于获取桥接方法代码,不明白什么是桥接方法,经过查找资料,终于理解了什么是桥接方法。桥接方法是 JDK 1.5 引入泛型后,为了使Java的泛型方法生成的字节码和 1.5 版本前的字节码相兼容,由编译器自动生成的方法。我们可以通过Method.isBridge()方法来判断一个方法是否是桥接方法,在字节码中桥接方法会标记
2015-08-07 17:34:37
26201
23
原创 java如何获取方法参数名
在java中,可以通过反射获取到类、字段、方法签名等相关的信息,像方法名、返回值类型、参数类型、泛型类型参数等,但是不能够获取方法的参数名。在实际开发场景中,有时需要根据方法的参数名做一些操作,比如像spring-mvc中,@RequestParam、@PathVariable注解,如果不指定相应的value属性,默认就是使用方法的参数名做为HTTP请求的参数名,它是怎么做到的呢?在这样情况下
2015-08-05 11:33:32
40033
6
原创 解决mac使用svn: E170000: Unrecognized URL scheme for https://xxx错误
OS X版本:10.10.310.10.3自带了svn,但是版本是1.7,如果项目是使用1.8的svn,就必须升级到1.8,才能够正常使用。当前svn的最新版本是1.8.13。那么首先删除旧版本的svn,先查看svn安装到哪个目录:localhost:~ mikan$ which svn/usr/local/bin/svn删除旧版本的svn:localhost:~ mikan
2015-06-01 21:49:06
21185
1
翻译 JSON-RPC 2.0规范 翻译 中文版
JSON-RPC 2.0规范 起源日期: 2010-03-26(基于2009-05-24的版本)修正: 2013-01-04作者: JSON-RPC 工作组 1 概述JSON-RPC是一个无状态的、轻量级的远程过程调用(RPC)协议。本规范主要围绕它的处理方式定义了几个数据结构和规则。这个概念可用于在同一进程中、套接字或HTTP之间、或其他很多
2014-10-01 14:04:22
25723
3
原创 JPA实体继承实体的映射策略
注:这里所说的实体指的是@Entity注解的类继承映射使用@Inheritance来注解,它的strategy属性的取值由枚举InheritanceType来定义(包括SINGLE_TABLE、TABLE_PER_CLASS、JOINED,分别对应三种继承策略)。@Inheritance注解只能作用于继承结构的超类上。如果不指定继承策略,默认使用SINGLE_TABLE。JPA提供了三
2014-07-20 21:11:11
24175
1
原创 JPA实体继承的映射
JPA中对象关系映射通常情况下是一个实体对应一个表,两个实体之间没有任何关系。如果两个实体之间是继承关系,那么该如何映射呢?JPA中的实体支持继承映射,多态关联,多态查询。抽象类和具体的类都可以是实体,且都可以使用@Entity来注解,映射成实体,并查询封装成一个实体。实体类可以继承非实体类,非实体类也可以继承实体类。JPA的继承映射有如下几种情况:一、实体类继承抽象(具体
2014-07-20 17:55:55
22863
原创 使用java进行文件编码转换
在开发过程中,可能会遇到文件编码的转换,虽然说开发工具eclipse可以转换编码,但是有的情况却很不方便。比如,原来文件本身的编码是GBK,现在要转换成UTF-8,如果直接在eclipse中把文件编码修改成UTF-8,恭喜你,是乱码,因为不能直接从GBK到UTF-8进行转换,这时就需要我们手动的来转换编码。下面是一个文件编码转换的工具类。package com.mikan.stuff;im
2014-07-17 22:56:11
18001
4
原创 springmvc RestTemplate文件上传
在使用springmvc提供rest接口实现文件上传时,有时为了测试需要使用RestTemplate进行调用,那么在使用RestTemplate调用文件上传接口时有什么特别的地方呢?实际上只需要注意一点就行了,就是创建文件资源时需要使用org.springframework.core.io.FileSystemResource类,而不能直接使用java.io.File对象。Controll
2014-05-20 20:27:00
55841
12
原创 jenkins在使用maven部署到nginx+tomcat服务器时出现504错误
环境:jenkins+maven+nginx+tomcat在执行jenkins job发布项目到远程服务器,服务器使用nginx+tomcat。默认使用80端口,通过nginx转发请求。在执行tomcat:redeploy时,出现下面的错误:[ERROR] Failed toexecute goal org.codehaus.mojo:tomcat-maven-plugin:1.1:red
2014-05-16 22:48:01
9440
原创 AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
HTTP请求中,如果是get请求,那么表单参数以name=value&name1=value1的形式附到url的后面,如果是post请求,那么表单参数是在请求体中,也是以name=value&name1=value1的形式在请求体中。通过chrome的开发者工具可以看到如下(这里是可读的形式,不是真正的HTTP请求协议的请求格式):get请求: RequestURL:http://127.
2014-05-11 21:20:23
225268
27
原创 eclipse tomcat maven热部署
1、 tomcat插件如果是Kepler的话,已经自带了tomcat插件,如果没有,到http://www.eclipsetotale.com/tomcatPlugin.html下载安装或在线安装,这里就不多说了。2、创建Server打开serversview(windowàshow viewàservers),在servers view中新建一个server,如下图所示:
2014-04-29 23:06:40
22498
5
原创 使用maven profile实现多环境可移植构建
在开发过程中,我们的软件会面对不同的运行环境,比如开发环境、测试环境、生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置、日志文件配置、以及一些软件运行过程中的基本配置,那每次我们将软件部署到不同的环境时,都需要修改相应的配置文件,这样来回修改,是个很麻烦的事情。有没有一种方法能够让我们不用修改配置就能发布到不同的环境中呢?当然有,这就是接下来要做的事。
2014-04-25 23:37:19
76274
11
原创 mysql安装常见问题(系统找不到指定的文件、发生系统错误 1067 进程意外终止)
在安装mysql时总是会遇到这样那样的问题,每次重新安装都会花很多时间来排查。在网上其实有很多相关的文章,但很多都只讲了方法,但没讲具体细节问题,导致无法解决问题。其实有时候知道问题的原因,但总是因为一些细节问题没有注意到,反复的尝试,浪费了很多时间。现在把我安装过程中遇到的问题以及该注意的问题记录下来。环境:windows7mysql版本:mysql-5.6.10-win32如果是默
2013-11-30 19:33:27
108647
57
原创 关于java的++和--操作符,你真的搞明白了吗?
只要是会java的都知道++和—操作符的用法,如int i = 1;int j = i++;int k = ++i;结果i为3,j为1,k为3。那如下代码:int j = 0;for (int i = 0; i < 100; i++) { j = j++;}System.out.println(j);输出结果又是多少呢?100?0?正确答案
2013-04-19 20:12:32
5097
原创 把大写的人民币金额转化为数字,不考虑角分,只精确到圆(整)
群里朋友发的一个面试题,看到之后,自己写的一个实现,基本测试通过,但没有经过大量测试,如果有什么问题,欢迎指出。代码如下:package com.mmq;/** * 请实现函数,把我们日常使用的大写的人民币金额转化为数字 * 不考虑角分,只精确到圆(整),注该函数将被执行100万次,请考虑效率 * @use * @ProjectName gyjb * @Author mik
2013-03-29 12:16:19
2614
1
原创 一百个猴子围城一个圈,随机选一个猴子,标号为1,顺时针然后给每个猴子编上号一直到100只猴子。然后1,2,1,2 的报数,报2的猴子就退出,求最后剩下来的猴子的编号
package com.mmq;/** * 一百个猴子围城一个圈,随机选一个猴子,标号为1, * 顺时针然后给每个猴子编上号一直到100只猴子。然后1,2,1,2 的报数, * 报2的猴子就退出,求最后剩下来的猴子的编号 * * @use * @ProjectName stuff * @Author mikan * @Date 2013-2-27 下午01:03:23 *
2013-02-27 15:57:29
2618
翻译 servlet3.1规范翻译:词汇表
词汇表A应用开发人员(Application Developer) web应用生产者。应用开发人员的输出是用于web应用的一组Servlet类,JSP页面,HTML页面,以及支持库和文件(如图片,压缩的归档文件,等)。应用程序开发人员是一个典型的应用领域专家。开发人员必须知道编程时的servlet环境和其结果,包括并发性考虑,并相应地创建web应用。应用装配人员(Applicatio
2013-02-21 18:10:49
1630
翻译 servlet3.1规范翻译:附录A 变更历史
附录A 变更历史本文档是由Java社区进程SM (JCP)开发的Java Servlet 3.0 Servlet规范最终版本。A.1 自Servlet3.0以后的变更1. 章节2.3.3.3,“异步处理”,和AsyncContext的javadoc。a. 阐明了AsyncListener.onStartAsync的行为。b. 修复示例代码中的错误和注释。c. 阐明了异步请求
2013-02-21 18:09:34
1784
翻译 servlet3.1规范翻译:第15章 与其它规范有关的要求
第15章 与其它规范有关的要求本章列出对web容器的要求,它已经包含在容器产品中了,还包括其他Java技术。 下面章节中任何涉及到JavaEE应用的profile,不只是完整的Java EE profile,还包括任何支持Servelt的profile,像Java EEWeb Profile。有关配置文件的更多信息,请参阅Java EE平台规范。 15.1 会话属于Java EE实
2013-02-21 17:50:17
2189
翻译 servlet3.1规范翻译:第14章 部署描述符
第14章 部署描述符本章指定的Java™Servlet规范3.0版要求Web容器支持部署描述符。部署描述符表达了应用开发人员、应用集成人员和Web应用部署人员之间的元素和配置信息。对于JavaServlet 2.4和以后的版本,部署描述符在XML模式文档中定义。为了向后兼容到2.2版本的API编写的应用程序,Web容器也需要支持2.2版本的部署描述符。为了向后兼容2.3版本的API编写
2013-02-21 17:40:55
3941
翻译 servlet3.1规范翻译:第13章 安全
第13章 安全应用开发人员创建Web应用,他把应用给、销售,或转让给部署人员安装到运行时环境中。应用开发人员与部署人员沟通部署系统以及安全需求。该信息可以通过应用部署描述符声明传达,或者在应用代码中使用注解来传达。本质描述了Servlet容器安全机制、接口、部署描述符和基于注解机制传达应用安全需求。13.1 介绍web应用包含的资源可以被多个用户访问。这些资源常常在开放网络如Int
2013-02-21 16:55:52
3066
1
翻译 servlet3.1规范翻译:第12章 映射请求到Servlet
第12章 映射请求到ServletWeb容器需要使用本章描述的映射技术去映射客户端请求到Servlet(该规范2.5以前的版本,使用这些映射技术是作为一个建议而不是要求,允许各个servlet容器有其不同的schema用于映射客户端请求到servlet)。12.1 使用URL路径在收到客户端请求时,web容器确定转发到哪一个Web应用。选择的Web应用必须是具有最长的上下文路径与请求U
2013-02-01 11:07:44
1955
翻译 servlet3.1规范翻译:第11章 应用生命周期事件
第11章 应用生命周期事件11.1 介绍应用事件设施给Web应用开发人员更好地控制ServletContext、HttpSession和ServletRequest的生命周期,可以更好地分解代码,并提高了管理Web应用使用的资源的效率。11.2 事件监听器应用事件监听器是实现了一个或多个Servlet事件监听器接口的类。它们在部署Web应用时,实例化并注册到Web容器中。它们由开发
2013-01-31 11:12:19
1902
翻译 servlet3.1规范翻译:第10章 Web应用
第10章 Web应用一个Web应用是由许多servlet、HTML页面、类和其他资源组成的集合,这些资源组成了一个运行在Web服务器上的完整应用程序。Web应用程序能够捆绑和运行在来自不同提供商的不同容器上。10.1 Web服务器中的Web应用程序在Web服务器中Web应用程序的根目录是一个特定的路径。例如,一个catalog应用,可以位于http://www.mycorp.com/c
2013-01-30 22:18:27
1798
翻译 servlet3.1规范翻译:第9章 分派请求
第9章 分派请求构建Web应用时,把请求转发给另一个servlet处理、或在response中包含另一个servlet的输出通常是很有用的。RequestDispatcher接口提供了一种机制来实现这种功能。当请求启用异步处理时,AsyncContext允许用户将这个请求分派回servlet容器。9.1 获得一个RequestDispatcher实现了RequestDispatch
2013-01-30 18:20:35
2871
翻译 servlet3.1规范翻译:第8章 注解和可插拔性
第8章 注解和可插拔性本章讨论在web应用中使用的Servlet 3.0规范定义的注解和启用框架和库的可插拔性增强。8.1 注解和可插拔性在web应用中,使用注解的类仅当它们位于WEB-INF/classes目录中,或它们被打包到位于应用的WEB-INF/lib中的jar文件中时它们的注解才将被处理。Web应用部署描述符的web-app元素包含一个新的“metadata-compl
2013-01-29 11:51:36
10126
翻译 servlet3.1规范翻译:第7章 会话
第7章 会话超文本传输协议(HTTP)被设计为一种无状态协议。为构建有效的Web应用,必须把来自特定客户端的请求相互关联起来。随时间的推移,演变出了许多会话跟踪机制,但是程序员直接使用这些机制很困难或很麻烦。该规范定义了一个简单的HttpSession接口,允许servlet容器使用任意几种方法来跟踪用户会话,而不会使应用开发人员陷入到这些方法的细微差别中。7.1 会话跟踪机制以下
2013-01-24 22:10:33
1623
Servlet3.1规范中文word版
2013-03-22
数据库课程设计 <图书馆管理信息系统>
2009-06-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人