201703-01 Java线程内存模型,线程、工作内存、主内存 java线程内存模型线程、工作内存、主内存三者之间的交互关系图:keyedeas所有线程共享主内存,每个线程有自己的工作内存refreshinglocalmemoryto/frommainmemorymustcomplytoJMMrules产生线程安全的原因线程的workingmemory是cpu的寄存器和高速缓存的抽象描述:现在的计算机,cpu在计算的时候,并不总是从内存读取数据,它的数据读取顺序优先级是:寄存器-高速缓存-内存。线程耗... 继续阅读 >
201702-23 35 个 Java 代码性能优化总结 前言代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可... 继续阅读 >
201702-22 JAVA 常用集合内部机制原理 对于常用的集合大家都不陌生,但是深入到内部原理可能都是一知半解,通过阅读源码理解如下。ArrayListArrayList内部就是一个默认大小为10的动态对象数组容器,每当add一个新数据的时候,如果大于原来的容器大小,则会通过Arrays.copyOf把容器大小增加到原来的1.5倍,以此类推。当可以预知数据大小,可以通过initialCapacity来默认设置动态数据的大小,减少扩容带来的资源消耗。时间复杂度:get()-直接读取... 继续阅读 >
201702-17 40个Java集合面试问题和答案 1.Java集合框架是什么?说出一些集合框架的优点?每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。集合框架的部分优点如下:(1)使用核心集合类降低开发成本,而非实现我们自... 继续阅读 >
201701-16 Java AOP 实例踩坑记 其实这篇文章是存了很久的草稿,写了一半没有继续完稿。终于得空继续完善它,之后还会抽时间继续研究SpringAOP的使用和实现( ̄∇ ̄),绝不放过任何绊脚石。尝试SpringAOP未果项目中遇到一个性能监控需求:在线搜集统计服务方法的调用次数和平均开销时间,用于服务性能调优和服务死活监控。考虑到涉及到的统计点很多,一个个手写采集点代码非常傻,而且代码侵入性很大。想起之前为了重构代码中的手工auto-retry(... 继续阅读 >
201612-30 编写更好的 Java 单元测试的 7 个技巧 测试是开发的一个非常重要的方面,可以在很大程度上决定一个应用程序的命运。良好的测试可以在早期捕获导致应用程序崩溃的问题,但较差的测试往往总是导致故障和停机。虽然有三种主要类型的软件测试:单元测试,功能测试和集成测试,但是在这篇博文中,我们将讨论开发人员级单元测试。在我深入讲述具体细节之前,让我们先来回顾一下这三种测试的详细内容。软件开发测试的类型单元测试用于测试各个代码组件,并... 继续阅读 >
201612-23 深入理解Java G1垃圾收集器 本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践。一,什么是垃圾回收首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么?简单的说垃圾回收就是回收内存中不再使用的对象。垃圾回收的基本步骤回收的步骤有2步:查找内存中不再使用的对象释放这些对象占用的内存1,查找内存中不再使用的对象那么问题... 继续阅读 >
201612-23 Java开发代码性能优化总结 代码优化的目标:减小代码体积提高整个系统的运行效率代码细节优化尽量指定类,方法的final修饰符带有final修饰的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的.为类指定final修饰符可以让类不可以被继承,为方法指定final可以让方法不可以被重写。如果指定一个类为fianl,该类的所有方法都是final的。Java编译器会寻找机会内联所有的... 继续阅读 >
201612-08 Java中的Filter过滤器详解 Filter简介Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet,静态图片文件或静态html文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请... 继续阅读 >
201611-26 日请求亿级的QQ会员AMS平台PHP7升级实践 QQ会员活动运营平台(AMS),是QQ会员增值运营业务的重要载体之一,承担海量活动运营的Web系统。AMS是一个主要采用PHP语言实现的活动运营平台,CGI日请求3亿左右,高峰期达到8亿。然而,在之前比较长的一段时间里,我们都采用了比较老旧的基础软件版本,就是PHP5.2+Apache2.0(2008年的技术)。尤其从去年开始,随着AMS业务随着QQ会员增值业务的快速增长,性能压力日益变大。于是,自2015年5月,我们就开始规划PHP底层... 继续阅读 >
201611-25 Java程序员变优秀的10个要点 1.拥有扎实的基础和深刻理解OO原则对于Java程序员,深刻理解面向对象编程这一概念是必须的。没有OOPS的坚实基础,就领会不了像Java这些面向对象编程语言的美。光学习OO原则的定义用处不大,关键是要学会如何应用这些原则用一种OO的方式去设计解决方案。因此,我们应该对对象建模、继承、多态、设计模式有一个很好的认识。2.掌握核心API如果你不知道语言结构和核心API,那么即使你在理论知识上再怎么彪悍也是独... 继续阅读 >
201611-23 对于Java Web中的Filter和Interceptor的理解 写在前面:因为部门项目中有用户登录验证方面的需求,故而学习了一下相关的验证技术,本文仅是作者个人学习的心得,由于水平有限,如有错误之处还请指出、见谅。1.背景在设计web应用的时候,用户登录/注册是必不可少的功能,对用户登录信息进行验证的方法也是多种多样,大致可以认为如下模式:前端验证+后台验证。根据笔者的经验,一般会在前端进行一些例如是否输入数据、输入的数据的格式是否正确等一系列的验证,在... 继续阅读 >
201512-22 Win7和Linux下的java开发环境配置 1、win7的配置首先下载符合操作系统版本的jdk,比如最新的jdk8:下载链接:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html;当然一般开发者不会最新的Jdk,现在主流的选择是jdk6和jdk7,当然越来越多的开发者切换到jdk8的平台。下载之后,一路安装,本机jdk安装路径是C:\ProgramFiles\Java\jdk1.7.0_79然后按下列步骤,计算机--》属性--》高级系统设置--》环境变量在xxx的环境变量... 继续阅读 >
201507-01 我要阻止做java开发的男朋友去创业型公司工作吗? 命这样的标题,我没有瞧不起创业型公司,我只是有点急了,因为男朋友今天晚上就要回复招聘公司了。我先来说说来由吧。前段时间男朋友离职了,从毕业到现在在公司呆了2年多,因为资金不足导致他做的项目被迫停止了。他做的是门户网站,包括主要管理平台(新闻,视频类等)、客服管理平台、厂商管理平台和用户管理平台。上一家公司很小,就几个人,那个项目就他一个人做。因为一个人的关系,前台后台设计都他做。很早之前... 继续阅读 >
201505-27 java开发规范总结_代码编码规范 规范需要平时编码过程中注意,是一个慢慢养成的好习惯1.基本原则 强制性原则: 1.字符串的拼加操作,必须使用StringBuilder; 2.try…catch的用法try{}catch{Exceptionee.printStackTrace();}finally{}//在最外层的Action中可以使用,其它地方一律禁止使用;try{//程序代码}catch(Exceptione){//为空,什么都不写}//在任何场景中都禁止使用try{}catch... 继续阅读 >
201505-18 java开发命名规则 1.文件 1.属性文件后缀为properties,并且符合java中i18n的规范; 2.对于各产品模块自己的配置文件必须放置在自己模块的conf目录下; 3.文件的命名需要有一定的意义,尽量简短,名称符合操作系统的要求且必须为英文或汉语拼音组成,文件名称不能存在空格,对于普通的文件单词与单词之间采用下滑线进行。2.命名规范 2.1基本规则 1.字符集在26个英文字母... 继续阅读 >