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

本文是第一篇,关于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. 屯点自用CTF网站

    尚且杂乱,刚刚准备搬运东西到博客来,慢慢收拾. 芜湖,起飞  --大司 16进制转换文本 Base64编码转换 quipqiup词频分析 Brainfuck/Ook! Obfuscation/Enco ...

  2. 跟我一起学Redis之五种基本类型及其应用场景举例(干了6个小时)

    前言 来啦,老弟?来啦,上一篇就当唠唠嗑,接下来就开始进行实操撸命令,计划是先整体单纯说说Redis的各种用法和应用,最后再结合代码归纳总结. Redis默认有16个数据库(编号为0~15),默认使用 ...

  3. LiteOS-任务篇

    目录 前言 链接 参考 笔录草稿 基本概念 任务相关概念 LiteOS 任务运作机制 内核初始化 创建任务 创建任务有两种方案 任务相关函数 任务开发流程 创建创建任务 部分源码 例子 创建任务的任务 ...

  4. 111 01 Android 零基础入门 02 Java面向对象 04 Java继承(上)02 继承的实现 01 继承的实现

    111 01 Android 零基础入门 02 Java面向对象 04 Java继承(上)02 继承的实现 01 继承的实现 本文知识点: 继承的实现 说明:因为时间紧张,本人写博客过程中只是对知识点 ...

  5. 利用 Python 插入 Oracle 数据

    # coding=utf-8 ''''' Created on 2020-01-05 @author: Mr. Zheng ''' import json; import urllib2 import ...

  6. 一些IT service的相关知识

    1. cmd是什么,怎么在电脑上打开cmd命令框. 在windows环境下,命令行程序为cmd.exe,是一个32位的命令行程序,微软Windows系统基于Windows上的命令解释程序,类似于微软的 ...

  7. mysql DISTINCT选取多个字段,获取distinct后的行信息

    背景:      a表保存关联关系,通过ACode 获取该关系中的所有 BCode, 并获取所有Bcode-max(Bvrsn)的信息  Bnm 表a 表b          循序渐进:        ...

  8. shell脚本获取随机数

    $RANDOM系统变量 在bash中,支持$RANDOM系统变量,范围是 [0, 32767] #!/bin/bash set -e randN() { local N=$1 echo $(($RAN ...

  9. 联赛模拟测试18 A. 施工 单调队列(栈)优化DP

    题目描述 分析 对于 \(Subtask\ 1\),可以写一个 \(n^3\) 的 \(DP\),\(f[i][j]\) 代表第 \(i\) 个建筑高度为 \(j\) 时的最小花费,随便转移即可 时间 ...

  10. wine实用经验教程

    本篇讲类unix系统下的用以模拟运行Windows程序的wine.会从普通使用者的比较实用的角度去讲.有专为国内用户准备的内容. 本篇面向有Linux经验但对wine不熟悉的人. wine可靠吗?该不 ...