读Java源码

平常使用Java的时候,那些集合类使用起来很顺手,但是有没有想过这些集合内部的实现原理是怎样的,它的添加移除都有哪些操作? 有了一些工作经验之后,必须要读一读Java包中的源码,需要知道那些平常使用的类的原理。有一点,不要被这些类的行数给吓到,点击一些集合类,一个类的代码行数都一千多行,很多时候回被这个数字给吓到,除去注释空格,其实也没有多少了,并且只要理解了一点,该类的其他代码就相对简单了。 看源码的第一个步骤,先简单的调用该类的一些方法,让其运行起来,然后点击进入方法,可以在方法里面设置断点,让其一步一步的走,知道止到走到最后。这样对该方法有了一个大概的映像。 第二步进入到该类中,折叠代码块,把所有的方法都看一遍,在Java源码中的类,都可以通过方法名推测出该方法的完成了一个什么任务。这样心里对这个类有了一个整体的看法。 第三步从核心代码开始,就是从自己代码中的第一个调用方法开始读,如果可以断点进行调试,然后一步一步的跟着走。 最开始读的时候,需要在网上找别人解析的例子进行看,跟着别人的思路走,最后了再自己向上面的方法走,为什么需要找别人的例子,因为其他人已经踩过坑了,有了一定的思路了。
通过这样不断的看代码,然后总结自己的心得,以后再看其他人的代码的时候,会很快速的理解,就能够在很短的时间内上手。 我推荐的是从Java源码开始,而一些框架的源码例如Spring这种框架的源码,太晦涩难懂了,各种继承,各种封装,还有各种模式结合,如果没有懂这些东西,也没有一定的功底的时候,很容易就陷进去,时间花费了,还没有一点收获,反而打击了自信心,而源码中的各个方法都有注释,代码都比较简单,有一些包下的内容有点绕,例如concurrent包下的关于线程锁的类,这些内容刚开始理解比较困难,但是有了一定看源码的心得,加上网上搜索的资料,一定能够看懂这些代码,读这些代码,体会上古大神他们的思维,就会心生感叹。我读完这些代码之后,对那些上古大神佩服的五体投地,我估计这辈子都不可能写出这么厉害的代码的。 这些源码的之后,平常也经常用到,如果出现了问题,也能够快速定位问题。Java包的源码的重要性就不言而喻了,也不是所有的代码都需要读一遍,但至少把util包下面的内容都看一遍。
也是最近看完了concurrent包下面的内容,有了一些体会,并且通过看了这些类之后,再读一些其他代码的时候,不会心生害怕,并且还有一定的诀窍去弄懂代码的意思,在调试代码,解决BUG时,能够快速的找到问题的所在。

编辑文档

程序员一般需要写接口文档,但是很多时候,就没有了,不喜欢写文档,详细文档,架构文档等等。觉得写这些很麻烦,也没有这个意思,也就离职的时候写一份交接文档,而交接的文档的内容都相对简单。
但是你看厉害的人一般很少写代码,大部分是写文档,是写ptt,写架构文档,画时序图,画流程图,画架构图,这些都是架构师需要做的。这些算是他们基本的技能,并且优秀的程序员,文档写得很完备,能够知道其他程序员快速上手。看一些开源框架,他们的文档就写的非常好,架构师他们也都会将程序的前期文档交付出来,而对于我们这些初级程序员怎样提升这些能力,这种就一点一点去积累。 我在做完接口后,都会话一个时序图,描述该这个接口的内容,如果有复杂的内容会添加一个流程图,描述各个判断条件,如果其他程序员接手这个项目,看完这些信息,应该能够快速上手。
在文档里面,会记录这个项目立项的要点,会议讨论的重点,将一些点为什么要这样做描述清楚,很多代码只有在当时那个语境下才能理解,没有一份文档记录,等过了之后,就容易忘记了,而交给其他人的时候,其他程序员一脸懵圈,如果要改动该地方的时候,也不知道是下手改动,还是不改动。我以前就经常遇到离职之后,接手我项目的程序员,还经常问一个代码块,这个添加在程序里,有什么意思,为什么要添加。幸亏还能记得,然后跟别人解释这当初加上是为了实现怎样的功能。

将简单的事情复杂化

复制粘贴最轻松,最简单,但是也是最不能学到东西的事情。工作中,轻松简单的事情,往往是体力活,写了1000多行代码,但是真正有用的就两三百多行代码,不过不去思考的去优化代码,不思考这个而是否有简单的方法,那么就永远都不能进步。
如上司要求插入一些数据,这个时候,写好一条sql语句,其他的都复制粘贴。轻松完成任务,是否可以考虑做些sql代码,存储过程,来完成这些操作,到下一次又被安排做同样的事情时,可以直接执行。
就是将简单的事情复杂化,这里并不是将代码写的很花哨,各种模式加在一起,代码肯定是越简单越好,能够将复杂的逻辑弄简单,这本身就是将简单的事情复杂化。公式很简单,但是推导出该公式的逻辑就复杂了。
当有了这样的意识之后,学到的东西就会很多,自己的进步就能很大。

