自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(47)
  • 资源 (2)
  • 收藏
  • 关注

原创 pthread_cond_t解决生产者-消费者问题

1.   pthread条件变量使用范式        pthread_cond_t在解决同步问题时非常有用,但是由于线程同步问题的复杂性,pthread_cont_t的使用也有一定技巧。1.1. 模型1        在多线程竞争临界资源时,用pthread_cond_wait和pthread_cond_signal机制。典型做法是,在使用资源的线程里,判断资源是否可用;如果不可用,

2013-02-06 20:54:44 549

原创 要看的书

解析极限编程——拥抱变化单元测试之道C#版——使用Nunit测试驱动开发

2012-05-30 17:58:27 79

原创 设计模式解析笔记—为什么需要工厂

为什么需要工厂? 有两大原因:一是将创建者和使用者解耦,二是提高内聚度。  概念上相似的对象从使用的视角来看,可以以同样的方式处理。然而,创建对象时,负责创建的实体通常需要了解创建的是哪个具体对象,以及何时创建这个而非那个对象。OO告诉我们,让客户对象在概念层次上使用其他对象是最有用的,这意味着设计要遵循开闭原则、依赖倒置原则和Liskov替换原则。要实现这些原则,客户对象就不应知道它

2012-05-30 13:27:39 765 3

原创 设计模式解析笔记—Double-Checked Locking Pattern

引入问题 Singleton模式已经很熟悉了,但是以前一直没有注意到singleton的一个严重问题:在多线程环境下,singleton可能不再single。具体来说,在singleton模式中,假设对getInstance的两个调用几乎同时发生,可能会出现如下情况:1、线程一检查实例变量是否为null。发现实例还未创建,于是执行创建实例的代码部分。2、在线程一的实例化代码执行完毕

2012-05-29 16:48:35 320

原创 设计模式解析笔记—Object Pool Pattern

有时,我们需要创建大量占用一定资源(不仅是内存)的对象,这些对象的创建过程一般比较耗时(因为创建过程也就是资源申请过程)。为了提高效率,最好是预先申请一定数量的这类对象,需要时分配出去,用完后也不释放,留着重用。“设计模式解析”中,对这种方法进行了系统阐述,并归纳为对象池模式(Object Pool Pattern)。对象池模式已经得到了广泛运用,最多的莫过于线程池、数据库连接池和tcp连接池了,

2012-05-29 15:05:16 364

原创 多个特性不同时如何设计继承体系结构

问题    用面向对象的方法建模描述一个小型的动物世界。这个缩微的动物世界中,有下列成员:老鹰,会飞翔的肉食动物;狮子,行走的肉食动物;麻雀,会飞的草食动物;牛,会走的草食动物。要求    建立可以统一描述所有动物的模型,使得用户使用该模型时可以忽略动物的具体类型。方案一    飞翔、行走、吃草、吃肉都是动物的能力或者行为,而行为可以用接口来描述。于是非常strai

2012-05-10 22:42:05 2960 8

原创 设计模式解析笔记-OO传统观念拓展

关于对象 传统观点:    数据和方法的集合。这是从对象实现的角度来看,层次比较低,不应该在分析设计阶段应用。新观点:    对象是具有责任的实体。这是从概念角度来看,层次较高,它让我们关注对象“做什么”,而不是“怎么做”,避免过早操心实现细节,从而增强软件结构的灵活性。适合在分析设计阶段使用。关于封装 传统观点:    数据隐藏。 新观

2012-05-09 17:12:45 461

转载 java异常机制和异常处理原则

本文从Java异常最基本的概念、语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Spring的异常处理框 架,阐述了异常处理的基本原则。并且作者提出了自己处理一个大型应用系统异常的思想,并通过设计一个异常处理的框架来论述此思想。一、 异常的概念和Java异常体系结构异常是程序运行过程中出现的错误。本文主要讲授的是Java语言的异常处理。Java语言的异常处

2012-04-20 13:09:07 475

转载 Best Practices for Exception Handling

http://onjava.com/pub/a/onjava/2003/11/19/exceptions.htmlOne of the problems with exception handling is knowing when and how to use it. In this article, I will cover some of the best practices for

2012-04-19 22:37:02 212

原创 犯过的CS架构设计错误

CS是一种经典的架构模式。目前也已经做过一些CS的项目了,但是最近才发现之前在完成气象水文数据库项目时,犯下了设计上的大错误。气象水文数据库描述如下:1、从卫星收下来的气象水文数据保存到数据库中。2、客户端通过访问数据库可以浏览、修改、搜索气象水文数据。功能比较简单,也很明确。具体实现上,我采取了如下思路:1、在服务器上安装oracle数据库。2

2012-04-19 22:33:18 554

原创 webservice入门疑惑

