单选题(8个)
1.面试题 先入栈,再根据出栈顺序进队列,给出栈的出栈顺序,和队列的出队列顺序,求栈的最小容量
2.给26个硬币,其中有一枚要轻,问通过天秤需要比较多少次,才能找到轻的?
3.给定小顶堆序列,5,8,12,19,28,20,15,22,求加入3以后,小顶堆的序列?
4.给定程序,说出结果
#include <stdio.h>
void main() {
char c=256;
int a=c;
printf("%d\n",a + 1);
}
输出:1
注:char 类型1字节(BYTE),8位(bit),c=256的二进制表示为100000000,char保留低8位,即为0,所以a=0,最终输出为1
5.关于线程与进程的区别,下列说法正确的是(AB)
A. 线程会与同进程的其他线程共享数据,使用公共变量和内存时需要使用同步机制
B 子进程可获得父进程的所有堆与栈的数据,因此不利于资源管理和保护
C.与线程相比,进程更适合在单SMP上运行,而线程可以跨机器迁移
D. 因多线程里,每个子进程有自己的地址空间,因此相互之间通信时,线程不如进程灵活和方便
注:
- 进程是资源分配的最小单位,线程是程序执行的最小单位。
- 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
- 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
- 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
简答题(2个)
1.工厂模式,实现的数据应用?
2.客户端-服务器,要处理大批次数据,问在TCP、内存开销、CPU和网络带宽上的优化策略?
编程题(2个)
1.给定n天内的股票价格,求如何购买获利最大,输出:买入日,卖出日,差值