Java程序员成长之路
北哥在前文总结了程序员的核心能力,但在专业能力维度,只是做了大概的阐述,并没有详细展开。从今天开始,我会把我作为程序员成长过程中,学习的知识总结成系列文章陆续发出来,供大家学习参考。
本文是第一篇,关于Java领域的相关技术内容

北哥是java程序员出身,写了有十多年的Java代码,这里的分享是我这些年在java相关领域学习大致路径。
Java本身是一门编程语言,相比其它的编程语言如c、c++,java在企业级开发中是使用最多的。在包括BAT等互联网大厂,人员最多的编程岗位基本都是Java开发岗。核心在于java丰富的生态和社区,对企业级应用开发良好的支持,以及源源不断的人才供应。
既然Java是一门编程语言,因此最基础的编程知识是需要掌握的,大部分计算机专业毕业的学生应该都学习过相关课程,这里做个简单总结。
01编程基础
最基本的编程基础知识就是数据结构和算法了。
数据结构方面,常用的包括数组、栈、队列、链表、二叉树、红黑树、哈希表、堆、图等。
这些数据结构基本上都能够在java的基础包里面找到相关实现,我在刚开始学习Java的时候,不知道如何入门,就是研究这些数据结构的Java实现。事实证明,无论在后来接触什么样的框架、中间件,深入到源码级,这些基础的数据结构随处可见。
在算法层面,需要掌握一些基础的算法,常用的有搜索和排序,像二分搜索、冒泡排序、选择排序、插入排序等。这些算法不仅仅需要了解他们的实现,还需要搞清楚时间复杂度和空间复杂度。除了一些基础的算法,还有一些高级算法例如贪心、背包、剪枝、动态规划等,这些高级算法会在大数据、人工智能和算法领域被频繁的应用。
数据结构之外,另外一个编程方面的基础知识是操作系统和网络相关内容。
在操作系统方面,最基本的需要对进程、线程、内存管理等有一定的掌握。
网络方面,核心的就是TCP/IP协议,当然HTTP协议也是必学必会的知识。
以上说的都是一些编程的基础知识。掌握了这些编程的基础知识,就可以迈入Java开发的大门了。接下来就重点看下Java相关的基础技术体系。

02 Java基础技术
首先,要对Java语言的所具备的基础特性有了解,比如面向对象、继承、内部类、反射、泛型、序列化、引用、异常等。
其次,进入到对java的核心类库(Java core)的学习,需要做到非常熟悉甚至精通,理解他们背后的实现原理,这部分的核心是Java集合类、java.lang、http://java.io包下面的相关类等。
第三,掌握了Java core相关类库后,就需要深入到jvm层面学习。包括类加载机制,GC的算法原理和调优,不同种类的垃圾收集器的区别等等。在后面进入到真正的企业级开发过程中,遇到的许多问题都是需要深入到jvm层面研究相关参数和信息才能发现和解决。
第四,真正的企业级开发都会涉及到多线程和网络编程。多线程相关内容包括线程、线程池、并发编程等,特别是java.util.concurrent包下的相关类是必须要掌握的。网络编程包括基于tcp、udp通信的,主要需要了解socket编程相关内容,另外就是基于http相关的Java web编程相关,主要是jsp和servlet相关技术,不过随着前后端分离的原因,目前已经很少使用jsp了。
第五,企业级开发一般都离不开数据库,Java和数据库相关的技术主要是jdbc,也有一些场景的数据库连接池的框架如c3p0、dbcp等技术。
最后,写完代码后,程序员都需要做一些自测,常用的单元测试框架如junit、testng、mockito等也是必须要熟悉的。

03 开发框架
掌握了Java基础的技术后,并不意味着通过这些技术就能够很好的完成企业级应用的开发,利用一些成熟的框架可以大幅提高编程的效率。
在10年前,比较流行的Java相关的开发框架主要是ssh,包括spring、struts2和hibernate,随着技术的迭代更新, 这些框架也不断升级换代,目前在企业中大部分使用的框架是spring+springMVC+mybatis。随着近几年互联网和移动互联网的发展,高并发大流量系统越来越常见,对系统性能要求也不断提高,微服务和缓存系统也成为标配,相关的技术框架主要是spring cloud全家桶和springboot。当然类似dubbo这种RPC框架在企业中也使用的较多。而缓存系统使用比较多的是redis、memcache等。
为了排查问题,正常的企业应用系统都需要记录日志,常用的框架有slf4j、log4j、logback等。
除此之外,还有工作流开发场景会使用到的框架如jbpm、activiti等,权限控制开发场景会使用到的框架如shiro,处理邮件相关的Java mail等。
使用这些应用框架开发出的应用,在真正提供服务前,还需要部署到机器上,这时就少不了应用服务器来支撑服务的部署。目前大部分的互联网公司都采用tomcat或jboss等轻量级的应用服务器部署应用,还有相对复杂一些的企业级应用服务器如weblogic、websphere等。另外为了做好负载均衡,还需要将应用服务器配合nginx等做反向代理一起使用 。

