- 浏览: 73265 次
- 性别:
- 来自: 深圳
文章列表
1、工具类写成抽象类的方式,不允许实例这种类,只能通过类访问静态方法。
2、如果一个类设计成线程无关的单例类,则要求其首先是无状态类,不能出现成员变量。
3、慎用cglib。如果一个类不是单例类,或者说一个类是线程相关的类,请慎用cglib,因为cglib每次给该类生成代理时,jvm都会认为该类为新的类,需要重新加载如jvm的方法区,由此将导致jvm的方法区将出现oom异常。如:给每个action类用cglib代理时,将导致oom异常。
4、使用模版模式定义模版方式时,将模版方法定义为final方法,不允许子类修改模版,只允许子类实现模版方法里面提供的抽象方法即可。
先写这么多,后 ...
授权角色给用户的问题
- 博客分类:
- oracle
采用授权给角色,然后角色授权给用户的方式授权时,出现如下问题:
当包和存储过程需要用到不同的schema中的表时,出现未定义的异常,不允许编译通过
解决的方案:
将权限直接授给用户即可。
很多时候,表多一两个关键字段可带来查询时效率上很大的提升,这时我们称给表做适当冗余。但不是所有的表都适合做冗余,今天leader说了一个准则:
大表可做适当冗余。
小表不需要做。
利用oracle临时表进行的权限控制
- 博客分类:
- oracle
背景:不表中存放业务数据,某用户只能根据起用户所在的机构查询本机构和本机构下级机构的数据。
一般的解决方案:在查询sql里面做文章,根据当前用户,找出所在机构和下级机构,然后再在业务数据表进行过滤。这种方式优点是比较直观,缺点是sql写起来啰嗦重复,且容易出错。
新的解决方案:通过view进行业务数据的过滤,创建view时需要知道当前用户的基本信息,通过该信息即可创建对应用户的不同用户的view。
现在的关键点在于如何将基本信息明确保存起来,作用创建view。可利用oracle的会话级临时表,在系统获取数据库连接时将用户的机构和下级机构插入到该临时表,然后通过已经该表和 ...
2012年工作之余计划看完的两本书籍:
1、《深入理解java虚拟机》
2、《深入剖析tomcat》
刚看完gof的登记式单例,联想到spring容器的单例管理,根据自己的想法,写一个java语言的登记式单例模式,先记录下来。等看spring容器对bean的管理源码时再看其单例管理是如何实现的(spring容器应该是根据配置文件在加载时就用一个map缓存单例实例,取实例时根据scope属性在对应的缓存中找获取实例),然后对比学习。
下面是代码:
登记管理类
package com.shuidexiongdi.pattern.singleton.reg;
import java.util.HashMap;
import java.util.Map;
/**
* 单例注册管理 ...
本文使用范围:
1、采用连接池应用的sql执行监视
2、jboss服务器下部署的应用
进入正题
步骤如下:
1、修改连接池用到的driverClassName替换成:com.p6spy.engine.spy.P6SpyDriver
2、将spy.properties里面的realdriver设置成真实的driverClassName(也就是第一个步骤中原先的driverClassName)。
3、在spy.properties中添加
module.ibeam=com.irongrid.ibeam.server.IBeamFactory
monitorport=2000
(其他信息可自己根据需要 ...
最近在学习事务管理方面的知识,看了江南白衣推荐的一本书《Java Transaction Design Strategies》http://www.infoq.com/minibooks/JTDS之后,写点自己对事务的认知。
(一)java事务管理策略如下:
1、本地事务。
2、编程式事务
3、声明式事务
...
一道面试题引发的思考
- 博客分类:
- 设计模式
背景是一道面试题
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
写出计算第五个人多大的,过程(java)
如果这个题目给一个小学生,他也能很快做出来。大学生就不用说了,总结一下规律,比如一个等差数列几行代码就能解决问题。但要是你实现后面试则说其中一个说他说错了,是大3岁,而打破这种规则,你又如何处理呢。
这里就不对上诉做法进行任何说明。仅针对该类问题做一些分析。看下面关系
5-->4-->3-->2-->1 ...
同义词定义:如果一个单词每个字母出现的次数和另外一个单词每个字母出现的次数一样,则称这两个单词为同义词。
根据定义,我们可以将每个单词按字母排序,得出一个值(我们称之为单词签名),如果排序后的两个单词一致,则这两个单词为同义词。
package com.shuidexiongdi.thread;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import jav ...
背景:当遇到大数相乘是,用编程语言里面的数字类型做乘法会出现溢出情况,无法满足要求,故需要用字符串方式进行做乘法运算。
此文记录该算法的一个实现。先记录下来,已被后用或后面回顾。
算法原理:还记得我们小学学的算法吗,就是小学算法原理,利用位相乘,进位累加到前一位的原理。
1、将两个大数分解成n个(一个大数*1个一位数字)
2、将另一个大数分解成n个(1位数)
3、分解完后乘法按位相加。
package com.shuidexiongdi.multi;
public class BigMulti {
private static final int ascall = 48; ...
背景:刚看到一个同事用了一堆ifelse嵌套来判断是否执行最后业务逻辑,感觉很纠结,就想到能不能用责任链模式来处理这类问题。顺便记录下来备后面回顾思考
问题类似如下:
Java代码 收藏代码
if() {
if() {
if() {
....
doBusiness();
}
}
}
于是想到了责任链,直接贴代码如下:
处理接口,对外请求处理接口
package com.shuidexiongdi.chain; ...
下面例子摘自《深入JAVA虚拟机第二版》第19章,P354
PS:本文不做结果解释,原因请参考作者的解释。只描述结果
package com.shuidexiongdi.thread;
public class SuperTest {
public static void main(String[] args) {
new Sub().exampleMethod();
}
}
class Super {
private void interestingMethod() {
System.out.println("Super's interestin ...