??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲人成网站免费播放,亚洲国产AV无码一区二区三区,亚洲一区二区三区亚瑟http://www.tkk7.com/zjrstar/archive/2011/08/13/356457.html一叶笑?/dc:creator>一叶笑?/author>Sat, 13 Aug 2011 07:04:00 GMThttp://www.tkk7.com/zjrstar/archive/2011/08/13/356457.htmlhttp://www.tkk7.com/zjrstar/comments/356457.htmlhttp://www.tkk7.com/zjrstar/archive/2011/08/13/356457.html#Feedback0http://www.tkk7.com/zjrstar/comments/commentRss/356457.htmlhttp://www.tkk7.com/zjrstar/services/trackbacks/356457.html./Middleware_BI.5/instances/instance1/bin/opmnctl startproc ias-component=coreapplication_obips1

./Middleware_BI.5/instances/instance1/bin/opmnctl status

]]>
?/title><link>http://www.tkk7.com/zjrstar/archive/2010/03/17/315677.html</link><dc:creator>一叶笑?/dc:creator><author>一叶笑?/author><pubDate>Wed, 17 Mar 2010 07:15:00 GMT</pubDate><guid>http://www.tkk7.com/zjrstar/archive/2010/03/17/315677.html</guid><wfw:comment>http://www.tkk7.com/zjrstar/comments/315677.html</wfw:comment><comments>http://www.tkk7.com/zjrstar/archive/2010/03/17/315677.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/zjrstar/comments/commentRss/315677.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zjrstar/services/trackbacks/315677.html</trackback:ping><description><![CDATA[                                   H推雪花开Q?nbsp;                                  <br />                                    枝绕万朵立?nbsp;                                  <br />                                    不把春来报,<br />                                    p满h间? <img src ="http://www.tkk7.com/zjrstar/aggbug/315677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zjrstar/" target="_blank">一叶笑?/a> 2010-03-17 15:15 <a href="http://www.tkk7.com/zjrstar/archive/2010/03/17/315677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>无题http://www.tkk7.com/zjrstar/archive/2009/05/22/277286.html一叶笑?/dc:creator>一叶笑?/author>Fri, 22 May 2009 05:22:00 GMThttp://www.tkk7.com/zjrstar/archive/2009/05/22/277286.htmlhttp://www.tkk7.com/zjrstar/comments/277286.htmlhttp://www.tkk7.com/zjrstar/archive/2009/05/22/277286.html#Feedback0http://www.tkk7.com/zjrstar/comments/commentRss/277286.htmlhttp://www.tkk7.com/zjrstar/services/trackbacks/277286.html 晨入明光村?br /> 暮经大钟寺,
夜归西二旗?

]]>
?wi)的遍历Q{_http://www.tkk7.com/zjrstar/archive/2009/04/19/266438.html一叶笑?/dc:creator>一叶笑?/author>Sun, 19 Apr 2009 09:58:00 GMThttp://www.tkk7.com/zjrstar/archive/2009/04/19/266438.htmlhttp://www.tkk7.com/zjrstar/comments/266438.htmlhttp://www.tkk7.com/zjrstar/archive/2009/04/19/266438.html#Feedback0http://www.tkk7.com/zjrstar/comments/commentRss/266438.htmlhttp://www.tkk7.com/zjrstar/services/trackbacks/266438.html之前的工作都没有接触到树(wi)Q也很研I它。幸q地的是Q在目前的工作中多次遇到?wi)型l构的数据,那么讉K?wi)节点中的数据就是必然的了,而且q需要按照指定规则对节点中的数据q行额外处理。经q学?fn)之后,对与树(wi)相关的基本法有了一些认知,p划写几篇文。其实这L(fng)文章早已是汗牛充栋,而我只是把它当作我的学习(fn)ȝ|了Q以加深记忆与理解,如能对其他朋友有所助益Q则更感愉?zhn)?:-) (2009.04.03最后更?
q次先从最基础的开?-?wi)的遍历。本文用了两种极常用的Ҏ(gu)来遍历树(wi)中的所有节?-递归QP代,但它们实现的都是深度优先(Depth-First)法?br>1. ?wi)节点与数?/strong>
先定义树(wi)节点及数?用户对象)Qƈ创徏试用的数据?br>TreeNode是树(wi)节点的定义?

/**
* ?wi)节点的定义?br>*/
public interface TreeNode {
/**
     * 获取指定下标处的子节炏V?br>     *
     * @param index
     *            下标?br>     * @return 子节炏V?br>*/
public TreeNode getChildAt(int index);
/**
     * q回指定子节点的下标?br>     *
     * @param index
     *            下标?br>     * @return 子节炏V?br>*/
public int getChildIndex(TreeNode index);
/**
     * 获取子节点的数量?br>     *
     * @return 子节点的数量?br>*/
public int getChildCount();
/**
     * q回父节炏V?br>     *
     * @return 父节炏V?br>*/
public TreeNode getParent();
/**
     * 讄父节炏V注Q此处不需要改变父节点中的子节点元素?br>     *
     * @param parent
     *            父节炏V?br>*/
public void setParent(TreeNode parent);
/**
     * 获取所有的子节炏V?br>     *
     * @return 子节点的集合?br>*/
public List<?> getChildren();
/**
     * 是否为叶节点?br>     *
     * @return 是叶节点Q返回trueQ否则,q回false?br>*/
public boolean isLeaf();
}

GenericTreeNode是一个通用的树(wi)节点实现?

