试题一:用C语言或C++语言实现行程压缩的解压缩
关于行程压缩:如原文为”111AAKKKK”,则压缩后为”13A2K4″,即用代码和代码重复的次数来表示原始信息,实现一个简单的压缩功能。
void decoder(char * dest, char * src) {
int _num=0;
while( *src != ‘\0′) {
_num =*(src+1) – 0×30;
memset(dest, *src, _num);
dest+=_num;
src+=2;
}
}
以上函数有以下假设:
1. dest与src指针均不为NULL
2. dest的存储空间足够大
####################
以下A\B组试题任选一组:
A组:
试题二:简述一下ping命令在协议层面的操作过程(涉及哪些二层及以上协议以及相关协议对ping的简单的处理过程),并说出在直接配置路由和配置缺省网关这两种情况下,ping在协议层面操作过程有什么不同?
试题三:以TCP为例,简述一下C\S程序设计的原理和实现过程。
试题四:简述一下TCP连接建立时三次握手的过程。
B组:
试题二:简述一下Linux操作系统中断处理的原理和使用方法。
试题三:简述一下Linux操作系统内核的SOFTIRQ和TASKIET的原理和使用方法。
试题四:简述一下以下Linux操作系统内核调用函数的用途。
module_init;
—- 声明模块的初始化函数
register_chrdev_region;
—- 向内核注册字符设备,应该
copy_from_user;
—- 从用户空间向内核空间复制数据
create_proc_entry;
—- 创建/proc文件
wait_event_interruptible_timeeout(queue, condition, timeout);
—- 把当前进程放入queue指定的休眠队列,当condition满足或timeout时间到,则当前进程被唤醒,此进程的休眠状态可被中断
wake_up_interruptible;
—- 唤配在休眠队列中的,可被中断的进程
以上A\B组试题任选一组
#####################
试题五:请指出以下函数存在的两个漏洞并指出其危害:
void str_show(const char* showstr)
{
char* echostr;
echostr=malloc(100);
if(echostr==NULL)
return;
strcpy(echostr,showstr);
printf(“just test!%s\n”,echostr);
}
(1)、未检查字符串指针参数
(2)、strcpy()函数存在越界风险
(3)、printf()存在越界风险
试题六:请描述一下FIFO、栈、二叉平衡树、堆这几种数据结构的构造与基本操作。
试题七:请至少列举三种排序算法并简单描述其排序过程。
试题八:请简要说明下列声明的意义:
int (*f) (int x, int y) func (int*p1, int x, char* (*fp) (int i));
声明一个函数func, 它接受三个参数:一个整型变量地址、一个整型变量和一个回调函数(接受一个整型参数,返回字符串指针), 返回一个函数指针(接受两个整型参数,返回整型值)。
试题九:阅读下面的程序并写出程序执行结果:
#include<stdio.h>
int f (int n)
{
return ++n;
}
int g (int *n)
{
return ++*n;
}
main ()
{
int n=10;
int k=0;
k=f (n)
printf (“k is: %d\n”, k);
printf (“n is: %d\n”, n);
k=g (&n);
printf (“k is: %d\n”, k++);
printf (“n is: %d\n”, n++);
}
请说出其运行结果: 10, 11, 11, 11
试题十:阅读下面的程序并写出程序执行结果:
#include
class Display
{
public:
virtual int ShowIt (int num) {printf (“%d\n”, num); return 0;}
int ShowIt (double num) {printf (“%1f\n”, num); return 0;}
};
class DisplayEx: public Disply
{
pulic:
int ShowIt (int num) {printf (“It is Integer, value is %d\n”, num); return 0;}
};
int main ()
{
DisplayEx dpex;
Display *p_base=&dpex;
p_base->ShowIt (168);
p_base->ShowIt (1.68);
dpex.ShowIt (“Hello, World\n”);
dpex.ShowIt (1.69);
dpex.Display::ShowIt (1.69);
return 0;
}
请说出其运行结果
It is Integer, value is 168
1.680000
It is string, value is Hello, World
It is Integer, value is 1
1.690000
题有错,应该为
#include <cstdio>
class Display{
public:
virtual int ShowIt (int num) {
printf (“%d\n”, num);
return 0;
}
int ShowIt (double num) {printf (“%1f\n”, num); return 0;}
};
class DisplayEx: public Display {
public:
int ShowIt (int num) {printf (“It is Integer, value is %d\n”, num); return 0;}
int ShowIt (char * msg) {printf (“It is string, value is %s\n”, msg); return 0;}
};
int main (int argc, char ** argv)
{
DisplayEx dpex;
Display *p_base=&dpex;
p_base->ShowIt (168);
p_base->ShowIt (1.68);
dpex.ShowIt (“Hello, World\n”);
dpex.ShowIt (1.69);
dpex.Display::ShowIt (1.69);
return 0;
}