编译器前端回顾(上)

在设计编译器的前端时,程序驱动的主干是字符串的匹配,所回答的基本问题是输入文本是否能够匹配预定义规则,因而返回值是是或否。对于回答是的情况,说明输入文本落在了预定义规则划分的范围内。可当规则的描述具有一定规模、较为复杂的时候,又需要知道具体匹配到了哪些规则,这时才会涉及到翻译的问题,常称作语法制导翻译,原因是输入文本的匹配以及翻译前后的字符串的表示问题都围绕语法规则来展开。对于回答否的情况,说明输 … 继续阅读

Writing Practice

UNIT 1BELLJessica woke up with a start: she saw Jimmy captured in a rebellion and tortured to death in the dream. She could not help crying and blamed herself for not persuading her bellicose fiancé out of this dispute. She really hope they could return to the antebellum way of life, not this society full of belligerence.September 09, 2017PAC/PEASH … 继续阅读

How to Write Unit Tests

This is not an article that guides you to setup a concrete unit test example. It is about discussing the basic principles, including the motivation of writing unit tests, the concepts from popular unit testing frameworks, and the thinking on what ideal unit tests look like. It will give beginners a good foundation on learning and writing unit tests … 继续阅读

三角形周长

有\(n\)根棍子,棍子\(i\)的长度为\(a_i\)。想要从中选出3根棍子组成周长尽可能长的三角形。请输出最大周长的三根棍子,若无法组成三角形则输出空字符串。限制条件\(3\le n\le 100\)\(1\le a_i\le 10^6\)例如,输入:2,3,4,5,10输出:3,4,5输入:4,5,10,20输出:[空行]众所周知,满足三角形的条件为任意两边之和大于第三边,略微一想,等价于两 … 继续阅读

公开密钥加密在SSH远程登录中的应用

一直以来,都在享受着SSH免密码登录的远端服务器的好处,但总觉得对背后的逻辑不是太清楚,或者说,根本没有细想过,因为网上充斥了大量的,如何做,却不告诉为什么,下一次再去做的时候,又费半天功夫,所以有必要熟悉完整的流程。近来有了“深入理解加密、解密、数字签名和数字证书”这篇文章做底子,SSH免密码登录背后的逻辑也容易理解很多。SSH协议的设计初衷是为rsh、rlogin、rcp等命令提供更佳安全的实 … 继续阅读

数字签名在安卓包发布中的应用

安卓包发布前必须要有正式签名才能在应用商店发布,对照公开密钥基础设施的常规流程而言,安卓包签名仅是个子集,只有数字签名,不涉及加密。数字签名中核心的要素是私有密钥、公钥证书、原始摘要和签名摘要。涉及的参与者有应用开发者、应用商店和用户(操作系统)。逐一了解了每个核心要素和参与者也就清楚了整个签名的动机和操作步骤。数字签名是拿私有密钥对原始摘要(不管是文件还是对称密钥本质上都是字符串)进行加密,利用 … 继续阅读

公开密钥基础设施图解

很久以来,一直搞不清楚各种加密算法、哈希函数的应用场景,直到读了“深入理解加密、解密、数字签名和数字证书”这篇博文后,一切概念立刻变得明朗起来,于是赶快画了一张图捋清了思路,方便自己和看到这篇文章的朋友回顾。因为原文作者写得足够精彩,逻辑性很强,所以在此只简略叙述图中所画内容。 A要通过网络将文件(Original File)发送给B,为了能让B安全收到,避免传输过程中被截获、窃听或伪造 … 继续阅读

初识log4j

log4j有三个主要的概念:记录员loggers、录入笔appenders和录入风格layouts。记录员是分级别、继承式的。每个记录员有三个基本特征:1. 名称的继承除总记录员之外的所有记录员都要有名称。名称往往是全路径类名,例如com.foo.Bar。名称的继承是指记录员之间有继承关系,com.foo是com.foo.Bar的父亲,com是com.foo.Bar的爷爷。每个记录员的名称唯一,并 … 继续阅读

WordPress的插件机制

WordPress的插件机制展现了强大扩展能力,它将用户模板定制、插件开发等从核心处理流程中剥离,也让开发者在核心之外有机会修改核心处理流程中的任何一个环节。基本概念WordPress插件机制的核心是钩子(Hooks),每一次处理请求都会顺序执行一系列的钩子,每个钩子由唯一的标签(Tag)标识,每个钩子上能够注册数量不限的函数,在钩子执行中,函数按照注册时的优先级先后依次执行,每个钩子可以重复被执 … 继续阅读

CSS实现垂直居中

在常规的网页中,宽一般有最大限制,而高没有,因而CSS规范并没有给出块级元素和多行文字垂直居中,建议性的实现方案。换句话说,但凡有垂直居中的要求,必然是设计者对包含块的高做了固定限制。默认的CSS块级元素的高由内容决定,通常内容有多少,高度就会算多少。固定了高意味着设计者必须确认内容的高度不会超过限制,否则会产生不合预期的结果。众所周知,限制高仅需要指定height样式属性即可。确认内容高度需要了 … 继续阅读