很多同学对于数据结构、算法、网络编程这些基础课程掌握得都很好,但有不少人到了实际的项目开发时就蒙蔽,不知道整个软件系统的体系和流程,个人认为首先对整个过程有个大致的理解,再逐一对这些技术去进行深入的学习是很有利的。首先自我介绍下,笔者从事JAVA开发,也只是个小白,有很多技术同样也没有很深入地去学习,有些理解不当的地方欢迎指正,一起学习。另外,最近会一直更博分享自己各项技术的学习心得,欢迎大家一起交流。

一、前端技术

笔者认为后台开发人员掌握一定的前端技术是必要的,作为JAVA开发最起码的JSP、JQuery、BootStrap这些你得有起码的了解。除此之外,前后端的交互技术,AJAX、JSON、JSONP也是必须了解和掌握的。

二、通信协议
通信协议就跟上面说的网络编程这门课程有很大的关系,通信协议通俗一点说就是:客户端和服务器通信的格式,大家都知道报文是二进制的,而协议的作用就是规定了某一位或某几位二进制串的作用,规定了报文应该按照怎么样的格式来编码。如果违反了这个协议,那么报文是不可能被客户端或服务器正确解码的。

大家最熟悉的协议大概就是HTTP,HTTP协议具体的报文格式也不需要再过多的介绍了。在这里,大家可以思考一个问题,如果一个公司或者实验室内部调用的接口,是不是也需要HTTP协议来通信呢?笔者认为这是一个最差的方案,因为HTTP的报文头部比较长,内部的接口调用是不需要那么复杂的头部的,所以一般采用的是RPC协议。

RPC全称远程过程调用,通过它可是实现一台服务器去调用另外一台服务器上的方法,是基于TCP/IP协议上的一个协议。举个栗子,B服务器上有b1()和b2()两个方法,首先需要向服务注册与发现设备进行注册,A服务器想要调用b1()时,向服务注册与发现设备查询b1()方法所属服务器的IP和端口,得到后,将A服务器的请求路由到该IP的制定端口上。那么通信协议在这个流程中的作用是什么呢?A服务器想要请求b1()方法,他的请求发送到服务注册与发现设备之后,该设备需要通过规定的通信协议来识别该请求报文具体请求的服务名,由此来查询该服务的IP及端口,这个过程叫做路由。HTTP协议中,是通过URL来进行路由的。在RPC过程中,我们一般使用自己定义的协议来减少报文的长度,最简单的方法是通过一个唯一的整形来进行路由,具体的路由方案有很多,这里不再过多赘述。所以我们来总结一下,通信协议规定了通信的格式,他可以规定某几位为路由数,某几位为请求报文的body,一个很简单的通信协议头部有路由字段就可以满足了,相比于HTTP的头部而已,轻量了很多。body里面存的就是请求的具体参数和响应结果了,该区域一般也是有数据传输协议来进行数据的编码的,json是一种选择,而另一种更好的选择就是谷歌的protocol buffer,相比于json而言,它是二进制的,更轻量,具体的特性和使用方法会在后面的文章中进行介绍。笔者最经常用的一个RPC框架是Thrift,也会在后面的文章中将会给大家介绍。

三、负载均衡
负载均衡这个词,相信大家接触得都很多。负载均衡就是用多台应用服务器来完成一个业务,通过负载均衡中间件对这些服务器的负载情况进行一个管理及动态的调整,以尽量消除或减少各服务器负载不均衡的现象。还是上一节当中的那个栗子,当B服务器的请求量很大时,一台服务器是无法支撑起整个业务的,于是我们对该服务器做一个扩展,变成三台服务器B1、B2、B3共同来提供服务,他们三台服务器的IP和端口首先都需要向服务注册与发现设备来进行注册,同时这三台服务器的负载量由负载均衡服务器进行管理,这是A服务器对于b1()方法的一个请求到达负载均衡服务器,负载均衡服务器需要去请求服务注册于发现设备该方法的路由地址列表,拿到该列表后从中选择负载量最优的那一台服务器,将A服务器的请求路由至那台服务器上。
在公司里面,负载均衡层一般都由运维负责,笔者还接触不到这些,只能大略地介绍一些,如果大家想要深入地学习,可以先学习下使用nginx来搭建负载均衡服务器。
四、反向代理

