Java后端程序员都做些什么?

article/2025/10/3 22:48:23

这个问题来自于QQ网友,一句两句说不清楚,索性写个文章。

我刚开始做Web开发的时候,根本没有前端,后端之说。

原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求,实现业务逻辑,访问数据库,用JSP生成HTML,然后发送给浏览器。

即使后来Javascript在浏览器中添加了一些AJAX的效果,那也是锦上添花,绝对不敢造次。因为页面的HTML主要还是用所谓“套模板”的方式生成:美工生成HTML模板,程序员用JSP,Veloctiy,FreeMaker等技术把动态的内容添加上去,仅此而已。

那个时候最流行的图是这个样子:

在最初的J2EE体系中,这个表示层可不仅仅是浏览器中运行的页面,还包括Java写的桌面端,只是Java在桌面端太不争气, 没有发展起来。

每个程序员都是所谓“全栈”工程师,不仅要搞定HTML, JavaScript, CSS,还要实现业务逻辑,编写访问数据库的代码。等到部署的时候,就把所有的代码打成一个WAR包,往Tomcat指定的目录一扔,测试一下没问题,收工回家!

不差钱的公司会把程序部署到Weblogic,Websphere这样的应用服务器中,还会用上高大上的EJB。

虽然看起来生活“简单”又“惬意”,但实际上也需要实现那些多变的、不讲逻辑的业务需求,苦逼的本质并没有改变。

1. 前后端的分离

随着大家对浏览器页面的视觉和交互要求越来越高,“套模板”的方式渐渐无法满足要求,这个所谓的表示层慢慢地迁移到浏览器当中去了,一大批像Angular, ReactJS之类的框架崛起,前后端分离了!

后端的工程师只负责提供接口和数据,专注于业务逻辑的实现,前端取到数据后在浏览器中展示,各司其职。

像Java这样的语言很适合去实现复杂的业务逻辑,尤其是一些MIS系统,行业软件如税务、电力、烟草、金融,通信等等。  所以剥离表示层,只做后端挺合适的。 

但是如果仅仅是实现业务逻辑,那后端也不会需要这么多技术了,搞定SSH/SSM就行了。 

2. 后端技术

互联网,尤其是移动互联网开始兴起以后,海量的用户呼啸而来,一个单机部署的小小War包肯定是撑不住了,必须得做分布式。 

原来的单个Tomcat得变成Tomcat的集群,前边弄个Web服务器做请求的负载均衡,不仅如此,还得考虑状态问题,session的一致性。

业务越来越复杂,我们不得不把某些业务放到一个机器(或集群)上,把另外一部分业务放到另外一个机器(或集群)上,虽然系统的计算能力,处理能力大大增强,但是这些系统之间的通信就变成了头疼的问题,消息队列(MQ),RPC框架(如Dubbo)应运而生,为了提高通信效率,各种序列化的工具(如Protobuf)也争先空后地问世。

单个数据库也撑不住了,那就做数据库的读写分离,如果还不行,就做分库和分表,把原有的数据库垂直地切一切,或者水平地切一切, 但不管怎么切,都会让应用程序的访问非常麻烦,因为数据要跨库做Join/排序,还需要事务,为了解决这个问题,又有各种各样“数据访问中间件”的工具和产品诞生。

为了最大程度地提高性能,缓存肯定少不了,可以在本机做缓存(如Ehcache),也可以做分布式缓存(如Redis),如何搞数据分片,数据迁移,失效转移,这又是一个超级大的主题了。

互联网用户喜欢上传图片和文件,还得搞一个分布式的文件系统(如FastDFS),要求高可用,高可靠。

数据量大了,搜索的需求就自然而然地浮出水面,你得弄一个支持全文索引的搜索引擎(如Elasticsearch ,Solr)出来。

林子大了,什么鸟都有,必须得考虑安全,数据的加密/解密,签名、证书,防止SQL注入,XSS/CSRF等各种攻击。

3. “大后端”

前面提到了这么多的系统,还都是分布式的,每次上线,运维的同学说:把这么多系统协调好,把老子都累死了。

