文章目录

  • 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归属地查询相关推荐

  1. IP归属地查询(基于本地IP库实现)

    这是一篇GitHub上的项目说明文档,项目地址: Zzz2333/IPLibrary 本项目功能是根据IP查询归属地.用到了纯真IP地址数据库,即qqwry.dat文件. 纯真IP地址数据库是一个网上 ...

  2. python爬取免费优质IP归属地查询接口

    python爬取免费优质IP归属地查询接口 python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个 ...

  3. 全球IP归属地查询 IP地址查询

    全球IP归属地查询 IP地址查询 推荐一个非常简单的全球IP归属地查询 IP地址查询接口,只需要传入要查询的IP,即可返回相应的基本信息,以下是演示 请求地址是:http://ip.wyk-super ...

  4. 免费IP归属地查询接口

    免费IP归属地查询接口 淘宝API接口 IP-API接口 太平洋API接口 淘宝API接口 接口文档 http://ip.taobao.com/instructions 调用示例 GET http:/ ...

  5. 如何在Excel/WPS表格中实现IP归属地查询?

    给您一个IP地址,您能查出它的归属地是哪座城市吗?今天小编就教给大家如何在Excel/WPS表格中使用IP归属地查询公式.使用公式前需要去腾讯位置服务申请key和Secret key,网址:腾讯位置服 ...

  6. IP 归属地查询 API 教你从0到1顺着网线找到键盘侠

    写在前面 前一段时间,微博.头条.抖音.知乎等各大互联网平台相继推出了"个人主页.评论显示 IP 属地,用户不能自己开启或关闭"的功能,那么这些平台是如何获取到用户的 IP 地址呢 ...

  7. Python/PHP:免费IP归属地查询接口和通过ip获取大致位置信息

    1.淘宝API接口: 文档:http://ip.taobao.com/instructions 示例: GET http://ip.taobao.com/outGetIpInfo?ip=221.218 ...

  8. php查询ip归属地api接口_php调用新浪接口查询ip获取地理位置(ip归属地查询)

    php调用新浪接口查询ip获取地理位置(ip归属地查询) 发布于 2014-11-17 08:35:58 | 115 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: ...

  9. 【Python爬虫案例学习9】python爬取免费优质IP归属地查询接口

    刚开始感觉好简单啊,毕竟只需要从百度找个免费接口然后来个python脚本跑一晚上就ok了嘛~但是,网上免费接口要么限制访问频率(淘宝的),要么限制访问次数(百度及其他) 没辙了,从百度找到了几个在线查 ...

  10. spark数据分析之ip归属地查询

    前一段时间,在项目中,领导要求实时查看来自各个省份的ip访问的详情,根据这一需求,通过flume/logstack实时采集nginx的日志到生产到kafka,再通过spark实时消费分析保存到redi ...

最新文章

  1. java程序设计案例教程 钱银中_《Java程序设计案例教程》【价格 目录 书评 正版】_中国图书网...
  2. 49 岁的红杉资本遭遇黑客攻击
  3. 一种解决 MacBook 里的 App Store 无法登录的问题
  4. python tutorial_Python Tutorial笔记
  5. 城市运行一网统管_【宣传活动】持续开展城市运行“一网统管”建设宣传活动...
  6. 对象内存布局 (15)
  7. 解密flash播放器
  8. Linux kernel路由机制分析(下)
  9. 【拆书】9000字总结,一文掌握737页程序员圣经《深入理解计算机系统》(第三版)重点
  10. 使电动机反转的matlab仿真图,基于MATLAB的电机仿真研究
  11. 信息检索与利用(第三版)第四章 信息检索原理与技术
  12. 深度学习中初始化权重
  13. 应对SOX法案的挑战
  14. Android各种时间格式转换
  15. 局域网限速软件_除了Teamviewer,这些优秀的远程软件你用了吗
  16. SQL查询语句——子查询
  17. 湖南文理学院第十六届程序设计竞赛_题解
  18. .Net常用术语汇总
  19. sklearn实现GBDT算法(分类)
  20. 看我如何发送匿名邮件(.NET)

热门文章

  1. 聚合数据API用法简介
  2. PS 如何制作WIN7的玻璃化透明窗口效果
  3. 无人机get新技能,惹黑熊心跳加速
  4. layui 模板引擎用法小结
  5. 资产设备使用时,GPS干扰的问题该怎么解决?
  6. ASP.NET Web Forms 自学篇:(一)简介
  7. UINO优锘:竞速“元宇宙”,中国能凭借数字孪生技术突围吗?
  8. 为什么你的有道云笔记越来越不好用?三个细节解决你的烦恼
  9. creator创建密匙库,查询密匙库密匙,校对密匙
  10. MSOCache(转载)