存档

‘David Zhao’ 分类的存档

C++ Template Corner Cases

2009年7月10日 davidzhao 没有评论

各位读者,很抱歉这篇文章是英文的,我当初做笔记的时候,写成英文了,这样才可以在同事之间交流。而现在确实没时间翻译过来了,还望大家理解,谢谢!

Following are some corner cases of C++ template features. A lot of the text is simply extracted from “C++ Templates: The Complete Guide”, with some of my personal understanding. These features are trivial and easily neglected, but you should have some impression to them in case you run into troubles caused by the neglect.

I made my notes in English, and I don’t bother to translate them into Chinese, forgive my laziness. :)

0. use “typename” to extract type defined within a type parameter, like this: typename T::iterator itr; otherwise the ‘itr’ is treated as a data member of T.

1. zero initialization
When using a var x of type T, we MUST initialize it like this: T x = T(); so that when T is a primitive type, x can also be initialized with 0, or NULL (when T is a pointer type). Of course we must make sure
when T is a class type, it has a default constructor. Simply using T x; can’t initialize x when T is a primitive type. 阅读全文…

分类: David Zhao, 程序设计 标签:

Implement Interface Mechanism Using Templates

2009年4月13日 davidzhao 没有评论

Sorry the format is poor, I will update it later. Or please see the same article on my blog at baidu which has a better format: http://hi.baidu.com/dazhao_dbblog/blog/item/a1f49efcee4fba1e09244d06.html

C++ template is really a powerful gun in the entire C++ artillery. It is an important part of the defining components that make C++ so powerful, yet so difficult to learn. There are many ways you can make mistakes when using C++, or using C++ templates, just like using any other powerful man-made systems. But if you make everything right, you can gain incredible power, flexibility, efficiency, performance, extendability and so on – anything you dream of in the software engineering world. So it is definitely worthwhile to make the effort to learn C++ well.

In this article I’d like to talk about how to implement the superset of interface mechanism using templates in C++ by using C++ templates, you can do a lot better than ordinary interface mechanism. 阅读全文…

分类: Berkeley DB, David Zhao, 程序设计 标签:

Berkeley DB示例程序详解 (1)

2009年2月26日 davidzhao 9 条评论

本文通过分析Berkeley DB自带的示例程序来详细阐述了使用Berkeley Db基本功能的方法。这之后还将有更多这类文章,我认为通过学习好的例子和已有代码来学习使用berkeley db是很有效的。

阅读全文…

多读多写多实践—给初学编程者的建议

2009年1月12日 davidzhao 2 条评论

今天偶尔翻出了大一时候使用的谭浩强《C语言程序设计习题集和上机指导》,发现里面的代码格式真的不敢恭维。原来我们就是看着这些书本来学习成长过来的,当然,他的《c语言程序设计》我觉得还很不错的,大一的时候,就是这本书带领我进入了程序设计的世界。这里我想强调的是,在学习编程的过程中,如果能阅读一些高质量的代码,那将是非常有益的。而高质量代码的一个最基本的特征,就是有非常规范的代码格式。 阅读全文…

分类: Berkeley DB, David Zhao, 程序设计 标签:

开源软件的优势

2009年1月12日 davidzhao 没有评论

今天看到一个文章,谈到Berkeley DB与eXtreamDB的性能对比,可惜两者的数据集不同,没多大可比性,以后有时间,我把那个程序修改一下,使用相同的数据集对比下,把结果贴出来给大家看看。我很有信心:Berkeley DB不会输给eXtreamDB. 看了官网才发现,eXtreamDB是如此的与Berkeley DB相似,但是它不是开源产品,所以从使用者的规模来看,我相信无法与Berkeley DB相比。 阅读全文…

Berkeley DB 概况(2)

2009年1月12日 davidzhao 没有评论

