技术栈定义
一般来说是指将N种技术互相组合在一起(N>1),作为一个有机的整体来实现某种目的或功能。也可以指掌握这些技术以及配合使用的经验。
举个例子:
开发一个普通OA(办公自动化)系统,我们使用了html+css+javascript+vue+ Spring Boot+Spring cloud+hibernate + Spring+rocket Mq+Redis+Es+linux+ mysql等等,这些技术加起来就可以称为技术栈。
互联网公司的技术栈整体分为5大块:前端、后端、中间件、运维和工具。
下面就分别给大家解释一下最重要的前端、后端运用了哪些技术,这些技术又能解决什么问题。
前端技术栈
01
使用css3作为页面的样式控制
解决页面渲染问题。
02
使用Html5作为页面结构的标签语言
解决移动端的页面兼容性问题。
03
使用seajs框架
解决项目中模块开发和加载的问题。
04
使用使用Jquery前端js框架
解决方便操作页面元素的问题。
05
引用流行的前端插件实现业务需求
使用bootstrapValidator作为表单的验证插件
使用bootstrap进行页面的布局;
使用layer作为弹窗插件;
使用jQuery cxSelect 实现下拉列表的多级联动;
使用bootstrap fileinput完成多文件的上传;
使用icheck完成对多选框的美化;
使用百度ueditor解决复杂内容编辑场景。
06
自定义业务插件抽取
主要解决系统导出使用的功能代码重复性问题。收藏功能;点赞功能;评论功能;留言功能;关注功能;页面多处个人信息的设置;页面多处商品页面调起支付的功能;题库的组卷系统中的试题栏。
后端技术栈
01
项目分层思想实现分布式架构
Core层(中心、核心):与业务无关,提供基础的能力,比如:数据库持久,redis缓存,http封装,通用工具。统一的core项目,提供基础的能力we-core-Db项目:mybatis的mapper的基础上做了二次封装;we-core-redis项目:基于jedis的基础上做了二次封装;we-core-web:存放一些与web环境下使用的工具类和处理器;自定义web环境;使用的aop注解;统一的异常处理器;自定义分页标签的。 base层(根基、基础):该层中的项目有且只能代表一个真实存在而且能独立存在的核心实体对应的业务。 business层(业务逻辑层):业务层,解决多端,多项目公用的业务流程。 web层:为互联网用户提供对外服务,在这层的每一个项目都有自己不被共享的业务。
02
抽取独立服务实现服务共享
好多项目都会使用到很多相同的服务,我们会把它抽取成独立的项目,先以jar包的方式提供公用。 比如:短信服务,邮件服务,字典服务,收藏服务,关注服务,订单服务,支付服务3. 基于jedis的基础上做了二次封装,实现java对redis的读写。应用场景:整个项目使用统一的id生成策略。 使用缓存进行存放freemark代码片段的内容,解决高频查询数据给服务器带来的压力。
03
使用maven进行项目的管理
使用maven自定义骨架可以实现公司内部创建项目模板化,减少大家创建项目时的时间,创建完就能使用;使用maven的聚合的特性实现多项目统一进行构建;使用maven继承的特性实现同一项目的不同maven工程的相同配置问题;使用maven的属性我们可以使用自定义变量以及访问其他配置项值解决我们配置重复的问题;使用maven帮助我们规范工程资源的的存放;使用maven的依赖特性可以解决我们,jar包之间的依赖,排出依赖。;使用maven仓库的http代理可以实现让maven帮助我们查找,下载所需的jar包,我们只需要指定依赖的gav;使用maven我们把公司自己的开发的项目发布到nexus上供其他的项目使用。
04
使用nexus进行内网私服搭建
解决jar包重复下载的问题; 解决公司内部项目共享的问题; maven仓库以外的jar包管理。
05
使用gitlab进行项目的版本管理
解决团队多人协同开发项目的问题,我们团队制定了使用git开发的规范流程。
06
使用jenkins/hudson实现项目的自动化部署
解决项目自动化构建,发布,回滚等问题;定时构建及时发现项目中的问题;实现一键发布缩短发布的时间;自动构建和发布的大致流程;从gitlab上拉取最新的代码;使用maven进行构建项目;将构建完成的项目使用scp复制到指定服务器中;并通过远程调用指定服务器的脚本进行项目的发布。
07
使用mysql进行数据存储
这个不用多解释。
08
使用Spring+SpringMvc+Mybitas
使用经典的ssm作为平台的MVC框架, 处理http请求,处理业务逻辑,访问数据库。
09
使用hibernateValidator
实现后端接收到的参数进行参数的合法性验证,像非空,最小,最大,范围等。
10
使用spring mvc的拦截器
实现项目内的权限控制,比如:sso权限验证,角色的验证,支付的验证等。
11
使用spring mvc的AOP
实现多处相同代码抽取出来使用AOP的方式进行公用,比如:json视图的固定格式返回。
12
使用logback
作为架构的日志框架。
13
使用flying-saucer+itext+freemark
解决项目中pdf的应用场景,比如:学生下载的准考证,测试报告等。
14
使用JavaMail技术
实现邮件的发送服务。
15
使用TestNg+H2
实现进行单元化测试,保证代码质量。
16
使用Cookie+Redis
实现平台单点登录。
17
实现SpringMvc提供
的HandlerExceptionResolver接口
使用spring提供HandlerExceptionResolver实现全站统一异常处理。 包括:业务异常,登录超时异常,其他异常。
18
实现SpringMvc提供
的ServletContextAware接口
可以实现项目启动时添加一些操作。 初始化freemarker的配置; 初始化项目全局共享的静态变量(域名,文件存储目录等)。
19
使用Quartz
实现定时任务处理。
20
使用网络爬虫技术Jsoup
解决爬取其他网站的数据信息问题。
21
使用Qdcode
解决生成二维码的功能。
22
使用jsp的自定义标签
解决全站分页的实现。
23
使用阿里的Druid
作为连接数据库的连接池。
24
使用spring的Ioc容器解决对象的依赖注入
使用Ioc实现指定特定接口的实现类以应对业务实现的变化;使用ioc实现业务中需要的配置注入,防止参数值写死。
25
使用CXF或者Axis
实现通过WebService和第三方进行对接。
26
结合自定义注解+反射
实现对方法访问的控制以及添加额外业务逻辑。
比如:个人信息在多个请求Controller中都需要填充。
27
使用Mybatis框架
解决数据持久化的问题;引入开源的:Mybatis的Mapper接口的方式实现支持单表的curd,避免写更多的重复代码;引入pagehelper解决mybatis的分页问题;使用Mybatis的Interceptor实现sql的打印功能。
28
使用Jsp,Freemark
作为视图层的处理技术。
29
使用Freemark+字符串替换实现自定义vt标签
自定义视图标签主要为了解决像字典那种字段不断需要跨表查询的问题。
30
自定义json视图
自定义json视图是为了实现规定json返回的统一格式。
31
使用El表达式和jstl标签库
解决访问model中的数据以及页面上显示的逻辑处理。
32
使用自定义注解实现某些功能的标注
在处理json返回值的时候可以在标注一下@Void就表示不需要包裹; 在sso拦截权限的时候可以标注一下方法是否需要拦截; 在多个Controller里都需要设置用户信息到页面的时候,我们可以利用Aop+Annotation的方式实现。