Git 内幕

基础

对待数据的方式

几乎所有版本控制工具都是记录与初始文件的差异,而 Git 是记录快照,每次提交更新时,就是当前工作目录下的所有文件的完整数据,而不是差异,当然如果提交时,文件没有被修改,不再重新存储该文件,而是指向上次存储的文件。

假设提交了5次,对于工作目录的文件A,在第三和第五次提交时有修改

1
2
3
4
# 其他版本控制
A (v1) -------------->1 (v3) --------------->2 (v5)
# Git
A (v1) ---> A (v2) ---> A1 (v3) ---> A1 (v4) ---> A2 (v5)

Read More

Hexo日历插件

如果你在使用 Hexo 并且你在寻找一款 Hexo 下可用的日历插件,你还希望这款日历插件能像博客园或者WordPress的日历小工具一样,如果某天有文章,日期就会显示为文章链接,那么本文介绍的这个插件就是你所需要的。

实际上之前在 Landscape-F 主题中已经实现过一个日历插件(hexo-calendar)了,只不过当时这个插件很挫,打开一篇文章时,日历中才能显示文章链接,而且只能显示文章发表当月的文章的链接,你要查看其他月的日历时,就算有文章也不会在日历中显示,因为当时的做法是在生成页面直接在页面的日历中嵌入文章当月所有文章的链接,是完全静态的。现在我重新实现了日历插件(hexo-generator-calendar),很简单,就是在Hexo generator的时候,把所有文章的标题、链接、发布时间信息以json格式存入文件中,然后在前端用ajax方法请求日历数据,解析并生成日历表格。下面简单介绍下这个插件的安装和使用。

Read More

AES加密时报java.security.InvalidKeyException Illegal key size

Contents

使用 AES 加密时,密钥大于128bit的话会抛出java.security.InvalidKeyException异常。因为密钥长度是受限的,根据网上一些博客中说的,这种限制是因为美国对软件出口的控制。解决办法很简单,下载对应版本的jce包,解压并覆盖 ${JAVA_HOME}/jre/lib/security/ 下的同名文件即可。

Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6

Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 7 Download

Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 Download

JavaScript 面向对象程序设计、函数表达式和异步编程

JavaScript 基本语法JavaScript 引用类型JavaScript 面向对象程序设计、函数表达式和异步编程三篇笔记是对《JavaScript 高级程序设计》和 《ECMAScript 6入门》两本书的总结整理。

面向对象程序设计

ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或者函数。”严格来讲,这就相当于说对象是一组没有特定顺序的值。对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。正因为这样(以及其他将要讨论的原因),我们可以把ECMAScript的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数

Read More

JavaScript 引用类型

JavaScript 基本语法JavaScript 引用类型JavaScript 面向对象程序设计、函数表达式和异步编程三篇笔记是对《JavaScript 高级程序设计》和 《ECMAScript 6入门》两本书的总结整理。

引用类型

引用类型是一种数据结构,用于将数据和功能组织在一起。它也常被称为类,但这种称呼并不妥当。尽管 ECMAScript从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构。引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。

Read More

JavaScript 基本语法

JavaScript 基本语法JavaScript 引用类型JavaScript 面向对象程序设计、函数表达式和异步编程三篇笔记是对《JavaScript 高级程序设计》和 《ECMAScript 6入门》两本书的总结整理。

简介

一个完整的JavaScript实现应该由三个不同的部分组成:核心(ECMAScript)、文档对象模型(DOM)、浏览器对象模型(BOM)

JavaScript实现了ECMAScript,Adobe ActionScript同样也实现了ECMAScript。

Read More

逻辑删除

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

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