####选择题
1.C++中的const。
int b = 2;
const int * a = &b; //这种情况是表示指针所指的数据是常量,但是a这个指针可以指向其他内存。
int * const c = &b; //这种情况是表示指针是常量,也就是c只能指向b,但是b这个内存里面存储的值是可以变得。
2.ARM开发集成环境
只读的代码段和常量被称作RO段,是程序中的指令和常量;
可读写的全局变量和静态变量称为RW段,是程序中已初始化变量;
RW段中要被初始化为0的变量称为ZI段,是程序中未初始化变量。
则不同进程加载同一个动态库的时候,不能共享的部分是RW和ZI。因为只有只读代码和常量是可以分享的。
3.同一个进程不同的线程,不可以共享的是栈。
因为线程共享的是进程代码段,进程的公共资源,进程文件描述符,进程用户ID等等。但是每一个线程都有一个线程ID,用户栈和内存栈等等。
4.关于Java中自动装箱的问题。
Byte a = 126;
Byte b = 127;
Byte c = a +b;
最后出现的情况是最后一行编译错误。因为a和b进行加法运算时自动提升为Int类型,没有办法赋值给Byte类型。
####填空题
1.在32位系统中,void *p = malloc(100);则sizeof§=4。
因为p是一个指针类型的数据,所以无论p指向的内存多大,p的大小都是固定的。在32位地址下,8位一个字节,就是4个字节。
2.设循环队列的容量为50,且头指针front=5,尾指针rear=29,则该循环队列中是共有24个数值
算法(rear-front+size)%size
3.已知代码char* p=(char*)malloc(val);其中p在运行的时候获得了一个空指针,请列举三种可能的原因?
- 分配的空间太小
- 分配的空间被当做内存碎片处理
- val取值过大,导致分配之后会导致内存空间溢出
4.进程间的通信方式
- pipe 也就是管道通信
- socket
- signal 信号处理机制
- memory share 内存共享
- message 消息队列
- file 文件的读写
5.Android四大组件
- Activity 活动
- Service 服务
- Broadcast 广播
- Content Provider 内容提供器
6.Java中的final
- final类不可以再派生出新的子类。因此一个类不可以既是abstract也是final。
- final变量可以保证变量在使用中不会被改变。则只能在声明变量或构造器初始化。
- final函数不能被子类重写。
7.如何定义C++类,阻止C++类对象的相互赋值(obj2=obj1)。
只要重载=的定义在private或protected下面即可,重载原型的const修饰及函数体内容无所谓。
class A{
protected:
A& operator = (const A&){}
}
class A{
private:
A& operator = (const A&){}
}
8.java中Thread.sleep()和 Object.wait() 有什么区别?
sleep是使线程休眠一段时间。在sleep休眠时间到期后,线程不一定立即恢复执行,除非系统没有其它更高优先级的任务正在执行。wait是线程间实现同步的一种机制。调用wait的线程会主动进入等待状态,直到被其它线程唤醒或者等待超时
9.sprintf、strcpy、strncpy及 memcpy 函数,请问这些函数功能有什么区别?从安全角度考虑一般应该用哪个函数复制字符串?
- sprintf为格式化字符串函数
- strcpy为字符串复制函数
- strncpy也是字符串复制函数,但是可以指定最大复制长度
- memcpy为内存复制函数
从安全角度应该选strncpy,不易出现越界异常
####编程题
约瑟夫环是一个数学应用题:已知n个人(编号1、2、…n)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个又从1开始报数,数到m的那个人又出列;依次规律重复下去,直到圆桌周围的人全部出列。请编写一个程序,给定n、m计算出列人员先后顺序。
这道题先考虑用Java中已有的LInkedList来解决。
ArrayList和LinkedList的不同点
- ArrayList基于动态数组实现,它适合于随机访问元素,但是插入和删除元素较慢。
- LinkdList基于链表实现,在LInkedList中间进行插入和删除的代价较低,但是在随机访问方面LInkedList性能较慢。