反向代理是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。通俗点讲,ABC三个人,A想向C问个问题,但是得通过B来进行。A先告诉B,B再去问C,最后B将C的回答转述给A。可能大家会觉得为什么需要这么麻烦的过程呢,A直接问C不就好了。大家这个时候可以打开一个网页,按一下F12,选择network选项卡,然后F5刷新一下网页,在这个选项卡里,会刷出一个列表,这个列表就是你刷新一次网页浏览器需要向服务器发送的请求列表。我们知道,一个HTTP请求是只能请求一个对象的,一个网页里有10个图片就需要请求10次,实际上你刷新一个网页时,大部分的请求都是静态元素,即图片、js或css等文件,如果这些大部分的请求都需要通过应用服务器来完成的话,会给应用服务器带来很大的负担,所以反向代理的作用,就是缓存这些静态文件,当浏览器发送一个请求时,反向代理服务器判断请求内容是否是它缓存内容,如果是,就可以直接将结果返回;如果不是,反向代理再将该请求转发至应用服务器上处理。这样,就减少了应用服务器的负担。常用的反向代理——nginx。

有人可能会说,nginx好厉害啊,项目部署用一台nginx就可以完成负载均衡和反向代理了。实际上是需要两台nginx来架构的,一台放再lvs中负责负载,另一台部署在tomcat前,负责反向代理。

五、业务编程

通过上面四点的介绍,一个请求已经能从客户端发送至应用服务器tomcat上了。接下来就是根据服务器编程完成相应的业务流程。后台常用的开发框架笔者都有接触并且用过不短时间,Stuts2、Spring MVC、Spring、Hibernate、MyBatis这些。一般两套常用的体系是Struts2+Spring+Hibernate和Spring MVC+Spring+MyBatis,很明显Spring的作用不言而喻。这两套体系都是MVC设计思想的体现。对比下这两套体系,Struts2和Spring MVC都是Controller层的框架,后者对初学者更友好一些,而且前者经常出现一些神奇的BUG,公司里面也是很不喜欢使用的,所以强烈推荐的是Spring MVC。Hibernate和MyBatis都是两个比较重用的持久层框架,Hibernate会比Mybatis好入门一些,但是MyBatis会比Hibernate轻量,使用广泛程度也差不多。

六、数据库

数据库需要掌握的:sql语句、索引、explain性能分析等

七、缓存

缓存分本地缓存和缓存服务器。本地缓存指的是将数据缓存下本地的内存中,一般对一些读业务的数据采用本地缓存,推荐大家学习下google的guava cache。缓存服务器的话推荐redis,一个键值对的缓存,比较适合入门

除了上面的这些,还有maven svn git这些工具也是需要掌握的

由于时间和篇幅原因,这篇博文知识大致地进行了名词介绍,后面会为大家详细介绍

