笔试整理二

来源:互联网 发布:广州实时公交查询软件 编辑:程序博客网 时间:2024/05/17 03:20
1. Internet 是有ARPANET发展而来
2. NFS(Network File System)即网络文件系统
3. OSI参考模型七层:物理层,数据链路层,网络层(IP,路由器,三层交换机),传输层(TCP/UDP),会话层,表示层,应用层
4. 软件测试:黑盒/白盒测试。。。
5. 编译错误,连接错误,运行错误
http://www.cnblogs.com/lmf-techniques/p/5070899.html
编译链接错误(语法错误):
编译链接错误又分成编译错和链接错。
编译错就是普通意义上的语法错,编译器进行语法检查不通过,也就是程序违背了计算机语言的语法,例如:括号不匹配、变量名拼写错误、用保留字定义变量名等;
链接错是指程序通过了语法检查,但是无法生成可执行文件,最常见的是链接找不到lib库。初学者有时写了函数的声明,但是缺少函数的定义,此时就会出现链接错。
运行错误:
运行错是程序可以执行,但是在执行过程中发生异常,提前退出程序。最常见的是指针越界,打开文件失败继续读取文件,总而言之是让计算机执行一些不能执行的语句。
逻辑错误
逻辑错是程序也能运行,就是结果不对,主要原因有:程序算法本身错误,程序和算法不同义等。
例如:新手经常将判断相等的==写成=赋值,往往就会导致逻辑错。
6. 传值、传指针、传引用
值传递:传值实际上是在子函数的栈里面重新开辟一个空间传进来的实参参数的值,所以在子函数内对子函数的形参做改变,知识改变了栈里面的值,原来main函数里的值不会被改变
传指针:形参为指向实参的地址,实际上直接在实参的内存地址上进行修改,值传递是将值拷贝到内存中再进行修改,原值没有改变
传引用:形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。
http://www.cnblogs.com/yanlingyin/archive/2011/12/07/2278961.html
7. 逆波兰表达式
8. 虚拟解构函数
虚析构函数,一个基类的析构函数写成虚函数,并用基类指针删除派生类的对象时,会调用派生类的析构函数,否则会造成内存泄露。
9. Tcp与udp区别
1,TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
  3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
    UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
  4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信,
5,TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
10. 进程间通讯方式及优缺点
管道:有名管道和无名管道
有名管道:单方向的通信,只能在有亲缘关系中进行使用,例如父子进程。但是由于其长期存在于系统之中,使用不当容易出错
无名管道:一般用于两个不同进程间的通信,局限于单向通信的工作方式.并且只能在创建它的进程及其子孙进程之间实现管道的共享。
共享内存:被多个进程共享的一部分物理内存。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。
消息队列:为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行进程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个进程在访问它,也就是说信号量是用来调协进程对共享资源的访问的。
信号量:就是一个消息的链表。可以把消息看作一个记录,具有特定的格式。
进程可以向其中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息
11. 线程之间同步方式
信号量:
互斥锁:从本质上说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁以后,任何其他试图再次对互斥量加锁的线程将会被阻塞直到当前线程释放该互斥量。(初始化,上锁,解锁,销毁锁)
条件变量:一般用来保护一段代码,使其每次只能被一个执行线程运行,要完成这个工作,可以使用二进制信号量。
    有时,希望可以允许有限数目的线程执行一段指定的代码,这时可以使用计数信号量。
12. 进程与线程比较
http://blog.csdn.net/yaosiming2011/article/details/44280797
进程是程序的实例,具有一定的独立功能。
线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位。线程基本上不拥有系统资源,只拥有一点在运行中必不可少的资源,但是他可以与同属于一个进程的其他线程共享拥有的全部资源。
区别:进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉
13. 字符串中所以字符可能的排列(子串排列)


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void bubbleSort(char *arr,int begin,int length);
void swap(char *a,char *b);
void Permulation(char *arr,int k,int length);
int main12()
{
    char arr[10];
    int length;
    int i;
    while(gets(arr))
{
        length = strlen(arr);
        bubbleSort(arr,0,length);
        Permulation(arr,0,length);
    }
    return 0;
}
void Permulation(char *arr,int k,int length)
{
    int i;
    if(k == length)
{
        for(i=0;i<length;i++)
        printf("%c",arr[i]);
        printf("\n");
    }
else
{
        for(i=k;i<length;i++)
{
//限制重复排列
            if(k != i && arr[k] == arr[i])
               continue;   
            swap(&arr[k],&arr[i]);
//将arr中第i位的字符与第k位的字符交换
           bubbleSort(arr,k+1,length);
           /*每次在进行交换后,都把剩余的元素进行一次排列。比如字符串abc,在进行最后一次外层交换时变成 cba。
            此时要进行一次排序,交换cab后,在进行排列。*/
            Permulation(arr,k+1,length);//递归求出后面的排列
            bubbleSort(arr,k+1,length); 
//还原成上面语句执行前的字符样子。例如abc--->经过一次外层交换为bac(当输出bac、bca)后----->然后将bca经过排序为bac----->进行下一次外层循环交换cab,继续递归完成。
        }
    }
}
void swap(char *a,char *b)
{
    char c;
    c = *b;
    *b = *a;
    *a = c;
}
void bubbleSort(char *arr,int begin,int length)
{
    int i,j;
    for(i=begin;i<length;i++)
{
        for(j=i+1;j<length;j++)
{
            if(arr[i]>arr[j])
{
                swap(&arr[i],&arr[j]);
            }
        }
    }
}
14. 接受一个字符串输入,该字符串表示一个整数,返回一个整数
#include <iostream>  
using namespace std;  


long int a_to_i(char* str)
{  
int length = sizeof(str)/sizeof(str[0]);  
bool flag = false;  
if (str[0] == '-')
{  
flag = true;  
}  
long int sum = 0;  
for (int i = 0; i < length; i++)
{  
//if (i == 0 && (str[0] == '-' || str[0] == '+'))
{  
continue;  
}  
sum = sum * 10 + (str[i] - '0');  
}  
if (flag)  
{  
sum = -sum;  
}  
return sum;  
}  


int main()
{  
char num[] = "122";  
long int result = a_to_i(num);  
cout << result << endl;  


system("pause");  
return 0;  
}  
http://blog.csdn.net/jw903/article/details/32955399
15. C/C++测试工具:visual unit 4…..
16. 一个字节无符号最大二进制数,2^8 – 1;有符号数最大二进制是2^7 - 1
原创粉丝点击