沉思录

SQL沉思录

[亡魂溺海] 提交于 2019-12-29 03:00:23
ISBN:9787115213952   坦白说这本书我只是看大部分,还没有完全看完。不过介绍这本书倒是可以了。   一个数据库好或者不好,很大程序上取决于一开如的时候设计质量如何,而设计得好不好,往往取决于设计者对数据库技术和理论的认识程度。   在我的书架上,我将数据库的书大体上按照设计、开发、运维的顺序排列,《SQL沉思录》被我排在第一本。   读过之后,纠正了很多我以前对数据库理解的偏差,每翻一页,总有有种“啊,原来如此!”的想法。   在学校里的时候,画ER图,总是一个Entity一张表,读完这本书才明白完全不是那么回事。而且还有很多必备的设计技巧和模式,在书中也有详细的介绍和描述。   如果我没记错的话,作者是个老得不行了人了吧,超资深人士!但是他对数据库一些新的发展,也讲得非常清晰。   据说《SQL解惑》跟这本书是同一个作者,可惜我发现《SQL解惑》的时候已经基本没得买了(所以至今没有见过《SQL解惑》),我终于意识到一些经典的技术书籍并不一定是热门的畅销书,印刷量也不大,很快就会缺货的。幸运的是《SQL沉思录》及时地摆上了我的书架,嘿嘿!   不过网上貌似有流传电子版,但是貌似并没有包含全部的内容。   我认为这本书跟运维的关系不大,运维人员,比如运维型的DBA,我想可以不用看。主要是面向跟设计工作有关的人员,特别是那些自以为懂设计的项目经理

【C++沉思录】代理类

江枫思渺然 提交于 2019-11-27 01:08:18
1、考虑下面的需求,把一组类型不同,但是相互关联的对象放入容器中,比如Animal,Dog,Cat对象。 2、容器只能包含一组 类型相同的对象,Animal,Dog,Cat对象是没有办法放入容器中的。 3、怎么解决上面的问题? 假设容器为vector,可以使用vector<Animal>,这会导致一个新问题,因为vector存储的是对象副本,子类放入vector<Animal>发生对象切割,不可能具备多态的性质。 怎么解决上面的问题? --------------------------------------------------------------------------------------------------------------------- 经典的解决办法: vector中存储Animal指针,这会带来如下问题: 1、Dog d; v.push_back(&d); d是局部对象,离开作用域会自动销毁,容器中的指针指向一堆垃圾。 2、为了解决上面的问题,使用 v.push_back(new Dog(d)); 这会带来动态内存管理的负担,考虑把v[j] 赋值给v[i], 3、v[j] = v[i]; 两个指针指向同一个对象,v[j]和v[i] 不知道彼此,都不释放,内存泄露,都释放,行为未定义。 4、对v[i]做一个副本,由于不知道v[i]的真实类型,使用v