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

论坛 期权论坛 股票     
期权匿名问答   2023-2-12 07:41   3053   5
Java后端程序员都做些什么?
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
期权匿名回答  16级独孤 | 2023-2-12 07:42:13 发帖IP地址来自 北京
2004年我在公司写下第一行JAVA代码的时候。这世界上前端和后端的定义还和今天不同。
那时候,我们把UI设计师叫做前端狗,我们叫做后端狗。在中国大地上JDK1.42还是尖端技术的那个时代,所有的东西都是后端渲染的,JS只负责静态页面的展示,在J2EE的门类当中,JS还只是用来做个页面初级校验,连ajax都尚未铺开。
10年不到。nodejs改变了前端定义。前后端分离逐渐盛行。计算机世界一直有一种规律。出现问题,出现解决问题的方案,方案复杂化导致更多新的问题。前后端分离也是如此。这个时候,JAVA后端程序员,更多的是扣除了UI展示以外,的JAVA程序员。
事实上,站在2019年下半年这个时间点上,如果我们粗浅地说,JAVA后端,肯定是指提供前端API调用的那个部分。但是,事实上,需要做的更多。
不同于前端,后端的生态复杂度太高。事实上,在JAVA世界当中,仅仅提供JAVA代码服务的,都只是最初级,最容易被替换的工作岗位。在后端生态当中,最重要的内容,已经从传统企业级应用看重的业务能力,转变到新兴互联网级应用看重的快速工程能力。在很快的未来,目前的后端部分,我预言,将会再次分裂,用现在所说的一个新兴术语,就是中台和底层。
由中台提供业务支持,底层负责工程能力。这两者,在过去的传统企业级应用当中,是融为一体的,但是随着越来越多的传统企业级应用转向互联网级企业应用,这种趋势,不可避免。
最终,或者说很快2,3年之内,将会出现一批低工资,高强度,低压力的中台工作者,类似于5年前对前后端分离时期,前端的定义,这种岗位,需求量非常大,入行容易,但是天花板很低,他们需要做的就是日复一日地在框架,注意,这里不是指类似于spring的工程框架,而是在工程框架上已经搭建成熟的业务框架,日复一日地在框架内完成业务动作,满足终端用户的需求,做个页面,多显示些数据,再多个乘法,再让系统用起来快速一点。
在JDK1.7以前,系统性能很大程度上和业务技巧绑定在一起,而经过了几轮更改以后,目前来说,JAVA系统的工程能力已经和业务工作完全剥离了。通过改变GC,改变流模式,改变react,改变http连接到AMQP,改变RMDB到noSQL,大量的改变造成了一个事实:JAVA生态,尤其是工程生态已经复杂到一个不可想象的局面。任何一个上线的小系统,都可能引用了几十个不同的开源lib,再由几十个乃至于上百个小系统组成系统群,这其中的任何一个工程点都可能造成灾难性的停机。在这里,就会需要非常多的顶尖工程师,不单单计划好一个工程框架,并且日常改进,维护这个工程框架,在我看来,这是JAVA工程人员进化的最终目标。
3#
期权匿名回答  16级独孤 | 2023-2-12 07:42:26 发帖IP地址来自 清华大学
简单的说,就是实现用户的需求,就是写功能。

至于框架什么的都是为了解决用户需求的实际问题。

功能写好也不简单。因为要保证系统不会崩。
非法输入,要输入手机号码,你输入中文,系统处理不了,自杀。
访问权限,不能随意访问。权限设计也麻烦,常规的资源权限好处理,数据权限比较麻烦。
应对特殊场景,多数是高并发。并发量高最先吃不住的是数据库,因为数据库操作的是磁盘。数据库扛不住就只能上缓存,读写分离,分库分表。
然后就是程序扛不住,设计程序逻辑没问题。但是机器性能有限,机器最多就只能处理那么多个请求。
上集群,单体服务的集群简单,就是几台电脑跑一样的程序,然后用其他服务器转发到这几台服务器顺便做个负载均衡。因为同样程序在不同电脑但是有些数据要共享,如这台机器登录换了机器访问就访问不了,这就需要使用缓存或者同步session。
到这一步发现好像解决了大多数问题,但是总有意外,万一程序崩了,有上面集群可以解决。
每个机器都在跑一样的功能包括登录注册,问题是注册不常用啊,老大觉得这些功能不常用但是每台机器都跑占内存,浪费资源。好的,上微服务,每一个功能写一个程序,这样子就可以选择功能是否需要增加机器。
好了,上到微服务就开始崩了,注册功能可能需要调用发短信的功能。所以,服务之间有些需要依赖于其他服务,但是又不在同一个程序甚至机器中,所以服务之间的调用通过网络通信。我怎么知道有哪些服务,它在哪台机器,上注册中心,大家都来这里注册下想要什么信息自己看。接着就是调用,涉及到网络就崩了,你永远不知道网络什么时候会崩,万一光纤给人拆了或者网络拥堵。然后不断的访问该服务器更加拥堵,那就熔断,反正都访问不了这个服务器就暂时不管他,一会再试试。
好像解决了大多数问题,万一数据库或者缓存崩了怎么办。上主从,主崩了选一个从的替换。为什么要主从而不是全部都一样,火车票同一个座位票在两个数据库同时卖给不同的人,是听你的还是听我的。
好像解决了很多问题,但是几十台服务器配置,如果发生修改,我要一台台去改,上配置中心,你的配置是什么自己去问。
至于分库分表,缓存集群也只是想办法让一主变成多主,就是类似分区一人管一个区,区与区之间没有交集就不会出现类似火车票的问题。