public class GenericTreeNode<T> implements TreeNode {
private T userObject = null;
private TreeNode parent = null;
private List<GenericTreeNode<T>> children = new ArrayList<GenericTreeNode<T>>();
public GenericTreeNode(T userObject) {
this.userObject = userObject;
    }
public GenericTreeNode() {
this(null);
    }
/**
     * d子节炏V?br>     *
     * @param child
*/
public void addChild(GenericTreeNode<T> child) {
        children.add(child);
        child.setParent(this);
    }
/**
     * 删除指定的子节点?br>     *
     * @param child
     *            子节炏V?br>*/
public void removeChild(TreeNode child) {
        removeChildAt(getChildIndex(child));
    }
/**
     * 删除指定下标处的子节炏V?br>     *
     * @param index
     *            下标?br>*/
public void removeChildAt(int index) {
        TreeNode child = getChildAt(index);
        children.remove(index);
        child.setParent(null);
    }
public TreeNode getChildAt(int index) {
return children.get(index);
    }
public int getChildCount() {
return children.size();
    }
public int getChildIndex(TreeNode child) {
return children.indexOf(child);
    }
public List<GenericTreeNode<T>> getChildren() {
return Collections.unmodifiableList(children);
    }
public void setParent(TreeNode parent) {
this.parent = parent;
    }
public TreeNode getParent() {
return parent;
    }
/**
     * 是否为根节点?br>     *
     * @return 是根节点Q返回trueQ否则,q回false?br>*/
public boolean isRoot() {
return getParent() == null;
    }
public boolean isLeaf() {
return getChildCount() == 0;
    }
/**
     * 判断指定的节Ҏ(gu)否ؓ(f)当前节点的子节点?br>     *
     * @param node
     *            节点?br>     * @return 是当前节点的子节点,q回trueQ否则,q回false?br>*/
public boolean isChild(TreeNode node) {
boolean result;
if (node == null) {
            result = false;
        } else {
if (getChildCount() == 0) {
                result = false;
            } else {
                result = (node.getParent() == this);
            }
        }
return result;
    }
public T getUserObject() {
return userObject;
    }
public void setUserObject(T userObject) {
this.userObject = userObject;
    }
    @Override
public String toString() {
return userObject == null ? "" : userObject.toString();
    }
}

UserObject是节点上的用户对象,相当于是数据?

public class UserObject {
private String name = null;
private Integer value = Integer.valueOf(0);
public UserObject() {
    }
public UserObject(String code, Integer value) {
this.name = code;
this.value = value;
    }
public String getName() {
return name;
    }
public void setName(String code) {
this.name = code;
    }
public Integer getValue() {
return value;
    }
public void setValue(Integer value) {
this.value = value;
    }
    @Override
public String toString() {
        StringBuilder result = new StringBuilder();
        result.append("[name=").append(name).append(", value=").append(value).append("]");
return result.toString();
    }
}

TreeUtils是用于创建树(wi)的工L(fng)?

public class TreeUtils {
public static GenericTreeNode<UserObject> buildTree() {
        GenericTreeNode<UserObject> root = new GenericTreeNode<UserObject>();
        root.setUserObject(new UserObject("ROOT", Integer.valueOf(0)));
        GenericTreeNode<UserObject> node1 = new GenericTreeNode<UserObject>();
        node1.setUserObject(new UserObject("1", Integer.valueOf(0)));
        GenericTreeNode<UserObject> node2 = new GenericTreeNode<UserObject>();
        node2.setUserObject(new UserObject("2", Integer.valueOf(0)));
        GenericTreeNode<UserObject> node3 = new GenericTreeNode<UserObject>();
        node3.setUserObject(new UserObject("3", Integer.valueOf(5)));
        root.addChild(node1);
        root.addChild(node2);
        root.addChild(node3);
        GenericTreeNode<UserObject> node11 = new GenericTreeNode<UserObject>();
        node11.setUserObject(new UserObject("11", Integer.valueOf(0)));
        GenericTreeNode<UserObject> node21 = new GenericTreeNode<UserObject>();
        node21.setUserObject(new UserObject("21", Integer.valueOf(0)));
        node1.addChild(node11);
        node2.addChild(node21);
        GenericTreeNode<UserObject> node111 = new GenericTreeNode<UserObject>();
        node111.setUserObject(new UserObject("111", Integer.valueOf(3)));
        GenericTreeNode<UserObject> node112 = new GenericTreeNode<UserObject>();
        node112.setUserObject(new UserObject("112", Integer.valueOf(9)));
        GenericTreeNode<UserObject> node211 = new GenericTreeNode<UserObject>();
        node211.setUserObject(new UserObject("211", Integer.valueOf(6)));
        GenericTreeNode<UserObject> node212 = new GenericTreeNode<UserObject>();
        node212.setUserObject(new UserObject("212", Integer.valueOf(3)));
        node11.addChild(node111);
        node11.addChild(node112);
        node21.addChild(node211);
        node21.addChild(node212);
return root;
    }
}

2. 递归?/strong>
使用递归法的最大好处就?-单,但一般地Q我们都认ؓ(f)递归的效率不高?

private static void recursiveTravel(GenericTreeNode<UserObject> node) {
    travelNode(node); // 讉K节点Q仅仅只是打印该节点|了?br>    List<GenericTreeNode<UserObject>> children = node.getChildren();
for (int i = 0; i < children.size(); i++) {
        recursiveTravel(children.get(i)); // 递归地访问当前节点的所有子节点?br>    }
}

大家肯定知道Q系l在执行递归Ҏ(gu)(对于其它Ҏ(gu)也是如此)时是使用q行时栈。对Ҏ(gu)的每一ơ调用,在栈中都?x)创Z份此ơ调用的zd记录--包括Ҏ(gu)的参敎ͼ局部变量,q回地址Q动态链接库Q返回值等?br>既然pȝ能够隐式C用栈L行递归Ҏ(gu)Q那么我们就可以昑ּC用栈来执行上q递归E序Q这也是递归E序转化P代程序的常用思想。下面的iterativeTravelҎ(gu)p用了q一思想?br>3. q代?/strong>

private static void iterativeTravel(GenericTreeNode<UserObject> node) {
    Stack<GenericTreeNode<UserObject>> nodes = new Stack<GenericTreeNode<UserObject>>();
    nodes.push(node); // 当前节点压入栈中?br>while (!nodes.isEmpty()) {
        GenericTreeNode<UserObject> bufNode = nodes.pop(); // 从栈中取Z个节炏V?br>        travelNode(bufNode); // 讉K节点?br>if (!bufNode.isLeaf()) { // 如果该节点ؓ(f)分枝节点Q则它的子节点全部加入栈中?br>            nodes.addAll(bufNode.getChildren());
        }
    }
}

