JavaProject-IP归属地查询
文章目录
- JavaProject-IP归属地查询
- 1 中小型Java应用项目开发标准流程
- 1.1、项目概述
- 1.2、项目分析
- 1.3、技术方案和开发计划
- 1.4、细节开发
- 1.5、测试Bug修改与系统优化
- 1.6、项目标准化
- 1.7、正式上线
- 2 IP归属地查询项目-标准开发流程落地
- 2.1、项目概述
- 2.2、项目分析
- 2.3、技术方案和开发计划
- 2.4、细节开发
- 2.5、测试Bug修改与系统优化
- 2.6、项目标准化
- 2.7、正式上线
- 3 开发项目注意事项
- 3.1 数据开发注意事项
- 3.2 硬编码能力
- 3.3 比较大小的效率
- 3.4 测试用例基本原则
- 3.5 数据初始化的时机
- 3.6 遇到陌生的业务问题的通用解决方法
- 4 IP归属地查询开发中的具体问题和解决方法
- 4.1 在文件操作时文件不存在问题
- 4.2 导入数据编解码格式不一致的问题
- 4.3 文件操作按行读取文件时空行问题
- 4.4 流操作中文件已打开问题
- 4.5 存储的数据结构选择问题
- 4.6 Object集合排序实现问题
- 4.7 集合转换为数组问题
- 4.8 递归查找问题
- 4.9 switch(OP)键盘获取OP输入错误问题
- 5 项目优化
- 5.1 如何对项目进行优化
- 5.2 优化思路
- 5.3 性能优化技巧
JavaProject-IP归属地查询
1 中小型Java应用项目开发标准流程
1.1、项目概述
准确宏观上描述清楚项目要做什么
1.2、项目分析
确定项目的可行性-能干不能干
1.3、技术方案和开发计划
技术方案:将重难点需求的技术解决方法罗列清楚。
开发计划:什么人、什么时间、做什么事情
1.4、细节开发
coding
1.5、测试Bug修改与系统优化
用TestCase来测试系统问题,并修复
并针对关键环节进行必要的优化提升执行效率。
1.6、项目标准化
将项目的命名、包结构、运维规范等进行公司统一规范化管理。
1.7、正式上线
正式发布,对外提供相应的服务或是Jar包
2 IP归属地查询项目-标准开发流程落地
2.1、项目概述
给定一个IP地址,查询出其所在的归属地信息,即国家、省、市、区、具体位置等信息。
2.2、项目分析
将项目的开发步骤进行详细推敲罗列
1、读取IP地址库的数据
2、将文本数据转化成IP对象型数据,并加入相应的集合。
3、对IP对象集合排序,形成增序集合。
4、编写针对增序集合的二分查找算法,使之给定一个IP地址可以拿到对应的查询结果。
5、对查询结果进行个性化处理,比如打印、存到文件、存储到数据库等均可。
6、测试调优与Bug修复
2.3、技术方案和开发计划
技术方案:
1、读取IP地址库的数据(Java IO)
2、将文本数据转化成IP对象型数据,并加入相应的集合。(Java面向对象、集合操作)
3、对IP对象集合排序,形成增序集合。(Java集合、比较器)
4、编写针对增序集合的二分查找算法,使之给定一个IP地址可以拿到对应的查询结果。(对象二分查找算法实现)
5、对查询结果进行个性化处理,比如打印、存到文件、存储到数据库等均可。(Java IO-System.out)
6、测试调优与Bug修复
测试用例-TestCase
调优分类
计算调优
存储调优
以空间换时间,或是以时间换空间。
开发计划:什么人、什么时间、做什么事情
2.4、细节开发
1、读取IP地址库的数据,形成一个文本行集合。(Java IO)
File
FileInputStream
InputStreamReader
BufferedReader
List
ArrayList
2、将文本数据转化成IP对象型数据,并加入相应的集合。(Java面向对象、集合操作)
3、对IP对象集合排序,形成升序集合。(Java集合、比较器)
业务问题转化成技术问题
先技术解决,后业务应用
冒泡排序
时间时杂度:
计算次数的量级
O(1)
O(log2N)
O(n)
O(nlog2n)
O(n2)
空间复杂度:
O(1)
4、编写针对升序集合的二分查找算法,使之给定一个IP地址可以拿到对应的查询结果。(对象二分查找算法实现)
基本数据类型的二分查找
对象数据类型的二分查找
IPPojo对象类型的二分查找
5、对查询结果进行个性化处理,比如打印、存到文件、存储到数据库等均可。(Java IO-System.out)
6、测试调优与Bug修复
测试用例-TestCase
调优分类
计算调优
存储调优
以空间换时间,或是以时间换空间。
2.5、测试Bug修改与系统优化
用TestCase来测试系统问题,并修复
并针对关键环节进行必要的优化提升执行效率。
2.6、项目标准化
将项目的命名、包结构、运维规范等进行公司统一规范化管理。
2.7、正式上线
正式发布,对外提供相应的服务或是Jar包
3 开发项目注意事项
3.1 数据开发注意事项
数据敏感性
数据洞察:抽样检查和数据统计分析
例如:将文件数据读入集合中时,注意检查是否按照预期正确读入,是否有少读,多读,错读等问题
3.2 硬编码能力
硬编码就是放弃很多的技巧,甚至不讲究技巧,通过自己过硬的编码能力,完全还原自己对一个问题的解决方法
3.3 比较大小的效率
最高的一定是二进制
其次应该是数值型
最后就是非数值型
3.4 测试用例基本原则
边界外测试
边界测试
边界内测试
3.5 数据初始化的时机
系统启动完成前:
static方法块
系统启动完成后
static还是成员方法均可
3.6 遇到陌生的业务问题的通用解决方法
先解决技术问题
后解决业务问题
4 IP归属地查询开发中的具体问题和解决方法
4.1 在文件操作时文件不存在问题
在文件操作时,必须判断文件是否存在以及是否是文件,否则输入文件路径不存在时就会出现异常
File file = new File(pathString);
// 判断是否是文件以及文件是否存在
if (file.isFile() && file.exists())
4.2 导入数据编解码格式不一致的问题
在编写IO流的时候加上转换流,指定指定的编解码格式
// 创建转换流,统一设置编码格式
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
// 创建缓冲流
BufferedReader br = new BufferedReader(isr);
4.3 文件操作按行读取文件时空行问题
在用readLine()方法按行读取文本文件时,最好进行边界检验,防止出现读入空行或者出现异常
while ((lineText = br.readLine()) != null) {
// 边界检验
if (lineText == null || lineText.trim().length() == 0) {
continue;}
4.4 流操作中文件已打开问题
在流操作过程中,如果完成流操作不把流关闭,那么此时再操作文件就会出现异常
// 关闭所有流
br.close();
4.5 存储的数据结构选择问题
因为此次项目重点是运用查找和排序快,想要实现方便而且查找效率高的话,建议选择数组或ArrayList集合,其中数组的内存是连续的,查找效率高,且ArrayList和数组有下标,为使用二分法查找和冒泡排序提供遍历
4.6 Object集合排序实现问题
必须让Object类对象实现comparable接口或者实现comparator的继承类,重写compareTo方法即可调用Collections.sort(List)方法进行排序
//实现comparable接口
public class IP implements Comparable<IP>
// 重写compareTo方法实现排序@Overridepublic int compareTo(IP ip) {long temp = this.longIPStart - ip.longIPStart;return temp > 0 ? 1 : (temp < 0 ? -1 : 0);}
// 调用方法将文本集合转换为对象集合ArrayList<IP> IPList = textListToipList(textList);// 对对象集合进行排序Collections.sort(IPList);
4.7 集合转换为数组问题
在集合转换为数组的时候,强制转换会导致出现异常,所以我认为最好的方法是运用集合的toArray方法进行转换
IP[] IPArr = new IP[0];// 将集合转换为数组IPArr = IPList.toArray(IPArr);
注意:
在使用toArray方法前,必须先定义一个相关的数组传入,否则会出现转换失败,在创建数组时,容量低于集合的容量会自动扩充,容量高于集合的容量时会从前往后填充数据,剩余的空间填充null
4.8 递归查找问题
在进行递归的时候必须明确终止条件和递归条件,否则递归就会出现问题
4.9 switch(OP)键盘获取OP输入错误问题
在定义OP的类型时,最好定义为字符串类型,如果定义为基本数据类型,那么输入小数或者字符串时会直接报错,如果是字符串类型那么可以在switch中再进行判断处理
5 项目优化
5.1 如何对项目进行优化
包括计算性能和存储性能
性能优化一般是指响应时间优化,也就是计算性能优化,即如何响应的又快又好。
5.2 优化思路
1、找到系统计算性能瓶颈
对系统运行进行解耦操作,分析出几个重要的核心计算模块以及其当下的运行时间。
本系统步骤:
(1、读文件
(2、转成对象集合
(3、排序
(4、转换成数组
(5、查找
2、针对具体瓶颈问题,进行具体分析和解决方案制定
3、需要对瓶颈问题进行迭代发现和处理
4、进行性能优化总结
5.3 性能优化技巧
直接优化
算法层面硬优化
间接优化
预计算
缓存计算结果
序列化环节优化
减少文件大小
提高IO效率
编解码优化
采用base64等等
用户体验优化
相关参数配置文件化
相关资源链接: https://download.csdn.net/download/simplelove0519/20214867
JavaProject-IP归属地查询相关推荐
- IP归属地查询(基于本地IP库实现)
这是一篇GitHub上的项目说明文档,项目地址: Zzz2333/IPLibrary 本项目功能是根据IP查询归属地.用到了纯真IP地址数据库,即qqwry.dat文件. 纯真IP地址数据库是一个网上 ...
- python爬取免费优质IP归属地查询接口
python爬取免费优质IP归属地查询接口 python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个 ...
- 全球IP归属地查询 IP地址查询
全球IP归属地查询 IP地址查询 推荐一个非常简单的全球IP归属地查询 IP地址查询接口,只需要传入要查询的IP,即可返回相应的基本信息,以下是演示 请求地址是:http://ip.wyk-super ...
- 免费IP归属地查询接口
免费IP归属地查询接口 淘宝API接口 IP-API接口 太平洋API接口 淘宝API接口 接口文档 http://ip.taobao.com/instructions 调用示例 GET http:/ ...
- 如何在Excel/WPS表格中实现IP归属地查询?
给您一个IP地址,您能查出它的归属地是哪座城市吗?今天小编就教给大家如何在Excel/WPS表格中使用IP归属地查询公式.使用公式前需要去腾讯位置服务申请key和Secret key,网址:腾讯位置服 ...
- IP 归属地查询 API 教你从0到1顺着网线找到键盘侠
写在前面 前一段时间,微博.头条.抖音.知乎等各大互联网平台相继推出了"个人主页.评论显示 IP 属地,用户不能自己开启或关闭"的功能,那么这些平台是如何获取到用户的 IP 地址呢 ...
- Python/PHP:免费IP归属地查询接口和通过ip获取大致位置信息
1.淘宝API接口: 文档:http://ip.taobao.com/instructions 示例: GET http://ip.taobao.com/outGetIpInfo?ip=221.218 ...
- php查询ip归属地api接口_php调用新浪接口查询ip获取地理位置(ip归属地查询)
php调用新浪接口查询ip获取地理位置(ip归属地查询) 发布于 2014-11-17 08:35:58 | 115 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: ...
- 【Python爬虫案例学习9】python爬取免费优质IP归属地查询接口
刚开始感觉好简单啊,毕竟只需要从百度找个免费接口然后来个python脚本跑一晚上就ok了嘛~但是,网上免费接口要么限制访问频率(淘宝的),要么限制访问次数(百度及其他) 没辙了,从百度找到了几个在线查 ...
- spark数据分析之ip归属地查询
前一段时间,在项目中,领导要求实时查看来自各个省份的ip访问的详情,根据这一需求,通过flume/logstack实时采集nginx的日志到生产到kafka,再通过spark实时消费分析保存到redi ...
最新文章
- java程序设计案例教程 钱银中_《Java程序设计案例教程》【价格 目录 书评 正版】_中国图书网...
- 49 岁的红杉资本遭遇黑客攻击
- 一种解决 MacBook 里的 App Store 无法登录的问题
- python tutorial_Python Tutorial笔记
- 城市运行一网统管_【宣传活动】持续开展城市运行“一网统管”建设宣传活动...
- 对象内存布局 (15)
- 解密flash播放器
- Linux kernel路由机制分析(下)
- 【拆书】9000字总结,一文掌握737页程序员圣经《深入理解计算机系统》(第三版)重点
- 使电动机反转的matlab仿真图,基于MATLAB的电机仿真研究
- 信息检索与利用(第三版)第四章 信息检索原理与技术
- 深度学习中初始化权重
- 应对SOX法案的挑战
- Android各种时间格式转换
- 局域网限速软件_除了Teamviewer,这些优秀的远程软件你用了吗
- SQL查询语句——子查询
- 湖南文理学院第十六届程序设计竞赛_题解
- .Net常用术语汇总
- sklearn实现GBDT算法(分类)
- 看我如何发送匿名邮件(.NET)