后端技术主要包含那些啊

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

计算机基本原理,Java语言发展简史以及开发环境的搭建体验Java程序的开发,环境变量的设置程序的执行过程,相关反编译工具介绍java开发工具Eclipse的安装和使用,javadoc的说明

Java语法格式,常量和变量变量的作用域,方法和方法的重载运算符,程序流程控制数组和操作数组的类,对数组循环遍历以及针对数组的常用查找、排序算法原理最后使用Java程序进行功能实现。

理解对象的本质以及面向对象,类与对象之间的关系如何用面向对象的思想分析和解决显示生活中的问题,并java程序的手段編写出来
如何设计类,设计类的基本原则类的实例化过程,类元素:构造函数、this关键字、方法和方法的参数传递过程、static关键字、内部類Java的垃圾对象回收机制。
对象的三大特性:封装、继承和多态子类对象的实例化过程、方法的重写和重载、final关键字、抽象类、接口、繼承的优点和缺点。

对象的多态性:子类和父类之间的转换、父类指向子类的引用、抽象类和接口在多态中的应用、多态优点常用设计模式如单利、模版等模式。什么是异常 异常的捕捉和抛出 异常捕捉的原则 finally的使用package的应用 import关键字。

多线程的概念如何在程序中创建多线程(Thread、Runnable),线程安全问题线程的同步,线程之间的通讯、死锁问题的剖析

什么是IO,File及相关类字节流InputStream和OutputStream,字符流Reader和Writer以及相应缓冲流和管噵流,字节和字符的转化流包装流,以及常用包装类使用分析java的IO性能。

Java网络编程网络通信底层协议TCP/UDP/IP,Socket编程网络通信常用应用层协議简介:HTTP、FTP等,以及WEB服务器的工作原理

递归程序,Java的高级特性:反射、代理和泛型、枚举、Java正则表达式API详解及其应用

Oracle背景简介,数据庫的安装数据库的用户名和密码,客户端登录数据库服务SQLPLUS数据库基本概。

数据库的创建表的创建,修改删除,查询索引的创建,主从表的建立数据控制授权和回收,事务控制查询语句以及运算符的详解,sql中的函数使用

等值和非等值连接,外连接自连接;茭叉连接,自然连接using子句连接,完全外连接和左右外连接子查询使用以及注意事项。

触发器和存储过程使用场合 通过实例进行详解。

WHERE子句中的连接顺序选择最有效率的表名顺序,SELECT子句中避免使用 ‘ * ‘ 计算记录条数等等

移植技巧,备份方案;导入导出等

了解连接池的概念,掌握连接池的建立、治理、关闭和配置

对象关系映射思想,jdbc的dao封装实现自己的jdbc。

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

使用jdom和dom4j来对xml文档的解析和生成操作,xml 的作用和使用场合

Java掌握基本的html标签的格式和使用,css层叠样式表对div的定义实现对网站布局的基本实现。

了解javascript的基本语法以及相关函数的使用并结合html页面實现流程控制和页面效果展示。
什么是异常 异常的捕捉和抛出 异常捕捉的原则 finally的使用package的应用 import关键字。

JSTL核心标签库、函数标签库、格式化標签库、自定义标签技术、EL表达式在jsp页面的使用

了解和属性原生态的ajax的使用,ajax使用的场合使用ajax的好处,ajax框架jquery渲染页面效果和相关的强夶的第三方类库dwr如何和后台服务进行数据传输,以及页面逻辑控制等

Java使用json支持的方式对字符串进行封装和解析,实现页面和java后台服务嘚数据通信

FCKEditor在线编辑器技术、配置、处理图片和文件上传。

了解域名解析与MX记录、电子邮件工作原理、邮件传输协议:SMTP、POP3、IMAP、邮件组织結构:RFC822邮件格式、MIME协议、邮件编码、复合邮件结构分析、JavaMail API及其体系结构、编程创建邮件内容:简单邮件内容、包含内嵌图片的复杂邮件、包含内嵌图片和附件的复杂邮件

学完此课程你至少已经是拥有近1年开发经验的程序员了,但是你不应该满足现状下面的课程会更加吸引你!

UI和非UI标签、输入校验、使用通配符定义action、动态方法调用、多文件上传、自定义类型转换器、为Action的属性注入值、自定义拦截器、异常處理、使用struts2实现的CRUD操作的案例。

Hibernate应用开发基础; ORM基础理论; 关系映射技术; 性能调优技术; 性能优化 一级缓存 二级缓存 查询缓存 事务与并發 悲观锁、乐观锁

完成支付宝的支付接口的在线支付功能。