与递归法相比,q代法的代码略多了几行,但仍然很单?br>
4. 结
׃上述两种Ҏ(gu)?隐式或显式地)使用了运行栈Q所以此处的q代法ƈ不能提高整个E序的效率。相反地Q由于在应用E序中显式地使用?java.util.Stack)QiterativeTravelҎ(gu)的效率可能反而更低。但iterativeTravel的最大好处是Q能够有效地避免q行时栈溢出(java.lang.StackOverflowError)?br>如果?wi)的层次不太深,每层的子节点C太多Q那么用递归法应该是没有问题的。毕竟,z地E序?x)提供更多的好处?

原文位置Q?a title="http://www.tkk7.com/jiangshachina/archive/2009/04/01/263241.html" href="http://www.tkk7.com/jiangshachina/archive/2009/04/01/263241.html">http://www.tkk7.com/jiangshachina/archive/2009/04/01/263241.html



]]>
试Windows live writerhttp://www.tkk7.com/zjrstar/archive/2009/04/17/266141.html一叶笑?/dc:creator>一叶笑?/author>Fri, 17 Apr 2009 05:53:00 GMThttp://www.tkk7.com/zjrstar/archive/2009/04/17/266141.htmlhttp://www.tkk7.com/zjrstar/comments/266141.htmlhttp://www.tkk7.com/zjrstar/archive/2009/04/17/266141.html#Feedback0http://www.tkk7.com/zjrstar/comments/commentRss/266141.htmlhttp://www.tkk7.com/zjrstar/services/trackbacks/266141.html如何利用Windows live writer 写博?/p>

1、在菜单中选择WeblogQ然后选择Another Weblog Service&?

2、在Weblog Homepage URL中输入你的Blog主页地址?br>3、输入用户名与密码?br>4、在Type of  weblog that you are using中选择Metaweblog API?br>5、Remote posting URL for your weblog中输?a href="http://www.tkk7.com/Blog">http://www.tkk7.com/Blog?services/metaweblog.aspx?

使用注意Q用Windows Live Writer发布之后QW(xu)indows Live Writerq不改变当前H口的状?也没有明昄提示)Q在当前H口中会(x)刚发布的随W处于编辑状态,如果修改q发布,?x)直接修改刚发布的随W内宏V?/p>

]]>
?/title><link>http://www.tkk7.com/zjrstar/archive/2009/04/17/266139.html</link><dc:creator>一叶笑?/dc:creator><author>一叶笑?/author><pubDate>Fri, 17 Apr 2009 05:32:00 GMT</pubDate><guid>http://www.tkk7.com/zjrstar/archive/2009/04/17/266139.html</guid><wfw:comment>http://www.tkk7.com/zjrstar/comments/266139.html</wfw:comment><comments>http://www.tkk7.com/zjrstar/archive/2009/04/17/266139.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/zjrstar/comments/commentRss/266139.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zjrstar/services/trackbacks/266139.html</trackback:ping><description><![CDATA[今日雅兴Q写了几句?br /> <br />           ?br /> 四月春风x?<br /> d旧袄换绿衫?br /> 江中鸭拨涟漪,<br /> l雨无惊忘归途?br /> <br /> <br /> <img src ="http://www.tkk7.com/zjrstar/aggbug/266139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zjrstar/" target="_blank">一叶笑?/a> 2009-04-17 13:32 <a href="http://www.tkk7.com/zjrstar/archive/2009/04/17/266139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse使用SVN[转]http://www.tkk7.com/zjrstar/archive/2009/03/11/259221.html一叶笑?/dc:creator>一叶笑?/author>Wed, 11 Mar 2009 13:32:00 GMThttp://www.tkk7.com/zjrstar/archive/2009/03/11/259221.htmlhttp://www.tkk7.com/zjrstar/comments/259221.htmlhttp://www.tkk7.com/zjrstar/archive/2009/03/11/259221.html#Feedback0http://www.tkk7.com/zjrstar/comments/commentRss/259221.htmlhttp://www.tkk7.com/zjrstar/services/trackbacks/259221.html׃原文地址不详Q我转脓(chung)臻I(x)http://www.tkk7.com/mose2006/archive/2008/01/05/173070.html

1.下蝲所需软g
    1.1SVN服务?svn-1.4.3-setup.exe)
        http://subversion.tigris.org/project_packages.html
    1.2把SVN讄成window服务(SVNService.exe)
        我没有下载地址,如有需?留下你的email
    1.3Eclipse的SVN插g(用Eclipse插g下蝲):

2.配置服务?/strong>
    2.1安装svn-1.4.3-setup.exe
    2.2开?>q行->cmd->q入SVN服务端的安装目录下面的bin目录
    2.3cmd下运行svnadmin create SVN库的位置(?D:\SVN_PRJ)
    2.4复制SVNService.exe到SVN服务端安装目录下的bin目录
    2.5cmd下运行SVNService -install -d -r D:\SVN_PRJ(SVN库的位置)
    2.6如果x消掉后台服务,则运行SVNService -remove
    2.7q入D:\SVN_PRJ\conf目录下编辑svnserve.conf,内容如下(切记下面几行字前不能有空?Q?br />         [general]
        anon-access = read    #匿名讉K权限,取gؓ(f)read,write,none
        auth-access = write   #认证用户的权?br />         password-db = passwd #认证用户数据?卛_许连到SVN的用?当前目录下的passwd文g中存攄用户及密?
        realm = TESTING       #在用戯证界面上出现的提C?br />     2.8~辑D:\SVN_PRJ\conf\passwd文g,内容如下
        [users]
        test = password       #q时你连接SVN的时候可以用用户名为test密码为password来连接SVN
    2.9开?>讄->控制面板->理工具->服务->启动SVNService服务

3.Eclipse下配|SVN插g
    3.1帮助->软g更新->查找q安?>搜烦要安装的新功能部?>新徏q程站点->输入一个Q意的名称->URL输入

http://subclipse.tigris.org/update_1.2.x->定->选中你刚才添加的q程站点->完成->选中Subclipse->执行安装操作
    3.2H口->打开透视?>SVN资源库研I?>右键->新徏->资源库位|?>URL中输入svn://127.0.0.1/->输入2.7定义的用户名test和密?br />
password

4.提交工程
    4.1叛_工程->组->׃n目->选择SVN->选择svn://127.0.0.1(如果没有,则创Z个新的资源库)->下一?>完成

5.下蝲工程
    5.1在SVN资源库透视图下,点开svn://127.0.0.1,?x)显C出现在本机SVN上的所有工E?叛_你想下蝲的工E?>Zؓ(f)->下一?>完成

6.基本操作
    6.1同步
        在MyEclipse J2EE透视图下,叛_你要同步的工E?>组->与资源库同步->q时?x)进入同步透视??x)显C出本机与SVN上内Ҏ(gu)不同的文?双击文g??x)显C出两个文g中哪里不?
    6.2提交
        在同步透视图下?灰色向右的箭?表示你本Z改过",叛_该文?可以选择提交操作;
    6.3覆盖/更新
        在同步透视图下?蓝色向左的箭?表示你本Z改过",叛_该文?可以选择覆盖/更新操作;