以上就是一个web的后端的事情。

综上所述,其实后端java就是写功能,至于其他都只是为了支持这些功能不崩溃。
4#
期权匿名回答  16级独孤 | 2023-2-12 07:43:08 发帖IP地址来自 北京
这个问题一句两句说不清楚,索性写个文章。
我刚开始做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后端学习流程》,说了学习的广度和深度,在这里也是相通的。
往深度挖掘,可以成为某个技术领域的专家,如搜索方面的专家、安全方面的专家,分布式文件的专家等等,不管是哪个领域,重点都不是学会使用某个工具和框架, 而是保证你可以自己的知识和技术去搞定这个领域的顶尖问题。
往广度发展,各个技术领域都要了解,对于某种需求,能够选取合适的软件和技术架构来实现它,把需求转化成合适的技术组件,让这些组件以合适的方式连接、部署、运行,这也需要持续地学习和不断的经验积累。
最后,以一张漫画来结束吧!


来源:CSDN
作者:BUG开发工程师
原文:https://blog.csdn.net/zy_281870667/article/details/78990497
声明:(本文二次转载,原文不可查)
5#
期权匿名回答  16级独孤 | 2023-2-12 07:43:32 发帖IP地址来自 北京
Java,是现阶段中国互联网公司中,覆盖度最广的研发语言。有不少朋友问,如何深入学习Java后端技术栈,今天分享一个,互联网牛人整理出来的Java深入学习路线图,以及学习资料。
一、阅读源码
深入的Java学习,经典源码阅读不可少:

  • 常见的设计模式,编码必备
  • Spring5,做应用必不可少的最新框架
  • MyBatis,玩数据库必不可少的组件


画外音:大家扪心自问,除了写业务代码,看过多少优秀开源代码?
二、分布式架构
随着业务越来越复杂,数据量越来越大,并发量越来越大,单体的架构模式显然再也无法对应,作为Java后端架构师,高并发+高可用+海量数据的分布式架构体系,是必不可少的:

  • 分布式架构原理
  • 分布式架构策略
  • 分布式中间件
  • 分布式架构实战


画外音:额, 这些分布式理论,是不是感觉零零星星的听过,而没有系统的学习过?
三、微服务技术体系
服务分层,微服务架构是架构升级的必由之路,Java技术体系,和微服务相关的技术有哪需要深入学习呢?

  • 微服务框架
  • Spring Cloud
  • Docker与虚拟化
  • 微服务架构


画外音:明明知道Spring Cloud和docker是趋势,为啥没有下定决心学习呢?
四、性能优化
作为后端Java技术专家,解决性能问题才真正体现一个架构师的功力。只有深入学习JVM底层原理,Mysql底层优化以及Tomcat调优,做到知其然,知其所以然:

  • 性能指标体系
  • JVM调优
  • Web调优
  • DB调优


画外音:是不是遇到性能问题就无从下手?只能靠瞎打日志,瞎改代码?解决性能问题,不能只靠运气!
五、典型业务实战
阅读完Java源码,学习完分布式与微服务架构体系,掌握了性能调优的方法,仅仅做一个ppt架构师怎么行?

  • 用户中心,单点登录怎么玩
  • 商品,店铺怎么玩
  • 订单,支付怎么玩
  • 通知,推送怎么玩
  • 数据分析怎么玩
唯有通过实战,才能站上华山之巅


画外音:小伙伴们,学完了么?上述路线图,欢迎收藏。
有朋友问,有了路线图,有没有资料?有没有志同道合的小伙伴共同进步?
对Java后端技术,对架构技术感兴趣的同学,欢迎和我们一起学习,相互讨论。

6#
期权匿名回答  16级独孤 | 2023-2-12 07:44:14 发帖IP地址来自 北京
做什么呢?看具体要做什么吧。
我是开发 B/S 架构系统的,虽也涉及 Native-App,但架构没多大区别,所以只能就此方面来说。
首先,客户端针对的是个人,而服务器(后端)需要面对很多人,所以,要设计数据库,隔离用户,隔离资源;
其次,业务逻辑,除了咱们常说的查、增、改、删4个操作外,往往资源都不是独立的孤岛,会互相之间牵连,所以还要处理属于、一对一、一对多等关联的读和写的操作;
再之,除了关系数据,还需要面对种种文件,统一图片格式、尺寸,截取视频前几帧,Office 文件转换为 PDF 以备预览等等;
再之,往往业务也不是局限在一台机器上的,可能还需要完成某项操作后,搞搞队列、发发通知、发发短信,或将事件向另一些子系统广播,或是推送到其他平级系统等等;
最后,还有个大头,往往我们还需要一个管理系统,方便自己的管理员和运营人员等设置、监控和管理,所以我们还需要简单的统计报表,比对外系统更致密的权限控制等等;而且大部分时候这部分经常会改动、添加,自己人只要求好用并不强调好看,所以这个后台包括界面可能也都是后端程序员给干了。
大概我这个后端程序员就干这些吧。以上。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:400157
帖子:80032
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP