问题1:软件压力测试&软件性能测试
——出自【北方微电子面试题】。和技术面试官聊项目的时候,面试官问:“你们项目测试的阶段有没有做过压力测试?”,我的反应当时有点愣了,知道这是一个专业术语,但确切的含义不清楚,应该是软件的最大的承载量,然后云云……
软件压力测试和软件性能测试的区别是在于他们不同的测试目的。
软件压力测试是为了发现系统能支持的最大负载,他的前提是要求系统性能处在可以接受的范围内,比如经常规定的页面3秒钟内响应; 所以一句话概括就是:在性能可以接受的前提下,测试系统可以支持的最大负载。
软件性能测试是为了检查系统的反映,运行速度等性能指标,他的前提是要求在一定负载下,如检查一个网站在100人同时在线的情况下的性能指标,每个用户是否都还可以正常的完成操作等。 概括就是:在不同负载下(负载一定)时,通过一些系统参数(如反应时间等)检查系统的运行情况;比如我们说某个网站的性能差,严格上应该说‘在N人同时在线情况下,这个站点性能很差)
总之,就像一个方程式:综合性能=压力数*性能指数,综合性能是固定的。
软件压力测试是为了得到性能指数最小时候(可以接受的最小指数)最大的压力数;软件性能测试是为了得到压力数确定下的性能指数。
问题2:软件架构
——出自【天津三星电子面试题】,和技术官介绍项目的时候,技术官问道“谈谈你们项目的软件架构?”,当时是在问道面向对象知识的时候提到了,我回答了框架+模块组成的东西。
其实详细解读软件架构是一个很深的概念,众说纷纭,大家可以关注《**软件架构师**》的书,这里引了一个老外的解读:在“软件构架简介”中,DavidGArlan和 Mary Shaw认为软件构架是有关如下问题的设计层次:“在计算的算法和数据结构之外,设计并确定系统整体结构成为了新的问题。结构问题包括总体组织结构和全局控制结构;通信、同步和数据访问的协议;设计元素的功能分配;物理分布;设计元素的组成;定标与性能;备选设计的选择。”
其实我个人理解的网络协议的OSI参考模型由底层à高层:物理层、链路层、网络层、传输层、会话层、表示层、应用层,及其扩展内容就是网络协议基本的架构。
以此推断,可以展开项目问题的回答:“我们软件系统的设计分为UI(界面)层、对象层、通信层。其中:
1,UI(界面)层负责显示系统参数、性能指标等;
2,对象层负责处理、模拟链路之间读取信息,信息分类、调度等,一方面负责处理来自通信层的实际socket或RTI通信的数据,另一方面负责将处理的结果交互给UI(界面)层;
3,通信层只负责通信。
这样一方面便于程序的扩展,可以通过不同的类来实现,一部分的更新只需要修改对应的类即可;另一方面程序的结构会非常清晰,便于后续的调试、维护工作。
然后,可以介绍每一层具体有哪些模块……”。
问题3:域名解析
——出自【青岛百灵科技】
域名虽然便于人们记忆,但机器之间只认IP地址,它们之间的转换工作称为域名解析。
域名解析需要由专门的域名解析服务器来完成,DNS(DNS是计算机域名系统 (DomainName System 或Domain Name Service) 的缩写,它是由解析器以及域名服务器组成的。)就是进行域名解析的服务器。DNS命名用于Internet的TCP/IP网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入 DNS 名称时,DNS 服务可以将此名称解析为与之相关的其他信息,如 IP 地址。因为,你在上网时输入的网址,是通过域名解析系统解析找到了相对应的IP地址,这样才能上网。其实,域名的最终指向是IP。
域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。[1] 其中域名必须对应一个IP地址,而IP地址不一定只对应一个域名。域名系统采用类似目录树的等级结构。域名服务器为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器。在Internet上域名与IP地址之间是一对一(或者多对一)的,也可采用DNS轮询实现一对多。
下面的www.dlut.edu.cn就对应IP地址202.118.66.66。
问题4:段错误
——出自【某通信公司】
所谓的段错误就是指访问的内存超出了系统所给这个程序的内存空间。一旦一个程序发生了越界访问,cpu就会产生相应的保护,于是segmentation fault(段错误)就出现。
段错误应该就是访问了不可访问的内存,这个内存区要么是不存在的,要么是受到系统保护的,还有可能是缺少文件或者文件损坏。
段错误的常见形式
在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的。
1)访问系统数据区,尤其是往系统保护的内存地址写数据最常见就是给一个指针以0地址。
2)内存越界(数组越界,变量类型不一致等):访问到不属于你的内存区域。
解决方法:我们在用C/C++语言写程序的时候,内存管理的绝大部分工作都是需要我们来做的。实际上,内存管理是一个比较繁琐的工作,无论你多高明,经验多丰富,难免会在此处犯些小错误,而通常这些错误又是那么的浅显而易于消除。但是手工“除虫”(debug),往往是效率低下且让人厌烦的。
下面将显示以下的一个存在段错误的程序:
作为一个熟练的C/C++程序员,以上代码的bug应该是很清楚的,因为它尝试操作地址为0的内存区域,而这个内存区域通常是不可访问的禁区,当然就会出错了。
几种典型的段错误
1.
被装载时,系统把“hello world” 连同其它的字符串和const型数据放入到内存的只读区。执行时,一个变量s被设为指向该字符串的位置,当再试图向该位置写时,就会产生段错误。
2,
因为该代码只创建了一个空指针,并没有指向一个具体空间,当赋值时,产生段错误。
3,
无限递归,这会导致栈溢出,也会产生段错误。
——部分内容参见了百度百科。