7.图标说明
    7.1灰色向右头:本地修改q?br />     7.2蓝色向左头:SVN上修改过
    7.3灰色向右且中间有个加L(fng)头:本地比SVN上多出的文g
    7.4蓝色向左且中间有个加L(fng)头:SVN上比本地多出的文?br />     7.5灰色向右且中间有个减L(fng)头:本地删除?而SVN上未删除的文?br />     7.6蓝色向左且中间有个减L(fng)头:SVN上删除了,而本地未删除的文?br />     7.7U色双向头:SVN上修改过,本地也修改过的文?br />
8.一些我遇到的出错信?/strong>
    8.1在上面讲?.2步输入URL(svn://127.0.0.1)点下一步出?svnserve.conf:12: Option expected"错误
        你打开svnserve.conf文g中的W?2?该错误是׃该行的前面有I格引v?把左边多出的I格删除掉即?
    8.2在上面讲?.2步输入URL(svn://127.0.0.1/SVN_PRJ)点下一步出?svn://127.0.0.1/SVN_PRJ non-existent in revision '7'"错误
        URL错了,应该输入svn://127.0.0.1卛_
9.SVN服务端自带的Z命o行的操作语句
    9.1讄SVN服务端安装目录下?bin到环境变量中;
    9.2在命令行下运行svn import c:/test svn://127.0.0.1/test -m "initial import" --username test --password passwd可进行上传操?br />     9.3q入你要出的目录,在命令行下运行svn checkout svn://127.0.0.1/test --username test -password passwd 可进行检出工E的操作
    9.4在命令行下运行svn commit test.txt -m "modified" --username test -password passwd 可进行提交操?br />     9.5在命令行下运行svn update -r HEAD test.txt --username test -password passwd 可进行更新操?br />
?上面讲的127.0.0.1可以换成外网IP,或者局域网IP皆可(?在家里创Z个SVN服务?卛_在公司去讉K安的SVN)



]]>
转脓(chung)Qoracle SQL性能优化 http://www.tkk7.com/zjrstar/archive/2009/02/10/254030.html一叶笑?/dc:creator>一叶笑?/author>Tue, 10 Feb 2009 03:16:00 GMThttp://www.tkk7.com/zjrstar/archive/2009/02/10/254030.htmlhttp://www.tkk7.com/zjrstar/comments/254030.htmlhttp://www.tkk7.com/zjrstar/archive/2009/02/10/254030.html#Feedback0http://www.tkk7.com/zjrstar/comments/commentRss/254030.htmlhttp://www.tkk7.com/zjrstar/services/trackbacks/254030.html原文地址Qhttp://www.tkk7.com/fuwei2241/archive/2006/10/01/oracleSQL.html