作为一个webservice的newbie,我有很多疑惑。因为毕竟当我把惯常的那套OO思路搬到webservice时,发现有点使不上劲。没有多少资料,在网上胡搜了半天,发现大家的解释是这样的:websevice是stateless的。有以下基本观点:1、webservice类是无状态的。无状态就意味着类中的数据成员不起作用。为什么不起作用可以从第二点得到解释。2、每当客户端

2012-04-08 11:34:19 252

原创 设计模式解析笔记 - OO核心概念

虽说是笔记,但是我添油加醋地放了很多自己的理解进去。按惯例,讲OO之前都要把面向过程批判一番。就像讲面向过程之前都一定要把goto批判一番一样。面向过程反应了人们对问题的自然思考方式,也就是第一步怎么做,第二步怎么做......像我这样从Basic、Pascal、C一路走来的古董人物,从一开始接触编程就接受的是结构化设计、功能分解、自顶向下这些面向过程的基本方法

2012-03-25 23:52:34 607

原创 保护界面设计

基类保护界面是指基类通过protected开放给派生类的方法和属性。程序设计中,经常将希望对派生类可见,而对外部不可见的部分放到保护界面中。 在《C++程序设计语言》中,明确指出“不要声明protected数据成员”。Protected成员对外部不可见,说明不是类接口的一部分。但是对派生类可见,说明其真实用意是为派生类实现对外接口(即public成员)提供支持,比如派生类可以调用基类p

2012-03-23 14:13:13 344

原创 不是抽象类的基类不是好基类

开宗明义:不是抽象类的基类不是好基类。为什么这么说? 基类和派生类的关系有如下几种:基类可以是具体类、虚类和抽象类三种,对派生类没有要求。其中具体类是没有虚函数的类,其所有方法都提供了具体实现;派生类方法如果和基类方法同名,则派生类方法隐藏(overwrite)了基类方法。虚类是包含虚函数的类,所有方法都提供具体实现;派生类如果要提供不同于基类虚方法的实现,则在派生类中提供同名

2012-03-23 13:01:59 988 2

转载 虚析构函数、纯虚析构函数、虚构造函数

一. 虚析构函数我们知道,为了能够正确的调用对象的析构函数,一般要求具有层次结构的顶级类定义其析构函数为虚函数。因为在delete一个抽象类指针时候,必须要通过虚函数找到真正的析构函数。如:class Base{public:   Base(){}   virtual ~Base(){}};class Derived: public Base

2012-03-22 17:24:15 215

原创 C++和C#语言对比

将不同语言进行对别是个有趣的话题,语言之前的区别不仅在语法上,其实还牵扯到背后设计思路的不同。学习语言第一步是学习其语法,第二步是学习相关库的使用,第三步是学习如何正确地使用该语言,扬长避短。我在C++上用功多年,后来由于工作需要开始开发.net应用程序。自从上手C#之后,的确觉得C#是windows上开发应用程序的不二选择,可以说是好用极了。用C#写程序,基本不会在语言级别上遇到一些

2012-03-22 15:47:39 330

原创 C++和C#语言对比 - 对象定义、构造和赋值

下面的代码在C++和C#中都是符合语法且常见的,但是执行过程和结果却是大相径庭。Class T{ ……}void foo(){ T t1 = new T(); T t2; t2 = t1; T t3 = t1; ......}C#对象只能在堆上构造,必须使用new关键字。C++对象可以在栈上构造,也可

2012-03-22 14:56:10 354

原创 隐蔽的内存泄漏

凡是由用户自己管理内存申请和注销的语言都难以避免内存泄漏的问题,这也是C/C++存在的主要问题之一。内存泄漏对于需要长期运行的程序来说有着严重的影响。为避免内存泄漏,从道理来说很简单,就是通过new得到的内存一定要记得delete。问题在于,我们可能陷入纷繁复杂的代码而忘记了还曾经new过,或者当我们想要delete时,已经失去了那片曾经拽在手里的“引用”了。C++中一个隐蔽的内存泄漏例子

2012-03-22 12:11:10 327

原创 C++中对象成员的内存布局

太长时间没有用C++了,尽管我在它身上花费了太多的时间和精力,但是在我的实践中,却是以C#和Java为主。最近因为要写机顶盒程序,终于又捡起了多年前的宝贝。但是有的知识已经模糊了,或者有些混淆了。比如对象成员的内存布局。在C#中,任何对对象的引用都是地址。而在C++中,通过对象名的引用代表的是该对象的整个内存空间。举例如下:在C#中定义类Tclass T{

2012-03-15 16:26:23 288

原创 网上DSP和电路PCB资源

DSP类:www.hellodsp.com电子综合类:http://bbs.eetzone.com/index.phpedn21ICPCB类:http://bbspcb.ttsite.net/index.php

2008-10-23 23:50:00 303

