我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/)—— 该站点有许多的开源的项目的介绍和学习,涉及操作系统,数据库等许多方向 ...
随机推荐
- Git SSH Key
一.设置Git的user name和email: $ git config --global user.name "hhl_vip" $ git config --global ...
- [转]java设计模式
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- windows包管理工具和 ssh安装
Chocolatey windows下的包管理工具 https://chocolatey.org/ cmd里执行 @"%SystemRoot%\System32\WindowsPowerSh ...
- 《Beginning Java 7》 - 9 - Nested Types 嵌套类型
嵌套类分为四种: static member class 静态成员类 nonstatic member class 非静态成员类 anonymous class 匿名类 local class 局部类 ...
- django重写form表单中的局部钩子函数
from django import forms from django.core.exceptions import ValidationError from jax import models c ...
- 深入了解java虚拟机(JVM) 第一章 内存区域分布情况
前言: 本文主要是我自己总结的一些技巧,可能对搜到这篇的来观看的朋友有些很难理解,请见谅. 一.JVM的运行时数据区 总共有两个区域: 1.线程共享区:方法区,java堆 2.线程独占区:虚拟机栈,本 ...
- C# Winform下一个热插拔的MIS/MRP/ERP框架14(自动更新)
对于软件来说,启用自动更新是非常必要的. 根据软件的应用场景,我们可以设计不同的更新模型. 目前,IMES框架运行在.Net framework 4.0下面,使用的Win系统版本在Win7,域内管控, ...
- Kid的某些跳刺套路
需要按二段方向键的跳跃: 中途松开方向键的跳跃: 中途按下方向键的跳跃: 意想不到的小跳(如果上方有墙,小跳比大跳磕头跳的更远)(kid站的是最后的位置): 意想不到的小跳*2: 意想不到的小跳*3( ...
- JS关闭页面弹窗提醒
<html> <head><title>JS测试</title> <script type="text/javascript" ...
- FPGA基础学习(6) -- 原语
目录 1. IBUF和IBUFDS(IO) 2. IDDR(Input/Output Functions) 3. IBUFG和IBUFGDS(IO) 原语,即primitive.不同的厂商,原语不同: ...