来源于微信公众号:计算机大学生
Web后端开发工程师要实现系统最重要的代码部分——业务逻辑,并通过API接口给前端提供数据和行为响应等服务,他们就必须熟悉Java、Python、Go、PHP等至少一种后端编程语言。为了提高开发效率和避免重复“造轮子”,他们还需要熟悉一些主流的后端开发框架,比如SSM框架(Spring、SpringMVC、Mybatis)。此外,为了后端开发团队的协作与项目管理,他们也需要熟练使用项目构建管理工具Maven以及代码版本管理系统(如Git)等。
近些年,Java应该是IT行业最受欢迎的后端开发语言。所以,本文中的Web后端开发工程师的技能要求主要以介绍Java技术栈为主。下面是一个公司的Java Web后端开发工程师的技能要求描述。
技能要求:
1.熟悉/精通Java开发,掌握多线程、网络编程、数据库编程、IO等基础;
2.熟悉/精通JavaScript、JQuery、AJAX、JSP、SpringMVC、Spring、Mybatis、Redis、Shiro;
3.了解/熟悉Linux相关操作命令;
4.熟悉分布式系统架构;
5.熟悉SQL,了解Oracle、MySQL等数据库;
6.态度积极乐观向上,工作认真踏实、责任心强,沟通能力强,抗压能力强,自学能力强,具有良好的团队合作精神。
(一)Java等至少一种后端编程语言
Java、Python、Go、PHP等编程语言在Web后端开发中广泛使用。在国内,Java具有绝对的优势,仍然是最流行的编程语言。后端开发工程师至少要熟练掌握一种编程语言:要足够了解这种语言的语法和功能特征,理解它的设计原理、能力边界与高级功能。实际上,熟练掌握了某一种编程语言也有助于学习、理解和掌握其他编程语言。
Java是一种面向对象的、分布式的、解释型的,健壮安全的、可移植的、多线程的编程语言。除了Java的基础语法之外,开发人员必须理解它的OOP 特性(封装、继承、多态),以及集合、I/O、并发等常见的Java标准库,在Web开发过程中时时都会用到这些特性和功能。Java的泛型、反射等高级特性也很重要,很多框架技术都依赖它,比如,Spring 核心的控制反转(IOC)和面向切面编程(AOP)都用到了反射,而且 Java自身的动态代理也是利用反射实现的。
Java也广泛用于 Android 应用开发。Android 拥有数十亿的用户,几乎每个企业都需要Android 应用程序。因此,Google 开发了一款基于 Java 的 Android 开发框架——Android Studio,这也为Java 开发人员带来了巨大的机会。
Java是在开发效率(完善的开发环境、各种开发平台、满足各种业务需求)、开发门槛、性能、跨平台等方面综合评价占绝对优势的编程语言,广泛应用于电商平台、大数据、金融服务平台、Android应用,等等。
从近些年的各种编程语言排行榜来看,Java仍是主流语言,亦是最受欢迎的后端开发语言。软件评价公司TIOBE公布的2022年6月的编程语言排行榜上,从排名中看出, Python和Java均位列前三名,Python 继续蝉联榜首,Java语言排名第三。
随着近些年的人工智能热潮,Python语言也跟着流行起来。Python提供了高效的高级数据结构、简单易懂的语法,还能简单有效地面向对象编程,而且开发效率高,使得Python成为了近些年最适合初学者学习和使用的语言。
Python是一种快速、易于使用且易于部署的编程语言,是人工智能的首选编程语言,广泛用于实现自动化测试、系统运维工具、可扩展的Web应用程序等。很多大型Web平台(如YouTube、Instagram、Pinterest)都是使用 Python 构建的。由于它的易用性和功能强大,许多初创公司选择Python 作为他们的主要后端技术栈。
软件评价公司TIOBE的排行榜上,Python已经连续多月蝉联榜首的位置。作为一个兼具简单与功能强大的编程语言,它在数据分析、AI 、机器学习、Web开发、测试等多个领域都有出色的表现。如果打算进入数据科学或人工智能行业,亦会是从事IT运维工作,Python应该是你首选的编程语言。
Go语言(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。它起源于 2007 年,并在 2009 年正式对外发布。Go 是非常年轻的一门语言,它的主要目标是“兼具Python等动态语言的开发速度和 C/C++等编译型语言的性能与安全性”。Go语言实现了开发效率与执行效率的完美结合,在多核并发上拥有原生的设计优势,是对类C语言的重大改进,它不但能访问底层操作系统,还提供了强大的网络编程和并发编程支持,适合用于服务端开发、分布式系统、微服务、网络编程、区块链开发、云平台开发,等等。目前国内诸多IT公司均已采用Go语言开发项目,它是越来越流行,排名逐步上升,就业职位也越来越多。
在项目团队里面,笔者也是建议计算机大学生和研究生首要掌握的是Java语言和Java Web技术,所有的项目基本都是基于Java技术栈。其次,建议掌握Python语言,因为Python的简单易学,以及在人工智能项目和IT运维上的应用。
(二)SSM等Web后端框架
Web后端开发一般都是基于主流的后端框架。比如,早期的SSH框架 (Struts+Spring+Hibernate) ,现在的SSM框架 (Spring+SpringMVC+Mybatis) ,以及用得越来越多的SpringBoot或Spring Cloud框架。使用后端框架能给我们的系统开发带来诸多好处:让开发更加高效,屏蔽底层技术细节,让开发人员关注于具体业务;框架实际上也是一种规范,可以让每位开发人员保持同样的编码风格;人才市场上容易招聘到使用统一开发框架的人员,等等。
SSM框架是Spring、SpringMVC、MyBatis框架的整合,实际是由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。其中,Spring实现业务对象管理;SpringMVC负责请求的转发和视图管理;MyBatis作为数据对象的持久化引擎。
Spring 框架是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,它主要作为依赖注入容器和AOP实现存在,还提供了声明式事务、对 DAO 层的支持等简化开发的功能。Spring通过IOC技术促进了低耦合,不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。它提供了面向切面编程的丰富支持,通过分离应用的业务逻辑与系统级服务进行内聚性的开发。Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器。
SpringMVC框架属于Spring框架的后续产品,它被无缝集成整合到Spring框架,这是一个高性能的架构模式,已越来越广泛地应用于互联网应用的开发中。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块,并且拥有高度的可配置性,支持多种视图技术,还可以进行定制化开发,使用相当灵活。此外,当使用 Spring 框架进行Web开发时,可以选择 SpringMVC 框架或集成其他 MVC 的开发框架,如 Struts1、Struts2等。SpringMVC 分离了控制器、模型对象、过滤器以及处理程序对象的角色,这种分离让它们更容易进行定制,易于同其它View框架无缝集成,采用IOC便于测试。
MyBatis是一个优秀的数据持久层框架,它通过XML描述符或注解把对象与存储过程或SQL语句关联起来,可在实体类和SQL语句之间建立映射关系,是一种半自动化的对象关系映射ORM实现。Mybatis是对JDBC的封装,它让数据库底层操作变得透明,它的操作都是围绕一个SqlSessionFactory实例展开的,通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的SQL语句映射。在每次访问数据库时,通过SqlSessionFactory拿到一个SqlSession,再执行SQL命令。
SSM是目前比较流行的后端开发框架。Spring的原理就是构建一个“业务组件容器”,SpringMVC则是Web MVC的一个具体实现框架,而MyBatis则是一个基于DAO的实现框架。从性能的角度来说,Spring是JEE EJB的轻量级解决方案,在行业内得到了广泛应用。
虽然基于SSM框架的编程比较方便,但是他们也有配置文件过于繁琐等为人诟病的不足。所以,为了解决SSM等流行框架的不足,以及随着软件开发技术和架构的发展,Web 框架可谓是百花齐放、百家争鸣,其中以两个 Spring全家桶最为耀眼——SpringBoot和Spring Cloud。
SpringBoot是基于Spring4.0设计,是Spring家族中的一个全新框架,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。通过SSM框架进行开发的时候,我们需要配置web.xml,需要配置Spring、Mybatis等,然后整合在一起,而SpringBoot抛弃了繁琐的xml配置过程,采用大量默认的配置来简化Spring开发过程。SpringBoot化繁为简,使开发变得更加的简单快速。另外,SpringBoot通过集成大量的框架很好地解决了依赖包的版本冲突,以及引用的不稳定性等问题,堪称是 Java 后端开发的颠覆者。
Spring Cloud是一系列框架的有序集合。它并没有重复制造轮子,只是将各家公司开发的比较成熟、经得起考验的服务框架组合起来,通过SpringBoot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
Spring Cloud利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等功能模块都可以用SpringBoot的开发风格做到一键启动和部署。
近几年,随着微服务架构、Docker容器、K8s容器编排技术的火热,Spring Cloud也给我们提供了一套完整的微服务解决方案,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量。Spring Cloud在分布式微服务架构中提供了标准化的、全站式的技术方案,将在越来越普及的云原生开发中占有一席之地。
(三)Maven、Git等项目构建与版本管理工具
Maven 是一个开源的项目管理工具,可以对 Java 项目进行自动化的构建和依赖管理。简单地说,构建就是软件项目生产的整个过程,这个过程应该包括:文档和代码的生成;代码的编译、测试和打包;打包好的代码进行分发或者部署。由此可见,项目的构建可绝不仅仅是编译软件这一项工作,除了编写代码,在项目层面做的大部分工作都包含在构建的过程中。
Maven采用配置文件的方式对项目的名称、版本号、项目依赖等信息进行描述,使之结构清晰,任何人接手项目都容易理解。在项目构建时,利用 Maven 的“约定大于配置”思想,实现自动化的构建。另外,一个项目往往依赖于其他的项目和第三方的组件才能顺利完成,Maven提供了仓库的功能,让这些依赖项放进仓库中,项目可以随时从仓库中获取。如果其他项目组也需要这些依赖包,同样也可以从仓库中去取,实现依赖包在企业范围内的共享,为企业节省大量人力、软件维护、沟通甚至硬件等成本。
Maven诞生之初的目的是为了管理Java项目,后来 Maven也可被用于构建和管理其他各种项目(比如 C#、Ruby、Scala等语言编写的项目)。在Maven出现之前,Java 项目的管理工具一直由Ant统治着。在此之后,又有 Gradle 逐渐在 Android 项目中作为配套打包工具流行开来。目前看来,Maven依旧是Java项目管理工具中的王者。
版本控制管理系统可以记录一个或若干文件内容变化,以便将来查阅特定版本的修订情况。在大型软件项目中,版本控制管理系统可以有效组织、管理源码以及历史版本。常见的版本控制管理系统主要分为集中式和分布式两类。集中式版本控制,其版本库集中存放在中央服务器,代表产品是CVS、SVN;分布式版本控制,其版本库分布在每个协作开发者的本地机器中,代表产品包括Git。
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。它采用分布式版本库的方式,不必服务器端软件支持。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。
GitHub 是一个可以托管各种Git库,面向开源及私有软件项目的托管平台,它提供Web界面。GitLab 是一个用于仓库管理系统的开源项目,使用Git进行代码管理工具,可以自己搭建GitLab仓库服务器。GitHub 和 GitLab 都是基于 Web 的 Git 仓库,它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。
GitHub 作为开源代码库,拥有超过900万的开发者用户,目前仍然是最火的开源项目托管平台。GitHub 同时提供公共仓库和私有仓库,如果使用私有仓库,是需要付费的。GitLab让开发团队可以在上面创建私有的免费仓库,对私有的代码仓库拥有更多的控制。所以,从代码的私有和安全性来看,GitLab 是一个更好的选择。但是对于开源项目而言,GitHub 依然是代码托管的首选。
除了上述很多技术方面的能力之外,上述某公司招聘Java Web后端开发人员的技能要求中,第6条描述了很多非技术方面的软实力,这些软实力在职场中也是非常重要的。
自学能力强:后端开发工程师一定要“自学能力强”,为了工作的需要,他们经常需要学习一些新的编程语言、技术和框架;
沟通能力强,具有良好的团队合作精神:因为他们要与团队内其他的开发人员沟通协作,也要和产品经理、需求分析师还有测试人员等项目组成员沟通交流;
抗压能力强:特别是在新产品或新服务要上线的前夕,生产环境中的极端情况往往导致产品或服务的功能或性能出现各种问题,短时间内解决问题是极度考验后端开发人员的抗压能力的。