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 互联网发展日新月异,社会科技每天都在发生着翻天覆地的变化,而程序员已经成了这个时代的庞大群体,各种各 ...
随机推荐
- 043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用
043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用 本文知识点:do-while循环介绍及应用 do-while循 ...
- c++ 动态库的加载
转载:https://blog.csdn.net/ztq_12345/article/details/99677769 使用ide是vs, 使用Windows.h下的3个函数对动态库进行加载第一个:H ...
- 【记】《.net之美》之读书笔记(二) C#中的泛型
前言 上一篇读书笔记,很多小伙伴说这本书很不错,所以趁着国庆假期,继续我的读书之旅,来跟随书中作者一起温习并掌握第二章的内容吧. 一.理解泛型 1.为什么要使用泛型?-----通过使用泛型,可以极大地 ...
- CentOS7.7 系统下 virbr0 虚拟网卡的维护与管理
在 CentOS 7 系统的安装过程中,如果有选择相关虚拟化的的服务安装系统后,启动网卡时会发现有一个以网桥连接的私网地址的 virbr0 网卡,这个是因为在虚拟化中有使用到 libvirtd 服务生 ...
- Iptables 下 SNAT、DNAT和MASQUERADE三者之间的区别
Iptables 中可以灵活的做各种网络地址转换(NAT,Network Address Translation) 网络地址转换(NAT)主要有两种:SNAT 和 DNAT,但是也有一种特例 MASQ ...
- docker的run操作
docker的run到底做了什么操作呢? 它会优先寻找本地的镜像,如果没有就到仓库找,找不到返回错误,查找不到该镜像.能找到就拉这镜像下来,以该镜像为模板生产容器实例运行. 备注:图不是自己画的,截图 ...
- Java 集合看这一篇就够了
大家好,这里是<齐姐聊数据结构>系列之大集合. 话不多说,直接上图: Java 集合,也称作容器,主要是由两大接口 (Interface) 派生出来的: Collection 和 Map ...
- c# 常用帮助类
C#常用帮助类 因为小土现在还是处于小白阶段,所以自己的知识技术还达不到要求,但是小土在网上找到一个大神的,等以后小土技术有了一定提升以后,在走自己的路,啥也不说了上货. 地址 :https://gi ...
- filebeat- 配置
wget https://mirrors.huaweicloud.com/filebeat/7.9.1/filebeat-7.9.1-linux-x86_64.tar.gz tar -zxvf fil ...
- C++ Primer第5版 第二章课后练习
练习2.1 C++ 语言规定short 和 int 至少 16 位, long 至少32位, long long 至少64位.带符号类型可以表示整数.负数或0, 无符号类型则仅能表示大于等于0的值Th ...