原创 u-boot的修改

汤大虾对u-boot的修改,用处是把flash上的ramdisk搬运到ram中。因为kernel不能从flash上加载ramdisk形式的根文件系统,所以必须在寻找根文件系统时先将ramdisk搬到ram。在u-boot 1.1.3中lib_arm/armlinux.c中,220行附近。#ifdef  DEBUG        if (!data) {                printf

2007-06-17 22:07:00 611

转载 台湾清华大学学务长的一席话

 发信人: kuux (KUUX), 信区: DP标 题: 台湾省清华大学学务长的一席话发信站: BBS 水木清华站 (Wed Nov 26 10:21:29 2003), 转信清华大学学务长的一席话: 给对选课跟人生不确定的同学 (zz)你不要问我你未来的20年会怎样.没人能告诉你.有人是因为别人跟他说怎么活才活下来的吗我当年清华书读的不好.玩玩的不好.又没女友..大3学分一个也没拿到.你

2007-03-08 10:32:00 1212

转载 Debian硬盘安装方法

网上看到从硬盘的iso文件安装linux的方法,觉得对于没有光驱的笔记本挺有用,也可以省去刻光盘。方法如下:一台联想C750笔记本准备退役了,Windows XP速度极慢,光驱也坏了,于是想让其发挥余热,装一个Linux继续用着,本想装Redhat Enterprise AS4,无奈显卡兼容性太差,图型安装界面显示不正常,于是改为文本模式安装的Debian 3.1。安装准备:由于光驱基

2007-01-21 12:33:00 2385

转载 C/C+语言struct深层探索

 C/C+语言struct深层探索作者:宋宝华       出处:PConline1. struct的巨大作用   面对一个人的大型C/C++程序时,只看其对struct的使用情况我们就可以对其编写者的编程经验进行评估。因为一个大型的C/C++程序,势必要涉 及一些(甚至大量)进行数据组合的结构体,这些结构体可以将原本意义属于一个整体的数据组合在一起。从某种程度上来说,会不会用stru

2006-10-10 21:19:00 744

