<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[fyfhust的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/fyfhust</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; fyfhust]]></copyright><item><title><![CDATA[面向对象设计的五大原则]]></title><link>https://blog.youkuaiyun.com/fyfhust/article/details/49467539</link><guid>https://blog.youkuaiyun.com/fyfhust/article/details/49467539</guid><author>fyfhust</author><pubDate>Wed, 28 Oct 2015 13:29:14 +0800</pubDate><description><![CDATA[Bob大叔在《敏捷软件开发》一书中给出了面向对象设计的五大原则：SRP，OCP，LSP，ISP，DIP。今天我就粗浅的说一下我对这几个原则的理解，请大家批评指正。




1. SRP——单一职责原则




这个是我认为在五大原则中最最重要的原则了，因为符合了它其他的原则都可以很轻松的办到。

单一职责是说每一个对象都有且仅有一个关键抽象。凡是这个关键抽象能力之外的事都由]]></description><category></category></item><item><title><![CDATA[面向对象编程中如何描述对象之间的关系？]]></title><link>https://blog.youkuaiyun.com/fyfhust/article/details/49449073</link><guid>https://blog.youkuaiyun.com/fyfhust/article/details/49449073</guid><author>fyfhust</author><pubDate>Tue, 27 Oct 2015 15:35:12 +0800</pubDate><description><![CDATA[谈到面向对象编程中如何选择对象之间的关系，实在是一件令人头疼的事。




对象之间的关系大致有以下几种：

1. 继承关系

举个例子：Person是一个描述所有人的类，Student可以继承于Person，所有Person具有的公有方法Student都有，即任何使用Person对象的地方，都可以毫无顾忌的直接用Student代替。

这种关系是非常强的，有时候产生的问题会]]></description><category></category></item><item><title><![CDATA[memorization function decorator]]></title><link>https://blog.youkuaiyun.com/fyfhust/article/details/7874851</link><guid>https://blog.youkuaiyun.com/fyfhust/article/details/7874851</guid><author>fyfhust</author><pubDate>Thu, 16 Aug 2012 20:23:06 +0800</pubDate><description><![CDATA[From ActiveState Recipes. “Probably
 the fastest memoization decorator in the world”
Python code:


#coding:utf-8

from time import time

