一点记忆—— Java框架知识的学习有感
 
      说一下自己学习的框架知识的历程吧:好久了,应该是一年前,也就是大三上的时候,我对于基本的 Java编程就已经达到所谓的“熟练”,认为自己可以在 Java的世界里可以华山论剑了,到现在想一下,确实真的很好笑,如果真的想在 Java的世界里华山论剑的话,没有时间的积累简直就是痴人说梦。
即使有时间的积累,不断扩宽自己掌握的知识的范围,同时有不断的深入,这些还是不够的。因为我们知识不断的学习,没有什么新的框架或者是技术变革,不会给程序界带来什么变化。什么时候,我们可以编写自己的框架技术,并且在一个领域做到相当优秀,这个时候,勉强算是略有小成。
同时还有很多其他的领域,在纵向上分为向上的框架技术和向下的底层技术。
往上面走的话,就是开发技术中的框架。如果我们想要真正开发自己的框架的话,那就是首先把别人的框架学习使用好,这样还是差的很远,要深入到框架的源代码级别,阅读框架的源代码,这又是一个很大的任务了,望而却步了吧,不过想要在这个圈儿混的话,那是迟早的事。
开发工程师和研发工程师的区别是什么?开发在编写代码领域十分擅长,但限定的是他自己对于这整体的代码掌握的非常好,一种极端的情况就是这些代码完全是他自己写的,退一步的话,就是现在开发行业中,模块化的思想,每一个人只需完成自己的模块,对于其他的模块,可以不用掌握,只要别人写好,按照一定的规范,调用即可,用一个比较专业的名字就是低耦合。但是如果我们一直停留在这个地步的话,那么在往上面走的话,缺乏研读别人代码的能力,比如框架的源代码、系统代码(比如 Android的系统代码),在开发的这一条路上不会走很远。
研发工程师,不仅需要卓越的编程能力,更加重要的是研读代码的能力。程序界中不乏优秀的代码,而这一个行业最忌讳的就是 Repeat:重复自己说明自己对于整个系统的设计太差了,也就是所谓的没有大局观,只是关注眼前,而没有从整体的去考虑。或者是不停地忙碌,却忘记了思考; 重复别人,说明你的知识面太窄了,这一个行业是一个不断学习的行业,每天都会有很多新的东西出现,虽说良莠不齐,但是至少有很多是优秀的,甚至可以说是解决这一类问题的相对优秀的方案,那么我们就没有必要重复的制造轮子了。这个时候,阅读别人的优秀的源代码的能力是多么的重要。
          我的一位前辈告诉我:学习 Spring不仅要学习如何使用,更要学习如何在底层实现这些框架的,最好是深入源代码级别,去学习。从短期的角度上来看,都会使用 Spring的两个人是没有什么差别,但是如果一个工程师了解甚至是可以从源代码级别上掌握一种框架的原理,选择哪一个就已经十分明显了。
月份,去面试粤电实习生的时候,就被面试官狂叼 SSH,不评价面试官了,确实是自己不掌握 SSH框架,虽然最后给还是凭借自己的对于 Java Web编程(非框架)通过了,但是说自己“精通 Java”,不会SSH 框架确实说不过去了。但是自己真的没有时间去学习了。之后虽然比较专业的技术官不会问你 SSH,但是几乎所有的国企(这里就不比如了)都会问你或不会 SSH。
 年的本科生抢饭碗。所以如果你没有什么真材实料的话,就不要每天的找虐了,回家洗洗睡吧!不过研究生也并不可怕,其实一路走过来的话,会发现,有些研究生确实是很厉害,比如我在博客上看到的一个华工的去年毕业的,看他读的书,都和他差不多高了,而且全都是Linux,包括内核源码等等。但这样的人毕竟是少数,研究生中很大一部分也就是多吃了几年的米。总结来说,如果你的大学不是太缩水,是可以小虐一下部分研究生;如果没有什么真才实学的话,那还是别到处找虐了。
          回到框架技术上来, S2SH是框架领域的翘楚,在实践的基础之上,学习其中的思想对于提升自己的专业素养是十分有帮助的。同时在找工作面试的时候,面试官如何得知你的能力:就是通过和你聊聊你曾经的开发经验:比如遇到那些问题、如何解决、如何使用等等。这些东西只要是用过的人都会遇到类似的问题和采用几乎相同的办法去解决这些问题。如果你没有经验的话,那就没有办法聊了,即使你掌握原理,也不可以,因为面试过程中,你会发现你和面试官不在同一个频道上。我面试 YY的时候,在多线程和同步上就是因为和面试官不在同一个频道,他在 C++,而我是Java ,就被刷了。
 次学习SSH 的念头,最初是在大二下,但都是因为这样和那样的原因放弃了。现在总结一下原因: Java素养不够,连添加包都不知道; IDE使用不会,甚至在Web项目中还必须要 WebRoot去访问;配置出错,没有办法实践下去。现在看来这些都不是问题,而且在几天的时间里就会初步使用了 Spring和Hibernate 了,凡事都是入门比较困难,一旦入门,学习起来就十分的顺风顺水。虽然之后很难再进一步提高,这是因为缺乏实际项目的练手,所以学习知识是为了使用在实际的生活的中。