转载 关于ASSERT(断言)使用的规则--摘自《高质量C/C++编程指南》

 摘自《高质量C/C++编程指南》Page 41-42...程序一般分为Debug 版本和Release 版本,Debug 版本用于内部调试,Release 版本发行给用户使用。断言assert 是仅在Debug 版本起作用的宏,它用于检查“不应该”发生的情况。示例6-5 是一个内存复制函数。在运行过程中,如果assert 的参数为假,那么程序就会中止(一般地还会出现提示对话,说明在什么地

2006-10-10 21:04:00 1216

原创 GDB internal tips

 1/lex/yacc in gdb用bison或者byacc生成的代码可以在gdb中调试,但是原始的yacc代码可能有问题。在gdb的源码目录中,已经存在了一些yacc parser。比如源码目录下的几个,y文件,这些都是相应于某种语言的 yacc parser。同时也有一个独立的针对ada的lexer,ada-lex.l。可以查看Makefile和language.c、language.h得到

2006-10-10 18:37:00 804

转载 gdb使用详解

gdb使用详解--邹思轶(syzou),西南交通大学在读研究生整理提供概论  我们将学习使用gdb来调试通过一个通过串行线同PC相连的嵌入式系统。  Gdb可以调试各种程序,包括C、C++、JAVA、PASCAL、FORAN和一些其它的语言。包括GNU所支持的所有微处理器的汇编语言。  在gdb的所有可圈可点的特性中,有一

2006-09-07 20:19:00 1381

原创 linux raid资源

1、真正的rlinux aid新闻组,一直都在活跃中所有的linxu新闻组都在vger.kernel.org上面,如果要订阅raid方面的邮件,只需要发信件到[email protected],邮件内容是 subscribe linux-raid。2、raid现在的正式维护者是Neil Brown,他的老巢是http://neil.brown.name/blog/他

2006-06-06 09:12:00 988

转载 学位让你沦落:有史以来最狂妄的演讲

演讲人 Larry. Ellison是Oracle的CEO。 Larry. Ellison 在耶鲁大学2000届毕业典礼上发表了以下世人看来最为狂妄、不受欢迎但又是现实真实状况的演讲。 耶鲁的毕业生们,我很抱歉——如果你们不喜欢这样的开场。我想请你们为我做一件事。请你---好好看一看周围,看一看站在你左边的同学,看一看站在你右边的同学。   请你设想这样的情况:从现在起5年之后,10年之后,或

2006-06-05 20:38:00 903

原创 linux下如何安装vmware

在windows下面安装vmware是个傻瓜动作,但是在linux下安装vmware还是有些小的tricky的。所以才有了这点笔记,免得以后忘了。连装个软件都这么麻烦,可见linux在易用性上的确还有很多路要走。1、执行过程中会使用当前内核头文件。而在FC5中默认是没有安装内核文件的。使用uname -r取得内核版本号是2.6.15-1.2054_FC5。然后到网上去下载相应的内核头文件。一般可以

2006-06-05 15:11:00 4048 1

原创 FC5上中文字体显示的设置

装好FC5后,发现它的中文显示有时候不是很好。比如在访问fat32分区的中文文件时,用locale查看原来系统设置的编码是gb18030。解决的办法是将其设置为utf8。方法如下:修改/etc/sysconfig/i18n文件为如下内容:LANG="zh_CN.UTF-8"SYSFONT="none"重新启动后,系统的中文字体显示就非常漂亮。下面是kde下面的抓图。

2006-06-05 14:49:00 918

原创 shell 学习 ----find和xargs命令

一、find命令的使用find命令的格式是find path -options  [-print -exec -ok]-print  将匹配的文件名输出到标准输出-exec 对匹配的文件执行该参数所给的shell命令。其格式 为command {} /; 。-ok exec参数的安全模式,在执行每个命令之前都会提示用户是否执行1、find命令的选项有-name    按文件名查找    find 

2006-05-31 08:39:00 1664

原创 shell 学习 ----文件的安全和权限

1、用ll -l观察某个文件的详细信息的时候,文件权限位的可能情况是drwxrw-r--,其中第一位是表示文件类型。文件类型共有7种:d directoryl soft linkages socket fileb block device filec char device filep name pipe file- ordinary file2、chmod命令的两种格式:符号模式和绝对模式(1)

2006-05-31 08:36:00 769

转载 软件工程搞笑图

2006-03-23 19:09:00 939

转载 改变你一生的五句话

第一句话是:优秀是一种习惯。  这句话是古希腊哲学家亚里士多德说的。如果说优秀是一种习惯,那么懒惰也是一种习惯。人出生的时候,除了脾气会因为天性而有所不同,其他的东西基本都是后天形成的,是家庭影响和教育的结果。所以,我们的一言一行都是日积月累养成的习惯。我们有的人形成了很好的习惯,有的人形成了很坏的习惯。所以我们从现在起就要把优秀变成一种习惯,使我们的优秀行为习以为常,变成我们的第二天性。让我们习

2006-03-23 18:59:00 699

原创 Sams Teach Yourself Emacs in 24 Hours学习笔记之二

Emacs基本概念在学习Emacs之前,必须要明白一些Emacs的基本概念,因为:    1、Emacs不同于其他的editor或者word processor。如果意识不到这一点,就会发现Emacs很难理解和学习。但其实,Emacs不是很难,只是非常特别而已。    2、当你理解了Emacs的基本概念之后,就很容易理解它的其余部分了。屏幕布局<v:shapetype id="

2006-03-11 22:44:00 2073

原创 emacs下的代码阅读利器ecb + cscope

一直习惯并且依赖于source insight来读代码,总想能在linux下面也有这样一个很好的代码阅读软件,好让自己把工作都基本上转移到linux上来。         现在有了个好东西,就是ecb + cscope。         下面是如何为emacs安装ecb和cscope的笔记和截图。先来个截图爽一下吧。<v:shapetype id="_x0000_t75"coordsize

2006-03-11 21:54:00 7181

原创 Sams Teach Yourself Emacs in 24 Hours学习笔记之一

 刚刚读完了emacs tutorial的中文版,把基本的emacs命令都练习了一遍。听说《Sams Teach Yourself Emacs in 24 Hours》这本书不错,于是决定从这本书开始系统地学习emacs的使用。读manual毕竟不是教程,manual是给会的人查阅的,而我这种beginner还是看教程step by step学习比较好。     先说说自己对emacs的看法,

2006-03-11 12:52:00 4696

翻译 LET'S BUILD A COMPILER!(4)

                                   LETS BUILD A COMPILER                                                       By                                       Jack W. Crenshaw, Ph.D.                

2004-05-17 22:54:00 1104 2

翻译 LET'S BUILD A COMPILER!(5)

LETS BUILD A COMPILER!(4)---第三部分:再论表达式续空白字符结束本章之前,我们再来讨论一下空白字符的问题。现在这个版本的分析器会在读到一个空白字符的地方停下来。这是相当不友好的行为。所以让我们消除这个最后的限制,使分析器的表现更有商业产品的味道。处理空白字符的关键在于制定一条规则,规定分析器改如何处理对待输入的空白字符,并在整个分析器中都遵守它。目前为止,空

2004-05-17 22:54:00 932

avr单片机使用时钟芯片DS1302详解

avr单片机使用时钟芯片DS1302详解

2010-12-28

Allegro焊盘和封装制作

Allegro焊盘和封装制作详细教程 Allegro焊盘和封装制作详细教程

2010-07-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除