def memofunc(f):
    """ Memoization decorator for a func]]></description><category></category></item><item><title><![CDATA[Linux内核态设置某片虚拟地址为只读的方法]]></title><link>https://blog.youkuaiyun.com/fyfhust/article/details/5896239</link><guid>https://blog.youkuaiyun.com/fyfhust/article/details/5896239</guid><author>fyfhust</author><pubDate>Mon, 20 Sep 2010 10:20:00 +0800</pubDate><description><![CDATA[下面这段代码主要用在虚拟地址映射比较固定的情况。该代码的作用主要是便于调试“内存被别的代码踩”，把这段被怀疑的内存设置为只读后，如果有别的程序写到该区域就会打印出Stack，很容易找出是谁踩了你的内存了，呵呵。。。int mmap_SetAddrRDONLY (unsigned long virt_addr, unsigned long size /* KB */){    int i;    pte_t *p_pte;    uint32 level;    int ret = RT_OK;    ASS]]></description><category></category></item><item><title><![CDATA[系统初始化函数集(subsys_initcall)和初始化段应用]]></title><link>https://blog.youkuaiyun.com/fyfhust/article/details/5800844</link><guid>https://blog.youkuaiyun.com/fyfhust/article/details/5800844</guid><author>fyfhust</author><pubDate>Tue, 10 Aug 2010 11:21:00 +0800</pubDate><description><![CDATA[<br />前言：前段时间做一个项目需要设计一个动态库，并希望在加载库的同时自动执行一些初始化动作，于是联想到了linux内核众子系统的初始化，于是研究之，并在过这程中发现了初始化段的存在，利用初始化段实现了该功能。工作一年，笔记积累多了，慢慢变得杂乱无章，于是开博，一方面整理笔记，梳理知识，另一方面和大家交流，共同进步。<br />keyword：subsys_initcall, init, init_call1 系统初始化调用函数集分析(静态)<br />1.1 函数定义<br /> 在linux内核代]]></description><category></category></item><item><title><![CDATA[[zz]asmlinkage & regparm]]></title><link>https://blog.youkuaiyun.com/fyfhust/article/details/5793529</link><guid>https://blog.youkuaiyun.com/fyfhust/article/details/5793529</guid><author>fyfhust</author><pubDate>Fri, 06 Aug 2010 16:00:00 +0800</pubDate><description><![CDATA[<br /><br />发信人: feiy (积极、乐观、率性、自信), 信区: KernelTech<br />标  题: asmlinkage 其他 regparm attribute函数的gcc汇编浅析<br />发信站: BBS 水木清华站 (Mon Apr 26 02:56:12 2004), 转信<br />[asmlinkage 其他 regparm attribute函数的gcc汇编浅析]<br />asmlinkage是一类特殊的regparm attribute函数：<br />#def]]></description><category></category></item><item><title><![CDATA[gcc中设置特定代码块的优化级别]]></title><link>https://blog.youkuaiyun.com/fyfhust/article/details/5793482</link><guid>https://blog.youkuaiyun.com/fyfhust/article/details/5793482</guid><author>fyfhust</author><pubDate>Fri, 06 Aug 2010 15:50:00 +0800</pubDate><description><![CDATA[<br /><br />今天碰到一个gcc优化相关的问题，为了让一个页变成脏页（页表中dirty位被置上），需要执行下面这段代码：1uint32_t *page;2// ...3page[0] = page[0];<br />最后一行代码很有可能被gcc优化掉，因为这段代码看起来没有任何实际的作用。那么如何防止gcc对这段代码做优化呢？<br />设置gcc编译时优化级别为-O0肯定是不合适的，这样对程序性能影响会比较大。stackoverflow上的Dietrich Epp给出了一个强制类型转换的方案：1]]></description><category></category></item><item><title><![CDATA[vmware linux kernel driver config]]></title><link>https://blog.youkuaiyun.com/fyfhust/article/details/5793430</link><guid>https://blog.youkuaiyun.com/fyfhust/article/details/5793430</guid><author>fyfhust</author><pubDate>Fri, 06 Aug 2010 15:28:00 +0800</pubDate><description><![CDATA[基于linux_2.6.33内核$make defconfig$make menuconfig选择下面几项：Device Drivers
	SCSI device support  --->
		   SCSI disk support
		   SCSI generic support
		SCSI low-level drivers  --->
			[*] LSI Logic New Generation RAID Device Drivers
	 Serial ATA and Paral]]></description><category></category></item><item><title><![CDATA[LSI SAS 6G+SATA盘的问题]]></title><link>https://blog.youkuaiyun.com/fyfhust/article/details/5788742</link><guid>https://blog.youkuaiyun.com/fyfhust/article/details/5788742</guid><author>fyfhust</author><pubDate>Wed, 04 Aug 2010 18:17:00 +0800</pubDate><description><![CDATA[最近在做的磁盘稳定性工作中有个问题：LSI SAS 6G的卡接插SATA盘的JBOD，用dd测试读写磁盘，一段时间后出现有些命令被abort，而用SAS盘就没有这个问题，很奇怪。]]></description><category></category></item><item><title><![CDATA[GRE经验贴]]></title><link>https://blog.youkuaiyun.com/fyfhust/article/details/5768644</link><guid>https://blog.youkuaiyun.com/fyfhust/article/details/5768644</guid><author>fyfhust</author><pubDate>Tue, 27 Jul 2010 13:07:00 +0800</pubDate><description><![CDATA[发信人: zczczcle (酒肉穿肠过), 信区: EnglishTest
标  题: GRE经验v1.1
发信站: 武汉白云黄鹤站 (2010年07月25日18:02:30 星期天)

说明：此文由北大一牛人完成，他是我老朋友了，邀我修改，我索性也一吐为快，做了个
补充，附在后面。如有不当之处，请多包含，毕竟经验有限。

================分割线就分割线，为什么有人就是喜欢在中间写些字呢==============
==


出分了。一直也想着写点什么来纪念一下这个学]]></description><category></category></item><item><title><![CDATA[关于Linux2.6中断的一些记录]]></title><link>https://blog.youkuaiyun.com/fyfhust/article/details/5766894</link><guid>https://blog.youkuaiyun.com/fyfhust/article/details/5766894</guid><author>fyfhust</author><pubDate>Mon, 26 Jul 2010 17:07:00 +0800</pubDate><description><![CDATA[<br />1. 中断向量和中断号（中断线）<br />中断向量是从cpu角度规定的中断信号划分；中断号是PIC引脚号<br />2. 几种异常<br />故障，陷阱，中止<br />3. 中断描述符表IDT<br />异常与中断发生时，都需要到IDT中查找相关信息，以找到对应的处理程序以及其他动作。需要注意的是，保护模式下发生权限提升时，中断穿越的是中断门，而异常穿越的是陷阱门。二者的区别是：当CPU穿越中断门时，是自动关中断的（清除eflags里的IF标志位[cli]，在进入do_IRQ函数后会打开中断]]></description><category></category></item><item><title><![CDATA[makefile里PHONY的相关介绍]]></title><link>https://blog.youkuaiyun.com/fyfhust/article/details/4463420</link><guid>https://blog.youkuaiyun.com/fyfhust/article/details/4463420</guid><author>fyfhust</author><pubDate>Wed, 19 Aug 2009 16:08:00 +0800</pubDate><description><![CDATA[Phony TargetsPHONY 目标并非实际的文件名：只是在显式请求时执行命令的名字。有两种理由需要使用PHONY 目标：避免和同名文件冲突，改善性能。如果编写一个规则，并不产生目标文件，则其命令在每次make 该目标时都执行。例如：　　clean:　　rm *.o temp因为"rm"命令并不产生"clean"文件，则每次执行"make clean"的时候，该命令都会执行。如果目录]]></description><category></category></item></channel></rss>