面试题之十亿条记录,怎么获取出现最多的前十个

宅在家中无事,刷面试题,发现了一个很有意思的面试题。

就来琢磨一下这个是如何能够处理成功。(这是一个长更新视频,说不定中间就干其他的去了,慢慢更ing) StratTime : 202002191600

首先我们来造一下数据。虽然不知道淘宝的购物记录,但是我们来算成ip浏览记录吧。那么我们来获取10亿条ip

代码如下

public class createIp {

    public static String getRandomIp() {
    // ip范围
    int[][] range = { { 607649792, 608174079 }, // 36.56.0.0-36.63.255.255
            { 1038614528, 1039007743 }, // 61.232.0.0-61.237.255.255
            { 1783627776, 1784676351 }, // 106.80.0.0-106.95.255.255
            { 2035023872, 2035154943 }, // 121.76.0.0-121.77.255.255
            { 2078801920, 2079064063 }, // 123.232.0.0-123.235.255.255
            { -1950089216, -1948778497 }, // 139.196.0.0-139.215.255.255
            { -1425539072, -1425014785 }, // 171.8.0.0-171.15.255.255
            { -1236271104, -1235419137 }, // 182.80.0.0-182.92.255.255
            { -770113536, -768606209 }, // 210.25.0.0-210.47.255.255
            { -569376768, -564133889 }, // 222.16.0.0-222.95.255.255
    };

    Random rdint = new Random();
    int index = rdint.nextInt(10);
    String ip = num2ip(range[index][0] + new Random().nextInt(range[index][1] - range[index][0]));
    return ip;
}

/*
 * 将十进制转换成IP地址
 */
public static String num2ip(int ip) {
    int[] b = new int[4];
    String x = "";
    b[0] = (int) ((ip >> 24) & 0xff);
    b[1] = (int) ((ip >> 16) & 0xff);
    b[2] = (int) ((ip >> 8) & 0xff);
    b[3] = (int) (ip & 0xff);
    x = Integer.toString(b[0]) + "." + Integer.toString(b[1]) + "." + Integer.toString(b[2]) + "." + Integer.toString(b[3]);

    return x;
}
public class topTenValueMake {

    public static void main(String[] args) throws IOException{
        long startTime = System.currentTimeMillis();
        int i ;
        int j ;
        String strPath = "D:"+File.separator+"test"+File.separator+"TopTenValue.txt";
        File file = new File(strPath);

        file.createNewFile();
        FileWriter  fWriter = new FileWriter(file);
        fWriter.write("开始写数据");
        for(j=1;j<=100000;j++){
            StringBuffer sBuffer = new StringBuffer();
            for(i=1;i<=10000;i++){
                sBuffer.append(createIp.getRandomIp()+",");
            }
            fWriter.write(sBuffer.toString());
            fWriter.flush();
            System.out.println(j*i);
        }
        fWriter.close();
        long endTime = System.currentTimeMillis();

        long time = endTime - startTime;
        long hour = time/(60*60*1000);
        long minute = (time - hour*60*60*1000)/(60*1000);
        long second = (time - hour*60*60*1000 - minute*60*1000)/1000;
        System.out.println(hour+ "时" + minute + "分 " + second+"秒");
    }

}

总运行时间

文件夹大小:

原文地址:https://www.cnblogs.com/xiaosisong/p/12331750.html

时间: 2024-10-22 10:56:16

面试题之十亿条记录,怎么获取出现最多的前十个的相关文章

如何在十分钟内插入1亿条记录到Oracle数据库?

这里提供一种方法,使用 APPEND 提示,使得十分钟内插入上亿数据成为可能. -- Create table create table TMP_TEST_CHAS_LEE ( f01 VARCHAR2(20), f02 NUMBER(10) not null, f03 VARCHAR2(21), f04 VARCHAR2(21), f05 NUMBER, f06 NUMBER(20) ); --创建一个临时表,用于提供序列号 CREATE GLOBAL TEMPORARY table t_se

MySQL 快速构造一亿条记录的表