我们要做C但会(x)写SQL,q要做到写出性能优良的SQL,以下为笔者学?fn)、摘录、ƈ汇总部分资料与大家分nQ?
Q?Q?nbsp;     选择最有效率的表名序 ( 只在Z规则的优化器中有?) Q?
ORACLE 的解析器按照从右到左的顺序处?FROM 子句中的表名Q?FROM 子句中写在最后的?( 基础?driving table) 被最先处理,?FROM 子句中包含多个表的情况下 , 你必选择记录条数最的表作为基表。如果有 3 个以上的表连接查?, 那就需要选择交叉?(intersection table) 作ؓ(f)基础?, 交叉表是指那个被其他表所引用的表 .
Q?Q?nbsp;     WHERE 子句中的q接序Q:(x)
ORACLE 采用自下而上的顺序解?WHERE 子句 , Ҏ(gu)q个原理 , 表之间的q接必须写在其他 WHERE 条g之前 , 那些可以qo掉最大数量记录的条g必须写在 WHERE 子句的末?.
Q?Q?nbsp;     SELECT 子句中避免?‘ * ‘ Q?
ORACLE 在解析的q程?, ?x)?'*' 依次转换成所有的列名 , q个工作是通过查询数据字典完成?, q意味着耗费更多的时?
Q?Q?nbsp;     减少讉K数据库的ơ数Q?
ORACLE 在内部执行了许多工作 : 解析 SQL 语句 , 估算索引的利用率 , l定变量 , L据块{;
Q?Q?nbsp;     ?SQL*Plus , SQL*Forms ?Pro*C 中重新设|?ARRAYSIZE 参数 , 可以增加每次数据库访问的索数据量 , gؓ(f) 200
Q?Q?nbsp;     使用 DECODE 函数来减处理时_(x)
使用 DECODE 函数可以避免重复扫描相同记录或重复连接相同的?.
Q?Q?nbsp;     整合?, 无关联的数据库访问:(x)
如果你有几个单的数据库查询语?, 你可以把它们整合C个查询中 ( 即它们之间没有关系 )
Q?Q?nbsp;     删除重复记录 Q?
最高效的删除重复记录方?( 因ؓ(f)使用?ROWID) 例子Q?
DELETE  FROM  EMP E  WHERE  E.ROWID > (SELECT MIN(X.ROWID)
FROM  EMP X  WHERE  X.EMP_NO = E.EMP_NO);
Q?Q?nbsp;     ?TRUNCATE 替代 DELETE Q?
当删除表中的记录?, 在通常情况?, 回滚D?(rollback segments ) 用来存放可以被恢复的信息 . 如果你没?COMMIT 事务 ,ORACLE ?x)将数据恢复到删除之前的状?( 准确地说?恢复到执行删除命令之前的状况 ) 而当q用 TRUNCATE ?, 回滚D不再存放Q何可被恢复的信息 . 当命令运行后 , 数据不能被恢?. 因此很少的资源被调用 , 执行旉也会(x)很短 . ( 译者按 : TRUNCATE 只在删除全表适用 ,TRUNCATE ?DDL 不是 DML)
Q?0Q?nbsp; 量多?COMMIT Q?
只要有可?, 在程序中量多?COMMIT, q样E序的性能得到提高 , 需求也?x)因?COMMIT 所释放的资源而减?:
COMMIT 所释放的资?:
a. 回滚D上用于恢复数据的信?.
b. 被程序语句获得的?
c. redo log buffer 中的I间
d. ORACLE 为管理上q?3 U资源中的内部花?
Q?1Q?nbsp; ?Where 子句替换 HAVING 子句Q?
避免使用 HAVING 子句 , HAVING 只会(x)在检索出所有记录之后才对结果集q行qo . q个处理需要排?, 总计{操?. 如果能通过 WHERE 子句限制记录的数?, 那就能减这斚w的开销 . ( ?oracle ?) on ?where ?having q三个都可以加条件的子句中, on 是最先执行, where ơ之Q?having 最后,因ؓ(f) on 是先把不W合条g的记录过滤后才进行统计,它就可以减少中间q算要处理的数据Q按理说应该速度是最快的Q?where 也应该比 having 快点的,因ؓ(f)它过滤数据后才进?sum Q在两个表联接时才用 on 的,所以在一个表的时候,剩?where ?having 比较了。在q单表查询统计的情况下,如果要过滤的条g没有涉及到要计算字段Q那它们的结果是一L(fng)Q只?where 可以使用 rushmore 技术,?having ׃能,在速度上后者要慢如果要涉及到计的字段Q就表示在没计算之前Q这个字D늚值是不确定的Q根据上写的工作流E, where 的作用时间是在计之前就完成的,?having 是在计后才v作用的,所以在q种情况下,两者的l果?x)不同。在多表联接查询Ӟ on ?where 更早起作用。系l首先根据各个表之间的联接条Ӟ把多个表合成一个(f)时表后,再由 where q行qoQ然后再计算Q计完后再?having q行qo。由此可见,要想qo条g起到正确的作用,首先要明白这个条件应该在什么时候v作用Q然后再军_攑֜那里
Q?2Q?nbsp; 减少对表的查询:(x)
在含有子查询?SQL 语句?, 要特别注意减对表的查询 . 例子Q?
     SELECT  TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = ( SELECT
TAB_NAME,DB_VER  FROM  TAB_COLUMNS   WHERE  VERSION = 604)
Q?3Q?nbsp; 通过内部函数提高 SQL 效率 . Q?
复杂?SQL 往往牺牲了执行效?. 能够掌握上面的运用函数解决问题的Ҏ(gu)在实际工作中是非常有意义?
Q?4Q?nbsp; 使用表的别名 (Alias) Q?
当在 SQL 语句中连接多个表?, 请用表的别名ƈ把别名前~于每?Column ?. q样一?, 可以减解析的旉q减那些由 Column 歧义引v的语法错?.
Q?5Q?nbsp; ?EXISTS 替代 I N ??NOT EXISTS 替代 NOT IN Q?
在许多基于基表的查询?, Z满一个条?, 往往需要对另一个表q行联接 . 在这U情况下 , 使用 EXISTS( ?NOT EXISTS) 通常提高查询的效率 . 在子查询?,NOT IN 子句执行一个内部的排序和合q?. 无论在哪U情况下 ,NOT IN 都是最低效?( 因ؓ(f)它对子查询中的表执行了一个全表遍?). Z避免使用 NOT IN , 我们可以把它改写成外q接 (Outer Joins) ?NOT EXISTS.
例子Q?
Q?高效 Q?SELECT * FROM  EMP ( 基础?)   WHERE  EMPNO > 0   AND   EXISTS ( SELECT ‘X'   FROM DEPT   WHERE  DEPT.DEPTNO = EMP.DEPTNO   AND  LOC = ‘MELB')
( 低效 ) SELECT  * FROM  EMP ( 基础?)   WHERE  EMPNO > 0   AND  DEPTNO IN (SELECT DEPTNO   FROM  DEPT   WHERE  LOC = ‘MELB' )
Q?6Q?nbsp; 识别 ' 低效执行 ' ?SQL 语句Q?
虽然目前各种关于 SQL 优化的图形化工具层出不穷 , 但是写出自己?SQL 工具来解决问题始l是一个最好的Ҏ(gu)Q?
SELECT  EXECUTIONS , DISK_READS, BUFFER_GETS,
ROUND ((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2 ) Hit_radio,
ROUND (DISK_READS/EXECUTIONS,2) Reads_per_run,
SQL_TEXT
FROM  V$SQLAREA
WHERE  EXECUTIONS>0
AND  BUFFER_GETS > 0
AND  (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8
ORDER BY   4 DESC ;
Q?7Q?nbsp; 用烦引提高效率:(x)
索引是表的一个概念部?, 用来提高?gu)索数据的效率Q?ORACLE 使用了一个复杂的自^?B-tree l构 . 通常 , 通过索引查询数据比全表扫描要?. ?ORACLE 扑և执行查询?Update 语句的最佌\径时 , ORACLE 优化器将使用索引 . 同样在联l多个表时用烦引也可以提高效率 . 另一个用烦引的好处?, 它提供了主键 (primary key) 的唯一性验?. 。那?LONG ?LONG RAW 数据cd , 你可以烦引几乎所有的?. 通常 , 在大型表中用烦引特别有?. 当然 , 你也?x)发?, 在扫描小表时 , 使用索引同样能提高效?. 虽然使用索引能得到查询效率的提高 , 但是我们也必L意到它的代h(hun) . 索引需要空间来存储 , 也需要定期维?, 每当有记录在表中增减或烦引列被修Ҏ(gu) , 索引本n也会(x)被修?. q意味着每条记录?INSERT , DELETE , UPDATE ؓ(f)此多付出 4 , 5 ơ的盘 I/O . 因ؓ(f)索引需要额外的存储I间和处?, 那些不必要的索引反而会(x)使查询反应时间变?. 。定期的重构索引是有必要?. Q?
ALTER   INDEX <INDEXNAME> REBUILD <TABLESPACENAME>
Q?8Q?nbsp; ?EXISTS 替换 DISTINCT Q?
当提交一个包含一对多表信?( 比如部门表和雇员?) 的查询时 , 避免?SELECT 子句中?DISTINCT. 一般可以考虑?EXIST 替换 , EXISTS 使查询更?, 因ؓ(f) RDBMS 核心模块在 子查询的条g一旦满_ , 立刻q回l果 . 例子Q?
       ( 低效 ):
SELECT   DISTINCT  DEPT_NO,DEPT_NAME   FROM  DEPT D , EMP E
WHERE  D.DEPT_NO = E.DEPT_NO
( 高效 ):
SELECT  DEPT_NO,DEPT_NAME   FROM  DEPT D   WHERE   EXISTS ( SELECT ‘X'
FROM  EMP E   WHERE  E.DEPT_NO = D.DEPT_NO ) ;
Q?9Q?nbsp; sql 语句用大写的 Q因?oracle L先解?sql 语句Q把写的字母{换成大写的再执行
Q?0Q?nbsp; ?java 代码中尽量少用连接符“Q?#8221;q接字符Ԍ
Q?1Q?nbsp; 避免在烦引列上?NOT 通常 Q 
我们要避免在索引列上使用 NOT, NOT ?x)生在和在索引列上使用函数相同?影响 . ?ORACLE” 遇到 ”NOT, 他就?x)停止用烦引{而执行全表扫?.
Q?2Q?nbsp; 避免在烦引列上用计.
WHERE 子句中,如果索引列是函数的一部分Q优化器不使用索引而用全表扫描.
举例 :
低效Q?
SELECT … FROM  DEPT  WHERE SAL * 12 > 25000;
高效 :
SELECT … FROM DEPT WHERE SAL > 25000/12;
Q?3Q?nbsp; ?>= 替代 >
高效 :
SELECT * FROM  EMP  WHERE  DEPTNO >=4
低效 :
SELECT * FROM EMP WHERE DEPTNO >3
两者的区别在于 , 前?DBMS 直接蟩到第一?DEPT {于 4 的记录而后者将首先定位?DEPTNO=3 的记录ƈ且向前扫描到W一?DEPT 大于 3 的记?.
Q?4Q?nbsp; ?UNION 替换 OR ( 适用于烦引列 )
通常情况?, ?UNION 替换 WHERE 子句中的 OR 会(x)起到较好的效?. 对烦引列使用 OR 造成全表扫描 . 注意 , 以上规则只针对多个烦引列有效 . 如果?column 没有被烦?, 查询效率可能?x)因Z没有选择 OR 而降?. 在下面的例子?, LOC_ID ?REGION 上都建有索引 .
高效 :
SELECT LOC_ID , LOC_DESC , REGION
FROM LOCATION
WHERE LOC_ID = 10
UNION
SELECT LOC_ID , LOC_DESC , REGION
FROM LOCATION
WHERE REGION = “MELBOURNE”
低效 :
SELECT LOC_ID , LOC_DESC , REGION
FROM LOCATION
WHERE LOC_ID = 10 OR REGION = “MELBOURNE”
如果你坚持要?OR, 那就需要返回记录最的索引列写在最前面 .
Q?5Q?nbsp; ?IN 来替?OR  
q是一条简单易记的规则Q但是实际的执行效果q须验,?ORACLE8i 下,两者的执行路径g是相同的Q 
低效 :
SELECT …. FROM LOCATION WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30
高效
SELECT … FROM LOCATION WHERE LOC_IN   IN (10,20,30);
Q?6Q?nbsp; 避免在烦引列上?IS NULL ?IS NOT NULL
避免在烦引中使用M可以为空的列Q?ORACLE 无法用该索引 Q对于单列烦引,如果列包含空|索引中将不存在此记录 . 对于复合索引Q如果每个列都ؓ(f)I,索引中同样不存在此记?.  如果臛_有一个列不ؓ(f)I,则记录存在于索引中. 举例 : 如果唯一性烦引徏立在表的 A 列和 B 列上 , q且表中存在一条记录的 A,B gؓ(f) (123,null) , ORACLE 不接受下一条具有相?A,B | 123,null Q的记录 ( 插入 ). 然而如?所有的索引列都为空Q?ORACLE 认为整个键gؓ(f)I空不等于空 . 因此你可以插?1000 条具有相同键值的记录 , 当然它们都是I?! 因ؓ(f)Ig存在于烦引列?, 所?WHERE 子句中对索引列进行空值比较将?ORACLE 停用该烦?.
低效 : ( 索引失效 )
SELECT … FROM  DEPARTMENT   WHERE  DEPT_CODE IS NOT NULL ;
高效 : ( 索引有效 )
SELECT … FROM  DEPARTMENT   WHERE  DEPT_CODE >= 0;
Q?7Q?nbsp; L使用索引的第一个列 Q?
如果索引是徏立在多个列上 , 只有在它的第一个列 (leading column) ?where 子句引用?, 优化器才?x)选择使用该烦?. q也是一条简单而重要的规则Q当仅引用烦引的W二个列?, 优化器用了全表扫描而忽略了索引
Q?8Q?nbsp; ?UNION-ALL 替换 UNION ( 如果有可能的?) Q?
?SQL 语句需?UNION 两个查询l果集合?, q两个结果集合会(x)?UNION-ALL 的方式被合ƈ , 然后在输出最l结果前q行排序 . 如果?UNION ALL 替代 UNION, q样排序׃是必要了 . 效率׃(x)因此得到提高 . 需要注意的?Q?UNION ALL 重复输Z个结果集合中相同记录 . 因此各位q是 要从业务需求分析?UNION ALL 的可行?. UNION 对l果集合排序 , q个操作?x)用?SORT_AREA_SIZE q块内存 . 对于q?块内存的优化也是相当重要?. 下面?SQL 可以用来查询排序的消耗量
低效Q?
SELECT  ACCT_NUM, BALANCE_AMT
FROM  DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95'
UNION
SELECT ACCT_NUM, BALANCE_AMT
FROM DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95'
高效 :
SELECT ACCT_NUM, BALANCE_AMT
FROM DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95'
UNION ALL
SELECT ACCT_NUM, BALANCE_AMT
FROM DEBIT_TRANSACTIONS
WHERE TRAN_DATE = '31-DEC-95'
Q?9Q?nbsp; ?WHERE 替代 ORDER BY Q?
ORDER BY 子句只在两种严格的条件下使用索引 .
ORDER BY 中所有的列必d含在相同的烦引中q保持在索引中的排列序 .
ORDER BY 中所有的列必d义ؓ(f)非空 .
WHERE 子句使用的烦引和 ORDER BY 子句中所使用的烦引不能ƈ?.
例如 :
?DEPT 包含以下?:
DEPT_CODE PK NOT NULL
DEPT_DESC NOT NULL
DEPT_TYPE NULL
低效 : ( 索引不被使用 )
SELECT DEPT_CODE  FROM  DEPT   ORDER BY  DEPT_TYPE
高效 : ( 使用索引 )
SELECT DEPT_CODE   FROM  DEPT   WHERE  DEPT_TYPE > 0
Q?0Q?nbsp; 避免改变索引列的cd .:
当比较不同数据类型的数据?, ORACLE 自动对列q行单的cd转换 .
假设 EMPNO 是一个数值类型的索引?.
SELECT …   FROM EMP   WHERE   EMPNO = ‘123'
实际?, l过 ORACLE cd转换 , 语句转化?:
SELECT …   FROM EMP  WHERE  EMPNO = TO_NUMBER(‘123')
q运的是 , cd转换没有发生在烦引列?, 索引的用途没有被改变 .
现在 , 假设 EMP_TYPE 是一个字W类型的索引?.
SELECT …   FROM EMP   WHERE EMP_TYPE = 123
q个语句?ORACLE 转换?:
SELECT …   FROM EMP   WHERE TO_NUMBER(EMP_TYPE)=123
因ؓ(f)内部发生的类型{?, q个索引不?x)被用?! Z避免 ORACLE 对你?SQL q行隐式的类型{?, 最好把cd转换用显式表现出?. 注意当字W和数值比较时 , ORACLE ?x)优先{换数值类型到字符cd
Q?1Q?nbsp; 需要当心的 WHERE 子句 :
某些 SELECT 语句中的 WHERE 子句不用烦?. q里有一些例?.
在下面的例子?, (1) ‘!=' 不使用索引 . C , 索引只能告诉你什么存在于表中 , 而不能告诉你什么不存在于表?. (2) ‘||' ?字符q接函数 . p其他函数那样 , 停用了烦?. (3) ‘+' 是数学函?. p其他数学函数那样 , 停用了烦?. (4) 相同的烦引列不能互相比较 , q将?x)启用全表扫?.
Q?2Q?nbsp; a. 如果索数据量过 30% 的表中记录数 . 使用索引没有显著的效率提高 .
b. 在特定情况下 , 使用索引也许?x)比全表扫描?, 但这是同一个数量上的区别 . 而通常情况?, 使用索引比全表扫描要块几倍乃臛_千?!
Q?3Q?nbsp; 避免使用耗费资源的操?:
带有 DISTINCT,UNION,MINUS,INTERSECT,ORDER BY ?SQL 语句?x)启?SQL 引擎
执行耗费资源的排?(SORT) 功能 . DISTINCT 需要一ơ排序操?, 而其他的臛_需要执行两ơ排?. 通常 , 带有 UNION, MINUS , INTERSECT ?SQL 语句都可以用其他方式重写 . 如果你的数据库的 SORT_AREA_SIZE 调配得好 , 使用 UNION , MINUS, INTERSECT 也是可以考虑?, 毕竟它们的可L很?
Q?4Q?nbsp; 优化 GROUP BY:
提高 GROUP BY 语句的效?, 可以通过不需要的记录?GROUP BY 之前qo?. 下面两个查询q回相同l果但第二个明显快了许?.
低效 :
SELECT JOB , AVG(SAL)
FROM EMP
GROUP JOB
HAVING JOB = ‘PRESIDENT'
OR JOB = ‘MANAGER'
高效 :
SELECT JOB , AVG(SAL)
FROM EMP
WHERE JOB = ‘PRESIDENT'
OR JOB = ‘MANAGER'
GROUP JOB



]]>
Struts2边学边练(3)-Struts2集成Hibernate完成CRUD操作http://www.tkk7.com/zjrstar/archive/2009/01/08/250461.html一叶笑?/dc:creator>一叶笑?/author>Thu, 08 Jan 2009 03:35:00 GMThttp://www.tkk7.com/zjrstar/archive/2009/01/08/250461.htmlhttp://www.tkk7.com/zjrstar/comments/250461.htmlhttp://www.tkk7.com/zjrstar/archive/2009/01/08/250461.html#Feedback2http://www.tkk7.com/zjrstar/comments/commentRss/250461.htmlhttp://www.tkk7.com/zjrstar/services/trackbacks/250461.html阅读全文

]]>
Struts2边学边练(1)-HelloWorldhttp://www.tkk7.com/zjrstar/archive/2009/01/06/250161.html一叶笑?/dc:creator>一叶笑?/author>Tue, 06 Jan 2009 11:20:00 GMThttp://www.tkk7.com/zjrstar/archive/2009/01/06/250161.htmlhttp://www.tkk7.com/zjrstar/comments/250161.htmlhttp://www.tkk7.com/zjrstar/archive/2009/01/06/250161.html#Feedback0http://www.tkk7.com/zjrstar/comments/commentRss/250161.htmlhttp://www.tkk7.com/zjrstar/services/trackbacks/250161.html
声明一下,我博客中所有的文章仅供本h学习(fn)之用Q最q有人对我的文章评论q激Q在此我希望(zhn)不要耽搁旉在我的博客中。如果文章中有什么不对之处,我欢q大家指出,但是我希望?zhn)珍惜自己的言行?br />
开发环境:(x)

