大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
总结写开心外挂的心得
对开心网的外挂编写做个总结,避免弯路。
- 设计篇
针对需求的设计——需求向实现的转化
从调查切入点开始考虑如何着手,确定了基本的方式到写代码,并没有花太多精力,http访问、html解析都不复杂,但后续需求考虑不足造成最初的设计不能满足后续需要。比如后续加入的新模块轮询检索,定时执行都推翻了最初的设计。在设计阶段多大程度上为后续预留扩展余地有待思考。
避免过度设计
小程序貌似没有这个问题,基本上能减的都减了^_^ 个人编程更多的是偷懒避免了过多代码。
别为选择耽误时间
左右为难的选择未必是阻碍进程的瓶颈。为几个技术选择或者解决方案思考了很久,其实这些点都不是阻碍开发的地方,一旦确定一条路,剩下的就是解决这条路上的问题了。
- 技术细节篇
事前分析URL VS. 解析页面
简单一个例子,要取得B页面的信息需要经过A页面(如登录),开发中的想法有:
1.预先分析B页面的URL特点,从A页面拼接取得(URL中有随机的Key,需要在A页面取得)。
2.解析A页面中通往B页面的链接。
方法1更直接,Key的解析针对字符做regex查找即可,但缺点是一旦URL改动或者Key的方式改动要重新分析。
方法2站在网站外的视角,直接根据链接名称查找链接地址,缺点同样明显,页面名称不能变化,比如:“组件”这个链接名不能变,否则就找不到了。
最终选择了方法2,使用了比较旧的htmlparser,但扩展简单。
定时任务的控制
预订时间执行预订动作,使用了JDK自带的Timer,绝对的lightweight,API中提到的执行不准的情况忽略不计。整体控制方式:主进程控制子线程,子线程控制TimerTask线程。必要的线程间数据共享使用了ConcurrentSkipListSet,主要是考虑线程安全、可排序和无冗余。
双缓存
从Swing的双缓存思想得来,实际就是转移长时间操作的瓶颈,解决预订任务队列的更新问题,效果确实不错。
错误恢复
对长期自动执行来说,如果发生异常应该有一定的自我恢复能力,比如网络不通造成的异常等等。解决方式用子线程调用TimerTask的方式避免异常造成彻底中断,同时不会因为异常反复发请求。瞬时错误恢复没有解决,比如执行停车失败,会跳过这个车位,查找下一个,此时的错误状态等等没有细考虑。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194257.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...