笔试题错题本
int main (void) {
char str1[] = “abc”;
char str2[] = “abc”;
const char str3[] = “abc”;
const char str4[] = “abc”;
const char* str5 = “abc”;
const char* str6 = “abc”;
cout << (str1 == str2) << endl;
cout << (str3 == str4) << endl;
cout << (str5 == str6) << endl;
return 0;
}
第一个,第二个存放的是地址 第三个是指针指向的字符串
2.已知函数fun的原型为int fun(int,int,int);下列重载函数原型中错误的是
char fun(int,int);
double fun(int,int,double);
int fun(int,char*);
float fun (int,int,int);
函数重载和返回类型无关,参数列表不同即可
3.
不同进程加载同一个动态库时,不能共享的部分是
RO段
RW段
ZI段
RW和ZI段
- 进程代码段
- 进程的公有资源(如全局变量,利用这些共享的数据,线程很容易的实现相互之间的通信)
- 进程打开的文件描述符
- 消息队列
- 信号的处理器
- 进程的当前目录
- 进程用户ID
- 进程组ID
- 线程ID
- 寄存器组的值
- 用户栈、内核栈(在一个进程的线程共享堆区(heap))
- 错误返回码
- 线程的信号屏蔽码
- 线程的优先级
堆: 是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏。
栈:是个线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是 thread safe的。操作系统在切换线程的时候会自动的切换栈,就是切换 SS/ESP寄存器。栈空间不需要在高级语言里面显式的分配和释放
5.请问linux系统发送信号的系统调用是
7.操作系统在控制和管理进程过程中,涉及到( )这一重要数据结构,这是进程存在的唯一标志。
每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。
/usr/src/linux-headers-3.16.0-30/include/linux/sched.h文件中可以查看struct task_struct 结构体定义。其内部成员有很多,重点:
- 进程id。系统中每个进程有唯一的id,在C语言中用pid_t类型表- 示,其实就是一个非负整数。
- 进程的状态,有就绪、运行、挂起、停止等状态。
- 进程切换时需要保存和恢复的一些CPU寄存器。
- 描述虚拟地址空间的信息。
- 描述控制终端的信息。
- 当前工作目录(Current Working Directory)。
- umask掩码。
- 文件描述符表,包含很多指向file结构体的指针。
- 和信号相关的信息。
- 用户id和组id。
- 会话(Session)和进程组。
- 进程可以使用的资源上限(Resource Limit)。
(2) 内存碎片
(3) val取值过大
10.Android四大组件是:Activity、Service、Broadcast Receiver、Content Provider
11.JAVA中,final修饰的类、成员函数、变量分别有什么特点?
类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。
将变量声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在new一个对象时初始化(即只能在声明变量或构造器或代码块内初始化),而在以后的引用中只能读取,不可修改。
将方法声明为final,则方法只能使用,而不能在子类重写。
12.java中Thread.sleep()和 Object.wait() 有什么区别?
sleep是使线程休眠一段时间。在sleep休眠时间到期后,线程不一定立即恢复执行,除非系统没有其它更高优先级的任务正在执行
wait是线程间实现同步的一种机制。调用wait的线程会主动进入等待状态,直到被其它线程唤醒或者等待超时
13.sprintf、strcpy、strncpy及 memcpy 函数,请问这些函数功能有什么区别?从安全角度考虑一般应该用哪个函数复制字符串?
sprintf为格式化字符串函数
strcpy为字符串复制函数
strncpy也是字符串复制函数,但是可以指定最大复制长度
memcpy为内存复制函数
从安全角度应该选strncpy,不易出现越界异常
14.算法 最长公共子串
function
findSubStr(s1,s2){
var
S=sstr=
""
,L1=s1.length,L2=s2.length;
if
(L1>L2){
var
s3=s1;s1=s2,s2=s3,L1=s2.length;}
for
(
var
j=L1;j> 0 ;j--)
for
(
var
i= 0 ;i<=L1-j;i++){
sstr = s1.substr(i,j);
if
(s2.indexOf(sstr)>= 0 )
return
sstr;
}
return
""
;
}
document .writeln(findSubStr(
"aaa3333"
,
"baa333cc"
));
//aa333
document .writeln(findSubStr(
"aaaX3333--"
,
"baa333ccX3333333x"
));
//X3333