往下面走的话,就是Java底层的实现。其实 Java语言也只是一种规范,他又很多实现版本,最通用的是 Sun公司的JDK ,还有Open-JDK等等。 JVM的内部是如何运行的,内存如何分配的, JVM调优的知识。同时Java现在的发展路线不仅仅是一种语言,他想做成一个平台。比如 Python有对应运行在JVM上的 JPython,Ruby 有对应的 JRuby等等。因为自己没有过的接触这些领域的知识,就不乱说了!
 
Java的世界,学的越多,越是发现自己需要学的知识越多!
 
今天是感恩节,又翻到了去年感恩节的时候写的一点记忆,诸多感慨,今年就不写了,有一篇记忆就让自己一塌糊涂,不过该感谢的人还是要感谢的,因为一路上有你!
 
YangTengfei
2013.11.28
  

一点记忆—— Java框架知识的学习有感的更多相关文章

  1. Java框架spring Boot学习笔记(六):Spring Boot事务管理

    SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.

  2. java基础知识再学习--集合框架-对象的强、软、弱和虚引用

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhangjunhd.blog.51cto.com/113473/53092 本文 ...

  3. java基础知识再学习--HashMap与ConcurrentHashMap的区别

    引用:http://blog.csdn.net/xuefeng0707/article/details/40834595 从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是 ...

  4. Java框架spring Boot学习笔记(十):传递数据到html页面的例子

    新建一个templates文件夹和index.html <!DOCTYPE html> <html> <head lang="en"> < ...

  5. Java框架spring Boot学习笔记(九):一个简单的RESTful API

    RESTful API设计需求如下: User.java package com.springboot.test; public class User { private Long id; priva ...

  6. Java框架spring Boot学习笔记(七):@Configuration,@bean注解

    @Configuration作用在类上,相当于一个xml文件 @bean作用于方法上,相当于xml配置中的<bean>标签 一个例子: 新建一个Springboot工程 新建一个User类 ...

  7. Java框架spring Boot学习笔记(五):Spring Boot操作MySQL数据库增、删、改、查

    在pom.xml添加一下代码,添加操作MySQL的依赖jar包. <dependency> <groupId>org.springframework.boot</grou ...

  8. Java框架spring Boot学习笔记(四):Spring Boot操作MySQL数据库

    在pom.xml添加一下代码,添加操作MySQL的依赖jar包. <dependency> <groupId>org.springframework.boot</grou ...

  9. Java框架spring Boot学习笔记(三):Controller的使用

    Controller注解介绍 @Controller:处理http请求 @RestController: Spirng4之后新加的注解,其实是一个组合注解等同于@ResponseBody和@Contr ...

随机推荐

  1. DevOps架构实践

    1. 场景 持续部署:业界没有统一明确地定义,简单理解为将集成结果部署到不同的环境供用户使用,并且立即反馈部署结果的实践,其中不同的环境包括:开发环境.测试环境.预发布环境.生产环境 持续部署两个核心 ...

  2. Java设计原则—接口隔离原则(转)

    接口隔离原则 Interface Segregation Principle    定义: 客户端不应该依赖它不需要的接口 类间的依赖关系应该建立在最小的接口上 我们可以把这两个定义概括为一句话:建立 ...

  3. linux环境上运行.net core 初探

    1.安装 .net core 环境 rpm --import https://packages.microsoft.com/keys/microsoft.ascsh -c 'echo -e " ...

  4. Codeforces Round #408 (Div. 2) D - Police Stations

    地址:http://codeforces.com/contest/796/problem/D 题目: D. Police Stations time limit per test 2 seconds ...

  5. [Python]关于return逻辑判断和短路逻辑

    定义一个return...and..函数: def res(): ' 返回结果: >>> print(res()) 1234 定义一个return...or..函数: def res ...

  6. linux上使用wget下载文件

    首次安装的centos操作系统是没有安装wget的,所以首先需要先安装wget,然后才能使用wget下载文件. 1.第一步,保证centos能正常连网.使用命令  :yum -y install wg ...

  7. QML Image Element

    QML Image Element The Image element displays an image in a declarative user interface More... Image元 ...

  8. python 内建函数isinstance的用法以及与type的区别

    isinstance是Python中的一个内建函数 语法: isinstance(object, classinfo)   如果参数object是classinfo的实例,或者object是class ...

  9. ora-12154:tns:could not resolve the connect identifier specied

    今天在发布网站时,点击登录之后出现了这个问题,修改一下环境变量,该问题就顺利解决了,解决方法如下: 在环境变量里,找到[Administrator的用户变量(U)],在其之下新建一个用户变量: 变量名 ...

  10. jenkins邮箱配置以及结合ansible进行批量构建

    tomcat8.5以上版本,jenkins2.7以上版本 首先填写你的系统管理员邮件地址,否则会使用jenkins系统本身的邮箱 填写的163邮箱,通过smtp认证填写正确的账号和密码(注意这里的密码 ...