得把持续集成做好,能自动化地部署,自动化测试(其实前端也是如此),后来出现了一个革命化的技术docker, 能够让开发、测试、生成环境保持一致,系统原来只是在环境(如Ngnix, JVM,Tomcat,MySQL等)上部署代码,现在把代码和环境一并打包, 运维的工作一下子就简化了。

公司自己购买服务器比较贵,维护也很麻烦,又难于弹性地增长,那就搞点虚拟的服务器吧,硬盘、内存都可以动态扩展(反正是虚拟的), 访问量大的时候多用点,没啥访问量了就释放一点,按需分配,很方便,这就是云计算的一个场景。

随着时间的推移,各个公司和系统收集的数据越来越多,都堆成一座大山了,难道就放在那里白白地浪费硬盘空间吗?

有人就惊奇地发现,咦,我们利用这些数据搞点事情啊, 比如把数据好好分析一下,预测一下这个用户的购买/阅读/浏览习惯,给他推荐一点东西嘛。

可是这么多数据,用传统的方式计算好几天甚至好几个月才能出个结果,到时候黄花菜都凉了,所以也得利用分布式的技术,想办法把计算分到各个计算机去,然后再把计算结果收回来, 时势造英雄,Hadoop及其生态系统就应运而生了。

之前听说过一个大前端的概念,把移动端和网页端都归结为“前端”,我这里造个词“大后端”,把那些用户直接接触不到的、发生在服务器端的都归结进来。

4. 怎么学?

现在无论是前端还是后端,技术领域多如牛毛,都严重地细分了,所以我认为真正的全栈工程师根本不存在,因为一个人精力有限,不可能搞定这么多技术领域,太难了。

培训机构所说的“全栈”,我认为就是前后端还在拉拉扯扯,藕断丝连,没有彻底分离的时候的“全栈”工程师。

那么问题来了, 后端这么多东西,我该怎么学?

Java后端学习流程

首先,我个人比较推崇的学习方法是:先学java前端,也就是HTML,css,js,因为学习java以后肯定是往java ee方向发展的,学习完前端,在学习后端很多东西比计较容易理解!

其中J2SE是关键,如果学好了java se 部分,基础扎实了,后面进阶学习也比较轻松!

补充说明一下:我觉得学习java比较合适的方法是先把所有的知识点过一遍,然后把所有的知识点串起来,边做开发边补充,就像写文章一样,先写好框架,然后再去润色填充。因为前期在学习的时候你不知道用在哪里,不知道用途,没有学习的目的,所以很多概念就很难理解,时间久了也容易遗忘。但是如果你直接从实践开始学习,很多知识点都充串联起来了,而且会印象深刻,当然前提条件是你已经入门,已经能写一些简单的程序,我个人现在也是按照这个方式在学习了,感觉很有效。