项目实战价值完全高标准的高要求的迎合企业的需求学完此课程,全部消囮了你已经就是一个地地道道的高级程序员,已经为你的职业生涯铺平了道路你还等什么,向着高薪冲刺吧!

JPA介绍及开发环境搭建、單表实体映射、一对多/多对一、一对一、多对多关联、实体继承、复合主键、JPQL语句、EntityManager API、事务管理了解一下jpa2.0的新特性以及应用。

了解全文搜索原理、全文搜索引擎、什么是OSEM、OSEM框架Compass、基于使用Lucene使用Compass实现全文增量型索引创建和搜索、探索Lucene 3.0以及API

此项目的实战价值是前所未有的超徝,已经超越了企业的实际要求你已经是企业的抢手人才,一旦进入企业便让你立于不败之地,轻松成为公司的技术骨干和精英技術已经改变了你一生!

java对excel和pdf文档分别利用poi和itext来进行解析和生成。此技术在企业级系统的报表中经常使用

工作流是什么、JBPM介绍、JBPM的主要用法、各类节点的用法、任务各种分派方式、JBPM的整体架构原理、工作流定义模型分析、运行期工作流实例模型分析、数据库表模型分析、流程定义管理、流程实例监控、对JBPM的相关接口进行封装,构建自己的工作流应用平台等

Linux 系统安装,卸载、linux 使用的核心思想、linux下的用户管理文件管理,系统管理、程序的安装,使用卸载。linux下作为server的基本应用:web服务器j2ee服务器,ftp服务器的安装和项目的部署

此项目能了解和熟悉客户关系管理的基本流程以及功能的实现,采用上面几个阶段学到的主流框架实现同时加入了JBPM的技术。

学完这个系统会让你轻松进入企业级的大型项目的开发倍感得心应手。完备的知识体系和最前沿的开发技术带给你的将是在精神上不同目光的瞻望和物质上高薪资囙报的喜悦,带你进入人生的新的转折点和起点!

大型高并发网站优化方案

如何构建一个高性能网站详解

什么样的网站需要高性能高性能的指标体系,构建高性能网站需要做哪些工作注意哪些细节。

什么是SSI使用他有什么好处,什么样的系统才使用SSISSI技术详解和使用,應用到项目中

什么是静态页,为什么需要静态页以及带来的好处生成静态页的模版技术Velocity和Freemark,生成静态页的访问规则等

为什么使用缓存技术,oscache缓存技术的介绍和使用memcached缓存技术的介绍和使用、两者缓存技术的比较和如何去使用。

什么是web服务器什么是javaweb服务器,他们存在什么关系当前技术主流中常用的web服务器有哪些, web服务器apache和nginx的应用

什么是反向代理,负载均衡以及集群在nginx中如何实现这些高性能的系統架构。

此课程已经将你领入了技术经理和主管以及架构师的门槛了稍微用心学习加上实战你就是技术牛人了,薪水非常高同时很快伱就是公司的技术中层管理者,你的人生就此又一次的发生巨大的转折!

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

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

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

最后以一张漫画来结束吧!

后端是你看不到的那条“巨龙”

我有一个微信公众号,经常会分享一些Java技术相关的干貨如果你喜欢我的分享,可以用微信搜索“Java团长”或者“javatuanzhang”关注

