分类 Java 下的文章

本篇主要介绍如何查看所有相关你的类的东东。

一、查看当前的classloader
键入命令

classloader

结果如下:

二、查看你的类是否被加载
应用启动或运行的时候,可能会抛出ClassNotFoundException这种和类加载相关的异常,这时候你需要确认classloader是否正确加载了你的类。

键入命令,传入类的全路径

sc com.chengjf.snippet.spring.mvc.controller.IndexController

结果如下:

sc命令也支持通配符

sc com.chengjf.*

结果如下

或者

sc *IndexController*

结果如下

三、确认你的类代码是否最新

执行过程中,可能发现这个类方法执行的效果和自己当初设想的不对,比如方法入口的日志没有打印,方法返回的值明显不对,又或者该插入数据库或redis没有进行。

这个时候,你要首先确认,这个类确实是你写的那个类,而不是因为打包为题或部署问题导致类代码没有更新。

键入命令:

jad com.chengjf.snippet.spring.mvc.controller.IndexController

结果如下

上文说了不要自己造轮子,要使用别人的轮子,这一文就说下使用别人的轮子要注意的事项。

上文的最后也说了,选择轮子的时候,要选择有人维护的,使用者多的轮子,这样可以避免一些问题。但是如果你的需求或者功能比较小众,这个领域轮子少,用的人也少,那么该如果选择?

我推荐如下几个策略。

  1. 向该领域的专家、前辈、同事请教,问下这个领域内大家都使用哪些轮子来处理的
  2. 同等条件下,优先使用大厂(比如Google,Alibaba)或大机构(如Apache)的轮子
  3. 同等条件下,优先使用issue活跃的轮子,这样至少出了问题,大家可以一起讨论,一起解决
  4. 同等条件下,优先使用代码逻辑清晰、优雅的代码,这样无论是对排查问题,甚至自行修改都是好的
  5. 最后的办法,就是自己造一个轮子了,但是如果能依赖别人的轮子来造,也是推荐的

选好的轮子,那么如果防范别人的轮子里有炸呢?我也推荐如下几条策略。

- 阅读剩余部分 -

不要自己造轮子

Don't repeat yourself

DRY这句话大家可能耳朵都听出茧子了。不过,这个确实是非常重要的一个填坑要诀。

拿正常的开发(非填坑)来说,使用别人造好的轮子可以大大提高效率和开发进度。
我上次用的别人的大轮子是开发微信公众号和小程序的时候,用的wechat这个开源lib。使得集成微信的工作量大大减少,不必看微信那么多的文档和接口。

专门拿填坑来说,使用别人造好的轮子比正常开发要显得还重要一些。当然这里的轮子主要是原来工程中使用的轮子了。尽量使用工程中原来使用的轮子,别自己造,更别使用其他人的轮子。

我见过最常最轮子的方法就是类似于StringUtils和CollectionUtils这种,用来判断empty,用来split等。


- 阅读剩余部分 -

上篇文章提到了生成唯一的短字符串,应用在给每个用户生成一个唯一的邀请码,这个可以扩展到给每个商品生成一个唯一的编号,给每个地点生成一个唯一的标识等等。

但是,唯一的短字符串还有另外一个场景,就是靓号,比如说QQ靓号,直播间的房间号,这些场景下,如果随机生成一些字符串可能并不如人意,需要将某些靓号整理出来,专门给运营发放。

最先想到的就是把靓号全部找出来,存储起来,然后还是按照原来的算法生成唯一短字符串,只是当随机到这些靓号的时候,重新生成,也就是要多查一次而已。

相对的,可以把非靓号存储起来,生成的时候从非靓号里取,这样避免了一次查询,这个方案的关键就是非靓号的存储,非靓号可比靓号数目大得多,使用redis还是rds需要权衡一下。(如果使用redis,可以使用set这个数据结构,使用spop进行处理)

重要的话说三遍都不为过。

永远不要动老接口,无论这个接口是别人写的,还是你写的。
永远不要动老接口,无论这个接口有人用,还是没人用。
永远不要动老接口,无论是什么样的理由。

可能要动这个接口的理由很多:

  1. 这个接口代码写的太烂,要优化一下
  2. 这个接口现在没人用了,注释掉或删了吧
  3. 底层实现修改了,这个接口的参数或返回值也要修改
  4. ……

亦或是你自己对自己的修改信心满满:

  1. 我知道哪些地方调用了这个接口,不会有任何影响
  2. 我只是稍微优化了下代码逻辑,保证接口行为同原来一致
  3. ……

真的,有时候连我自己都说服自己要下手了……



- 阅读剩余部分 -