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

本文是第一篇,关于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程序员成长之路的更多相关文章

  1. 分享下对JAVA程序员成长之路的总结<转>

    我也搞了几年JAVA了,由于一向懒惰,没有成为大牛,只是一普通程序猿,手痒来给新人分享下从新手成长为老鸟的已见.   首先初识语法的阶段,必须要学会怎么操作对象,操作if和for,操作list set ...

  2. 【转载】分享下多年积累的对JAVA程序员成长之路的总结

    注:该文是从百度贴吧转载过来,之前看到觉得写得还不错,对Java开发学习者来说很有意义的,可以看看. 我也搞了几年JAVA了,由于一向懒惰,没有成为大牛,只是一普通程序猿,不爱玩社交网站,不爱玩微博, ...

  3. 分享下多年积累的对JAVA程序员成长之路的总结

    http://blog.csdn.net/zhongzelin/article/details/8643269我也搞了几年JAVA了,由于一向懒惰,没有成为大牛,只是一普通程序猿,不爱玩社交网站,不爱 ...

  4. 一个JAVA程序员成长之路分享

    我搞JAVA也有些日子了, 因为我比较贪玩,上进心不那么强, 总是逼不得已为了高薪跳槽才去学习, 所以也没混成什么大牛, 但好在现在也已经成家立业, 小日子过的还算滋润, 起码顶得住一月近万元的吃喝拉 ...

  5. 《菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师》

    <菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师> 国庆节快乐!一年一度长度排第二的假期终于来了. 难得有十一长假,作者也想要休息几天啦. 不管你是选择出门玩,还是在公司加班,在学 ...

  6. 原创电子书《菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师》

    <菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师> 国庆节快乐!一年一度长度排第二的假期终于来了. 难得有十一长假,作者也想要休息几天啦. 不管你是选择出门玩,还是在公司加班,在学 ...

  7. Java程序员学习之路

    1. Java语言基础 谈到Java语 言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的相当深刻的技术书籍,Java语言基础部分基 ...

  8. Java程序员修炼之路

    作者简介:王成委,CSDN知识库特邀编辑,Java高级工程师,熟悉Java编程语言和Oracle数据库.专注于高并发架构设计和大数据存储方向的研究. 我们为什么选择Java 大多数人选择Java可能只 ...

  9. Java程序的成长之路

    转载链接:http://www.admin10000.com/document/2901.html 互联网发展日新月异,社会科技每天都在发生着翻天覆地的变化,而程序员已经成了这个时代的庞大群体,各种各 ...

随机推荐

  1. TP5本地运行正常,线上运行某页面出现【模板文件不存在】问题的解决办法

    相信许多小伙伴和我一样,明明在本地运行页面一切正常,而到线上(本人是用的虚拟主机)出现了如下图的问题: 其实这个问题出现的原因很简单,就是我们开发是在windows 系统下,windows系统对大小写 ...

  2. 项目使用eslint

    今天eslint版本更新了,然后昂,有些奇奇怪怪的错误提示了,然后想,这我得 1.配置一个保存时根据eslint规则自动修复 2.欸,之前编码遇到未使用的变量都会有标记黄线,我很好定位,这会怎么没了 ...

  3. GC调优-XX:PrintGCDetails深度解析

    查看程序运行GC的运行情况 资源充足的GC情况 新生代 老年代 元空间 因为现在资源充足没有发生GC *案例:将JVM初始化内存与最大内存(防止内存抖动,反复GC)调至10m,new一个50m的数组对 ...

  4. Informatic 内些坑

    1. 工作流调用工作流(可实现无规则时间点自由调度) pmcmd startworkflow -sv 集成服务名称 -d 配置域名称 -u  Administrator -p Administrato ...

  5. BASH让标准输出和错误输出颜色不同

    shell中运行的程序输出有标准输出(stdout)和错误输出(stderr)两种.当在终端中运行一个进程时,默认是stdout和stderr混在一起的,需要区分只能去读内容,人眼不容易快速区分. 如 ...

  6. scp带密码拷贝文件

    应用场景:将B服务器的文件传输到A服务器.核心命令: sshpass -p 123456 scp ubuntu@192.168.52.1:/home/ubuntu/"TEST"'' ...

  7. docker下安装kafka和kafka-manager

    1.下载镜像 这里使用了wurstmeister/kafka和wurstmeister/zookeeper这两个版本的镜像 docker pull wurstmeister/zookeeper doc ...

  8. ASP.NET实现进度条效果【转】

     原文地址:http://www.jb51.net/article/115310.htm 这篇文章主要为大家详细介绍了ASP.NET实现简单的进度条效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一 ...

  9. 【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))

    问题情形 当应用在Azure 应用服务App Service中运行时,有时候出现CPU,Memory很高,但是没有明显的5XX错误和异常日志,有时就是有异常但是也不能明确的指出具体的代码错误.当面临这 ...

  10. C# 面试前的准备_基础知识点的回顾_05

    1.谈谈ViewState 这个问题,回答的好,工资翻一级 基本上浮现在出来的是,它是什么, 具体谈论的东西我就不一一细说了,只能说根据自己的学识去探讨,千万不要背书,很容易露馅,露馅的话给人一种不懂 ...