java
KingViker
这个作者很懒,什么都没留下…
展开
-
ReentrantReadWriteLock实现原理
ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock(); readLock.lock(); sync.acquireShared(1); 1.tryAcquireShared(arg) 1.如果写...原创 2019-05-22 17:08:08 · 406 阅读 · 0 评论 -
读书笔记--编写高质量代码:改善java程序的151个建议(四)String,StringBuilder,StringBuffer
读书笔记--编写高质量代码:改善java程序的151个建议(四)String,StringBuilder,StringBuffer使用字符串字面量赋值更加高效。Java为了避免在一个系统中大量产生String对象,于是就设计了一个字符串池(也有叫做字符串常量池),在字符串池中所容纳的都是String字符串对象。String创建规则:创建一个字符串时,首先没有检查池中是否有字面值原创 2014-06-19 09:47:34 · 1036 阅读 · 0 评论 -
读书笔记--编写高质量代码:改善java程序的151个建议(二)匿名类与构造代码块
读书笔记--编写高质量代码:改善java程序的151个建议(二)匿名类与构造代码块使用构造代码块精炼程序什么叫代码块(Code Block)?用大括号把多行代码封装在一起,形成一个独立的数据 体,实现特定算法的代码集合即为代码块,一般来说代码块是不能单独运行的,必须要有运 行主体。在 Java 中一共有四种类型的代码块:(1)普通代码块就是在方法后面使用“{}”括起来的原创 2014-06-16 10:00:53 · 998 阅读 · 3 评论 -
读书笔记--编写高质量代码 改善java程序的151个建议(一)基础
读书笔记--编写高质量代码 改善java程序的151个建议(一)基础不要再常量和变量中出现易混淆的字母例如在定义long i = 1l时 末尾的l应该使用大写L防止混淆三元操作符的类型务必一致例如在i覆写变长方法也循规蹈矩例如父类有public void method(int t,int... ints){}方法,子类覆写父类方法:public void met原创 2014-06-13 11:08:04 · 883 阅读 · 0 评论 -
读书笔记--编写高质量代码:改善java程序的151个建议(五)数组和集合
读书笔记--编写高质量代码:改善java程序的151个建议(五)数组和集合考虑性能的话,首选数组数组在操作基本类型的时候的性能比用list要高很多倍。如果有性能瓶颈,也可以自己实现变长数组来提高性能,比集合类要快很多。还有要警惕数组的浅拷贝,数组在操作对象的时候,数组里保存的是对象的内存地址,所以拷贝的时候也是拷贝的内存地址,要深拷贝需要自己实现。条件允许的情况下,可以为集原创 2014-07-02 10:06:13 · 1315 阅读 · 0 评论 -
JDK8新增便利的Map默认值方法
本文由 ImportNew - kingviker 翻译自 javacodegeeks。欢迎加入Java小组。转载请参见文章末尾的要求。在JDK8中Map接口提供了一些新的便利的方法。因为在本文中我所提到的所有Map方法都是以默认值方法的方式实现的,所以现有的Map接口的实现可以直接拥有这些在默认值方法中定义的默认行为,而不需要新增一行代码。本文涵盖的JDK8中引进的Map方法有:getO翻译 2014-05-19 10:25:50 · 15996 阅读 · 0 评论 -
Java8中学并发
Java8中学并发本文翻译自:http://jaxenter.com/lean-concurrency-in-java-8-49924.html有人曾经说过(很不幸,我们没有原话了):初级程序员认为并发很难。中级程序员认为并发很简单。高级程序员认为并发很难。这说的很对。但是从好的方面来看,通过lambda表达式和很多改进的API使编写并发代码更容易,翻译 2014-05-26 10:12:37 · 1853 阅读 · 0 评论 -
建造者模式实践
建造者模式实践本文翻译自:http://www.javacodegeeks.com/2013/01/the-builder-pattern-in-practice.html我不打算跳入设计模式的过多细节中,因为已经有一大堆的文章和书籍很详细的解释过了。所以我打算告诉你为什么和什么时候你应该考虑使用设计模式。然而,值得一提的是本文中的模式和设计模式可复用面向对象软件基础一书中的提翻译 2014-05-26 10:16:17 · 1264 阅读 · 0 评论 -
JVM垃圾回收(GC)原理
一、相关概念 基本回收算法 1. 引用计数(Reference Counting) 比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。 2. 标记-清除(Mark-Sweep) 此算法执行分两阶段。第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍转载 2014-06-25 14:56:06 · 971 阅读 · 0 评论 -
maven3总结
preface 早在2010年就听说了maven这个强大的工具,只是一直未能有机会在工作中尝试,让我苦恼了很旧,最近经理决定升级项目框架,才用maven来作为项目管理工具,让我好是开心了一番.what is Maven ? 绝大部分Maven用户都称Maven是一个"构建工具":一个用来把源代码构建成可发布的构件的工具。 构建原创 2013-12-04 10:58:45 · 2005 阅读 · 0 评论 -
EqualsBuilder和HashCodeBuilder
自动化hashCode()和equals() 问题产生:当需要自动实现hashCode()和equals()方法 解决方法:使用EqualsBuilder和HashCodeBuilder 使用举例: import org.apache.commons.lang.builder.HashCodeBuilder;import org.apache.commons.la转载 2013-07-12 10:18:37 · 3331 阅读 · 0 评论 -
linux下类似百度文库开发研究与实战
缘起由于项目需要开发了类似百度文库和DOCIN类似的Flash播放器读取上传文档的系统,虽然最终技术问题都得以解决,但开发的过程中走了不少弯路,浪费了不少时间,特别是FlexPaper去掉自带的Logo这一步上,前后花了几天才得以解决,郁闷的有点不想在事后整理这个文档。为了让自己更好的记下解决问题的关键点所在,让同样有此需求的开发人员避免浪费时间,少走一些弯路,打起精神整理本次开发过程的技术研转载 2013-01-28 02:59:46 · 1311 阅读 · 0 评论 -
activiti5.9调研总结(更新集成mysql数据库bug解决方案-2013.04.07)
activiti是jbpm4进化而来,team leader 也没换人,所以activiti和jbpm4的api有这将近60%的相同,官方网站是activiti.org. 上手来说比较简单.activiti自我感触 activiti也支持了bpmn2.0,而且在 支持的基础上,做了大量的自定义以activiti前缀开头的扩展,目的是让你用着更方便,一般来说,bpmn2原创 2012-07-16 08:00:13 · 9913 阅读 · 23 评论 -
读书笔记--编写高质量代码:改善java程序的151个建议(三)重写equals六大原则
读书笔记--编写高质量代码:改善java程序的151个建议(三)重写equals六大原则自反性原则:对于任何非空引用x,x.equals(x)应该返回true我们在写一个JavaBean时,经常会覆写equals方法,其目的是根据业务规则判断两个对象是否相等,比如我们写一个Person类,然后根据姓名判断两个实例对象是否相同,这在DAO(Data Access Objects)层是经常原创 2014-06-18 18:15:38 · 983 阅读 · 0 评论 -
Servlet生命周期
大多数程序员都知道Servlet的生命周期,简单的概括这就分为四步:servlet类加载--->实例化--->服务--->销毁。对这个过程只是肤浅了解下,对于servlet何时被销毁,还是不太情楚。下面我们描述一下Tomcat与Servlet是如何工作的,首先看下面的时序图.1、Web Client 向Servlet容器(Tomcat)发出Http请求2、Servlet容器转载 2014-06-20 17:54:46 · 748 阅读 · 0 评论 -
java并发编程的艺术笔记第十章--Executor框架
Executor框架简介Executor框架的两级调度模型在上层,Java多线程程序通常把应用分解为若干个任务,然后使用用户级的调度器(Executor框架)将这些任务映射为固定数量的线程;在底层,操作系统内核将这些线程映射到硬件处理器上。底层的调度不受应用程序的控制Executor框架的结构与成员1.Executor框架的结构Executor框架主要由3大部分组成如下。·任务。包括...原创 2019-03-26 18:33:28 · 335 阅读 · 0 评论 -
java并发编程的艺术笔记第七章--Java中的13个原子操作类
概述java为了方便在多线程环境下安全的更新变量,在Atomic包里一共提供了13个类,属于4种类型的原子更新方式,分别是原子更新基本类型、原子更新数组、原子更新引用和原子更新属性(字段)。Atomic包里的类基本都是使用Unsafe实现的包装类。1.原子更新基本类型类使用原子的方式更新基本类型,Atomic包提供了以下3个类。·AtomicBoolean:原子更新布尔类型。·Atom...原创 2019-03-22 11:40:20 · 241 阅读 · 0 评论 -
java并发编程的艺术笔记第六章--java并发容器和框架
ConcurrentHashMap的实现原理与使用1.1 为什么要使用ConcurrentHashMap在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于以上两个原因,便有了ConcurrentHashMap的登场机会。线程不安全的HashMap多线程进行hashMap的put操作会因导致在扩容hashmap的时候时候形成entryS...原创 2019-03-22 10:38:21 · 246 阅读 · 0 评论 -
java并发编程的艺术笔记第五章--java中的锁
lock接口Lock接口比synchronized关键字额外的特性尝试非阻塞的获取锁能被中断的获取锁超时获取锁void lock():获取锁,电泳该方法当前线程会获取锁,获得锁后,从该方法返回;void lockInterruptibly():可中断地获取锁,和lock()方法的不同之处在于该方法会响应中断,即在锁的获取中可以中断当前线程;boolean tryLoc...原创 2019-03-22 10:37:48 · 294 阅读 · 0 评论 -
java并发编程的艺术笔记第四章--java并发编程的基础
线程简介什么是线程现代操作系统调度的最小单元是线程,也叫轻量级进程(Light Weight Process),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉到这些线程在同时执行。为什么要使用多线程更多的处理器核心更快的响应时间更好的编程模型线程优先级设置线程优先级时,针对频繁...原创 2019-03-22 10:35:58 · 192 阅读 · 0 评论 -
java并发编程的艺术笔记第三章--java内存模型
Java内存模型的基础并发编程模型的两个关键问题线程之间如何通信及线程之间如何同步线程之间的通信机制有两种:共享内存和消息传递。Java的并发采用的是共享内存模型,Java线程之间的通信总是隐式进行,整个通信过程对程序员完全透明.在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。java内存模型的抽象结构堆内存.所有实例域、静态域和数组元素...原创 2019-03-22 10:33:55 · 448 阅读 · 0 评论 -
java并发编程的艺术笔记1-2章
第一章 并发编程的挑战多线程带来的上下文切换的成本频繁的切换上下文的效率开销某些情况下还不如单线程效率高减少上下文切换的手段:减少上下文切换的方法有无锁并发编程、CAS算法、使用最少线程和使用协程。·无锁并发编程。多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁,如将数据的ID按照Hash算法取模分段,不同的线程处理不同段的数据。CAS算法。Java...原创 2019-03-22 10:30:57 · 210 阅读 · 0 评论 -
java并发编程的艺术笔记第八章--Java中的并发工具类
概述在JDK的并发包里提供了几个非常有用的并发工具类。CountDownLatch、CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线程间交换数据的一种手段。1等待多线程完成的CountDownLatchCoundDownLatch用法比较简单,和Thead.join()方法功能类似,但是更灵活,直接看示例public c...原创 2019-03-25 15:35:52 · 475 阅读 · 0 评论 -
java并发编程的艺术笔记第九章--Java中的线程池
概述在开发过程中,合理地使用线程池能够带来3个好处:第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。但是,要做到合理利用线程池,必须对其实现原理了如...原创 2019-03-25 15:29:42 · 338 阅读 · 0 评论 -
读书笔记--编写高质量代码 改善java程序的151个建议(八)异常
读书笔记--编写高质量代码:改善java程序的151个建议(八)异常这个异常内容不多,简单总结一下就好了提倡异常封装异常封装可以提高系统的友好性,和可维护性,封装后给用户提供的异常信息更友好,然后给代码维护人员更容易阅读。受检异常尽可能的转化为非受检异常受检异常使接口声明变得很脆弱,代码可读性降低,还增加了开发工作量,但是在受检异常威胁到系统的安全性、稳定性、可靠性原创 2014-08-14 11:13:53 · 1227 阅读 · 1 评论 -
读书笔记--编写高质量代码 改善java程序的151个建议(六)枚举与注解
读书笔记--编写高质量代码 改善java程序的151个建议(六)枚举与注解使用枚举定义常量使用枚举定义常量相对来说更简单,而且枚举常量的个数是确定的不用担心越界啊或者其他字符串判断等问题。每个自定义的枚举类型都是Enum的子类,所以都继承了Enum定义的方法,用起来很方便,除了Enum定义的方法外编译器在编译自定义枚举的时候还会追加静态方法values和valueof(这个方法和Enu原创 2014-08-08 11:26:12 · 984 阅读 · 0 评论 -
Tomcat中session的管理机制
Tomcat中session的管理机制1. 请求过程中的session操作:简述:在请求过程中首先要解析请求中的sessionId信息,然后将sessionId存储到request的参数列表中。然后再从request获取session的时候,如果存在sessionId那么就根据Id从session池中获取session,如果sessionId不存在或者session失效转载 2014-06-23 11:19:37 · 2441 阅读 · 0 评论 -
hibernate查询优化----延迟加载优化
相信大家在使用hibernate(我这里使用的是3.6,因为我偏爱spring,但是hibernate4.x系以后和spring很多重复的地方,而且,spring也认为,hibernate4.x是一个很完善的框架了,spring3.x以后废弃掉了很多hibernate的支持类,所以我就不升级hibernate了)的时候都有这样的困惑,就是在配置hibernate映射文件的时候,如果有一对多(或者多原创 2013-04-07 16:05:58 · 1178 阅读 · 0 评论 -
spring security3 总结
使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户、权限、资源(url)硬编码在xml文件中,已经实现过,并经过验证; 二种是用户和权限用数据库存储,而资源(url)和权限的对应采用硬编码配置,目前这种方式已经实现,并经过验证。 三种是细分角色和权限原创 2012-12-26 14:26:14 · 1724 阅读 · 0 评论 -
利用org.apache.commons.io.FileUtils快速读写文件
利用org.apache.commons.io.FileUtils快速读写文件 http://php.11519.net/5jblog/?p=475 String fileName = "C://11.txt"; File file = new File(fileName); String fileContent = ""; try { fileC转载 2011-05-27 23:54:00 · 2531 阅读 · 0 评论 -
struts2如何获取Request-Session-ServletContext-Response
1. 访问和添加request/session/application属性 如果只是往request/session/application中设置属性,可以用下面的方式 Java代码 ActionContext ctx = ActionContext.getContext(); ctx.getApplication().put("app", "应用范围");原创 2011-05-20 20:07:00 · 2223 阅读 · 0 评论 -
用Stripes做Java Web开发(三)(转载)
用约定、不用配置文件 我们现在有了Java组件,我们该做配置了,把动作映射的一个URL上,并将其连接到我们的两个view上面去。等一下!我们在用Stripes,我们不需要外部配置文件! 虽然这听来好像好得不像是真的,但这的确是Stripes的一项最具生产效率的功能。Stripes使用约定而非配置文件来映射动作到URL上。我们也无须使用一个外部配置文件来把view映射到一个个标记原创 2011-05-20 20:11:00 · 1743 阅读 · 0 评论 -
用Stripes做Java Web开发(一)(转载
Stripes是一个以让程序员的web开发简单而高效为准则来设计的基于动作的开源Java web框架。本文将介绍Stripes与其它如Struts之类基于动作的框架的区别和其提供的一些存在于Ruby on Rails之中的简单性。 Stripes是一个以让程序员的web开发简单而高效为准则来设计的基于动作的开源Java web框架。传统的Java web开发着眼于借去耦(Decoup原创 2011-05-20 20:13:00 · 922 阅读 · 0 评论 -
struts1和struts2的区别
Struts1和Struts2的区别和对比:Action 类: ? Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。 ? Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去 实现 常用的接口。Action接口不是必原创 2011-05-20 20:20:00 · 767 阅读 · 1 评论 -
Hibernate多对多查询
一个老师教许多学生,一个学生被许多老师教,一个学生有好多书,同一种书被许多同学拥有.要查询教拥有书"a"的学生的老师!HQL如何写呀?如何取值? class Teacher{ String id; String name; Set students; } class Student{ String id; String转载 2012-04-11 09:49:14 · 1139 阅读 · 0 评论 -
jsp实现验证码两个例子
第一个:汉子型的验证码 从下面开始考呗 ---------------------------------------------》》》》 String path = reqst.getContextPath();String basePath = reqst.getScheme()+"://"+reqst.getServerName()+":"+reqs原创 2011-05-20 20:03:00 · 1408 阅读 · 0 评论 -
java.lang.OutOfMemoryError: Java heap space错误... (转载)
java.lang.OutOfMemoryError: Java heap space错误及处理办法 java.lang.OutOfMemoryError: Java heap space 使用Java程序从数据库中查询大量的数据时出现异常:java.lang.OutOfMemoryError: Java heap space在JVM中如果98%的时间是用于GC且可用的 Heap原创 2011-05-20 20:04:00 · 922 阅读 · 0 评论 -
利用Spring中的AOP做权限管理
AOP在Spring中占有很重要的地位,做了一个例子是利用AOP来做一个登陆的身份验证。。希望能对大家有所帮助,使用了AOP可以在不破坏你的代码的前提下帮你完成验证功能。。转一点AOP的知识:程序代码: 1、Spring只支持方法拦截,也就是说,只能在方法的前后进行拦截,而不能在属性前后进行拦截。2、Spring支持四种拦截类型:目标方法调用前(before),目标方法调用后(af原创 2011-05-20 20:21:00 · 1344 阅读 · 0 评论 -
发送邮件(转)
/// /// 发送邮件 /// /// 发送人的地址 /// 我的Email地址 /// 发送标题 /// 发送的内容 /// 我的Email登录名 /// 我的Email密码 /// Smtp邮件服务器 ///原创 2011-05-21 08:14:00 · 858 阅读 · 0 评论 -
Microsoft.AlphaImageLoader滤镜
很多大型网站上都使用到了这个滤镜,它是IE滤镜的一种,其主要作用就是对图片进行透明处理。虽然FireFox和IE7以上的IE浏览器已经支持透明的PNG图片,但是就IE5-IE6而言还是有一定的意义。语法:filter : progid:DXImageTransform.Microsoft.AlphaImageLoader ( enabled=bEnabled , sizingMethod=原创 2011-08-05 15:08:00 · 1846 阅读 · 0 评论