1>数据库以及线程发生死锁的原理以及必要条件,如何避免死锁
解答:产生死锁的原因主要有:1.系统资源不足。2.进程运行顺序不恰当。3资源分配不当。
产生死锁的四个必要条件:1.互斥条件(某种资源一次只能被一个进程使用)2.请求与保持条件(一个进程因请求资源而阻塞时,不会释放掉已经获取的资源)3.不可剥夺 (进程已经获得的资源,在还没使用完之前,不会被剥夺)4.循环等待
避免死锁:通过合理的分配系统资源
2>面向对象的三个基本元素,五个基本原则
解答:三个基本要素:封装、继承、多态。
五个原则:单一职责原则(Single-Respoibility):一个类,最好只完成一件事情,只有一个引起它的变化。这一原则可以看做是低耦合、高内聚度的延伸。
开放封闭原则(Open-Closed):软件实体要求可扩展,不可修改。
Liskov替换原则(Liskov-substituion):子类必须能够替换基类。
依赖倒置原则(Dependecy-inversion):依赖于抽象,就是高层模块不依赖于底层,具体不依赖于抽象。
接口隔离原则(interface-Segregation):使用多个小的专门的接口,而不是使用一个大的总的接口。
3>windows内存管理机制以及优点
解答:分页存储管理:用户程序地址空间被划分为若干固定大小的区域,称之为“页”,内存被划分成块。块和页大小相等。可将用户程序的任何一页分配到内存中的任何一个块。实现了离散分配。
分段存储管理:将用户地址空间分成若干个大小不等的段,每一段定义一组相对完整的逻辑信息,存储分配时,以段为单位。段与段之间可以不邻近。实现了内存离散分配。
段页式管理:分页系统能有效的提高内存的利用率,而分段系统能反映程序的逻辑结构,将两者结合起来就实现了段页式内存管理。在段页式内存管理中,首先用户程序空间被分成大小相等的逻辑分段,每个段有自己的段号,进一步将每个段分成若干个页。主存空间分成大小相等的页,内存分配以页为单位进行。段页式系统中,作业地址结构包含三个部分:段号 页号 页内偏移量。为了实现段页式管理,系统应该为每一个进程设置一个段表。
4>程序设计:
公司里面有1001个员工,现在要在公司里面找到最好的羽毛球选手,也就是第一名,每一个人度必须参数。问至少得需要多少次才能完成。
解答:两两比赛,分成500组剩下1人。继续两两比赛,分成250组剩下1人,依次类推。
5>程序设计:
现在有100个灯泡,每个灯泡都是关着,第一趟把所有的灯泡打开,第2趟把所有偶数位的灯设置反,第3趟让3,6,9....,反,第100趟让第100个灯反,问有多少灯亮着。
解答:规律:1,对于每个灯,拉动奇数数次灯是亮着,拉动偶数次灯是灭着
2,每个灯拉动的次数与其编号所包含的约数有关,它的编号有几个约数就被拉动几次。
3,1-100这100个数中有那几个数的约数是奇数。我们知道一个数的约数都是成对出现的,只有完全平方数的约数才是奇数个
4,所以这100个灯亮着的个数为10.
6>程序设计:
有20个数组,每个数组有500个元素,并且都是排序好的,现在在20*500个数中找出前500个数
解答:TOP-K问题,采用个数为K的最小堆来解决。
7>程序设计
字符串左移。例如abcde左移两位,变成cdeab。要求空间复杂度O(1),时间复杂度O(n).
解法:将整个字符串颠倒abcde----->edcba.之后再分别颠倒edc 和ba 结果为cdeab。
8>选择题
*在排序方法中,关键码比较次数与记录地初始排列无关?A:Shell排序 B:归并排序 C:直接插入排序 D:选择排序
解答:正确答案为D。shell排序是插入排序的变形,直接插入排序和初始排列相关,如果初始序列有序比较次数为n.初始序列如果倒序比较次数n*(n-1)/2。而归并排序很明显,和初始排序相关。
*以下多线程对int型变量x的操作,哪几个需要同步:A:x=y B:x++ C:++x D:x=1
解答:正确答案ABC。ABC赋值等式左变量是建立在变量的基础上,如果该变量改变的话,必定引起等式的改变。
*代码void func(){static int val;.......}中,变量val的内存地址位于:A:已初始化数据段 B:未初始化数据段 C:堆 D:栈
解答:正确答案B。静态变量和全局变量放在同一个区域,已经初始化的全局变量和静态变量放在同个区,未初始化的放在一个区,由系统释放。
*同一进程下的线程可以共享以下:A:stack B:data section C:register set D:Thread ID
解答:正确答案B。只有数据段可以共享。
*short a[100],sizeof(a)返回?A:2 B:4 C:100 D:200 E:400
解答:正确答案D。short占2个字节,对于数组sizeof,求的是数组的大小所以返回100.
*以下哪种不是基于组件的开发技术。A:XPCOM B:XP C:COM D:CORBA
解答:正确答案B。很明显B是操作系统的一种。
*以下代码打印的结果是(在i386系列机器上)
struct st_t
{
int status;
short* pdata;
char errstr[32];
};
st_t st[16]; char* p=(char*)(st[2].errstr+32); cout<<p-(char*)(st)<<endl;
A:32 B:114 C:120 D:1112
解答:正确答案C。对于上述结构体每个结构体占40字节(int 4字节,指针4字节,char数组32字节),p指向st[2]结束的下一位即st[3]的开头,该题理解为st[3]到开头的距离,中间隔了3个结构体。
*STL中哪种结构是连续形式存储。A:map B:set C:list D:vector
解答:正确答案D。
9>重复多次fclose一个打开过一次的FILE *fp指针会出现什么情况?
解答:导致文件描述符结构中指针指向的内存被重复释放,程序异常。
10>求符合指定规则的数
给定函数d(n)=n+n的各个位之和,n为正整数,如d(78)=78+7+8.求1000以内不符合这样的数。
解答:思路可以很容易的求出1,2,3.....等等符合条件的数,扣除符合的就剩下不符合的。