  在上一次朋友问我如何快速构造一亿条记录的表后,我理出了实行的办法,见:http://blog.csdn.net/mchdba/article/details/52938114,但是因为录入一亿表需要2个小时,所以还是感觉速度慢了些,那有没有啥办法能加快这一步骤呢?   1.建一张通用的用户表 建用户表没有啥变化,还是和上次一样. USE test; CREATE TABLE `UC_USER` ( `ID` BIGINT (20), `USER_NAME` VARCHAR (400), `U

MySQL 如何准备一亿条记录的表来测试

曾经一个朋友问我如何快速的在线往一个大表里面添加一个字段或者修改一个字段的长度,mysql版本是5.6,所以就准备在测试环境准备一个一亿条记录的表,然后来实际测试下到底哪种方式比较快,先来开始准备一亿条记录的表.   我线上有上亿条记录的表,但是很多网上朋友都没有,那么我这里就实践了一条办法,来实现自己构造一亿条数据记录的表.实现思路就是先建一张通用的20个字段左右的用户表,然后写一个存储过程,不停的往这个表里面写数据,while循环写上一亿次,这样就形成了一张一亿条记录的表出来.     1.

mysql 造1亿条记录的单表--大数据表

读写文件 背景及木:现有数据1000w单表,为压力测试准备1亿条数据. 步骤: 1.将1000w条记录,除id外都导入到多个文件中: //DELIMITER DROP PROCEDURE if EXISTS createManyTable; create PROCEDURE createManyTable() BEGIN DECLARE i int; DECLARE fileName VARCHAR(30); set i=1; while i<251 DO SET fileName=CONCAT

插入一条记录并获取自增的id

Connection connection = (Connection) dbcp.getConn(); int affectRows = qr.update(connection, sql,params); BigInteger id = BigInteger.ZERO ; id = qr.query(connection, "SELECT LAST_INSERT_ID()", new ScalarHandler(1)); //获取新增记录的自增主键 这个是通过dbutils来获取的

nodejs+mysql 插入一条记录时获取自动生成的id

最近在写学生申报项目的后端接口时发现需要获取数据库自动生成的主键,因为要先将项目信息插入到project表,得到生成的项目ID,再将项目ID和指导老师ID插入到project_member表 一开始想在插入项目之后,用SELECT LAST_INSERT_ID() 获取生成的ID,后来发现,在插入操作完成后的返回结果里就带有自动生成的ID.可用rows.insertId获取 代码: //利用事务对project表和project_member表进行插入 conn.beginTransaction

日均数十亿请求!京东评价系统海量数据存储高可用设计

京东的商品评论目前已达到数十亿条,每天提供的服务调用也有数十亿次,而这些数据每年还在成倍增长,而数据存储是其中最重要的部分之一,接下来就介绍下京东评论系统的数据存储是如何设计的. 整体数据存储包括基础数据存储.文本存储.数据索引.数据缓存几个部分. 基础数据存储 基础数据存储使用MySQL,因用户评论为文本信息,通常包含文字.字符等,占用的存储空间比较大,为此MySQL作为基础数据库只存储非文本的评论基础信息,包括评论状态.用户.时间等基础数据,以及图片.标签.点赞等附加数据.而不同的数据又可选

1.3万亿条数据查询如何做到毫秒级响应?

关注微信公众号"程序员黄小斜",选择"置顶或者星标" 一起成为更好的自己! ![](https://img2018.cnblogs.com/blog/1813797/201912/1813797-20191230133159470-930879899.jpg) 作者:孙晓光 出处:http://itindex.net/ 知乎,在古典中文中意为"你知道吗?",它是中国的 Quora,一个问答网站,其中各种问题由用户社区创建,回答,编辑和组织. 作为

按工资降序排列,若工资相同,则按照雇佣日期尚需排列,获取6~10 条记录

如题:按工资降序排列,若工资相同,则按照雇佣日期尚需排列,获取6~10 条记录 1 获取工资降序,雇佣日期升序的员工列表 select * from emp order by sal desc, hiredate asc; 2 获取rownun变量 select t.*, rownum rn from (select * from emp order by sal desc, hiredate asc) t; 3 获取6~10条记录 select a.* from (select t.*, ro