逻辑删除

  • 物理删除,又称硬删除、真删除,即删除操作是将数据记录直接从数据库删除。
  • 逻辑删除,又称软删除、假删除,通过添加删除标记或者将要删除的数据记录移动到另一张表的方式实现。好处就是对于误操作,数据被删除了,可以很方便地将数据恢复。

Read More

Vim 自动补全插件 YouCompleteMe 安装与配置

概述

对于代码自动补全,之前一直使用的是Shougo/neocomplcache和Shougo/neosnippet。早就听说过YouCompleteMe的大名,一直想尝试一下YCM,但是还是拖到了现在。YCM和其它Vim插件的安装有些不同,可能需要折腾一下。之所以安装稍微会麻烦些,是因为YCM 后端调用 libclang(以获取AST,当然还有其他语言的语义分析库)、前端由 C++ 开发(以提升补全效率)、外层由 python 封装(以成为 vim 插件),它可能是安装最复杂的 vim 插件了。YCM是Client-sever架构的,Vim这部分的YCM只是很小的一个客户端,与具有大量逻辑和功能的ycmd HTTP+JSON交互。server在你开启或关闭Vim是自动开启或关闭。

其它自动补全的插件基本上是基于文本的,也就是说它们基本上是使用正则去猜。区别于其它Vim的自动补全插件,YCM基于语义引擎(比如C家族的libclang)提供了语义补全,是通过分析源文件,经过语法分析之后进行补全。对于C家族的语言这种基于语义的自动补全依赖于clang/llvm,其他语言 ,会调用vim设置的omnifunc来匹配,可以查看github

YCM不是基于前缀补全的,而是子序列,所以输入 abc 可以补全 xaybgc,它对于大小写的补全也非常智能。对于C家族的语言和Python支持跳转到定义处。此外还可以对文件路径进行补全,和ultisnips也很好结合。

Read More

Shiro笔记

简介

Apache Shiro是一个强大易用的Java安全框架,可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等。

Shiro基本功能

  • Authentication:身份认证/登录,验证用户是不是拥有相应的身份;
  • Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;
  • Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;
  • Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;
  • Web Support:Web支持,可以非常容易的集成到Web环境;
  • Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;
  • Concurrency:shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;
  • Testing:提供测试支持;
  • Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;
  • Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。

Read More

FreeMarker-XML处理笔记

揭示XML文档

test.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<book>
<title>Test Book</title>
<chapter>
<title>Ch1</title>
<para>p1.1</para>
<para>p1.2</para>
<para>p1.3</para>
</chapter>
<chapter>
<title>Ch2</title>
<para>p2.1</para>
<para>p2.2</para>
</chapter>
</book>
  • 根节点是“文档”而不是book
  • 如果 B 是 A 的直接后继,我们说 B 节点是 A 节点的 child 子节点,A节点是B节点的parent父节点。
  • 元素,文本,注释,处理指令都是DOM树的节点

Read More

FreeMarker-程序开发指南笔记

快速入门

  • 使用 java.lang.String 来构建字符串。
  • 使用 java.lang.Number 来派生数字类型。
  • 使用 java.lang.Boolean 来构建布尔值。
  • 使用 java.util.List 或 Java 数组来构建序列。
  • 使用 java.util.Map 来构建哈希表。
  • 使用你自己定义的 bean 类来构建哈希表, bean 中的项和 bean 的属性对应。例如product 中的 price 属性可以用 product.price 来获取。

Read More

深入理解Java虚拟机笔记三(JVM性能监控与故障处理工具)

概述

大多工具都是对jdk/lib/tools.jar类库的一层包装,SUN JDK监控和故障处理工具:

  1. jps:JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程
  2. jstat:JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据
  3. jinfo:Configuration Info for Java,显示虚拟机配置信息
  4. jmap:Memory Map for Java,生成虚拟机的内存转储快照(heap dump文件)
  5. jhat:JVM Heap Dump Browser,用于分析heap dump文件,会建立一个HTTP/HTML服务器,让用户可以在浏览器查看分析结果
  6. jstack:Stack Trace for Java,显示虚拟机的线程快照

然后还有两个GUI工具:

  1. jconsole:略微过时的JVM各状态查看工具
  2. visualVM:Sun出品的强大的JVM工具,推荐使用!

Read More