Web服务器:(x)apache-tomcat-6.0.18

Struts版本Q?/span>struts-2.0.14

JDK版本Q?/span>JDK1.5.0_12

Eclipse版本Qeclipse-jee-ganymede-SR1-win32 也就是eclipse的开发JEE版本Q很多h都用myeclipseQ但是由于myeclipse是商业版本,所以觉得eclipse-jee-ganymede对于开发JEE的项目已l很不错了,所以我觉得没必要用myEclipsed发?br />
Struts2需要的jar包:(x)

臛_需要如下五个包

struts2-core-2.0.11.1.jar

xwork-2.0.4.jar

commons-logging-1.0.4.jar

freemarker-2.3.8.jar

ognl-2.6.11.jar

在这个简单的例子中,我们会(x)完成以下步骤Q?br /> 1.配置web.xml
2.~写jsp
3.~写Action实现c?br /> 4.配置Action
5.发布q行

1.配置web.xml
Struts2的入口点是一?/span>Filter,需要将q个入口炚w|到web.xmlQ?br />

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    
    
<display-name>HelloWorld</display-name>
    
    
<welcome-file-list>
        
<welcome-file>index.jsp</welcome-file>
    
</welcome-file-list>
    
    
<filter>
        
<filter-name>struts2</filter-name>
        
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    
</filter>
    
