面試題之十億條記錄,怎么獲取出現最多的前十個


宅在家中無事,刷面試題,發現了一個很有意思的面試題。

 

就來琢磨一下這個是如何能夠處理成功。(這是一個長更新視頻,說不定中間就干其他的去了,慢慢更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+"秒");
    }

}

 

 總運行時間

 

文件夾大小:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM