简介
Yapi是去哪网开源的一款api管理应用。当前前后端分离开发大势所趋,为减少前后端工程师的沟通障碍,避免不必要的争吵,建议搭建这么一套api管理工具。后端把开发好的接口信息整理到工具中,前端调用统一参阅api管理文档。
注意:如果后端接口修改了,一定要及时更新。
参考:YApi
安装
安装yapi,需要提前安装mongodb,nodejs(6.X以上),最好把git也安装上
安装nodejs
1 | 下载源文件 |
Yapi是去哪网开源的一款api管理应用。当前前后端分离开发大势所趋,为减少前后端工程师的沟通障碍,避免不必要的争吵,建议搭建这么一套api管理工具。后端把开发好的接口信息整理到工具中,前端调用统一参阅api管理文档。
注意:如果后端接口修改了,一定要及时更新。
参考:YApi
安装yapi,需要提前安装mongodb,nodejs(6.X以上),最好把git也安装上
1 | 下载源文件 |
FastDFS 开源的分布式文件系统,用纯C语言开发。只能通过专有API进行文件存取访问,不支持POSIX接口方式,不能mount使用。它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载均衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Trackerserver调度最终由Storage server完成文件上传和下载。
FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。
Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。通过Trackerserver在文件上传时可以根据一些策略找到Storageserver提供文件上传服务。
Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。Storage server没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。
Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。
在开发阶段,会经常修改代码,每次修改后都要重启应用才能看到效果,非常麻烦。
引入依赖
1 | <dependency> |
修改IDEA配置
1.打开Settings(Ctrl+Shift+A)—》Build,Execution,Deployment —>compiler
2.勾选 Build project automatically
3.apply
重启IDEA
测试
XSS攻击全称跨站脚本攻击,是一种在web
应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其他用户使用的页面中。例如:不法用户在评论某条博客时,植入类似<script>alert('一个大傻瓜')</script>
可执行的js脚本保存到服务器,当在显示的时候,就会出现弹出框,这是最简单的XSS攻击。
服务器处理富文本编辑器提交的内容时, 因排版的需求不能对 HTML 标签进行转义, 但为了防止 XSS 攻击, 又必须过滤掉其中的 JS 代码, 在 Java 中使用 Jsoup 正好可以满足此要求
1.在前端页面,可以通过js过滤一下特殊字符。
2.在服务器端通过过滤器,拦截请求,过滤参数,清除危险字符
非关系型数据库;分布式文档存储数据库。内容大部分以json的格式存储
在MongoDB
中基本概念是 文档(document)、集合(collection)、数据库(database)、数据字段\域(field)
一个MongoDB
中可以创建多个数据库
admin: 从权限的角度来看,这是”root”数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
平时比较数字类型时习惯直接用==
来比较,有一次发现两个Long类型的数字直接用==
比较没有达到预期效果,仔细一想Long类型是long的封装类型,==
比较是比较的引用地址,因此值是一样的,却返回false。
1 | Long l1 = new Long(10); |
上面代码也可以看出:long类型是java中的基本数据类型,可以用==
直接比较
分支就像两条平行的线,互不干扰;在实际开发过程中,大家都是在分支上工作,互不干扰,而且每次修改后都可以在本地提交,而不用担心代码丢失。在需要时把分支合并,就可以完成协助开发了。
Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。
在Git仓库创建起始,会默认创建一个master
分支。前面介绍版本回退的时候,引入了指针(HEAD
)的概念,Git之所以与其他版本管理工具不同,一是因为Git是分布式管理工具,还一个是引入了指针的概念。其实我们在commit的时候,只是在移动指针,所以才会非常快。
严格来说HEAD
不是指向提交的,而是指向master
分支的,分支指向了提交,所以HEAD
指向当前 分支如图:
每一次的修改提交,都被Git记录为一个节点,形成一个时间线,而每次提交当前分支就会指向最新的一次提交,而指针也指向当前分支。