04 工具系统
工欲善其事,必先利其器。Java领域也有一些常用的工具和支撑类的系统。如Java开发工具,现在用的比较多是idea和eclipse。
代码版本管理工具svn和git,不过目前svn已经极少使用了,大部分企业会使用gitlab结合git来做代码仓库管理。
包依赖的管理工具maven,以及管理Java包仓库的nexus和artifactory。
另外如果需要做持续集成和持续发布使用的jenkins等
以上这些只是北哥这些年在Java相关领域学习的相关技术内容的一部分,实际的开发过程中,还会有大量的相关技术涉及到,这里就不再详细描述。管中窥豹,也希望能够给新入门的同学一些帮助。
如果你有其它想法,也欢迎与我交流。
相关阅读
Java程序员成长之路的更多相关文章
- 分享下对JAVA程序员成长之路的总结<转>
我也搞了几年JAVA了,由于一向懒惰,没有成为大牛,只是一普通程序猿,手痒来给新人分享下从新手成长为老鸟的已见. 首先初识语法的阶段,必须要学会怎么操作对象,操作if和for,操作list set ...
- 【转载】分享下多年积累的对JAVA程序员成长之路的总结
注:该文是从百度贴吧转载过来,之前看到觉得写得还不错,对Java开发学习者来说很有意义的,可以看看. 我也搞了几年JAVA了,由于一向懒惰,没有成为大牛,只是一普通程序猿,不爱玩社交网站,不爱玩微博, ...
- 分享下多年积累的对JAVA程序员成长之路的总结
http://blog.csdn.net/zhongzelin/article/details/8643269我也搞了几年JAVA了,由于一向懒惰,没有成为大牛,只是一普通程序猿,不爱玩社交网站,不爱 ...
- 一个JAVA程序员成长之路分享
我搞JAVA也有些日子了, 因为我比较贪玩,上进心不那么强, 总是逼不得已为了高薪跳槽才去学习, 所以也没混成什么大牛, 但好在现在也已经成家立业, 小日子过的还算滋润, 起码顶得住一月近万元的吃喝拉 ...
- 《菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师》
<菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师> 国庆节快乐!一年一度长度排第二的假期终于来了. 难得有十一长假,作者也想要休息几天啦. 不管你是选择出门玩,还是在公司加班,在学 ...
- 原创电子书《菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师》
<菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师> 国庆节快乐!一年一度长度排第二的假期终于来了. 难得有十一长假,作者也想要休息几天啦. 不管你是选择出门玩,还是在公司加班,在学 ...
- Java程序员学习之路
1. Java语言基础 谈到Java语 言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的相当深刻的技术书籍,Java语言基础部分基 ...
- Java程序员修炼之路
作者简介:王成委,CSDN知识库特邀编辑,Java高级工程师,熟悉Java编程语言和Oracle数据库.专注于高并发架构设计和大数据存储方向的研究. 我们为什么选择Java 大多数人选择Java可能只 ...
- Java程序的成长之路
转载链接:http://www.admin10000.com/document/2901.html 互联网发展日新月异,社会科技每天都在发生着翻天覆地的变化,而程序员已经成了这个时代的庞大群体,各种各 ...
随机推荐
- Java知识系统回顾整理01基础03变量01变量定义
定义: 变量:用来命名一个数据的标识符 一.什么是变量? 用具体实例定义变量 变量的定义是: 用来命名一个数据的标识符 1949 这是一个数字,代表某年 如果要命名这个数字,在java里就会写成: i ...
- AA.Dapper升级了
AA.Dapper基于dapper进一步封装而成的orm框架,提供增删改查.分页.事务.原生sql的功能,以满足日常的业务开发. 1.Repository层: DapperRepository类包含大 ...
- 【状态压缩DP】HDU 4352 XHXJ'S LIS
题目大意 Vjudge链接 定义一个数的内部LIS长度表示这个数每个数位构成的序列的LIS长度,给出区间\([l,r]\),求区间内内部LIS长度为\(k\)的数的个数. 输入格式 第一行给出数据组数 ...
- lumen-ioc容器测试 (3)
lumen-ioc容器测试 (1) lumen-ioc容器测试 (2) lumen-ioc容器测试 (3) lumen-ioc容器测试 (4) lumen-ioc容器测试 (5) lumen-ioc容 ...
- springboot入门系列(四):SpringBoot和Mybatis配置多数据源连接多个数据库
SpringBoot和Mybatis配置多数据源连接多个数据库 目前业界操作数据库的框架一般是 Mybatis,但在很多业务场景下,我们需要在一个工程里配置多个数据源来实现业务逻辑.在SpringBo ...
- 编写C语言的两种方法----Visual Studio/CodeBlocks
1.CodeBlock(安装简单) 参考这个博客的:https://blog.csdn.net/jjjjkkjkk/article/details/80331625?utm_medium=distri ...
- poj2187 Beauty Contest (凸包 + 旋转卡壳)
Beauty Contest Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 38349 Accepted: 11851 ...
- Linux入门到放弃之六《磁盘和文件系统管理二》
上一篇博客写到了如何创建卷组和创建逻辑卷,但是有一个问题,需要更大逻辑卷空间怎么办呢? 要求:使用lvextend命令为逻辑卷 mail扩充容量,从卷组 mail_store 上再 划出5GB给逻辑卷 ...
- Error in mounted hook: "TypeError: handlers[i].call is not a function" 原因
Error in mounted hook: "TypeError: handlers[i].call is not a function" 百度翻译 安装钩子中的错误:" ...
- 痞子衡嵌入式:基于恩智浦i.MXRT1010的MP3音乐播放器(RT-Mp3Player)设计
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是基于i.MXRT1011的MP3播放器参考设计. i.MXRT1011是恩智浦i.MXRT四位数系列的入门型号,虽然是入门级,可也是50 ...