Linux、C、PHP、WEB架构底层服务开发

我目前使用redis的方式

1.将redis的List用作队列,这个很轻量级,不用引入别的队列服务器,缺点是可能会丢失数据,因为其持久化方案是redis通用的aof或者rdb方式

2.将排好序的实体id放到LIST中,然后以prefix 实体id为key,用hashtable存储具体的实体信息

3.用ZSET存储排名和带有权重信息的一些实体id,缺点是内存占用太厉害了。
Continue reading “我目前使用redis的方式” »

作者 斯人 | 发布于 2014 年 4 月 24 日 | Tags Redis

A星寻路算法介绍

这篇blog是由iOS Tutorial Team的成员  Johann Fradj发表的,他目前是一位全职的资深iOS开发工程师。他

是Hot Apps Factory的创始人,该公司开发了App Cooker

学习A星寻路算法是如何工作的!

你是否在做一款游戏的时候想创造一些怪兽或者游戏主角,让它们移动到特定的位置,避开墙壁和障碍物呢?

如果是的话,请看这篇教程,我们会展示如何使用A星寻路算法来实现它!

在网上已经有很多篇关于A星寻路算法的文章,但是大部分都是提供给已经了解基本原理的高级开发者的。

本篇教程将从最基本的原理讲起。我们会一步步讲解A星寻路算法,幷配有很多图解和例子。

不管你使用的是什么编程语言或者操作平台,你会发现本篇教程很有帮助,因为它在非编程语言的层面上解释了算法的原理。稍后,会有一篇教程,展示如何在Cocos2D iPhone 游戏中实现A星算法。 Continue reading “A星寻路算法介绍” »

作者 斯人 | 发布于 2014 年 3 月 25 日 | Tags 算法

Redis 使用总结

数据持久化

快照

缺省情况情况下,Redis把数据快照存放在磁盘上的二进制文件中,文件名为dump.rdb。你可以配置Redis的持久化策略,例如数据集中每N秒钟有超过M次更新,就将数据写入磁盘;或者你可以手工调用命令SAVE或BGSAVE。
例子:要求如果每60秒有超过1000条记录被更新,就自动将数据写到磁盘上,可以用下面的命令

SAVE 60 1000

这种策略称为快照。
Continue reading “Redis 使用总结” »

作者 斯人 | 发布于 2014 年 3 月 25 日 | Tags Redis

BIOS 引导bootsect之后

前两篇模拟了BIOS启动bootloader的过程,本来这篇打算继续模拟bootloader接下来的功能:加载setup到

0x9020,setup将system移动到0x0000处(system是在bootsect中加载到0x1000的)。但是为什么要这么做?

Setup 和system文件到底是什么?先将这两个问题一探究竟,以免雾里看花。

先来描述一下linux0.11/boot/setup.s实现的功能主要有哪些。

Setup是一个操作系统加载程序,它先利用BIOS的中断读取硬件的各种数据保存到0x9000段内。注意,是否

还记得上一篇中讲过bootsect启动后会将自己移动到0x9000处继续执行,setup这一操作会覆盖掉之前

bootsect的数据,为什么?因为BIOS已经启动完毕,剩下的就是

bootloader的工作了,而bootsect也已经执行完成,bootsect在整个接下来的LINUX生命周期中将不会再有机会

执行,所以既然无用,那就重复利用这段内存吧。

刚才有说BIOS要读取硬件系统数据,主要的有哪些? Continue reading “BIOS 引导bootsect之后” »

作者 斯人 | 发布于 2014 年 2 月 28 日 | Tags BIOS 操作系统

用AT&T 汇编实现第二个bootloader

上一篇走出了第一步,写了第一个bootloader,本文将继续模拟linux bootloader第二部前面比较重要的部分,

把自己从内存0x07c0处移动到0x9000处,并从0x9000处继续执行。

那为什么要将自己移动到0x9000处呢?

Bootloader除了要加载setup模块,还要加载system模块,为了把这两个模块加载到适当的位置,就需要先规

划内存,用c或其他语言写程序的时候,我们通常都不用担心代码和数据在运行的时候存放在什么位置,

是否会相互覆盖,因为操作系统和编译器已经为我们做好了看护准备以确保不会出错,而现在我们做的是操

作系统,所有内存安排都需要设计者想清楚,确保无论操作系统如何运行,都不会出现 代码与代码,数据与

数据,代码与数据之间相互覆盖的情况。 Continue reading “用AT&T 汇编实现第二个bootloader” »

作者 斯人 | 发布于 2014 年 2 月 25 日 | Tags BIOS 操作系统

用AT&T 汇编实现 第一个bootloader

最近在学习LINUX操作系统,虽然一直在使用linux系统,但是 知其然知其所以然,而且也希望自己将来能够

转向LINUX操作系统开发的工作,今年年初就开始学习LINUX实现原理,我现在参照的源码是linux 0.11,教材

是 《LINUX内核的设计艺术》和《Linux内核完全注释》,两本书各有优缺点,我都是两本对照这一起看,当

然,评论这两本书也不是本文的内容,主题是通过AT&T汇编语言实现自己第一个bootloader程序。

这两本书阅读之后,感觉虽然讲的比较细,但是并没有完全掌握书里的内容,也没有完全理解,所以决定 模

仿 linux0.11源码 一步步重新实现Linux操作系统底层,希望能够加深理解。

那第一个当然是bootloader了,前面已经讲过BIOS启动原理,本文就只谈bootloader启动相关的内容。

我们都知道 BIOS通电后会从磁盘设备第一个扇区读取512字节的内容到0x0000:0x07c0处并跳转到这里执行,

而且第512KB的内容必须是0xAA55,这是规定,因为BIOS启动时没有办法动态指定要加载的Bootloader地

址,所以只能强制制约,要想用BIOS启动,那你的启动项就要放到第一个扇区中。
Continue reading “用AT&T 汇编实现 第一个bootloader” »

作者 斯人 | 发布于 2014 年 2 月 25 日 | Tags BIOS 操作系统

BIOS启动过程简述

CPU通电时,RAM是什么都没有的。计算机的操作系统只有先加载到RAM中才可以运行,那么是谁将操作系

统加载呢?答案是BIOS。但是又是谁去执行BIOS呢?答案是0xFFFF0,再加电的一瞬间,该系列所有的CPU

全部进入16bit的保护模式下运行,目的是保证兼容和解决最开始启动的问题。同时,CPU硬件逻辑设计为加

电瞬间强制将CS值设置为0Fx000,IP值设置为0xFFF0,这样CS:IP就指向0xFFFF0位置段。
这是一个纯硬件完成的过程,如果此时该位置无可执行代码,那么计算机就死机了。反之,计算机将从此处

开始执行代码,并沿着后续程序一直执行。而BIOS程序的入口恰恰就是0xFFFF0。 Continue reading “BIOS启动过程简述” »

作者 斯人 | 发布于 2014 年 1 月 23 日 | Tags BIOS LINUX 操作系统

HTML TAG CHECKER/HTML标签检测CHROME插件

HTML中如何快速检查漏掉的闭合标签?

在套页面的时候,经常会遇到 HTML不闭合或者 过早闭合等问题,

很多时间都浪费在 核对标签上,

于是乎就有了 这个 HTML标签检测插件,

它可以很方便的帮你查找HTML标签中的闭合问题,

这个插件原作者不是我,是一个日本人,我之前一直在用,挺好用的,

但是 CHROME 升级到20X之后,这个插件就不能用了,很多特性,20x之后的版本不支持,

大半年了,作者也没有要升级的意思,chrome商店里面也下掉了,不知为何,
Continue reading “HTML TAG CHECKER/HTML标签检测CHROME插件” »

作者 斯人 | 发布于 2014 年 1 月 3 日 | Tags Chrome HTML TAG

整数哈希介绍

为什么要整数哈希
 
Continue reading “整数哈希介绍” »

作者 斯人 | 发布于 2013 年 11 月 13 日 | Tags 算法

散列Hash算法[转]

哈稀函数按照定义可以实现一个伪随机数生成器(PRNG),从这个角度可以得到一个公认的结论:哈希函数之间性能的比较可以通过比较其在伪随机生成方面的比较来衡量。 Continue reading “散列Hash算法[转]” »

作者 斯人 | 发布于 2013 年 11 月 13 日 | Tags 算法