JAVA反射调用总结

一.概述

这几天一直在忙于一个框架的开发,我们的初衷是基于配置产出业务数据,不要让开发工程师去编写JAVA代码来产出账单,一开始觉得这件事情很难,很难做到不开发JAVA代码,事实确实如此,不过数据如果规整的话,基于配置完全可以,一行java代码都不用写。当然这个框架目前还在测试中,核心功能已经开发结束了,开发一个框架和开发一个业务功能要考虑的事情完全不一样,在开发框架之前,需要把所有可能出现的需求都要考虑一下,其实框架就是高度的抽象,我们把平时所做的一些功能逻辑梳理清楚,再上一个高度就能梳理出一个框架。在开发这个框架的过程中用到了反射,感觉JDK的反射写起来代码有点多,于是考虑用Spring框架提供反射工具类,还有木有其他处理反射调用框架或者工具呢?

操作系统定时调度

一.概述

最近需要开发一些定时任务,提到定时任务,我们都会想到quartz,为了让我们的定时任务能够更加灵活的被控制,我们通过shell脚本去执行一个java类,然后定时去执行这个shell脚本即可。如何去定时执行这个shell脚本,我们想到Linux本身提供后台进程去定时执行一些命令,那就是crontab,因此我们编写好自己的shell脚本再写好crontab后就能定时执行我们的任务了。

css换行

最近在搞一个后台系统的时候,发现table表格的宽度没法调整,找前端大神看了一下,发现是table表格中的全英文内容过长,不会自动换行导致。因此需要用CSS来实现换行,浏览器默认不会对英文内容进行换行的。具体CSS的写法如下

1
2
word-break: break-all;
word-wrap: break-word;

GIT常用命令总结

一.概述

最近有个项目分支使用了git托管代码,虽然之前在github上托管过很多代码,但是对git本身的使用以及特性也没有太多的深入的了解,最近使用git出现了一个问题,查到最后是环境问题,很悲摧,为了避免悲剧再次出现,就看了一遍git相关的所有常见命令以及一些git的设计思想,比如工作区,暂存区,本地仓库等等,也算是对平时编写代码思路的一种启发。很多人都说git是分布式的,svn不是分布式的,那么git分布式到底体现在哪里,每个人本地都有一个完整的仓库吗?难道svn每个人本地的代码就不是完善的吗?关于git分布式,我们从下面几个点来解释:

guava中的Multimap

一.概述

我们在日常开发过程中都会使用Map这个数据结构,使用这个数据结构能够很方便维护一些映射关系,有时候,我们存储的结构是Key-Collection的映射关系,关于这个映射关系调用put方法的时候,我们需要先调用get方法,然后看看对应的Key是否在当前映射关系中已经存在Collection,如果不存在,我们直接忘Collection中增加一个元素,不存在我们需要手动去创建,然后在往我们手工创建的Collection中增加一个元素,最后再把这个Collection写入我们的Map中,很麻烦。对于C++ STL有过了解的人都知道,STL中有一个Multimap这个数据结构,该数据结构能方便地解决上面映射关系的问题。但是JDK本身不存在这样的数据结构。。。好在guava这个开源的二方库中自己定义了这个容器,该容器既能维护好Key-Collection这个数据结构,也能很方便往这个数据结构中写数据。

javac生成的access$000方法

一.概述

最近在做字节码分析的时候,发现字节码中出现了access$000的方法,这个方法不是开发工程师写的,是编译器生成的,那么编译器生成这个方法是为了解决什么问题呢?我们知道编译会为静态代码块生成执行的方法,在类没有构造函数时为类生成缺省构造函数,这个access$000究竟是在什么场景下面用的呢?仔细分析包含access$000的类,发现该类中存在内部类,结合google搜索,原来acess$000是为了解决内部类访问外部类的成员,包括成员变量和成员方法。

Short对象的比较

一.背景

今天和同事一起分析线下问题,发现代码中有个笔误,对两个Short类型的对象使用==来比较,结果是比较表达式一直为false,导致一个bug的产生。

一次关于servlet的扩展

一.需求

现有一个web框架,从HttpServletRequest中获取调用request.getParameter(“orderId”)获取订单的ID,为了安全,我们对订单的ID加密了,也就是此时外部传递过来的orderId已经加密,但是这个web框架不认识加密后的orderId,这就需要我们在自己的web应用中把orderId解密,然后继续传递。

akka如何和Spring集成起来

一.概述

最近又重新学习了一下akka,并且在一个web应用中成功使用了akka提升了系统的性能。我们在web应用中一般都会有dao&&service,这些都是spring的bean,我们定义一个actor,这个actor中可能调用dao读写数据库,也可能调用service做业务逻辑,因此我们就希望actor也是从spring容器中获取到的,这样就可以在actor中注入service&&dao了。