}
return0;
}
20、(10分)用文字和图示(类图)描述你所知道的除单件模式和简单工厂之外的一种设计模式,并用c++实现
单例模式:
类图:
classSingleton
{
public:
staticSingleton*GetInstance();
private:
Singleton(){}
~Singleton(){}
staticSingleton*singleton;
}
Singleton*Singleton:
:
singleton=NULL;
Singleton*Singleton:
:
GetInstance()
{
if(singleton==NULL)
singleton=newSingleton();
returnsingleton;
}
21、(10分)请在下列三题中任选一题作答
A)什么是内存的垃圾回收集算法,其作用是什么据你所知,有那些开发语言中提供了垃圾收集机制
答:
一种自动内存管理的策略,就是自动垃圾回收机制。
既然是自动垃圾回收,那么平台肯定得采取一种方式发现垃圾,然后清除。
这就是垃圾收集算法所关注的问题。
垃圾收集算法的任务就是将活动的对象和已经死掉的对象分别出来,然后将死掉的对象的内存回收,而且为了更好的利用内存,有的算法还会对内存碎片进行压缩。
JAVA,C#
B)现在非常多的用户都在谈SOA,根据Gartner的预测,2008年,企业80%应用都将通过使用SOA来实现,你理解SOA是什么SOA的关键特点有哪些SOA带来什么
答:
面向服务的体系结构 面向服务的体系结构(Service-OrientedArchitecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。
接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。
这使得构建在各种这样的系统中的服务可以一种统一和通用的方式进行交互。
C)随着互联网的普及,很多新兴的、传统的软件厂商都在探讨SAAS的前景,甚至很多行业观点认为SAAS是软件行业的未来趋势。
你是怎么理解SAAS的,你怎么看待这种趋势SAAs和更早之前的ASP感念有什么异同
答:
SaaS(Software-as-a-service)的意思是软件即服务,
SaaS的中文名称为软营或软件运营。
SaaS是基于互联网提供软件服务的软件应用模式。
作为一种在21世纪开始兴起的创新的软件应用模式,SaaS是软件科技发展的最新趋势 SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘IT人员,即可通过互联网使用信息系统。
就像打开自来水龙头就能用水一样,企业根据实际需要,从SaaS提供商租赁软件服务。
13、指针和引用的相同点和不同点:
★相同点:
●都是地址的概念;
指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名。
★不同点:
●指针是一个实体,而引用仅是个别名;
●引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终”,指针可以“见异思迁”;
●引用没有const,指针有const,const的指针不可变;
●引用不能为空,指针可以为空;
●“sizeof引用”得到的是所指向的变量(对象)的大小,而“sizeof指针”得到的是指针本身的大小;
●指针和引用的自增(++)运算意义不一样;
●引用是类型安全的,而指针不是(引用比指针多了类型检查
14、多线程问题
为什么多线程会比单线程更耗时呢其原因就在于,线程启停以及线程上下文切换都会引起额外的开销,所以消耗的时间比单线程多。
为什么加锁后的三线程比两线程还慢呢其原因也很简单,那把读写锁就是罪魁祸首。
实际情况并不是并行执行,反而成了串行执行,
在采用多线程方法设计程序时,如果产生的额外开销大于线程的工作任务,就没有并行的必要。
线程并不是越多越好,软件线程的数量尽量能与硬件线程的数量相匹配。
最好根据实际的需要,通过不断的调优,来确定线程数量的最佳值。
15、什么是虚拟存储器虚拟存储器的特点是什么
虚拟存储器:
在具有层次结构存储器的计算机系统中,自动实现部分装入和部分替换功能,能从逻辑上为用户提供一个比物理贮存容量大得多,可寻址的“主存储器”。
虚拟存储区的容量与物理主存大小无关,而受限于计算机的地址结构和可用磁盘容量。
特点:
多次性、对换性、虚拟性。
多次性是指一个作业被分成多次调入内存运行,亦即在作业运行时没有必要将其全部装入,只需将当前要运行的那部分程序和数据装入内存即可;以后每当要运行到尚未调入的那部分程序时,再将它调入。
对换性是指允许在作业的运行过程中进行换进、换出,亦即,在进程运行期间,允许将那些暂不使用的程序和数据,从内存调至外村的对换区(换出),待以后需要时再将它们从外存调至内存(换进)。
虚拟性是指能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。
16、什么是this指针其主要功能是什么
this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象的地址。
全局仅有一个this指针,当一个对象被创建时,this指针就指向对象数据的首地址。
一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用
return*this;
另外一种情况是当参数与成员变量名相同时使用this指针,如this->n=n(不能写成n=n)
17、C++常见的内存错误:
1.内存泄露:
指应用程序未释放动态申请的且不再使用的内存,原因可能是程序员疏忽或者错误造成程序异常。
在C/C++中,动态申请的内存是在堆上的。
如果发送此类的内存泄露,函数每执行一次就丢失一块内存。
长时间运行改程序可能引起系统"内存耗尽"。
2.野指针:
未初始化的指针称为野指针。
通常的避免方法就是在指针定义的时候就初始化,初始为NULL或者一个有意义的内存地址。
对于动态申请的内存地址,在该内存释放之后,对应指针最好立即赋值为NULL。
并在具体使用指针的时候判断指针的值是否为NULL。
3.内存越界访问:
内存越界访问通常发生在数组、字符串或者连续内存的访问。
有两种情况:
读越界,即读了非有效的数据。
如果所读的内存地址是无效的,程序会立即崩溃。
如果所读内存地址是有效的,读入的时候不会有错误,但是读入的数据是随机的,可能会产生不可控制的后果。
举个简单的例子,字符串输出,如果没有结束符,会输出一堆乱码也可能输出正常,也就是说结果是不可控的。
写越界,亦称为缓冲区溢出,通常写越界会发生错误。
内存写越界造成的后果是非常严重的。
例如访问数组越界可能会修改访问数组的循环变量,造成死循环。
4.返回指向临时变量的指针char*getString(){charb[]="Hello,Tocy!
";returnb;}
5.试图修改常量
6.内存未分配成功,但已经使用
7.内存分配成功,但没有初始化
附加:
goto语句有没有必要存在程序设计语言中
答案:
结构程序设计是避免使用GOTO语句的一种程序设计;结构程序设计是自顶向下的程序设计;结构程序设计是一种组织和编制程序的方法,利用它编制的程序易于理解、易于修改;程序结构化的一个主要功能是使程序正确性的证明容易实现;结构程序设计对设计过程中的每一步去验证其正确性,这样便自动导致自我说明和自我捍卫的程序设计风格;
2012年科大讯飞软件笔试题
一、单选题
1、64变形的外角和是多少(A)是360度
A、1*360B、1*180
C、64*360D、64*180
2、有一盆衣服(已经洗过了,需要漂洗),请问在漂洗次数固定的情况下如何分配水才能把衣服洗得最干净(C)
A、从少到多B、从多到少
C、平均分配,是求函数极值问题D、随便洗
3、用力拉一根橡皮筋,橡皮筋上有没有点还处在原来的位置没有被拉走(B)
A、有B、没有
C、有是有、有时没有D、一般人拉没有,刘谦拉就有
4、假设一个应用程序需要使用多个提供不同功能但在皆接口上有差异的类,适合使用的设计模式是(D(确定))
A、装饰模式B、迭代器模式
C、工厂模式D、适配器模式
5、结构化程序设计主要强调的是(C)
A、程序的规模B、程序的效率
C、程序的易读性D、程序设计语言的先进性
6、SQLServer中,删除一个表的命令是(C)
A、DELETEB、CLEARC、DROPD、REMOVVE
7、以下关于互斥量说法错误的是:
(B)
A、单线程程序不需要使用互斥量
B、互斥量可以被两个以上的线程锁定
C、互斥量的激活是原子操作
D、互斥量的创建和销毁可以在不同的线程进行
8、在Windows任务管理器中发现某个进程CPU占用率长时间处于100%,以下可能导致该现象的原因是(D)
A、程序处于大量I/O过程中B、多线程导致进程死锁
C、等带另一个程序响应D、程序进入死循环
9、假设进程中一个生产者线程,10个消费者线程,为保证进程间不出现死锁,信号量的初值可以设置为(C)
A、-1B、0
C、1D、10
10、使用两个栈共享一片空间时,当(D)时,才产生溢出
A、其中一个栈的栈底到达这片内存空间的中心点
B、其中一个栈的栈顶到达这片内存空间的中心点
C、两个栈均不空,且一个栈