我Java学习时的模样(三)
读Java源码
平常使用Java的时候,那些集合类使用起来很顺手,但是有没有想过这些集合内部的实现原理是怎样的,它的添加移除都有哪些操作? 有了一些工作经验之后,必须要读一读Java包中的源码,需要知道那些平常使用的类的原理。有一点,不要被这些类的行数给吓到,点击一些集合类,一个类的代码行数都一千多行,很多时候回被这个数字给吓到,除去注释空格,其实也没有多少了,并且只要理解了一点,该类的其他代码就相对简单了。 看源码的第一个步骤,先简单的调用该类的一些方法,让其运行起来,然后点击进入方法,可以在方法里面设置断点,让其一步一步的走,知道止到走到最后。这样对该方法有了一个大概的映像。 第二步进入到该类中,折叠代码块,把所有的方法都看一遍,在Java源码中的类,都可以通过方法名推测出该方法的完成了一个什么任务。这样心里对这个类有了一个整体的看法。 第三步从核心代码开始,就是从自己代码中的第一个调用方法开始读,如果可以断点进行调试,然后一步一步的跟着走。 最开始读的时候,需要在网上找别人解析的例子进行看,跟着别人的思路走,最后了再自己向上面的方法走,为什么需要找别人的例子,因为其他人已经踩过坑了,有了一定的思路了。
通过这样不断的看代码,然后总结自己的心得,以后再看其他人的代码的时候,会很快速的理解,就能够在很短的时间内上手。 我推荐的是从Java源码开始,而一些框架的源码例如Spring这种框架的源码,太晦涩难懂了,各种继承,各种封装,还有各种模式结合,如果没有懂这些东西,也没有一定的功底的时候,很容易就陷进去,时间花费了,还没有一点收获,反而打击了自信心,而源码中的各个方法都有注释,代码都比较简单,有一些包下的内容有点绕,例如concurrent包下的关于线程锁的类,这些内容刚开始理解比较困难,但是有了一定看源码的心得,加上网上搜索的资料,一定能够看懂这些代码,读这些代码,体会上古大神他们的思维,就会心生感叹。我读完这些代码之后,对那些上古大神佩服的五体投地,我估计这辈子都不可能写出这么厉害的代码的。 这些源码的之后,平常也经常用到,如果出现了问题,也能够快速定位问题。Java包的源码的重要性就不言而喻了,也不是所有的代码都需要读一遍,但至少把util包下面的内容都看一遍。
也是最近看完了concurrent包下面的内容,有了一些体会,并且通过看了这些类之后,再读一些其他代码的时候,不会心生害怕,并且还有一定的诀窍去弄懂代码的意思,在调试代码,解决BUG时,能够快速的找到问题的所在。
编辑文档
程序员一般需要写接口文档,但是很多时候,就没有了,不喜欢写文档,详细文档,架构文档等等。觉得写这些很麻烦,也没有这个意思,也就离职的时候写一份交接文档,而交接的文档的内容都相对简单。
但是你看厉害的人一般很少写代码,大部分是写文档,是写ptt,写架构文档,画时序图,画流程图,画架构图,这些都是架构师需要做的。这些算是他们基本的技能,并且优秀的程序员,文档写得很完备,能够知道其他程序员快速上手。看一些开源框架,他们的文档就写的非常好,架构师他们也都会将程序的前期文档交付出来,而对于我们这些初级程序员怎样提升这些能力,这种就一点一点去积累。 我在做完接口后,都会话一个时序图,描述该这个接口的内容,如果有复杂的内容会添加一个流程图,描述各个判断条件,如果其他程序员接手这个项目,看完这些信息,应该能够快速上手。
在文档里面,会记录这个项目立项的要点,会议讨论的重点,将一些点为什么要这样做描述清楚,很多代码只有在当时那个语境下才能理解,没有一份文档记录,等过了之后,就容易忘记了,而交给其他人的时候,其他程序员一脸懵圈,如果要改动该地方的时候,也不知道是下手改动,还是不改动。我以前就经常遇到离职之后,接手我项目的程序员,还经常问一个代码块,这个添加在程序里,有什么意思,为什么要添加。幸亏还能记得,然后跟别人解释这当初加上是为了实现怎样的功能。
将简单的事情复杂化
复制粘贴最轻松,最简单,但是也是最不能学到东西的事情。工作中,轻松简单的事情,往往是体力活,写了1000多行代码,但是真正有用的就两三百多行代码,不过不去思考的去优化代码,不思考这个而是否有简单的方法,那么就永远都不能进步。
如上司要求插入一些数据,这个时候,写好一条sql语句,其他的都复制粘贴。轻松完成任务,是否可以考虑做些sql代码,存储过程,来完成这些操作,到下一次又被安排做同样的事情时,可以直接执行。
就是将简单的事情复杂化,这里并不是将代码写的很花哨,各种模式加在一起,代码肯定是越简单越好,能够将复杂的逻辑弄简单,这本身就是将简单的事情复杂化。公式很简单,但是推导出该公式的逻辑就复杂了。
当有了这样的意识之后,学到的东西就会很多,自己的进步就能很大。
我Java学习时的模样(三)的更多相关文章
- 我java学习时的模样(二)
去掉自己浮躁的心 工作了三年,见识过高山,也见过低估,高山同大神一起共事,低估是几家特别烂的外包公司,现在有了另一种心境.已经开始重视自己,去掉当初浮躁的心. 毕业的一两年内,是人成长特别快的时期,也 ...
- 我java学习时的模样(一)
学会敲键盘,能够实现盲打 程序员写代码,是通过键盘将程序输入到编辑器中,而码子的高效,能够让自己的思路更流畅一些.如果想从事IT工作,那面打字就必须得会,并且,如果还一个一个字母去找,上司就会认为是一 ...
- 20145316许心远《Java学习笔记》第三周总结
20145316许心远<Java程序设计>第3周学习总结 教材学习内容总结 一.定义类: 类定义时使用class关键字 如果要将x绑定到新建的对象上,可以使用"="制定 ...
- java学习笔记-JavaWeb篇三
63 JSTL_表达式操作64 JSTL_流程控制操作 65 JSTL_迭代操作 66 JSTL_URL操作67 JSTL_改写MVC案例68 Filter概述 69 创建HttpFilter 70 ...
- Java学习笔记,第三章
Java基础语法 3.1类型.变量与运算符 3.1.1类型 Java可分为基本类型和类类型或参考类型.基本类型主要有 整数:可分为short整数(2字节,-32768 -- 32767),int整数( ...
- 疯狂java学习笔记之面向对象(三) - 方法所属性和值传递
方法的所属性: 从语法的角度来看:方法必须定义在类中 方法要么属于类本身(static修饰),要么属于实例 -- 到底是属于类还是属于对象? 有无static修饰 调用方法时:必须有主调对象(主语,调 ...
- java学习小笔记(三.socket通信)【转】
三,socket通信1.http://blog.csdn.net/kongxx/article/details/7288896这个人写的关于socket通信不错,循序渐进式的讲解,用代码示例说明,运用 ...
- JAVA学习笔记-数组的三种初始化方式
package Study; public class TestArray02 { public static void main(String[] args){//声明 int[] a; int ...
- JAVA学习资源网站
中文java技术网——http://www.cn-java.com/ 灰狐动力(http://www.huihoo.com/)—— 该站点有许多的开源的项目的介绍和学习,涉及操作系统,数据库等许多方向 ...
随机推荐
- 解决word2013老是打开未响应情况
问题:自己装了word2013时,每次打开word或者工作时,老是出现一个圈圈,提示未反应,是否关闭程序这样的提示: 解决方法:文件->选项->高级->显示->禁用硬件加速,将 ...
- SQL2008中sa账户无法登陆问题
实验需要用Java与SQL Server连接,因为使用的 SQL 2008 Express Edition 是基于 Visual Studio2010 安装包安装时一起安装的,所以为了方便数据库的操作 ...
- vsftpd安装与配置--研究tcp与防火墙
vsftpd的配置文件 /etc/vsftpd/vsftpd.conf 主配置文件 /usr/sbin/vsftpd Vsftpd的主程序 /etc/rc.d/init.d/vsftpd 启动脚本 / ...
- simrank
simrank 背景 度量相似度是许多应用的关键问题.传统方法与问题的领域相关,如文本匹配.计算交集.simrank则利用关联关系度量相似性,即"两个节点的相似性和各自邻域节点的相似度有关& ...
- hadoop2.2.0编译、安装和测试
搭建环境:单机64位CentOS6.5 .jdk1.6.0_45.Hadoop2.2.0 1.准备编译环境 从http://www.apache.org/dyn/closer.cgi/hadoop/c ...
- C#多线程学习(二) 如何操纵一个线程
在C#中,线程入口是通过ThreadStart代理(delegate)来提供的,你可以把ThreadStart理解为一个函数指针,指向线程要执行的函数,当调用Thread.Start()方法后,线程就 ...
- EasyFastCMS系列教学课程——1、三层框架的搭建
在本系列教程中,我们以一个大型CMS系统的完整开发流程为例,和大家一起探讨net开发的经验和教训.在本程序中,我们采用了流行的三层/N层框架+仓储模式的架构模式.项目分层示意图: 各层的主要用 ...
- Flex + Bison: Scanning from memory buffer
Found from StackOverflow: ========================================================================== ...
- UITextInputMode
An instance of the UITextInputMode class represents the current text-input mode. You can use this ob ...
- Quartz.Net_表达式参考说明
字段名 允许的值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日 1-31 , - * ? / L W C 月 1-12 , - * / ...