vuepress wiki系统

支持markdown的wiki系统 一.背景 VuePress 由两部分组成:第一部分是一个极简静态网站生成器,它包含由 Vue 驱动的主题系统和插件 API,另一个部分是为书写技术文档而优化的默认主题,它的诞生初衷是为了支持 Vue 及其子项目的文档需求。 每一个由 VuePress 生成的页面都带有预渲染好的 HTML,也因此具有非常好的加载性能和搜索引擎优化(SEO)。同时,一旦页面被加载,Vue 将接管这些静态内容,并将其转换成一个完整的单页应用(SPA),其他的页面则会只在用户浏览到的时候才按需加载。 优势 markdown编写 静态化页面 轻量化,不需要数据库等的支持,可以与github

java web测试体系

引言 -. 从测试目的来讲,分为功能测试,性能测试,安全测试,特性测试 -. 从测试V模型范围来讲,分为单元测试,集成测试,系统测试,验收测试 -. 从mvc架构来讲,测试分为dao,service,controller,view 本文旨在为程序开发人员在java web开发项目中的测试进行分析归纳 程序开发人员场景 单元测试 单元测试更多使用mock测试,减少外部依赖影响,仅测试当前对象 切片测试 slice是指一些在特定环境下才能执行的模块,比如MVC中的Controller、JDBC数据库访问、Redis客户端等,这些模块大多脱离特定环境后不能独立运行,需要提供测试上下文环境进行测试,

other

Flyway入门

Flyway Flyway 的中文文档近乎为零,英文文档也凤毛麟角,但它却是我们最理想的数据库版本管理工具, 特性 自动升级(自动发现更新项):Flyway 会将任意版本的数据库升级到最新版本。Flyway 可以脱离JVM 环境通过命令行执行,可以通过Ant 脚本执行,通过Maven 脚本执行(这样就可以在集成环境自动执行),并且可以在应用中执行(比如在应用启动时执行)。 规约优于配置:Flyway 有一套默认的规约,所以不需要修改任何配置就可以正常使用 既支持SQL 脚本,又支持Java 代码:可以使用SQL 脚本执行数据库更新,也可以使用Java 代码来进行一些高级数据升级操作 高可靠性:

Git 原理简介