上一篇注释中提到Berkeley DB产品家族有三个产品,及核心版,Java版以及XML版,其中核心板用C语言开发,支持几乎所有的常用操作系统平台和很多嵌入式操作系统,拥有最悠久的历史和最高的使用量、知名度,如果不显式说明,人们提到Berkeley DB都是指核心版;Java版和XML版是后起之秀,Java版完全使用Java语言实现,它不基于核心版,是完全独立的纯Java嵌入式数据库,而XML版基于核心版,它的功能是让用户方便的存储和读取XML数据到数据库中。从下图可以看出三个产品的结构和相互关系。 阅读全文…

分类: Berkeley DB, David Zhao 标签:

Berkeley DB概况 (1)

2009年1月12日 davidzhao 没有评论

这篇文章最早发布在我的百度博客上的( http://hi.baidu.com/dazhao%5Fdbblog ),现在把它贴过来。

说实话,在我进入Oracle之前一个月,也是拿到Oracle的Offer 5个月之后,我才得到我未来经理的电话通知(我不是怪他通知的晚,事实上我非常感谢他给我机会进入这个产品组—这纯属机缘巧合,让我来到一个崭新的世界),说我在Berkeley DB产品组,这之前我从来没听说过它,我的第一印象,Berkeley的DB不是postgresl吗?仔细一查,才知道它是Oracle的嵌入式数据库,而嵌入式数据库是什么样的呢?是不是用在嵌入式系统当中的数据库?或者那种移动设备上的,诸如智能手机、PDA之类?带着诸多疑问,我仔细看了Berkeley DB(注1)的产品介绍。 阅读全文…

分类: Berkeley DB, David Zhao 标签:

我的工作用到的软件

2009年1月12日 davidzhao 没有评论

做软件这行,我觉得如果刚去一家公司,有很多东西需要适应,其中很重要的一个方面就是工作过程中用到的软件。我刚来Oracle的时候,有不少软件是我从来没有用过的,花了一段时间才适应下来,现在感觉非常得心应手,那些原本觉得很不好用的软件,比如vi,现在是我每天必须使用的,包括现在在写的这篇文章,就是用vi编写的。所以我们就先从vi说起吧。下面提到的软件除了Visual Studio外,都是开源的,可以免费使用。你去google用本文的软件名做关键字可以很容易地搜索到这些软件,以及它们的文档和用户手册,来学习使用。它们是全世界乐于奉献的软件高手们智慧的结晶,好用不是吹的。 阅读全文…

分类: Berkeley DB, David Zhao 标签: ,

Berkeley DB的动态散列技术

2009年1月7日 davidzhao 2 条评论

这篇文章最早发布在我的百度博客上的( http://hi.baidu.com/dazhao%5Fdbblog ),现在把它贴过来。

一个Berkeley DB数据库(也就是关系数据库中的一个表)存储的数据是key/data pair(键/值)对的集合,这些key/data pairs原本可以是任何结构、模式和意义的数据,Berkeley DB不理会它们的结构和意义,只把他们当作字节串来存取;但是从应用程序设计的角度看,一个数据库中最好是保存一类数据,比如在同一个Berkeley DB数据库中保存所有员工的信息,对于每一个key/data pair,以工号为key,以一个员工的全部信息为data。要存储部门信息时,把它保存到另一个Berkeley DB数据库中。 阅读全文…

分类: Berkeley DB, David Zhao 标签:

数据库通用基础实现技术—多进程共享信息

2009年1月7日 davidzhao 没有评论

这篇文章最早发布在我的百度博客上的( http://hi.baidu.com/dazhao%5Fdbblog ),现在把它贴过来。

Berkeley DB数据库以程序库的方式链接到应用程序中,而应用程序可以以多线程、多进程的方式访问同一个数据库环境中的所有数据库。注意,这里的数据库环境(Database Environment, DB_ENV)是Berkeley DB的一个术语,相当于关系数据库中的一个“数据库”,我们知道这个“数据库”中有很多个“关系表”。而Berkeley DB当中用“数据库”(”Database”)来指代大家所熟悉的“关系表”—记住这个术语的改变,否则后面就很难理解了。

在通常的关系数据库服务器中,通常也是有很多个进程在向客户连接提供数据,所以本文所描述的技术适用于所有的数据库系统。 阅读全文…

分类: Berkeley DB, David Zhao 标签:
Դ