笔试题之基础知识
- 网络的OSI模型,每层的主要内容
- 给出示例代码,如何限制一个类只在堆上分配和栈上分配
1、限制一个类只在堆上分配
仿照设计模式中的单例模式或者工厂模式来解决,这里采用单实例模式方式来说明。
将类的构造函数属性置为private,同时提供static成员函数getInstance,在函数中new一个新对象,然后返回对象指针或者引用。这样实现的类可以保证只可以在堆上分配对象。
// 私有化析构函数,通过一个public函数来进行实际的析构。 class B { public: void del()const{ }; private: ~B(){}; };
2、限制一个类只在栈上分配
重载类的new操作符,使重载后的new操作符的功能为空。这样就使外层程序无法在堆上分配对象,只可以在栈上分配。
// 私有重载new即可,但只是限制了不能建立在new出的堆上,并没有限制全局以及局部静态类,因此严格 // 来说不能算“只在栈上” class A { private: static void *operator new (size_t size){}; };
- 常用的设计模式
目前常用的设计模式分为三大块,分别是创建型模式、结构型模式和行为型模式。
一、创建型设计模式(Creational Pattern)
1)工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。
2)抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
3)单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
4)建造模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
5)原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
二、结构型设计模式(Structural Pattern)
1)适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。该模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
2)合成模式(Composite):将对象组合成树型结构以表示“部分---整体”的层次结构。该模式使得用户对单个对象和组合对象的使用具有一致性。
3)装饰模式(Decorator):动态地给一个对象添加一些额外的职责。就增加功能来说,该模式相比生成子类更为灵活。
4)代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。
5)享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。
6)外观模式(Facade):为子系统中的一组接口提供一个一致的界面。该模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
7)桥梁模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
三、行为型设计模式(Behavioral Pattern)
1)解释器模式(Interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
2)中介者模式(Mediator):用一个中介对象封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交相。
3)策略模式(Stratrgy):定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。本模式使得算法可独立于使用它的客户而变化。
4)模板方法模式((Template Method):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。该模式使得子类可以不改变一个算法的结构既可重定义该算法的某些特定步骤。
5)观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
6)迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
7)责任链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
8)命令模式(Command):命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户地蚝参数化,对请求排队或记录请求日志,以及支持可撤消的操作。
9)备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。
10)状态模式(State):容许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
11)访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作。它使用户可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
- 数据库的两种操纵语言
DML是Data Manipulation Language的缩写,意为数据操纵语言,是SQL语言的四大功能之一。
由DBMS提供,用于让用户或程序员使用,实现对数据库中数据的操作。
DML分成交互型DML和嵌入型DML两类。
依据语言的级别,DML又可分成过程性DML和非过程性DML两种。
- 事务的特点
数据库事务,是指作为单个逻辑工作单位执行的一系列操作。有如下一个特点:
1)原子性:事务必须是以原子为工作单位;
2)一致性:事务在完成时,必须使所有的数据都保持一致状态;
3)隔离性:由并发事务所作的修改必须与任何其他并发事务所作的修改隔离;
4)持久性:事务完成一直,它对系统的影响是持久性的。