本质上,Git是一套内容寻址(content-addressable)文件系统,而和我们直接接触的Git界面,只不过是封装在其之上的一个应用层。 Git工作区、暂存区和版本库 工作区:项目文件夹即工作区 working directory 版本库:在初始化git版本库之后会生成一个隐藏的文件 .git ,可以将该文件理解为git的版本库 repository, 暂存区:在.git 文件夹里面还有很多文件,其中有一个index 文件 就是暂存区也可以叫做 stage git还为我们自动生成了一个分支master以及指向该分支的指针head ,如下图 git add file 是把文件从工作区提交到暂存区,暂存区的目录树被更新,同时工作区修改(

软件设计

IO设计模式:Reactor和Proactor

基本概念 同步 vs. 异步 同步I/O 每个请求必须逐个地被处理,一个请求的处理会导致整个流程的暂时等待,这些事件无法并发地执行。用户线程发起I/O请求后需要等待或者轮询内核I/O操作完成后才能继续执行。 异步I/O 多个请求可以并发地执行,一个请求或者任务的执行不会导致整个流程的暂时等待。用户线程发起I/O请求后仍然继续执行,当内核I/O操作完成后会通知用户线程,或者调用用户线程注册的回调函数。 阻塞 vs. 非阻塞 阻塞某个请求发出后,由于该请求操作需要的条件不满足,请求操作一直阻塞,不会返回,直到条件满足。 非阻塞请求发出后,若该请求需要的条件不满足,则立即返回一个标志信息告知条件不满足,而不会一直等待。

j2ee

GIT 最佳实践

一. 分支规划 master: 主分支,主要用来版本发布。 develop:日常开发分支,该分支正常保存了开发的最新代码。 feature:具体的功能开发分支,只与 develop 分支交互。 release:release 分支可以认为是 master 分支的未测试版。比如说某一期的功能全部开发完成,那么就将 develop 分支合并到 release 分支,测试没有问题并且到了发布日期就合并到 master 分支,进行发布。 hotfix:线上 bug 修复分支。 各分支使用场景

JPA

JPA: 4种触发懒加载的方式

Table of contents: 引言 场景 方法调用触发 Join Fetch触发 NamedEntityGraph触发 动态的EntityGraph触发 补充 1.引言 在一个JPA应用中,可以通过懒加载来提高应用的性能。这一点毋庸置疑,但是懒加载不等于不加载,在某个时刻还是需要加载这些数据的,那么如何触发这个加载的行为才能够事半功倍呢? 大家对于JPA/Hibernate的看法,感觉很慢;具体有JPA Provider(例如Hibernate)会生成非常多效率低下的SQL,于是看起来性能就不行了。每种技术都有自身的优缺点,完美的技术是不存在的。具体问题具体分析,不要人云亦云是一个开发人员应该拥有的基本能力。JPA在目前互联网海量数据的环境下,确实有很多的问题,

thymeleaf

thymeleaf 自定义标签&方言和处理器简介

1.概念 1.1 Dialects thymeleaf是一个容易扩展的库,大部分面向用户的功能不是直接构建在他的核心中,而是通过打包和组件化到一个称谓Dialect(方言)的功能集合中,同时可以自定义一组attribute或者tag在thymeleaf中用来处理自定义的模板。 Dialects是实现了org.thymeleaf.dialect.IDialect接口的对象,具体如下: public interface IDialect { public String getName(); } 基础的接口有: IProcessorDialect 处理器方言 public interface IProcessorDialect extends IDialect { public String getPrefix(

架构设计

目录 软件架构设计 层次式架构设计 企业集成架构设计 面向服务架构设计 面向构件的架构设计 系统安全架构设计 系统可靠性架构设计 1. 软件架构设计 1.1 定义 软件体系结构是指系统的一个或者多个结构,结构中包括软件的构件,构件的外部可见属性以及它们之间的相互关系。数据设计可表示出传统系统中体系结构的数据构件和面向对象系统中类的定义,体系结构设计则主要关注软件构件的结构,属性和交互作用 系统架构师:系统的设计责任人,是一个负责理解和管理并最终确认和评估非功能性系统需求(可维护性,性能,可靠性,测试性)给出开发规范,搭建实现的核心构架,对整个软件架构、关键构件、接口进行总体设计。 1.2

ray个人简介

ray个人blog 技能 精通java,常用技术有spring,jpa,hibernate,mybatis,jquery,bootstarp,mvn,docker等 熟练使用php thinkphp,node angularjs1.*,vue 了解c#,delphi,vb 工作经验 先后在杭州松下电器,武汉烽火科技,三峡高科等企业担任软件工程师、架构师、项目经理等,主要从事企事业单位业务应用系统,移动html,微信,钉钉领域开发。在多年的软件行业奋战历程中,沉淀下来了对 J2ee 平台相关技术的掌握和理解;

软件设计

面向方面编程(Aspect Oriented Programming)

1. 概念 1.1 背景 面向过程编程问题 面向过程是一种自顶向下的编程方法,适用于小型软件系统,在大型应用系统中,自顶向下逐步求精的方法,在系统的进化和维护,以及软件重用性方面都存在其不足之处 面向对象编程问题 由于其良好的封装性,层次化性以及继承性,且对象模型很好映射到实际领域。但是在设计阶段,由于以类为单位组织建模,不能全面反映软件系统的需求;在编码阶段,将数据和方法封装到类中增强了数据的安全性和模块化,但减少了代码重用可能性;维护阶段,类中夹杂各种特定于应用的代码,难以理解和维护 1.2 AOP 将传统的按功能或按对象划分程序模块的方法转化为按系统特征划分程序模块,这是AOP基本思想,OOP引入封装、继承和多态性等概念来建立一种对象层次结构,允许定义从上到下的关系,

软件设计

设计模式Gof

目录 概念 设计模式原则 创建型模式 结构型模式 行为型模式 J2ee模式 庞杂的软件模式中,分为设计模式,分析模式,组织和过程模式,本文来分析设计模式,着重理解,具体定义可参考(菜鸟教程-设计模式) 1.概念 定义:模式是表示特定的情景,动机,解决方案三个方面关系的规则,每个模式描述了一个在某种特定情景下不断重复发生的问题,以及该问题解决方案的核心所在。模式既是一个事物又是一个过程,不仅描述该事物本身,而且提出了通过怎样的过程来产生该事物 作用:简化并加快设计,方便开发人员的通信,降低风险,有助于转到面向对象技术 特性:巧妙,

软件设计

RUP(Rational unified Process)

1 概念 RUP 统一软件过程一种用例驱动的,以架构为中心的,采用迭代增量方式开发的软件工程过程。它汲取了面向对象软件工程领域多年来的优秀研究成果,应用统一建模语言(UML)进行可视化建模,为面向对象的软件系统的开发提供了方法论的指导。 Unified Modeling Language 用图形方式描述一个系统的静态结构和动态行为的一种可视化的面向对象建模语言,从不同的角度为系统建模,形成了整个系统的不同视图,UML作为一种建模语言,要和具体的软件过程相结合。这就实现了UML与RUP相结合 软件过程 UML是一种可应用于软件开发的非常优秀的建模语言,但是UML本身并没有告诉人们怎样使用它,为了有效地使用UML,需要有一种方法应用于它,这就是软件过程。软件过程是为了获得客户所需要的软件,所进行的一系列任务及各个任务的工作步骤。常见的软件过程模型有瀑布模型、原型模型、增量模型、喷泉模型、RUP(

软件设计

UML

1. 基本元素 构造型(stereotype):代表模型元素集的关键字 继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,用_实线空心三角头_表示泛化关系(子类指向父类) 实现指的是一个class类实现interface接口(可以是多个)的功能,用_虚线空心三角头_表示实现关系(实现类指向接口) 依赖就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A,用 _虚线箭头_表示依赖关系(依赖方指向被依赖)

linux

基于docker部署应用

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 docker是轻量级容器技术,直接运行在linux之上,同时实现了虚拟技术的资源隔离,性能远远高于虚拟机技术 将软件编译成一个镜像,在这个镜像里做好对软件的各种配置,然后发布,运行这个镜像,运行中的镜像称之为容器 1. 安装配置 centos 系统下安装 $ yum install docker #install $ service docker start #run Ubuntu系统下安装 $ sudo apt-get