说明:本文介绍的内容过于详尽,这里我补充一些基本的学习路线,相对比较简略,但是比较可行:

  1. 基础语法。也就是我们常说,各种编程语言都有的部分,数据类型,数组,for循环,do-while,switch……等等,是学习任何编程语言的基础,很关键;

  2. 面对对象:①类和对象;②Java的三大特性(封装、继承、多态);

  3. 工具类:①异常和异常处理;②集合框架(主要是List和Map);

  4. 常用的流(stream):①输入流;②输出流;③缓冲流;

  5. 网络与线程:①Socket ; ②多线程(Thread,Runnable);

  6. 数据操作:①Mysql、Oracle; ②JDBC;

  7. web基础:①Html/css;②Javascript;③JQuery;

  8. 框架。

    只要学会上面的前7条,基本上从前台到后台开发常见的应用还是没太大问题的,当然学习了框架以后,那就最好了,但关键还是要学好基础,说实话,像下面这个表格中所列的知识点,真正能全面掌握还是有难度的,所以凡事还是要踏踏实实的静下心学习,不要只看学习的进度,要看学习的效果。

  9.  

     

     

    可以把第四阶段的知识提前一点,特别是对哪些刚开始接触面向对象编程的同学,我刚开始就学java se,感觉入门很不容易。先学web部分,有利于理解面向对象的概念,另外,web部分相对比较简单,也比较直观,写完直接就可以看见效果,有助于提升大家的学习积极性。

  10.  

     

     

     

     

    如果你把上面这些东西全部掌握了,那不用说你已经算是java界比较NB的人了,因为一般能掌握这些知识的人,基本上有5-10年的工作经验,不过也不好说,说不定你就是那个天才呢,加油吧少年!

    往深度挖掘,可以成为某个技术领域的专家,如搜索方面的专家、安全方面的专家,分布式文件的专家等等,不管是哪个领域,重点都不是学会使用某个工具和框架, 而是保证你可以自己的知识和技术去搞定这个领域的顶尖问题。

    往广度发展,各个技术领域都要了解,对于某种需求,能够选取合适的软件和技术架构来实现它,把需求转化成合适的技术组件,让这些组件以合适的方式连接、部署、运行,这也需要持续地学习和不断的经验积累。

  11. 总结了很多有关于java面试的资料,希望能够帮助正在学习java的小伙伴。由于资料过多不便发表文章,创作不易,望小伙伴们能够给我一些动力继续创建更好的java类学习资料文章,
    请多多支持和关注小作,别忘了点赞+评论+转发。右上角私信我回复【03】即可领取免费学习资料谢谢啦!
     

     

     


http://chatgpt.dhexx.cn/article/JiqHrNbi.shtml

相关文章

java算法是什么_什么是java算法

什么是java算法 算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,java算法就是采用Java语言来实现解决某一问题的清晰指令。 算法的特征: 输入性:有零个或多个外部量作为算法的输入 输出性:算法产生至…

java可以做游戏吗_Java 能做游戏么?

Java 能做游戏么? Java能做游戏,一般做的是手机游戏,电脑游戏一般用C/C来写的,如果想学Java做手机游戏,可以去学写J2ME,J2ME是为机顶盒、移动电话和嵌入式消费电子设备提供的Java语言平台,并且提…

Java程序员可以从事的岗位有哪些?

Java已成为当今市面上最受欢迎的编程软件,对于处于信息高速发达的今天,Java技术已经无处不在,手机软件、手机Java游戏、电脑软件等等都有它的身影。那么Java到底能做什么事情呢?市场上什么工作岗位跟java有关。那么就和大家一起看看: 1、Java可以做网站 Java可以用来编写网…

Java能用来做什么的?

Java能用来做什么的?Java语言作为编程语言界里的常青树,全球最流行的编程语言,这是凭什么呢?就凭借Java语言广泛的应用面。 一、Java能做网站 JavaWeb是Java应用最多的地方,像淘宝、京东那么多电商都是用到的Java来编…

学习Java,你能做这些工作:

Java作为互联网行业的“老大哥”,其就业薪资一直名列前茅,但很多同学一直不了解Java学习毕业之后能做什么工作,接下来针对Java工程师所做的几类工作给大家做简单的讲解: 1、Java可以用来做网站 Java可以用来做网站,很…

HTML5七夕情人节表白网页制作【css求婚动画源码】HTML+CSS+JavaScript 程序员表白代码

这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看。 此波共有100个表白网站,可以任意修改和使用,很多人会希望向心爱的男孩女孩告白,生性腼腆的人即使那个TA站在眼前都不敢向前表白…

html表白程序源码_表白程序源码html_程序员表白代码html

❤ 精彩专栏推荐👇🏻👇🏻👇🏻 💂 作者主页: 【进入主页—🚀获取更多源码】 🎓 web前端期末大作业: 【📚HTML5网页期末作业 (1000套) 】 &#x1…

java程序员表白代码_程序员表白代码,用过的人都找到了对象...

原标题:程序员表白代码,用过的人都找到了对象... 在情人节送给自己的女朋友玫瑰花, 对于程序员来说是不是太普通了呢? 为什么不试试让情人节变得更特别一些呢? 作为一名程序员, 可以用自己的技术创造出不一…

程序员表白代码来了!太秀了。。

