首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

问一个Ebay的面试题 当初没答上来

2013-09-05 
问一个Ebay的面试题 当时没答上来就是 现在有一个log 里面全都是访问者的ip(数据很大很大) 一行一个ip比如

问一个Ebay的面试题 当时没答上来
就是 现在有一个log 里面全都是访问者的ip(数据很大很大) 一行一个ip
比如
123.22.22.187
123.22.22.182
123.22.21.187
123.22.42.187
123.23.22.187
123.22.22.182
121.22.22.182
....

怎么查出来访问次数最多的10个IP?

数据量非常大 不可能直接读进来 然后排序。。。
[解决办法]
   string baseDirec = Environment.CurrentDirectory;
            baseDirec = baseDirec.Substring(0, baseDirec.IndexOf("bin"));
            string path = baseDirec + "\\Resource\\data.log"; //这个是我site 下的资源文件下专门记录ip转换来的log文件
            byte[] byteData = File.ReadAllBytes(path);
            string visitedIPList = Encoding.ASCII.GetString(byteData);//这用什么编码看自己
            string[] ipArr = visitedIPList.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
            Dictionary<string, ushort> record = new Dictionary<string, ushort>(); // 以ipFirst为key,以出现的count为value
            ushort count = 0; //出现的频率      
            //因为数据量达到108W所以采取分段的方式来process
           // Console.WriteLine(DateTime.Now.Second);
            int processline = 5000; //每次处理5000行
            for (int i = 0; i < processline; i++)
            {
                //这个判断用于防止 (第n个与第n-1个是相同的ipKey)可以省去不必要的循环
                if (ipArr[i + 1] == ipArr[i]) { continue; }


                string ipKey = ipArr[i].Substring(0, ipArr[i].IndexOf("."));
                for (int j = 0; j < processline; j++)
                {
                    string ipKeyCopy = ipArr[j + 1].Substring(0, ipArr[j + 1].IndexOf("."));
                    if (ipKey == ipKeyCopy) count++;
                }
                //判断是否存在该key
                if (!record.ContainsKey(ipKey))
                    //添加统计的key和频率到record散列表中
                    record.Add(ipKey, count);
                count = 0;
            }
            foreach (string key in record.Keys)
            {
                Console.WriteLine("key:{0},value:{1}", key, record[key]);
            }
            //Console.WriteLine(DateTime.Now.Second);

热点排行