java dijkstra算法 指定源宿_经验构件库(Java版)

exp-libs

经验构件库

既然别人不甘造轮子,那我就来奠造基石

他人会用,只是用。我要用,则随心所欲

环境

68747470733a2f2f696d672e736869656c64732e696f2f62616467652f506c6174666f726d2d57696e646f7773253743556e69782d627269676874677265656e2e73766768747470733a2f2f696d672e736869656c64732e696f2f62616467652f4944452d45636c697073652d627269676874677265656e2e73766768747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6176656e2d332e322e352532422d627269676874677265656e2e73766768747470733a2f2f696d672e736869656c64732e696f2f62616467652f4a444b2d312e362532422d627269676874677265656e2e737667

简介

此构件库为本人多年编程总结提炼而成,把常用的功能模块作为原子API进行封装。

另外也借用了不少出色的第三方构件,在其之上进行二次封装。

过程中尽量确保了低耦合、高性能、强稳健、高复用、更易用等,使之能够满足日常开发需要、提高开发效率。

安装与使用

由于exp-libs封装了大量第三方构件,因此需要在开发环境直接导入到Maven的pom.xml文件使用,

利用pom文件自动加载第三方依赖构件(若仅导入单个exp-libs.jar,有很多功能是无法使用的)。

POM坐标(完全版):

exp.libs

exp-libs

1.1-SNAPSHOT

POM坐标(精简版,过滤了不常用的第三方构件):

exp.libs

exp-libs-simple

1.1-SNAPSHOT

功能模块

主模块

子模块

组件包/类

说明

测试

示例

压缩/解压(zip,gzip,tar,bz2)

加解密(MD5,DES,RSA)

任意文件与txt文件互转

格式转换工具

format

数据格式转换

(转义字符,BCP,CSV,TSV)

唯一性ID生成器

系统环境参数处理

JavaScript脚本处理

日志设置。

基于org.slf4j(1.7.5)接口与

ch.qos.logback(1.0.13)封装

随机生成器

(随机数、随机汉字、随机姓名等)

版本管理组件

ver

借助Sqlite以UI方式管理项目版本信息,

Maven项目发布插件与自动化升级插件

的部分功能也依赖此组件实现

函数解析组件

cep

基于com.singularsys.jep(3.3.1)封装。

去除时效限制,并新增多种自定义函数

命令行组件

cmd

封装系统命令行操作

配置解析组件

cmd

xml配置文件解析

xml

基于org.dom4j(1.6.1)封装,支持定时

刷新配置项、加载固有格式的配置区块。

数据库组件、网络组件等均利用此组件

加载独立的配置区块

ini配置文件解析

ini

基于org.dtools.javaini(1.1.0.0)封装

扩展对ini文件的编码支持范围

数据库组件db

关系型数据库工具

sql

基于com.cloudhopper.proxool(0.9.1)

封装,支持mysql/oracle/sqlite等。

提供连接池与JDBC两种数据库连接方

式、及多种常用的增删改查操作,且可

根据物理表模型反向生成JavaBean代码

Redis客户端组件

redis

基于redis.clients.jedis(2.9.0)封装。

支持单机/主从/哨兵/集群模式,屏蔽

不同模式之间获取实例连接的差异性

网络组件net

Cookie组件

cookie

用于解析HTTP/HTTPS响应头中的

Set-Cookie参数

FTP组件

ftp

未实装

HTTP/HTTPS组件

http

提供在HTTP/HTTPS协议下,以长/短

连接实现的GET、POST、Download

方法,并支持自动解析Gzip流。

基于java.net.HttpURLConnection与

commons-httpclient(3.1-rc1)封装,

更借助org.bouncycastle.bcprov

-jdk15on(1.54)使得可以在JDK1.6+环

境均支持HTTPS-TLSv1.2协议(详见)

Email组件

mail

基于javax.mail(1.4.1)封装,

可用于邮件发送/抄送(支持加密)

MQ组件

mq

未实装(jms/kafka)

端口转发器

pf

利用Socket实现的端口转发程序

Ping组件

ping

利用系统命令实现的ping/tracert,支持

解析中/英文的win/linux系统的结果集

Socket组件

sock

封装IO/NIO模式的Socket客户端/服务

端的交互行为,只需实现业务逻辑

Telnet组件

telnet

未实装

Webkit组件

webkit

基于org.seleniumhq.selenium(2.53.0)

封装,主要提供无头浏览器

com.codeborne.phantomjsdriver(1.2.1)

的常用操作

WebSocket客户端

websock

基于org.java-websocket(1.3.4)封装,

支持ws与wss,提供数据帧的收发接口

WebServices组件

wsdl

基于net.webservices.client(1.6.2)封

装,支持http/axis2/cxf,支持SSL模式

IO组件

io

流式读取器

flow

流式读取超大文件/字符串

文件监听器

listn

可监听并触发指定目录树下所有

文件/文件夹的增删改事件

批量序列化读写器

serial

批量序列化/反序列任意实现了

java.io.Serializable接口的对象

OCR图文识别

ocr