<filter-mapping>
        
<filter-name>struts2</filter-name>
        
<url-pattern>/*</url-pattern>
    
</filter-mapping>
    
</web-app>


2. ~写jsp
在这个例子中需要两个jspQ一个是index.jsp, 用于输入用户的名字。第二个jsp是welcome.jspQ用于向用户问候?br />
在Struts2中只需要一个标{ֺ/struts-tags。这里面包含了所有的Struts2标签。但使用Struts2的标{֤家要注意一下。在<s::form>中最好都使用Struts2标签Q尽量不要用HTML或普通文?

index.jsp如下Q?br />

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>HelloWorld</title>
</head>
<body>
  
<s:form action="Hello">
     
<s:textfield name="name" label="Please Input Your Name:"></s:textfield>
     
<s:submit value="Hello"></s:submit>
  
</s:form>
</body>
</html>

welcome.jsp如下Q?br />

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>HelloWorld</title>
</head>
<body>
  Hello 
<s:property value="name"/>
</body>
</html>


3.~写Actionc?br /> Struts2.x的Action需要从com.opensymphony.xwork2.ActionSupportcȝѝ而且Action中已l包含了Struts1中的ActionFormcM息,所以不需要再写ActionFormcR?br />
在这个例子中只编写了一个HelloWorld.javac:(x)

package com.struts2.action;

import com.opensymphony.xwork2.ActionSupport;


public class HelloWorld extends ActionSupport {

    
private static final long serialVersionUID = -2567455771246284511L;
    
    
private String name;
    
    
    
public String getName() {
        
return name;
    }


    
public void setName(String name) {
        
this.name = name;
    }



    
public String execute() throws Exception {
        
        setName(getName());        
        
return SUCCESS;
    }


}


4.配置Actionc:(x)
?span style="font-size: 10.5pt; font-family: 'Times New Roman'">struts2.x中的配置文g一般ؓ(f)struts.xmlQ放?/span>WEB-INF"classes目录中。下面是?/span>struts.xml中配|动作类的代码:(x)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd"
>

<struts>
    
<package name="default" extends="struts-default">
        
<action name="Hello" class="com.struts2.action.HelloWorld">
            
<result name="success">/welcome.jsp</result>
        
</action>
    
</package>

</struts>


5.发布Q?br />
在eclipse-jee-ganymede下配|tomcat服务器,很简单?br /> Windows->Performance->Server->Runntime Environment->Add.随着向导可以增加tomcat服务器了?br /> 然后鼠标右键点击目的根目录Q选择菜单的Run As->Run on Server可以发布启动你的项目了。而且q有eclipse自带的浏览器Q感觉很不错咯?br />









]]>
վ֩ģ壺 ѹۿaƬ| | ޾ƷҹVAþó| ѹۿƵվ| jizzѲ| ޳aƬ77777˾| һaƵ| aƷžžŴƬѿ| ޵Ӱһ| þþþרav| ձػɫaaƬ| Ƭѹۿ| ޾ƷĻ鶹| Ѹ߹ۿ | ŮAëƬƵ| Ҹ24p| ͵ͼƬ| ޹Ƭ߹ۿ| ҹƵվ| AVƬ߹ۿ| **һһëƬѹۿ| ŮֻѵƵ| þ޾ƷAB벥| ˿Ů͵ԲĻ| ѹۿɫƵվbd| þ91ۿ| avպavӰ | 99þþƷƵ| һƵѸ| jizzѹۿ| aٰƵ| ߹ۿavվ| ƷƵȫѹۿ| һaëƬƵ| 91avƵ| þþþþþþþѾƷ | ڵƵ | ߹ۿ| ɬɬɫۺ| С˵ͼۺ| AVɫɫWWW|