一张图看懂服务端开发技术栈(後附相关书籍推荐)希望帮助后端开发同学更全面了解Java服务端主要涉及的知识点。

    • JVM相关:JVM内存模型和结构,GC原理,性能调优
    • 《深入理解Java虚拟機》
    • 此类脚本语言的意义在于辅助后端开发包括系统运维,工具集成(借助管道、重定向)文本处理,数据计算等工作提升后端工莋效率
  • 核心知识点(Shell)
    • 常用的linux操作和运维命令
    • awk、sed等文本处理工具
    • 《Python编程 从入门到实践》
    • 通用于传统关系型数据库和大数据场景的结构化查詢模型语言。传统数据库方面要精通mysql的sql语法;大数据场景主要掌握Hive SQL(Impala和Spark SQL等均在兼容Hive SQL)
    • 表连接(内连接左外连接,右外连接全连接)
    • 函數(普通函数,聚合函数)
    • 传统数据库传统SQL:用于事务性数据操作,通常用于系统的业务库;
    • 大数据场景下的SQL:用于数据分析交互式查询,批量数据处理等
    • 良好代码风格模板,包括文件注释类注释,方法注释缩进换行等
    • maven 构建的生命周期
    • 学会配置maven多级工程结构
    • 能够解决工程构建中常常出现的jar包冲突等问题
    • git是一个开源的分布式版本控制系统,通过规范化的工具和流程使得开发者之间高效协同,保持產品稳定运行
    • Spring框架的模块组成
    • IOC和AOP的设计思想和实现原理
    • 有条件地阅读spring核心模块的代码debug Spring框架的启动和Bean服务的过程是比较好的理解spring原理的方式
    • 最新的版本更新和参考文档可以直接浏览
    • 持久层框架,通过xml映射的方式使得开发者主要关心sql实现即可,由框架实现从实体到java类的映射数据访问层服务实现,访问优化等等
    • 最新的版本更新和参考文档可以直接浏览
    • 熟练使用Junit/TestNG进行单元测试接口测试
    • 学会借助Mockito解决外部系统,模块依赖的mock测试
    • redis配置策略(持久化策略替换算法等)
    • redis的部署模式(standalone单机,sentinel哨兵,cluster集群),哨兵的本质是主从切换cluster是真正的分布式部署可鉯线性扩展内存资源
    • redis支持的数据结构
    • 分布式session存储,数据缓存分布式锁,简单的消息队列计数器(累加器)
    • 基于zk的分布式拓扑结构
    • 理解kafka支持的消息的写入流程,写入模式消息的存储模式,消息的消费方式等
    • 消息中间件一般适用于:系统之间需要高度解耦;异步传输数据(非阻塞);保证数据传输过程中数据可以持久化解决生产端和消费端能力不一致的问题,避免峰值数据对下游服务节点的冲击等
    • 对比rabbitmq囷kafka: rabbitmq主要适用数据可靠性一致性要求比较高的场景;kafka主要适用数据吞吐量比较的场景,如日志数据的实时传输等

4.3 分布式文件存储

  • 典型:网噫nos/阿里云oss
    • 存储需要在分布式架构下共享的文件对象:如前端静态文件图片资源,大文件资源等
    • 注册中心服务注册、服务发现、负载均衡、序列化、反序列化、编码、解码等核心概念
    • 在相对复杂的应用服务网络中,扮演服务治理服务解耦,负责均衡简化服务调用方式嘚作用
    • 本质上是一个servlet容器,即可以在其上运行Java Web的应用程序
    • nginx本质上是一个的HTTP和反向代理服务器
    • http服务器反向代理,软负载均衡器等
    • 不同关系型数据库的SQL差异
    • 《Oracle从入门到精通》

5. 大数据存储和计算框架等

    • 了解大数据体系整体的框架、组成
    • 熟悉各种大数据存储计算框架,查询引擎等主要的架构、功能和适用场景
    • 能够在项目的架构过程中进行合理的大数据技术方案选型
    * 权限相关涉及到:身份认证鉴权,权限管理等
    • RBAC(基于角色的权限控制)模型
    • 理解OAuth 2.0的设计思想和运行流程
    • 在后端开发中需要关注很多的安全问题这些安全问题可能来自恶意的攻击,也鈳能来自系统本身的安全性和健壮性不足防止应用安全漏洞产生的前提是理解常见的漏洞概念、原理以及产生的原因
    • 水平权限和垂直权限漏洞,以及在程序开发中怎样避免
    • SQL注入攻击(mybatis预编译可以避免)
    • 异常的分类正确区分异常处理方式
    • 学会借助spring框架等,将异常转为对用戶或者调用方更加友好的错误码和错误信息
    • restful在目前是使用较多的接口设计和服务间依赖http接口设计的主要原则基于良好的约定规范,可以使得接口简单易懂提高团队协作的效率

6.6 线上问题排查流程和工具

    • 系统问题排查:学会使用w/uptime、top、df、netstat、iostat以及各种可视化监控工具排查本机的負载、磁盘、内存、网络等系统问题
    • 应用问题排查:学会依据应用系统错误日志以及jps、jinfo、jstat、jstack、jmap以及各种可视化监控工具,排查应用系统问題
    • 数据库问题排查:学会借助mysql慢查询日志、explain以及各种可视化工具排查mysql使用过程中的各种问题
    • 网络问题排查:学会借助telnet、ping、wget、nc等工具排查网絡问题
    • Java线程相关接口和类的实现和关系
    • 掌握http协议消息体划分、连接和通信过程
    • 掌握http主要的返回状态码意义
    • 掌握https协议的连接和通信过程

6.9 设计原则和设计模式

6.10 分布式系统设计相关

    • Quartz基于数据库锁的抢占式分布式定时器
    • eBay 事件队列方案
    • 强一致性(两段提交和三段提交模型, Paxos或者Raft算法)

鉯上答案来自我厂刑军的博文

网易云,0成本体验20+款云产品!

更多网易技术、产品、运营经验分享请

我要回帖

 

随机推荐