分类 心得体会 下的文章

工作流引擎的实现

如何看待工作流引擎?近日在研究工作流引擎Activiti的数据库设计。
一个完整的工作流引擎有哪些部分?一个用户和组系统,一个流程定义文件,N个外置表单。
就拿最简单的请假流程举例:

  • 员工1点击申请按钮。
  • 系统启动一个流程实例。
  • 流程实例启动了一个表单1。
  • 员工1填写了表单1后提交。
  • 系统接收到员工1填写的内容,将其保存为变量。
  • 系统创建了签收任务,并分配给领导组。
  • 领导1签收这个申请。
  • 系统创建了批准任务,并分配给领导1。
  • 领导1点击办理按钮。
  • 系统启动了表单2.
  • 领导1填写了表单2并提交。
  • 系统接收到领导1填写的内容,并将其保存为变量。
  • 系统创建了签收任务,并分配给HR组。
  • HR1签收了这个申请。
  • 系统创建了批准任务,并分配给HR1.
  • HR1点击办理按钮。
  • 系统启动了表单3。
  • HR1填写了表单3并提交。
  • 系统接收到HR1填写的内容,并将其保存为变量。
  • 系统创建了销假任务,并分配给用户1。
  • 用户1点击销假按钮。
  • 系统启动了表单4。
  • 用户1填写了表单4并提交。
  • 系统接收到用户1填写的内容,并将其保存为变量。
  • 流程实例结束。

stackoverflow上关于Java的TOP10问题

1、Why is it faster to process a sorted array than an unsorted array?
概述:为什么处理一个排序数组比一个未排序数组更快?
点评:答案是分支预测,重点在于了解分支预测的原理。

2、Why is subtracting these two times (in 1927) giving a strange result?
概述:为什么有特定的两个时间相差一秒,但是计算得出的结果却不是一秒。
点评:时区变化导致了很多问题,包括这一例,所以可能比较奇怪。只要保持时间问题上的敏感性就好。

3、Is Java “pass-by-reference” or “pass-by-value”?
概述:Java是值传递还是引用传递?
点评:虽然答案很清楚,但是回答里面还是可以学习到一些东西的。

4、Java's +=, -=, *=, /= compound assignment operators
概述:Java的+=, -=, *=, /=等运算符的执行原理?
点评:这些运算符运算完之后都会被格式化一遍,所以可能和想象中有所出入。

5、Avoiding != null statements
概述:如何避免使用 !=null 表达式?
点评:答案中提供了很多方案,这边就不赘述了。

6、Proper use cases for Android UserManager.isUserAGoat()?
概述:征求Android中UserManager.isUserAGoat的合适使用场景。
点评:对Android不了解就不点评了。

7、Differences between HashMap and Hashtable?
概述: HashMap和Hashtable之间的区别。
点评:需要对HashMap和Hashtable等数据格式有比较深入的了解。

8、Read/convert an InputStream to a String
概述: 询问如何把InputStream类型的数据变成一个字符串。
点评:涉及到InputStream和String两种格式之间的转换。

9、Why is char[] preferred over String for passwords in Java?
概述:为什么Java Swing中的密码优先使用chare[]而不是字符串?
点评:因为String是immutable,所以为了提前释放password这种敏感信息,所以使用字符数组。

10、Create ArrayList from array
概述:询问如何把array格式数据变成ArrayList格式数据。
点评:涉及到array和ArrayList两种格式之间的转换。

形参和实参,值传递和引用传递?

虽然接受了一定的编程科班教育,但是一直在搞Web,连形参和实参,值传递和引用传递的概念都搞模糊了。
正好趁自己不理解,把这几个概念都了解一下,免得以后搞个大笑话。

首先是形参和实参,这两个概念和值传递引用传递的概念搞混,但是现在了解了一下,完全不是一回事。
比如有个函数:
function test($a, $b, $c) {
print_r($a + $b + $c);
}
然后有个调用:
test($one, $two, $three);
那么$one, $two, $three就叫做实参,$a, $b, $c就叫做形参,形参只有在函数被调用时短暂存在。

然后再说值传递和引用传递
传参有两种效果,一种传递了以后,修改形参不影响实参;一种传递了之后,修改实参会影响形参。
值传递就是修改形参不影响实参的方式。
引用传递就是修改实参会影响形参的方式。

还得说一个特别一点的传递方式,对象类型引用变量的传参。
对象类型引用变量无论是值传递还是引用传递,最后都能修改被引用的对象的数据,这点需要牢记。
怎么说呢?整个过程是这样的:

  • 变量(地址)->地址指向的数据(引用)->引用指向的数据(对象)。

作为对比,普通类型变量的过程是这样的:

  • 变量(地址)->地址指向的数据(数据)。

以后的博客该怎么写?

最近,博客写的比较少,因为一直在思考编程思想,而这些思想都不太成熟,所以博客写的比较少。
但是,最近关于前后端知识体系的整理也比较熟悉了,所以也开始思考写博客的意义了。

除了编程思想以外,就数编程经验最重要了,而编程经验的获取,不外乎熟能生巧。比如许多互联网企业面试都考察算法一样,个人觉得,如果把算法当成高考科目来教育,没准我国的高中毕业生的整体水平能完爆那些面试前刷了几个月面试题的程序员。为啥,如果成为高考科目,分分钟出现几十种教辅资料把基础算法讲解的透彻务必,每天一张卷子做得高考生怀疑人生,即使死记硬背也能牢牢记住。就像大家高中锻炼出来的哑巴英语,在大学两年没使用,拿出来还能过个六级什么的。

有的时候,还会怀念高中时代的充实。当然,那是最适合娱乐的年纪却没有娱乐的时光,但是那种方向明确,有人引领的感觉是进了大学到现在都难以体会的。大学里面学习的东西比较脱离市场,未来不知所措;工作后学的东西乱七八糟,独自摸索。

到了现在,无论承不承认,以后自己的发展就围绕Web方向了,或许还有机会扩展到其他相关领域,比如大数据,客户端等。那么现在最重要的就是要熟能生巧,要多去熟练前后端各种框架技术的用法,总结规律,提高效率,不能光去学习思想而不去实践。古人说过:纸上得来终觉浅,绝知此事要躬行。

从今日开始,依据现有的分类,把每种语言,每种框架使用中遇到的问题,如何解决的,有了哪些新的想法都要记录下来。
除此以外,时常总结经验,明确自己发展方向,走错一步就落后一步,及早总结发现自己的错误。