我Java学习时的模样(三)的更多相关文章

  1. 我java学习时的模样(二)

    去掉自己浮躁的心 工作了三年,见识过高山,也见过低估,高山同大神一起共事,低估是几家特别烂的外包公司,现在有了另一种心境.已经开始重视自己,去掉当初浮躁的心. 毕业的一两年内,是人成长特别快的时期,也 ...

  2. 我java学习时的模样(一)

    学会敲键盘,能够实现盲打 程序员写代码,是通过键盘将程序输入到编辑器中,而码子的高效,能够让自己的思路更流畅一些.如果想从事IT工作,那面打字就必须得会,并且,如果还一个一个字母去找,上司就会认为是一 ...

  3. 20145316许心远《Java学习笔记》第三周总结

    20145316许心远<Java程序设计>第3周学习总结 教材学习内容总结 一.定义类: 类定义时使用class关键字 如果要将x绑定到新建的对象上,可以使用"="制定 ...

  4. java学习笔记-JavaWeb篇三

    63 JSTL_表达式操作64 JSTL_流程控制操作 65 JSTL_迭代操作 66 JSTL_URL操作67 JSTL_改写MVC案例68 Filter概述 69 创建HttpFilter 70 ...

  5. Java学习笔记,第三章

    Java基础语法 3.1类型.变量与运算符 3.1.1类型 Java可分为基本类型和类类型或参考类型.基本类型主要有 整数:可分为short整数(2字节,-32768 -- 32767),int整数( ...

  6. 疯狂java学习笔记之面向对象(三) - 方法所属性和值传递

    方法的所属性: 从语法的角度来看:方法必须定义在类中 方法要么属于类本身(static修饰),要么属于实例 -- 到底是属于类还是属于对象? 有无static修饰 调用方法时:必须有主调对象(主语,调 ...

  7. java学习小笔记(三.socket通信)【转】

    三,socket通信1.http://blog.csdn.net/kongxx/article/details/7288896这个人写的关于socket通信不错,循序渐进式的讲解,用代码示例说明,运用 ...

  8. JAVA学习笔记-数组的三种初始化方式

      package Study; public class TestArray02 { public static void main(String[] args){//声明 int[] a; int ...

  9. JAVA学习资源网站

    中文java技术网——http://www.cn-java.com/ 灰狐动力(http://www.huihoo.com/)—— 该站点有许多的开源的项目的介绍和学习,涉及操作系统,数据库等许多方向 ...

随机推荐

  1. 阿里云云主机添加swap分区与swap性能优化

    1.swap的功能与相应内核参数 Linux 将物理内存分为内存段的部分被称作“页面”.交换是指内存页面被复制到预先设定好的硬盘空间(叫做交换空间)的过程,目的是释放用于页面的内存.物理内存和交换空间 ...

  2. Arduino I2C + 温湿度传感器Si7021

      Si7021是Silicon Labs生产的温湿度传感器芯片.其主要特性: 湿度精度:误差典型值+/-2%RH,最大值+/-3%RH(0~80%RH),出厂已校正 温度精度:误差典型值+/-0.3 ...

  3. ASP.NET MVC中的控制器激活与反射之间的联系(帮助理解)

    ASP.NET Mvc是ASP.NET的一个框架,同样也是基于管道的设计结构.HttpModule和HttpHandler是ASP.NET的两个重要组件,同样的在Mvc中也是非常重要的组件.在应用程序 ...

  4. win10 git 报错 Host key verification failed

    从code.aliyun.com切回github 原先的known_hosts里记录的是code.aliyun.com的ip,必须新加一个github的. known_hosts报错Host key ...

  5. 聊聊 JDK 非阻塞队列源码(CAS实现)

    正如上篇文章聊聊 JDK 阻塞队列源码(ReentrantLock实现)所说,队列在我们现实生活中队列随处可见,最经典的就是去银行办理业务,超市买东西排队等.今天楼主要讲的就是JDK中安全队列的另一种 ...

  6. Data Base Oracle 常用命令

    Data Base  Oracle 常用命令 1.登录:(不需要密码,属于管理员权限) conn /as sysdba; 2.查看数据库存储位置: select name from v$datafil ...

  7. [ActionSprit 3.0] FMS远程共享

    package { import flash.display.Sprite; import flash.events.NetStatusEvent; import flash.events.SyncE ...

  8. 性能测试—认识JMeter(一)

     性能测试—认识JMeter(一) <零成本web性能测试>第二章 JMeter基础知识总结和自己的理解 一.JMeter百度词条概念 Apache JMeter是Apache组织开发的基 ...

  9. Ionic 2 :如何实现列表滑动删除按钮

    http://blog.csdn.net/h254532699/article/details/54382123 使用Ionic这种框架伟大的地方在于用户界面元素默认准备好了,意味着你可以设计更好的a ...

  10. 不同的color-model

    RGB color mode YIQ color mode Y: brightness,亮度 I: In-phase,色彩从橙色到青色 -Q: Quadrature-phase, 色彩从紫色到黄绿色 ...