笔试面试收获(持续更新中)

1. Internet 是有ARPANET发展而来
2. NFS(Network File System)即网络文件系统
3. OSI参考模型七层:物理层,数据链路层,网络层(IP,路由器,三层交换机),传输层(TCP/UDP),会话层,表示层,应用层
4. 软件测试:黑盒/白盒测试:
黑盒测试:主要就是测试代码的功能与输入有效性在问题, 以便于了解或使用系统的内部结构及知识。

输入类型 输入数据 预期输出 实际输出 测试状态
正确的数值 5+5= 10 10 正确
带非法字符的数值 &+&….= 出现异常 出现异常 正确
加减乘除 5*5= 25 25 正确
非法运算符 5@2= 提示只能输入+-*/ 提示只能输入+-*/ 正确
分母为0 3/0= 提示分母不能为0 提示分母不能为0 正确

白盒测试:在设计测试的过程中,我们通过测试程序的内部结构,了解代码的完善程度,发现错误,减少代码。

测试用例 用例说明 覆盖代码 测试结果
5-5 数值的输入 interceResult(4-9) 运行成功
2.9 非法运算符 interResult(7-9) 运行成功,提示输入错误重新输入
1-1 是否运行减法 interceptOperation(4-64) 运行成功
2+2 是否运行加法 interceptOperation(4-64) 运行成功
3*3 是否运行乘法 interceptOperation(4-64) 运行成功
4/4 是否运行除法 InterceptOperation(4-64) 运行成功
5/0 分母不能为0 ispassString(16-18) 运行成功,提示分母不能为0,重新输入
6e。 非法字符 interceResult(7-9) 运行成功,提示算式错误重新输入

5. 程序错误的主要三种情况:

a) 编译链接错误(语法错误):
编译链接错误又分为编译错和链接错。
编译错就是普通意义上的语法错误,编译器进行语法检查不通过,也就是程序违背了计算机语言的语法,例如:括号不匹配、变量名拼写错误、用保留字定义变量名等;
初学者有时写了函数的声明,但是缺少函数的定义,此时就会出现链接错。

b)运行错误: 
运行错是程序可以执行,但是在执行过程中发生异常,提前退出程序。
最常见的是指针越界,打开文件失败继续读取文件,总而言之是让计算机执行一些不能执行的语句。 
c)逻辑错误:
逻辑错是程序也能运行,就是结果不对,主要原因有:程序算法本身错误,程序和算法不同义等。
例如:新手经常将判断相等的 == 写成 =    赋值,往往就会导致逻辑错。

6. C++函数的三种传递方式(具体讲解):

  • 值传递 :形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。
  • 指针传递:形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作.
  • 引用传递:形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。

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. 进程间通讯方式及优缺点

  • 管道:有名管道和无名管道(范例
    • 无名管道:是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)。
    • 有名管道:和无名管道基本相同,但也有不同点:无名管道只能由父子进程使用;但是通过命名管道,不相关的进程也能交换数据。
  • 共享内存:被多个进程共享的一部分物理内存。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。(范例
  • 消息队列:为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行进程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。(范例
  • 信号量:就是一个消息的链表。可以把消息看作一个记录,具有特定的格式。进程可以向其中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息(范例
  • 套接字(socket):套接口也是一种进程间的通信机制,与其他通信机制不同的是它可以用于不同及其间的进程通信。

11. 线程间同步方式(范例

  • 锁机制
    • 互斥锁:提供了以排它方式阻止数据结构被并发修改的方法。
    • 读写锁:允许多个线程同时读共享数据,而对写操作互斥。
    • 条件变量:可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
  • 信号量机制:包括无名线程信号量与有名线程信号量
  • 信号机制:类似于进程间的信号处理。
    线程间通信的主要目的是用于线程同步,所以线程没有象进程通信中用于数据交换的通信机制。

12. 线程和进程的比较(范例

进程是程序的实例,具有一定的独立功能。
线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位。线程基本上不拥有系统资源,只拥有一点在运行中必不可少的资源,但是他可以与同属于一个进程的其他线程共享拥有的全部资源。
区别:进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉

猜你喜欢

转载自blog.csdn.net/believe_s/article/details/78475488