1.前言
毕业已经一年有余,这一年里特别感谢技术管理人员的器重,以及同事的帮忙,学到了不少东西。这一年里走过一些弯路,也碰到一些难题,也受到过做为一名开发却经常为系统维护和发布当救火队员的苦恼。遂决定梳理一下自己所学的东西,为大家分享一下。
经过一年意识到以前也有很多认识误区,比如:
偏爱收集,经常收集各种资料视频塞满一个个硬盘,然后心满意足的看着容量不行动。
不重基础,总觉得很多基础东西不需要再看了,其实不懂的地方很多,计算机程序方面任何一个结果都必有原因,不要只会用不知道原理,那是加工厂出来的。现在ide查看代码那么方便,ctrl+点击就进入了JDK查看实现细节。
好高骛远,在计算机基础不牢固的情况下,总想着要做架构,弄分布式,搞大数据之类。
不重视性能,只求能实现功能,sql查询是不是可以优化,是否有算法妙用,大对象是否要清除。
不重视扩展性,模块之间紧密耦合,常用方法不提取成工具类,调用关系混乱等问题。
……
本文重点不在这些,故只列举了一小部分,下面进入正题。
2.语法基础
2.1 Java类初始化顺序
这是所有情况的类初始化顺序,如果实际类中没有定义则跳过:父类静态变量——父类静态代码块——子类静态代码块——父类非静态变量——父类非静态代码块——父类构造函数——子类非静态变量——子类非静态代码块——子类构造函数
2.2 值传递和引用传递
可能很多人对此不屑一顾,心想老子都工作一年了,对这些还不熟悉吗?但实际情况并非这样,JDK中东西全部熟悉了吗?以一个最简单的例子开始,你觉得下图中代码执行完之后fatherList中的元素是什么?
这是一个最基础的值传递和引用传递的例子,你觉得好简单,已经想跃跃欲试的挑战了,那么请看下面的,StringBuffer很好理解,但是当你执行一遍之后发现是不是和预想中的输出不一样呢?String不是引用类型吗,怎么会这样呢?如果你无法理解,那么请看下String的实现源码,了解下其在内存中分配的实现原理。
2.3 集合的使用
这部分几乎每个人都会用到,而且大家还都不陌生。下图来源于互联网,供大家复习一下。但是利用集合的特性进行巧妙的组合运用能解决优化很多复杂问题。Set不可重复性,List的顺序性,Map的键值对,SortSet/SortMap的有序性,我在工作中有很多复杂的业务都巧妙的使用了这些,涉及到公司保密信息,我就不贴出代码了。工作越久越发现这些和越巧妙。
2.3 异常处理
1.看着try、catch、finally非常容易,如果和事务传播结合在一起,就会变得极其复杂。
2.finally不一定必须执行,return在catch/finally中处理情况(建议亲自操刀试一下)。
3.catch中可以继续抛自定义异常(并把异常一步步传递到控制层,利用切面抓取封装异常,返回给调用者)。
2.4 面向对象思想
一提起面向对象,大家都知道抽象、封装、继承、和多态。但是实际工作经验中又知道多少呢,对于项目中如何巧用估计更不要提了。
共性的机会