Java程序员职业发展建议:专注后端技术,提升专业能力

以前的项目大多是由 java 程序猿独自承担多项任务,他们既进行前端方面的工作(包括 ajax、jquery、js、html、css 等),又进行后端方面的工作(包含 java、mysql、Oracle 等)。

Java程序员职业发展建议:专注后端技术,提升专业能力

随着时代的进步,很多大中小公司逐渐将前后端的界限划分得愈发清晰。前端工程师专注于前端的事务,后端工程师则只负责后端的事务。正所谓每个领域都有其专攻,倘若一个人什么都懂,那么他终究不会在任何一个方面达到精通的程度。

大中型公司需要专业人才,小公司需要全才。然而就个人职业发展而言,我建议将两者分开。倘若你这辈子仅以从事 java 工作为生计,那就不要去钻研 css、js 等其他领域。

你的精力要专注于 java 方面,包括 jvm 原理;也要专注于 spring 原理;还要专注于 mysql 锁、事务;同时要关注多线程、大并发以及分布式架构和微服务;并且要涉及相关的项目管理等。这样一来,你的核心竞争力才会逐渐提升,正所谓你在生活中投入什么,生活就会回馈给你什么。

(满满的正能量:

你成为一个行业里的精英后,相信我,那时,车会来找你,房会来找你,女人会来找你,钱会来找你,机会也会来找你,不用着急,这是真的。

干 Java 程序猿这一行业,其实是很简单的。你所懂得的知识越多,那么你能获得的钱也就越多。当然了,还需要具备一定的情商。

你的能力越强,那么你创造的价值就比别人多。你为公司创造了价值,公司就会给你各种福利,这样就能实现双赢。

曾经,我们的 java web 项目使用了一些后台框架,比如 springmvc、struts ,还有 spring 以及 spring jdbc、hibernate、mybatis 等。

大多数项目在 java 后端进行了分层,分为控制层,也就是 controller 或 action;还有业务层,即 service 或 manage;以及持久层,即 dao。

控制层的职责是接收参数,接着调用相关的业务层,之后对数据进行封装,并且将其路由到 jsp 页面。随后,在 jsp 页面上,会通过各种标签(如 jstl/el)或者手写 java()的方式,把后台的数据展示出来。

对吧?

我们先来看这种情况,需求已经确定完毕,代码也已经编写完成,测试也已经全部测完了。接着呢?是不是要进行发布了呀?

你需要借助 maven 或者 eclipse 之类的工具,将你的代码打成一个 war 包。接着,把这个 war 包部署到生产环境下的 web 容器(如 tomcat、jboss、weblogic、websphere、jetty、resin)当中。对吧?

发布完毕后,需启动你的 web 容器以开始提供服务。此时,通过配置域名、dns 等相关内容,你的网站便可被访问(假设你是个网站)。

那我们来看,你的前端代码是否都在那个 war 包中呢?包括你的 js 以及 css 等。还有图片以及各种第三方的库,对吧?

好,下面要在浏览器中输入你的网站域名。之后会发生什么呢?这个问题也是很多公司的面试题。

我捡干的说了啊,基础不好的童鞋请自己去搜。

浏览器通过 ip 进行路由,到达你的服务。在完成 tcp3 次握手后,借助 tcp 协议开始访问你的 web 服务器。你的 web 服务器接收到请求后,便开始提供服务并接收请求。之后,通过 response 将应答返回给浏览器。

我们来看,先假设你的首页有 100 张图片和一个单表查询。此时,用户看似一次 http 请求,但实际上并非一次。用户第一次访问时,浏览器没有缓存。你的 100 张图片,浏览器要接连请求 100 次 http 请求(不讨论 http 长链短链问题)。你的 web 服务器接收这些请求,都需要耗费内存去创建 socket 来进行 tcp 传输。

重点在于,这种情况下,你的 web 服务器压力会很大。因为页面中的所有请求都仅指向你这台服务器。若只有 1 个人访问还好,但若有 10000 个人并发访问(暂不考虑 web 服务器集群,仅说单实例 web 服务器),那你的服务器能承受多少个 tcp 链接呢?你的服务器内存有多大?你又能承受多少 IO 呢?你给web服务器分的内存有多大?会不会宕机?

这就是为什么,越是大中型的web应用,他们越是要解耦。

理论上你能够将你的数据库、应用服务、消息队列、缓存、用户上传的文件以及日志等都放置在一台主机上。然而,这样做就如同把鸡蛋全都放在一个篮子里,存在着极大的隐患。

正常的分布式架构需要进行拆分。其中包含应用服务器集群(包括前、后部分),还有文件服务器集群、数据库服务器集群、消息队列集群以及缓存集群等。

前戏太长了。

下面开始进入正题。首先,在以后的 java web 项目中,都应尽量避免使用 jsp 这种技术。其次,要实现前后台解耦,并且运用分布式架构。只有这样,我们的应用架构才会更加强大。

使用jsp的痛点:

动态资源与静态资源全部相互结合在一起,难以实现真正的动静分离。服务器承受着较大压力,原因在于服务器会接收到各类 http 请求,像 css 的 http 请求、js 的 http 请求、图片的 http 请求以及动态代码的 http 请求等。倘若服务器出现状况,那么前后台都会受到影响而无法正常工作,这会导致用户体验极差。

前端工程师完成 html 后,需由 java 工程师把 html 改造成 jsp 页面,此过程出错率较高,原因是页面中常有大量 js 代码。在修改问题时,双方需协同开发,导致效率低下。

jsp 必须在支持 java 的 web 服务器中运行,像 tomcat 等。不能使用 nginx 等,因为 nginx 据说单实例 http 并发高达 5 万,这个优势应被利用,但如果使用 jsp 则无法利用该优势,从而导致性能提不上来。

第一次请求 jsp 时,需要在 web 服务器中将其编译成 servlet。第一次运行时,速度会比较慢。

每次请求 jsp 时,会先访问 servlet,然后通过输出流输出 html 页面。这种方式的效率不如直接使用 html 高。

jsp 中存在较多的标签和表达式,这使得前端工程师在对页面进行修改时会感到力不从心,会遇到诸多难以解决的问题和困扰。

如果jsp中的内容很多,页面响应会很慢,因为是同步加载。

由于存在上述的一些痛点,我们应当将整个项目的开发权重提前,以实现前后端真正的分离。

以前老的方式是:

客户端请求

服务端的 servlet 会接收请求,并且 controller 也会接收请求。后端制定了路由规则,整个项目开发的权重大部分都在后端。

调用service,dao代码完成业务逻辑

返回jsp

jsp展现一些动态的代码

新的方式是:

浏览器发送请求

直接抵达 html 页面,并且路由规则是由前端来制定的,整个项目开发的重点也向前移动了。

html页面负责调用服务端接口产生数据(通过ajax等等)

填充html,展现动态效果。

有兴趣的同学可以访问阿里巴巴等大型网站,接着按下 F12,对刷新一次页面的情况进行监控,查看其 http 的运作方式。大多数情况下,都是单独向后台请求数据,通过 json 来传输数据,而不是用一个大而全的 http 请求将整个页面(包括动态和静态部分)全部返回回来。

这样做的好处是:

能够达成真正的前后端解耦,前端服务器采用的是 nginx。前端服务器所放置的是 css、js、图片等一系列的静态资源(甚至你还能够将 css、js、图片等资源放置到特定的文件服务器,像阿里云的 oss ,并且运用 cdn 来进行加速),前端服务器承担着控制页面引用、跳转以及调用后端接口的工作,后端服务器使用的是 tomcat。这里需要使用一些前端工程化的框架,例如 nodejs ,还有 react ,以及 router ,同样有 react ,还有 redux ,以及 webpack 。

发现 bug 时,能够迅速确定是谁的问题,不会有互相推诿的情况。对于页面逻辑、跳转错误、浏览器兼容性问题、脚本错误以及页面样式等问题,均由前端工程师负责。而接口数据出错、数据未提交成功、应答超时等问题,则全部由后端工程师解决。

双方互不干扰,前端与后端是相亲相爱的一家人。

在大并发的情形下,我能够同时对前后端服务器进行水平扩展。例如,淘宝的一个首页就需要 2000 台前端服务器组成集群,以此来抵御日均达到多少亿+的日均 pv 。参加阿里的技术峰会,得知他们的 web 容器是自己编写的。单实例能抗 10 万 http 并发,2000 台就可达到 2 亿 http 并发。并且他们还能依据预知洪峰进行无限拓展,仅一个首页就展现出如此强大的能力,实在很恐怖。

将除接口以外的其他所有 http 请求都转移到前端 nginx 上,这样可以减少后端服务器的并发压力。

后端服务若暂时超时或者宕机,前端页面仍能正常访问,只是数据无法刷出。

也许你需要有与微信相关的轻应用,这样你的接口就能够完全共用。如果也有与 app 相关的服务,那么只需通过一些代码的重构,就可以大量复用接口,从而提升效率。

页面显示的东西再多也不怕,因为是异步加载。

注意:

开需求会议时,前后端工程师都需参加。同时要制定好接口文档,后端工程师要写好测试用例,不能让前端工程师担任组内专职测试工作。推荐使用 chrome 的插件 postman,service 层的测试用例用 junit 来写。

上述接口并非 Java 中的 interface。简单来说,调用接口就是调用你 controller 里的方法。

前端团队的工作量被加重了,后端团队的工作量被减轻了,性能和可扩展性得到了提高。

我们需要一些前端的框架,以解决诸如页面嵌套这类功能。我们需要一些前端的框架,来解决诸如分页这类功能。我们需要一些前端的框架,来解决诸如页面跳转控制这类功能。

如果你的项目规模较小,或者只是一个单纯的内网项目,那么你无需担忧,即便不采用任何架构也无妨。然而,如果你的项目是外网项目,那就另当别论了。

以前有人使用像 velocity 这样的模板框架,也有人使用 freemarker 这样的模板框架来生成静态页面。现在,这种使用模板框架生成静态页面的做法已经被淘汰了。

这篇文章的主要目的在于表明 jsp 在大型外网 java web 项目中已被淘汰。但这并不意味着 jsp 可以完全不学。对于部分学生朋友而言,jsp/servlet 等相关的 java web 基础是需要牢牢掌握的。否则,你会疑惑 springmvc 这种框架是基于什么来编写的呢?

推荐↓↓↓

长

按

关

注

【】都在这里!

涵盖程序员大咖相关内容、进行源码共读、开展程序员共读活动、涉及数据结构与算法领域、包含黑客技术和网络安全方面、涵盖大数据科技范畴、涉及编程前端方面、包含 Java 内容、有 Python 相关、涉及 Web 编程开发、涵盖 Android 开发、包含 iOS 开发、涉及 Linux 领域、包含数据库研发内容、还有幽默程序员等方面。

万水千山总是情,点个 “在看” 行不行

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

27阅读

java中冒号,java双冒号

2026年09月06日

26阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

28阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

25阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

25阅读