细数后台开发的技术栈相关推荐

  1. 第二十七期:网络爬虫程序员被抓,我们还敢爬虫吗?细数那些Java爬虫技术

    最近,某大数据科技公司因为涉嫌非法抓取某招聘网站用户的简历信息,公司被查封,负责编写抓取程序的程序员也将面临坐牢. 作者:架构之路来源 最近,某大数据科技公司因为涉嫌非法抓取某招聘网站用户的简历信息, ...

  2. Java后端开发工程师技术栈整理

    文章目录 Java后端开发工程师技术栈整理 常用工具 Java IDE 数据库客户端 数据库建模工具 SSH客户端 文本编辑器 Markdown编辑器 API调试工具 浏览器 压力测试工具 DevOp ...

  3. 如何为移动开发选择技术栈?

    感谢内容提供者:金牛区吴迪软件开发工作室 今天就来聊一聊 如何选择移动应用开发的技术栈 选择合适的技术栈是移动开发领域最关键的决策之一.你选择的技术栈将为你开发的移动应用提供基本的功能.可拓展和维护性 ...

  4. 互动多媒体开发人员技术栈

    最早开始进行互动多媒体开发的时候,发现这个岗位很难给周围的人解释清楚,做着广告活动的执行工作,但我似乎不属于广告行业,用着游戏行业的开发工具Unity3D,但我压根做的不是一般理解的"游戏& ...

  5. .Net Web微信H5鱼虾蟹网站开发搭建技术栈

    本文整理了当前企业web微信H5鱼虾蟹网站开发搭建(h5.fanshubbs.com)的管理系统架设Q1687054422,商城等系统的常用开发技术栈. C#常见运算符 一元运算符(+.-.!.~.+ ...

  6. Qt开发必备技术栈学习路线和资料

    简介 本文为:C++ QT 学习路线大纲+资料(文章底部) Qt 可以做什么? Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部:Qt 除了可以绘制漂亮的界面( ...

  7. 细数Qt开发的各种坑(欢迎围观)

    1:Qt的版本多到你数都数不清,多到你开始怀疑人生.从4.6开始到5.8,从MSVC编译器到MINGW编译器,从32位到64位,从Windows到Linux到MAC.MSVC版本还必须安装对应的VS2 ...

  8. 基于.Net进行前端开发的技术栈发展路线(一)

    前言 今天想讲讲的是我的技术树.我最初是做CS开发的,第一阶段的技术经历是以Powerbuilder来做CS开发,第二阶段开始基于C#做winform开发,眼看前端开发越来越流行,需要更广泛的技术栈势 ...

  9. 前端开发vue技术栈程序员的vs code插件分享

    工欲善其事,必先利其器,想要达成高效的开发目标,怎么能缺少了合适的编辑器插件呢.通过近期开发的几个项目,我养成了自己的开发习惯,这里就分享一些好用的vs code插件给大家. 第一款,Auto Ren ...

最新文章

  1. 使用 Pandas、Jinja 和 WeasyPrint,轻松创建一个 PDF 报表
  2. 深入理解Spark Streaming执行模型
  3. IT专案管理中的风险控制。
  4. padarray函数
  5. 论文笔记:DeepID2
  6. 使用过滤器监控网站流量
  7. 将前端文件和Go程序打包
  8. python3 beautifulsoup 模块详解_关于beautifulsoup模块的详细介绍
  9. linux设置自启动方式
  10. java爬取国家统计局省市县及编码
  11. Required request body is missing 问题解决
  12. Win10应用程序添加到右键中
  13. 自制恋爱话术APP永久免费使用
  14. 【每天读一点英文】gnuhpc:The World As I See It(节选)
  15. Unity性能优化 :合批篇
  16. Kotlin - 改良观察者模式
  17. point类型的数组java_Java基础学习之引用类型数组访问NullPoint问题
  18. 论文解读2019INFOCOM_Calibrate: Frequency Estimation and Heavy Hitter Identification with LDP
  19. 《Qt Quick核心编程》勘误
  20. NovelAI二次元绘画体验

热门文章

  1. NVIDIA 驱动下载网址
  2. 【GUI】一、Swing外观框架BeautyEye使用
  3. 论文中整理的零碎知识点
  4. 无限游戏:虎牙的野心和底牌
  5. Eth2.0 节点的网络通信
  6. 面试--80% 以上简历都是不合格的
  7. AlgaEnergy与横河电机签署战略伙伴关系和股权协议,以加速微藻生物技术的发展
  8. php导出word html转换为word文档 (原生+phpword)
  9. 数字图像处理实验[实验二:图像拉普拉斯锐化]
  10. 【已解决】Microsoft Visual C++ Redistributable is not installed