zoukankan      html  css  js  c++  java
  • 面试小计

    http://blog.csdn.net/chentao5211314/article/details/5955751


    3.保留重复数据中最新的一条记录
    在Oracle中,rowid是隐藏字段,用来唯一标识每条记录。所以,只要保留重复数据中rowid最大的一条记录就可以了。  
    查询重复数据:
    select a.rowid,a.* from 表名 a
    where a.rowid != (
    select max(b.rowid) from 表名 b
    where a.字段1 = b.字段1 and a.字段2 = b.字段2 );   
    例:selete from dba_tables a
    where a.rowid!=(
    select max(rowid) from test b
    where a.owner=b.owner);
      删除重复数据,只保留最新的一条数据:
    delete from 表名 a
    where a.rowid != (
    select max(b.rowid) from 表名 b
    where a.字段1 = b.字段1 and a.字段2 = b.字段2 )
      使用临时表实现高效查询
    create table 临时表 as
    (select a.字段1, a.字段2, MAX(a.ROWID) as dataid from 正式表 a
    GROUP BY a.字段1,a.字段2);
    delete from 表名 a
    where a.rowid !=
    ( select b.dataid from 临时表 b
    where a.字段1 = b.字段1 and
    a.字段2 = b.字段2 );
    commit;

    DELETE t FROM (
      SELECT RESOURCE_ID, COLUMN_ID,MIN(column_ref_RESOURCE_ID) minvalue FROM T_RES_COLUMN_MAP
       GROUP BY RESOURCE_ID, COLUMN_ID
      HAVING COUNT(*)>1
    ) a
       INNER JOIN T_RES_COLUMN_MAP t ON a.RESOURCE_ID=t.RESOURCE_ID
                    AND a.COLUMN_ID=t.COLUMN_ID
                   AND t.column_ref_RESOURCE_ID>minvalue

    DELETE T_RES_COLUMN_MAP
     where rowid in (select rid
                       from (select map.rowid rid,
                                    row_number() over(partition by RESOURCE_ID, COLUMN_ID order by resource_rank) rn
                               from T_RES_COLUMN_MAP map)
                      where rn > 1);

    http://meipeng1114-163-com.iteye.com/blog/807015
     ③String是一个比较特殊的数据类型,在Java中,String是一个类,但是他的传值却是采用“值传递”的方式。
    首先String不属于8种基本数据类型,String是一个对象。
          因为对象的默认值是null,所以String的默认值也是null;但它又是一种非凡的对象,有其它对象没有的一些特性。
          new String()和new String(“”)都是申明一个新的空字符串,是空串不是null;
          String str=”kvill”;
          String str=new String (“kvill”);的区别。


    http://www.cnblogs.com/xiangshu/articles/2054447.html
    Union因为要进行重复值扫描,所以效率低。如果合并没有刻意要删除重复行,那么就使用Union All

     两个要联合的SQL语句 字段个数必须一样,而且字段类型要“相容”(一致);

    如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。

    union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。


    Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

    Union All:对两个结果集进行并集操作,包括重复行,不进行排序;

    Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;

    Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。

    数据库表设计中使用横向表切割来降低并发冲突 

    [java] view plaincopyprint?

    1. package cn.sh.webfile.model;  
    2. import java.io.Serializable;  
    3. import javax.persistence.Column;  
    4. import javax.persistence.Entity;  
    5. import javax.persistence.Id;  
    6. import javax.persistence.OneToOne;  
    7. import javax.persistence.PrimaryKeyJoinColumn;  
    8. import javax.persistence.Table;  
    9. import javax.persistence.Version;  
    10. import org.apache.commons.lang.builder.ReflectionToStringBuilder;  
    11. /** 
    12. 开始于 2010-06-09 
    13. 文件标签符号表的模型 
    14. * [2010-06-18]新增加一个字段 
    15. * [2010-06-21]根据应用程序的使用反馈,把引用计数、点击计数字段,放入两个不同的表 
    16. 以实现更好的多工状态下的并发操作,减少状态冲突。分拆理由,表《文件标签》主表、《文件标签引用计数》、 
    17. 《文件标签点击计数》作为从表,主表变化慢,从表变化快。 
    18. 最后修改于 2010-06-21 
    19. * @author 万继斌 
    20. * @version 1.3 
    21. */  
    22. @Entity  
    23. @Table(name = "文件标签")  
    24. public class FileTagModel implements Serializable {  
    25. /** 
    26. 使用javaUUID唯一号,36长度的字符串 
    27. */  
    28. @Id  
    29. @Column(name = "主键")  
    30. private String id;  
    31. /** 
    32. 标签名称 
    33. */  
    34. @Column(name = "标签名称")  
    35. private String tagName;  
    36. /** 
    37. 标签排序 
    38. */  
    39. @Column(name = "标签排序")  
    40. private int px;  
    41. /** 
    42. 主观权重 
    43. */  
    44. @Column(name = "主观权重")  
    45. private boolean tagWeight;  
    46. /** 
    47. 主观推荐 
    48. */  
    49. @Column(name = "主观推荐")  
    50. private boolean tagSuggest;  
    51. /** 
    52. 实体创建时的时间戳 
    53. */  
    54. @Column(name = "时间戳")  
    55. private long timestamp;  
    56. /** 
    57. 实体对象的版本号 
    58. */  
    59. @Column(name = "版本号")  
    60. @Version  
    61. private int version;  
    62. /** 
    63. 点击计数 
    64. */  
    65. @Column(name = "点击计数")  
    66. private int clickCount;  
    67. /** 
    68. 引用计数 
    69. */  
    70. @Column(name = "引用计数")  
    71. private int quoteCount;  

    }  

    主键:char(36)

    标签名称:varchar(50)

    标签排序:int

    主观权重:bit

    主观推荐:bit

    时间戳:bigint

    版本号:int

    引用计数:int

    点击计数:int

     

     

     

    经过一段时间的测试后发现,文件标签表中,各个字段的的变化速度有很大的不同,其中引用计数、点击计数、变化很频繁,而其它字段的内容相对变化就比较稳定,一旦生成,相对比较稳定,这样在并发程度高时,常常导致数据更新冲突,虽然可以通过@version注解可以保证数据的乐观锁定发生作用,数据的一致性不被破坏。但是由于把变化频度差异很大的字段放在同一张表上,导致冲突发生的概率增大,降低了系统的效能。

     

    《文件标签》表实体Bean

     

    [java] view plaincopyprint?

     

    1. package cn.sh.webfile.model;  
    2. import java.io.Serializable;  
    3. import javax.persistence.Column;  
    4. import javax.persistence.Entity;  
    5. import javax.persistence.Id;  
    6. import javax.persistence.OneToOne;  
    7. import javax.persistence.PrimaryKeyJoinColumn;  
    8. import javax.persistence.Table;  
    9. import javax.persistence.Version;  
    10. import org.apache.commons.lang.builder.ReflectionToStringBuilder;  
    11. /** 
    12. 开始于 2010-06-09 
    13. 文件标签符号表的模型 
    14. * [2010-06-18]新增加一个字段 
    15. * [2010-06-21]根据应用程序的使用反馈,把引用计数、点击计数字段,放入两个不同的表 
    16. 以实现更好的多工状态下的并发操作,减少状态冲突。分拆理由,表《文件标签》主表、《文件标签引用计数》、 
    17. 《文件标签点击计数》作为从表,主表变化慢,从表变化快。 
    18. 最后修改于 2010-06-21 
    19. * @author 万继斌 
    20. * @version 1.3 
    21. */  
    22. @Entity  
    23. @Table(name = "文件标签")  
    24. public class FileTagModel implements Serializable {  
    25. /** 
    26. 使用javaUUID唯一号,36长度的字符串 
    27. */  
    28. @Id  
    29. @Column(name = "主键")  
    30. private String id;  
    31. /** 
    32. 标签名称 
    33. */  
    34. @Column(name = "标签名称")  
    35. private String tagName;  
    36. /** 
    37. 标签排序 
    38. */  
    39. @Column(name = "标签排序")  
    40. private int px;  
    41. /** 
    42. 主观权重 
    43. */  
    44. @Column(name = "主观权重")  
    45. private boolean tagWeight;  
    46. /** 
    47. 主观推荐 
    48. */  
    49. @Column(name = "主观推荐")  
    50. private boolean tagSuggest;  
    51. /** 
    52. 实体创建时的时间戳 
    53. */  
    54. @Column(name = "时间戳")  
    55. private long timestamp;  
    56. /** 
    57. 实体对象的版本号 
    58. */  
    59. @Column(name = "版本号")  
    60. @Version  
    61. private int version;  
    62. /** 
    63. 点击计数 
    64. */  
    65. @OneToOne  
    66. @PrimaryKeyJoinColumn  
    67. private FileTagClickCountModel clickCount;  
    68. /** 
    69. 引用计数 
    70. */  
    71. @OneToOne  
    72. @PrimaryKeyJoinColumn  
    73. private FileTagQuoteCountModel quoteCount;  
    74. }  

       

      《文件标签引用计数》表实体Bean

      [java] view plaincopyprint?

      1. package cn.sh.webfile.model;  
      2. import java.io.Serializable;  
      3. import javax.persistence.Column;  
      4. import javax.persistence.Entity;  
      5. import javax.persistence.Id;  
      6. import javax.persistence.Table;  
      7. import javax.persistence.Version;  
      8. import org.apache.commons.lang.builder.ReflectionToStringBuilder;  
      9. /** 
      10. 开始于 2010-06-21 
      11. 文件标签引用计数表的模型 
      12. 《文件标签引用计数》作为从表,主表变化慢,从表变化快。 
      13. 最后修改于 2010-06-21 
      14. * @author 万继斌 
      15. * @version 1.0 
      16. */  
      17. @Entity  
      18. @Table(name = "文件标签引用计数")  
      19. public class FileTagQuoteCountModel implements Serializable {  
      20. /** 
      21. 使用javaUUID唯一号,36长度的字符串 
      22. */  
      23. @Id  
      24. @Column(name = "主键")  
      25. private String id;  
      26. /** 
      27. 引用计数 
      28. */  
      29. @Column(name = "引用计数")  
      30. private int count;  
      31. /** 
      32. 实体创建时的时间戳 
      33. */  
      34. @Column(name = "时间戳")  
      35. private long timestamp;  
      36. /** 
      37. 实体对象的版本号 
      38. */  
      39. @Column(name = "版本号")  
      40. @Version  
      41. private int version;  
      42. }  

         

        《文件标签点击计数》表实体Bean

        [java] view plaincopyprint?

        1. package cn.sh.webfile.model;  
        2. import java.io.Serializable;  
        3. import javax.persistence.Column;  
        4. import javax.persistence.Entity;  
        5. import javax.persistence.Id;  
        6. import javax.persistence.Table;  
        7. import javax.persistence.Version;  
        8. import org.apache.commons.lang.builder.ReflectionToStringBuilder;  
        9. /** 
        10. 开始于 2010-06-21 
        11. 文件标签点击计数表的模型 
        12. 《文件标签点击计数》变化较快的表。 
        13. 最后修改于 2010-06-21 
        14. * @author 万继斌 
        15. * @version 1.0 
        16. */  
        17. @Entity  
        18. @Table(name = "文件标签点击计数")  
        19. public class FileTagClickCountModel implements Serializable {  
        20. /** 
        21. 使用javaUUID唯一号,36长度的字符串 
        22. */  
        23. @Id  
        24. @Column(name = "主键")  
        25. private String id;  
        26. /** 
        27. 点击计数 
        28. */  
        29. @Column(name = "点击计数")  
        30. private int count;  
        31. /** 
        32. 实体创建时的时间戳 
        33. */  
        34. @Column(name = "时间戳")  
        35. private long timestamp;  
        36. /** 
        37. 实体对象的版本号 
        38. */  
        39. @Column(name = "版本号")  
        40. @Version  
        41. private int version;  
        42. }

    《文件标签》表结构

    主键:char(36)

    标签名称:varchar(50)

    标签排序:int

    主观权重:bit

    主观推荐:bit

    时间戳:bigint

    版本号:int

     

    《文件标签引用计数》表结构

    主键:char(36)

    引用计数:int

    时间戳:bigint

    版本号:int

     

    《文件标签点击计数》表结构

    主键:char(36)

    点击计数:int

    时间戳:bigint

    版本号:int

     

    经过实地测试,并发效能大大提高,而通过对主表的分割,而导致的连接操作带来的速度损失相对较小,某些方面还可以增大综合读写速度。

     

  • 相关阅读:
    web服务webserver
    java:Comparator比较器
    6递归
    5.二分查找 = 折半查找
    4.线性查找 = 顺序查找
    3选择排序
    2.冒泡排序----还是不懂,先记录下来
    1交换算法
    调试篇
    sql表合并,统计计算,生成总计
  • 原文地址:https://www.cnblogs.com/shz365/p/3799142.html
Copyright © 2011-2022 走看看