在Android Studio中使用Lambda表达式

Lambda表达式是Java 8中的一个重要新特性,使用Lambda表达式可以简化很多代码,比如常见的为一个按键添加点击事件Listener的代码:

1
2
3
4
5
6
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// do what you want...
}
});

其中有用的代码很有可能只有一行,其他部分其实都没有实际意义,只是语法需要,创建了一个匿名类而已。但是,如果使用Lambda表达式之后,上述代码就可以简化为:

1
2
3
btn.setOnClickListener(v -> {
// do what you want...
});

Java集合框架

Java中提供了丰富的容器类用于存储数据,这些容器类可分为两大类:Collection和Map,Collection用于保存单个元素,而Map则以键值对的形式进行存储,就像一个小型数据库一样。Collection中又可分为List、Set、Queue三类,其中List是列表,Set是集合,Queue是队列。整个Java集合框架的结构图如下:

最大公约数算法

两个(或更多个)整数的最大公约数(Greatest Common Divisor, GCD)是指能同时整除它们的最大正整数,求解最大公约数最常用的算法是辗转相除法(又称欧几里得算法)及Stein算法,至于直接穷举的暴力算法,因为过于低效,实际中是不会使用的。下面来总结下这两种方法。

C标准库学习笔记(1)——time、ctype、stdarg、assert

这一系列文章是对P.J. Plauger所著的《C标准库》(The Standard C Library)一书的学习笔记,此书是关于C标准库的经典著作,讲述了每一个库函数的使用方法和实现细节。C语言标准库是最顶尖程序员的智慧结晶,要深入理解其实现细节自然也是很困难的……这里记录一下阅读这本书的收获,跳过了其中不常用或太复杂的部分(stddef.hfloat.hlimits.herrno.hsetjmp.hsignal.hlocale.hmath.h)。

使用Python实现网站变化监测系统

很多时候我们都有监测某个网站变化的需求,比如是否发布新通知了,是否有新更新了等。之前使用过Chrome的几个插件来实现这个功能,不过用起来都觉得不是很方便,于是就想自己用Python写一个,之后将程序部署在服务器上即可实现24小时自动监测了。

用了几天时间写了个还算可以用的程序出来,可以实现以下功能:

  • 定时去检查网站的某页面(或某几个页面),获取此时发布的信息,并与数据库中的数据对比,如果检测到新发布的信息,则将其加入数据库中,并通过微信公众号进行自动发布;
  • 可以实现关键词过滤功能,检查发布信息标题及内容页是否有指定关键词,如果没有的话忽略此信息;
  • 实现了一个相对比较通用的程序架构,可以很方便的向其中添加新网站。

正则表达式总结

正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE)是一个字符串,此字符串用于描述、匹配一系列符合某个句法规则的字符串。

正则表达式引擎是一种可以处理正则表达式的软件。通常,引擎是更大的应用程序的一部分。在软件世界,不同的正则表达式引擎并不完全互相兼容
正则表达式引擎缺省是大小写敏感的。

此处总结下常用的正则表达式规则。

U-Boot 2016.05 Stage1代码分析

主流Bootloader的启动过程均可分为Stage1及Stage2两部分,一般来说,Stage1完成最基本的初始化操作、搬移代码及建立C语言运行环境;Stage2完成剩余的初始化操作。故Stage1一般使用汇编完成,Stage2一般使用C语言完成,不过这只是很粗略的情况,实际上Stage1中也会使用C语言代码。

下面以之前针对S3C2440移植好的U-Boot 2016.05为例,分析U-Boot中Stage1的代码。