对称加密和非对称加密解决的问题

1.对称加密:

我有一个公司,我要和所有我的客户通话,当然通话过程是加密的,所以我们都有共同的一个加密规则(密钥),一方加密后,其他方用对应规则解密。

坏处:如果我的某一个客户密钥泄露了,所有人的通话都是不安全的了,都要更换密钥。

2.非对称加密:

我和客户,还有客户和客户之间想通话,但是不想因为一方密钥泄露就都要更换密钥。

所以,我和客户们都设置了两个密钥,一个公钥,一个私钥。我将私钥保存好,将公钥公开,并说:“你们谁想给我发信息了,就用我公布的公钥加密发给我就行”,这样客户就用我公布的公钥进行了加密然后发给我,我也不用担心有人可以破解,因为只有我的私钥才可以解密。其他客户之间通讯同上。

另:关于双方通信:我收到了信息怎么知道是谁发来的呢?这就是客户在发的信息里面说了:“我是xxx,我想说xxx,你如果想给我回话,我的公钥是xxx,你用它加密然后发给我”,我收到信息解密后得到公钥,然后将要说的话用客户公布的公钥加密发给客户。大概如是

好处:某一个客户的私钥泄露了,不用所有人都更新密钥,只需要泄露的人更新密钥即可。

java注解

AOP的主要概念和术语:

  • Aspect: 切面,即横切多个类的关注点的组合。事务管理即为横切关注点的一个很好的示例。Sprint AOP中,切面由一般类实现(基于schema的方式),或者由带有@Aspect注解的一般类(注解方式)来实现。
  • Join point: 接入点,指程序执行中的某个点,例如一个方法的执行,或者异常的处理。Spring AOP中,一个接入点通常指一个方法的执行。
  • Advice: 切入点在一个特殊接入点上执行的动作。有很多类型的advice,如around, before, after。Spring AOP中将advice实现为拦截器,管理围绕接入点的一串拦截器。
  • Pointcut:匹配接入点的谓词。每个advice都关联到一个pointcut表达式,并且在匹配接入点时(例如,某个特定名字方法的执行时)运行。Spring默认使用AspectJ的pointcut表达式语言。
  • target object: 被一个或多个切面advice的对象。由于Spring AOP通过运行时代理来实现,因此此处的对象总是指被代理对象。
  • AOP proxy:AOP为实现切面而创建的对象。Spring中一个AOP代理可能是JDK动态代理,也可以是CGLIB代理。
  • Weaving: 织入,链接切面和其他应用类型或对象,以创建一个被advice的对象。可以在编译时(例如使用AspectJ编译器)、加载时或者运行时执行。Spring AOP在运行时织入。

advice类型:

  • Before : 在接入点执行,一般不会阻止接入点的运行(除非抛出异常)
  • after returning: 在接入点正常终止时执行,例如在一个方法无任何异常返回后执行。
  • after throwing: 方法抛出异常时执行
  • after(finally): 不论接入点正常返回还是异常返回。
  • around:环绕一个接入点,如一个方法调用。最强大的advice。可以在方法调用之前和之后进行一些定制化行为。也可以控制是否执行接入点,或者干脆返回自己的结果,甚至抛出一个异常。本文即使用around advice实现在方法执行前开始秒表计时,在方法执行后关闭秒表,并统计方法运行时间。

 

@Retention 保留到哪个阶段

1.RetentionPolicy.SOURCE —— 这种类型的Annotations只在源代码级别保留,编译时就会被忽略
2.RetentionPolicy.CLASS —— 这种类型的Annotations编译时被保留,在class文件中存在,但JVM将会忽略
3.RetentionPolicy.RUNTIME —— 这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用.

@Target Annotation所修饰的对象范围

1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

 

注解、切面实现方法耗时统计

自定义注解:

耗时统计:

 

 

 

Phabricator Arcanist【code review环境】的搭建以及使用笔记

大概流程:先fork 项目到个人项目下。主项目作为upstream.   回头开发在自己的项目下开发,开发完后用下面教程提交进行,ph检查代码通过后可以上传代码然后 合并到upstream对应的分支。

  • arc 是Facebook的Phabricator系统中用户端的命令行工具,配合pha提交变更评审的。

windows下搭建教程:

注册ph账号

访问公司http://ph.xxx.com/,注册账号。

本地环境的搭建

参考http://blog.csdn.net/rilyu/article/details/37379873

其中GitPad下载地址失效,需要另找一个可用地址。

其中1-4步按照教程正常操作,关于第五步因为版本不一样,所以位置不一样,大概在300行左右,替换前一个后,对于this不知道怎么替换(可能是版本不一样引起的?)。因为项目用的是git,所以同事说教程中svn和diff相关的可以不用做(不清楚是否正确)。

注意第六步:

6、  配置Arcanist

  • 设置PhabricatorURI:arc set-config default http://phabricator_host/    //这个是自己的ph地址,不要弄错。
  • 安装证书:arc install-certificate    执行该命令后会有提示让访问一个url,然后在浏览器中访问该url,在cmd中输入id即可
  • 设置默认编辑器:arc set-config editor %AppData%\GitPad\Gitpad.exe,也可是使用其它支持阻塞模式的编辑器,如Notepad++、vim等
  • 配置.arcconfig

在项目代码根目录创建.arcconfig文件,内容例如:

,因为直接访问本地项目根目录有该文件,所以可以不用进行上述操作,另外上述project_id好像可以没有。

arc的使用

cmd模式下,在git工程所在的目录下进行命令行操作

例:将本地分支与dev分支做比对的操作

git add

git commit

arc diff origin/dev

如果弹出对话框,说明本地环境配置正确;

其中Test Plan以及Reviewers为必填参数,Test Plan 不可为空,默认填写为text即可,Reviewers为代码审核人员。

此时在http://ph.xxx.com/differential/就会出现本次的revision。命令行中也会出现本次revision的地址,Reviewers邮箱会收到相关的邮件提醒。

如上图证明提交成功。