30卫士通Linux C面试笔试题(收录) - 高飞网
17人看过

30卫士通Linux C面试笔试题(收录)

2013-10-19 01:17:56

试题一:用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;

}

还没有评论!
54.162.166.214