点关注公众号,回复“1024”获取2TB学习资源! 七夕情人节来了,表白素材奉上,赶紧。。。还来的及!!! 委婉的表白 Python 代码: import stringl string.ascii_letterss []s.append(l[…

七夕 - 程序员表白代码

来源:菜鸟教程 七夕快到了,表白素材赶紧先准备好。。。 0、委婉的表白 Python 代码: import stringl string.ascii_letterss []s.append(l[34])s.append(l[11])s.append(l[14])s.append(l[21])s.append(l[4])s.append(l[24])s.append(l[14]…

html七夕情人节表白示爱网站源码制作 (程序员表白代码大全)

❤ 精彩专栏推荐👇🏻👇🏻👇🏻 💂 作者主页: 【进入主页—🚀获取更多源码】 🎓 web前端期末大作业: 【📚HTML5网页期末作业 (1000套) 】 &#x1…

谁说程序员不懂浪漫,表白代码来啦~

七夕推荐: 写了一首 Java 表白诗,女朋友不愁了! Python if you.look_back(): I.behind(you).forever() see(you)Java public class DREAM { public static void main(String[] args) { while(true) { String Mylover ""; …

java浪漫代码_程序员表白教程,这些代码用过的都说浪漫

作为一名程序员,如何用自己的技术向喜欢的人表白? 这篇程序员表白教程,可以让你创造出不一样的浪漫! 你值得拥有! 1. I Love You Batch le 不如送她一个惊喜? 让她的电脑自动关机, 然后显示你的表白留言。 具体操作如下: 1.创建一个新的文本文件。 2.将以下代码复制到新…

程序员的 10 款代码表白特效,一个比一个浪漫

提到程序员,就会出现许多关键词,诸如“直男,宅,不懂浪漫,枯燥,憨厚老实,有逻辑,人傻钱多…………” 说程序猿是直男,不可否认,大多数程序猿都挺直&#xff0…

CTF_ CRYPTO(Cryptography)_密码学/密码分析学

奶奶曾说过,教会他人,是验证自己学习的最好方式。 一、 简介: 密码学:主要是研究编制密码 和 破译密码的学科 密码分析学:简单来说,就是密码的破解。 二、历史 事实上,密码和密码分析是同一枚硬…

PYRIT 强大的密码分析工具(可使用GPU分析)-学习笔记

优势: 可运用GPU的运算加速生成PMK 本身支持抓包获取四步五首过程,无需用Airodump抓包 也支持传统的读取airodump抓包获取四步握手的方式 只抓取WAP四次握手过程包 pyrit -r wlan0mon -o wpapyrit.cap sripLive# -o 生成握手信息 sripLive 剔除不需…

Dameware Mini Remote Control 本地储存密码分析

Dameware Mini Remote Control地储存密码分析 前言环境分析过程总结: 前言 无意中看到一篇文章能恢复Dameware Mini Remote Control 连接记录,这就勾起了我的好奇心,于是分析了一下这个软件本地存储密码的方式 https://blog.51cto.com/u_108…

分组密码总结

分组密码 分组密码就是将明文消息序列划分成长为n的组,各组分别在密钥k控制下,变成等长的输出序列。 代换: 明文分组到密文分组的可逆变换为代换。扩散和混淆: 扩散和混淆是Shannonon提出的设计密码系统的两个基本方法&#xff…

分组密码

文章目录 一、分组密码概述1、分组密码的含义和要求2、分组密码的设计思想3、分组密码的迭代结构4、分组密码的基本特点 二、数据加密标准(DES)1、DES算法介绍2、DES算法实现3、DES安全特性4、多重DES 三、AES算法1、AES算法介绍2、AES算法实现3、AES的安…

古典密码分析(冗余度,唯一解距离,语言统计,重合指数)

冗余度 在有意义的英文字母文本中,每个字符所携带的平均信息(每个字符的熵)的估计值等于1.5比特。 在语言学上在实际的英文中,平均每个英文字母携带的信息熵是4.7(log26,具体怎么求得在此不详细说明&#…