基于com.sun.media.jai-imageio

(1.1-alpha)封装。

可识别图片中打印体的文字

(文字不能旋转、变形,越正规的

文字识别率越高)

定时任务调度

task

基于org.quartz-scheduler(2.2.1)

封装。仅保留了simple与cron调度器,

并提供cron表达式换算对象

提供抽象循环线程、回调线程池组件

模板文件组件

tpl

可定制含占位符的内容模板文件

Swing界面工具

ui

Swing组件

cpt

部分功能基于org.jb.beauty-eye(3.7)

封装。可美化Swing外观,提供主窗口、

浮动窗口、面板、表单、选框、系统托

盘、布局样式等常用组件

拓扑图绘制器

topo

基于org.eclipse.draw2d(1.0.0)与

org.jgraph.jGraph(1.0.0)封装。

通过输入邻接矩阵(可含源宿点/必经

点)自动根据边权换算边距,同时映射

到极坐标系,绘制对应的拓扑图

Excel组件

xls

基于org.apache.poi.poi-ooxml(3.9)

封装。支持对xls/xlsx文件操作

排序、布隆过滤器、哈夫曼编码、

哈希算法等(未实装)

拓扑图模型

(支持有向/无向、源宿点、必经点)

循环队列、生产者消费者队列、

优先队列、流式并发队列等

红黑树

rbt

未实装

归一化函数、卡马克浮点数快速算法、

异或交换、二进制计数等

埃拉托斯特尼筛法

时/空复杂度:O(n)

矩阵运算

Mat

未实装

未实装

未实装

动态规划

dync

未实装

最短路径算法

spa

适用单源最短路问题

时间复杂度:O(V * lgV+E)

适用单源最短路问题(未实装)

时间复杂度:O(V * E)

空间复杂度:O(V + E)

(BellmanFord的优化版(未实装)

时间复杂度:O(k * E)

空间复杂度:O(V + E)

适用全源最短路问题(未实装)

时间复杂度:O(V * E * lgV)

适用全源最短路问题(未实装)

时间复杂度:O(V^3)

空间复杂度:O(V^2)

启发式算法

heuristic

蚁群算法(未实装)

量子蚁群算法(引入量子环境改进的

蚁群算法:量子比特、量子概率幅、

量子态、量子旋转门等)

NP难问题

np

含必经点的最短路问题:

自动根据场景用spa或启发式算法求解

旅行商问题(未实装)

深度学习

dl

基于org.tensorflow(1.6.0)封装。

提供TensorFlow训练模型调用接口

第三方构件修正记录

commons-httpclient

commons-httpclient

3.1-rc1

使用此版本的HttpClient访问一个会发生重定向跳转的URL时,会自动执行跳转,直到跳转到最后一个目标URL为止,而这个自动的重定向行为无法被禁止。由此会发生两个现象:

使用HttpClient访问原始URL后,直接返回的状态码就是200 (而非302)

得到的Response Header是最后一个URL的Response Header,而中间跳转的URL的Response Header全部丢失

第1点 其实影响不大,但 第2点 会导致中间跳转的URL所返回的Set-Cookie丢失。

对爬虫开发而言,这个问题是致命的:

如要模拟登陆时,通常登陆成功后会返回cookie并自动重定向到网站主页,而这个过程中丢失了cookie就相当于登陆失败。

因此主要针对 第2点 修正如下:

记录中间所有URL返回的Response Header中的Set-Cookie,并全部追加到最后一个URL的Response Header中。

org.bouncycastle

bcprov-jdk15on

1.54

Bouncy Castle是一种用于 Java 平台的开放源码的轻量级密码术包,它支持大量的密码术算法,并提供JCE 1.2.1的实现

JDK1.6/1.7仅支持遵循TLSv1.1协议的HTTPS访问,若网站强制要求使用TLSv1.2协议,JDK1.6/1.7会直接报错。

为了解决这个问题,从而引入Bouncy Castle重写JDK的默认SSLSocket的通信安全密级协议,使得JDK1.6/1.7支持TLSv1.2。

由于JDK1.8已支持TLSv1.2,因此此问题仅针对JDK1.6/1.7环境

com.cloudhopper.proxool

proxool

0.9.1

此版本的连接池在运行期间会打印很多并非slf4j所打印的调试日志(基本都是使用commons-logging打印),无法通过配置屏蔽之,导致程序输出混乱。

为此强制注释相关日志代码禁止其输出调试日志。

commons-io

commons-io

2.4

主要针对其中的org.apache.commons.io.FileUtils的函数返回值进行重写:

把其中的void返回值修正为boolean,并捕获相关抛出的异常,以便进行二次封装。

org.apache.poi

poi-ooxml

3.9

修改org.apache.poi.xssf.usermodel.XSSFHyperlink的可见性为public,以便进行二次封装。

org.quartz-scheduler

quartz

2.2.1

去除类org.quartz.CronExpression的final声明,以便进行二次封装。

版权声明

68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f707972696768742532302843292d323031367e3230313925323042792532304558502d626c75652e737667 68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d47504c25323076332d626c75652e737667

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值