网易技术笔试题整理

填空题

  • 多任务系统里面,一个任务可以在占有资源的同时申请资源,这会导致死锁
  • 实现内联函数的关键词是inline inline只适合函数体内代码简单的函数使用

简答题

  1. 请尽可能举出你所知道的数据库备份与还原的方法(数据库类型不限,只要知道的就写上)
    备份:1)直接拷贝要备份的数据库数据2)oracle 用 rman 进行备份 3)用 sql 导入方式 还原:1)oracle 用 rman 进行还原 2)用 sql导出方式

    1. 中断是什么?CPU在中断的时候做了些什么?
      中断就是中止当前正在执行的工作, 而去执行引起中断的事件, 当引起中断的事件执行完毕之后,CPU 继续执行以前的未执行完的工作。 CPU 暂时中断当前正在执行的程序而转去执行相应的时间处理程序

    2. markfile文件有什么作用。
      makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模块及库等)

  2. 谈谈你对虚函数的认识,并写出实现虚函数的方法 。
    那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。 1、当类中存在虚函数里.则编译器会在编译期自动的给该类生成一个函数表,并在所有该类的对像中放入一个隐式变量如_vfprt,该变量是一个指针变量,它的值指向那个类中的由编译器生成的虚函数表. 2、每个类自己的虚函数入口都在这张表中维护,调用方法的时候会隐式的传入一个this指针,然后系统会根据this指针找到对应的_vfprt,进而找到对应的虚函数表,根据methodname找到真正方法的地址,然后才去调用这个方法,这可以叫动态绑定。 3、虚函数表存放重写的虚函数,当基类的指针指向派生类的对象时,调用虚函数时都会根据vptr来选择虚函数,而基类的虚函数在派生类里已经被改写或者说已经不存在了,所以也就只能调用派生类的虚函数版本了.
    请尽可能举出你所知道的数据库备份与还原的方法(数据库类型不限,只要知道的就写上)

    1. ping、tracert是属于TCP/IP协议族里面的哪个协议?
      ping使用的是ICMP协议,英文全称是:Internet Control Message Protocol(internet报文控制协议),
      它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
      tracert就是基于ICMP的。

数学题

  1. 1-9这9个数字中,选3个出来,其和为奇数的组合有几个?
    1 奇数+奇数+奇数=奇数
    2 偶数+偶数+奇数=奇数
    第一种情况是在5个中取出3个奇数.共有10方法.(这是一个组合)
    第二种情况是在这九个数字中取出两个偶数,即在4个偶数中取出2个偶数.共有4×3/2!=6种方法.忘记了还有五个奇数中再选取一个.5×6=30
    所以一共有40种方法.

  2. 请把16进制数270F转化为十进制数。9999

测试类题目

  1. 给出了一个二叉树的前序排列、中序排列,要你选出它的后续排列
    二叉树的遍历:
    前序遍历:根节点->左子树->右子树
    中序遍历:左子树->根节点->右子树
    后序遍历:左子树->右子树->根节点
    求下面树的三种遍历:
    网易技术笔试题整理_第1张图片
    前序遍历:abdefgc
    中序遍历:debgfac
    后序遍历:degfbca
bubblesort(A)
{
   for i = 0 to length[A]-1
   {
       for j = i+1 to length[A]-1
       {
           if A[i] > A[j]
           {
                exchane A[i] and A[j];
           }
       }
   }
}
//int a[] = {5,4,3,1,6,8,9,16,15};
for (i = 0; i < 10; i++)  
    {  
        for (j = i + 1; j < 10; j++)  
        {  
            if (str[i] > str[j])  
            {  
                swap(&str[i], &str[j]);  
            }  
        }  
    } 

[ n(n-1) ] / 2;所以最优,最差的情况时间复杂度为:O( n^2 );
空间复杂度就是在交换元素时那个临时变量所占的内存空间;
最优的空间复杂度就是开始元素顺序已经排好了,则空间复杂度为:0;
最差的空间复杂度就是开始元素逆序排序了,则空间复杂度为:O(n);
平均的空间复杂度为:O(1);

void bubbleSort(int array[], int length)  
{  
    int i, j, tmp;  
    int flag = 1;    
    if (1 >= length) return;   
{   
    {  
          if (array[j] > array[j+1])
          {  
              tmp = array[j];  
             array[j]   = array[j+1];  
              array[j+1] = tmp;  
            flag = 0;  
          }     
        }     
       if (flag) break;  
   }     
}  

有很多人说冒泡排序的最优的时间复杂度为:O(n);其实这是在代码中使用一个标志位来判断是否已经排序好的

编程题

  1. 编程:斐波那契数列,f(0) = 0, f(1) = 1, f(n) = f(n-1) + f(n-2) n>1。给定n,求f(n),要求越快越好。
#include
#include
using namespace std;
int main() 
{   long long Fibonacci(unsigned int i); 
    int n,count=0;
    cin>>n;
    count=Fibonacci(n);
    cout<return 0; 
} 

 long long Fibonacci(unsigned int i) 
{
    if (i<=0)
    return 0;
    if(i==1)
    return 1;
    long long one=1;
    long long two=0;
    long long temp=0;
    for(int j=2;j<=i;j++)
    {
    temp=one+two;
    two=one;
    one=temp;
    }
return temp;
  1. 给字符串str,将其倒序。例如“abcdef”变为“fedcba”,要求空间复杂度为O(1).
#include
#include
#include
#include
#include
#include
#include  
#include
using namespace std;
void turn(char *str);
int main() 
{
    char str[]="abcdefg";
    turn(str);
    cout<return 0;   
}
void turn(char* str)
{   char temp;
    int len=strlen(str);
    int mid =len/2;
if(str == NULL)
{
    return;
    /*一般情况下,返回类型是void的函数使用return语句
    是为了引起函数的强制结束,
    这种return的用法类似于循环结构中的break语句*/
}
    for(int i=0;i1];
        str[len-1]=temp;
        len--;      
    }   
}
  1. 写出下述协议的端口号: HTTP 80 POP3 110 FTP 21
  2. 列举写黑盒测试用例的几种方法,至少三个:
    采用黑盒技术设计的测试用例方法有:
      · 等价类划分方法
      · 边界值分析
      · 错误推测
      · 因果图方法
      · 判定表驱动分析方法
      · 正交实验设计方法
      · 功能图分析方法
      等价类划分:
      把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一个子集中选取少数具有代表性的数据作为测试用例,该方法是一种重要的,常用的黑盒测试用例设计方法。等价类划分可有两种不同的情况:有效等价类和无效等价类。
      有效等价类:对于程序的规格说明来说是合理的,有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。
      无效等价类:与有效等价类的定义相反。
      边界值分析法:
      边界值分析方法是对等价类划分方法的补充。长期的测试工作经验告诉我们,大量的错误是发生在输入或者输出范围的边界上,而不是发生在输入输出范围的内部,因此针对各种边界情况设计测试用例,可以查出更多的错误。
      使用边界值分析方法设计测试用例,首先应确定边界情况,通常输入和输出等价类的边界,就是应着重测试的边界情况,应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取边界类中的典型值或任意值作为测试数据。
      错误推测发:
      基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例的方法。
      列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。例如,在单元测试时列出的许多在模块中常见的错误,以前产品测试中经常发现的错误等,这些就是经验的总结。还有,输入数据和输出数据为零的情况;输入表格为空格或者输入表格只有一行,这些都是容易发生错误的情况,可选这些情况下的例子作为测试用例。
      因果图方法:
      前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系。考虑输入条件之间的相互组合,可能会产生一些新的情况,但要检查输入条件的组合意识一件容易的事情,因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例,这就需要利用因果图。
      因果图方法最终生成的是判定表,它适合于检查程序输入条件之间的各种组合情况。
      利用因果图生成测试用例的基本步骤:
      (1) 分析软件规格说明描述中, 那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件), 并给每个原因和结果赋予一个标识符.
      (2) 分析软件规格说明描述中的语义.找出原因与结果之间, 原因与原因之间对应的关系. 根据这些关系,画出因果图.
      (3) 由于语法或环境限制, 有些原因与原因之间,原因与结果之间的组合情况不不可能出现. 为表明这些特殊情况, 在因果图上用一些记号表明约束或限制条件.
      (4) 把因果图转换为判定表.
      (5) 把判定表的每一列拿出来作为依据,设计测试用例.
      从因果图生成的测试用例(局部,组合关系下的)包括了所有输入数据的取TRUE与取FALSE的情况,构成的测试用例数目达到最少,且测试用例数目随输入数据数目的增加而线性地增加.
      前面因果图方法中已经用到了判定表.判定表(Decision Table)是分析和表达多逻辑条件下执行不同操作的情况下的工具.在程序设计发展的初期,判定表就已被当作编写程序的辅助工具了.由于它可以把复杂的逻辑关系和多种条件组合的情况表达得既具体又明确.
      判定表通常由四个部分组成.
      条件桩(Condition Stub):列出了问题得所有条件.通常认为列出得条件的次序无关紧要.
      动作桩(Action Stub):列出了问题规定可能采取的操作.这些操作的排列顺序没有约束.
      条件项(Condition Entry):列出针对它左列条件的取值.在所有可能情况下的真假值.
      动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作.
      规则:任何一个条件组合的特定取值及其相应要执行的操作.在判定表中贯穿条件项和动作项的一列就是一条规则.显然,判定表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列.
      判定表的建立步骤:(根据软件规格说明)
      ①确定规则的个数.假如有n个条件.每个条件有两个取值(0,1),故有 种规则.
      ②列出所有的条件桩和动作桩.
      ③填入条件项.
      ④填入动作项.等到初始判定表.
      ⑤简化.合并相似规则(相同动作)
      B. Beizer 指出了适合使用判定表设计测试用例的条件:
      ①规格说明以判定表形式给出,或很容易转换成判定表.
      ②条件的排列顺序不会也不影响执行哪些操作.
      ③规则的排列顺序不会也不影响执行哪些操作.
      ④每当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则.
      ⑤如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要.
  3. 软件测试在软件工程中的位置
    软件测试是属于开发阶段最后一段时间的主要工作。需要对软件进行全方位的测试,以确保软件在上线运营时不会出现影响正常功能使用上的问题。软件测试是一项非常重要的工作,也是软件工程中一个重要的环节。软件测试是在软件投入运行前,对软件需求分析,设计规格说明和编码的最终复审,是软件质量保证的关键步骤。
  4. 白盒测试的覆盖形式很多,从覆盖范围的弱到强来列举出来
    语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、多重条件覆盖(条件组合覆盖)、路径覆盖六种覆盖标准,
  5. 让你作为项目测试负责人,说明从需求开始到项目上线所要做的全部工作(参考网易有道面试中的回答)
    1.首先,你需要知道的是,项目立项开始,是否有《需求说明文档》(也就是《需求说明书》)?如果有,那么前期以此为准开展评审,再审以及最终确认。由于需求评审阶段各个部门及人员所采集的信息不同,但最终都必须达成一致,如果需求确认后,不同部门的工作内容也就明确,开发来说主要确定开发语言,数据库,同时需要输出概要设计和详细设计文档(包括功能的概述,逻辑的整理,建模等),一般服务器等配置这个阶段也可以开始着手做,产品需要根据需求设计原型图及demo。测试在此阶段需要做的就是确认需求是否都是明确的,是否都是可测的,逻辑是否都是合理的等等,应及时反馈需求中存在缺陷,作为测试负责人需要做的就是工作的记录用时多少个工作日,都干了什么?得到什么结果?是否有遗漏?组员是否都参与?是否对过程中的输出项已经熟悉并认同等等,在公司大流程以及部门规范前提下,当前的工作是否已经可以结束并进入下一阶段?和其他部门是否达成共识?有不明确项要及时发起会议,会议过程中要做好会议记录,会议结束发送参会人员确认,同时明确分工,截止时间等,目前公司是team leader和主管去,谁去无所谓,重要的信息的共享和及时传达,人家带你就去,不带就算了,他们得给你详细文档,如果没有文档的话,就功能点细节你得多交流,刚才说那么多等到该确认的都已确认,作为负责人来说接下来就该准备测试计划了,编写出完整的测试计划,有测试覆盖面,人员安排,工作评估,异常事件处理,结果总结,文档交付,组织评审及最终确认,测试人员就按着测试负责人的计划来进行工作,测试用例的编写(一般都有模版),测试环境的准备,缺陷管理规范和缺陷工具等,理论上用例也需要发起会议评审,分内部和外部直到最终确认,以上都是你有了《需求说明文档》之后,以此为基准开展的前期的测试准备工作,也就是未接到测试版本之前需要做的,理论上测试计划不怎么可靠,因为过程中发生什么谁也无法预料,但是好的计划前期的确可以说明一些事,无非就是设备调用,人员安排,测试覆盖面和深度以及一些特殊情况说明,切记所有的信息的传递及确认一切以邮件为准,为了避免日后的麻烦千万不要认同口头答复。
      接下来就是接收版本开始测试,这时候前阶段的准备就可以发挥作用了。作为测试负责人,接收测试版本后可以安排测试,首先就是冒烟测试,验证当前版本是否满足后续测试,满足则发邮件说明,不满足也同样发邮件说明并打回该版本,这个过程基本是已经规范好的,没什么特别说明。
  6. 怎么做浏览器兼容性测试?怎么测试乱码问题?
    1、了解什么是兼容性测试?
    2、为什么会出现功能明明好的换一个浏览器就不行了的原因?
    3、我们应该怎样去做兼容性测试,这一点也是最重要的
    4、采取什么样的方法或者工具来提高兼容性测试的效率?
    ①什么是兼容性问题? 浏览器兼容性问题又被称为网页兼容性或网站兼容性问题,指网页在各种浏览器上的显示效果可能不一致而产生浏览器和网页间的兼容问题。
    ②为什么会出现浏览器兼容的问题?因为不同浏览器使用内核及所支持的HTML(标准通用标记语言下的一个应用)等网页语言标准不同;以及用户客户端的环境不同(如分辨率不同)造成的显示效果不能达到理想效果
    ③兼容性测试从哪些方面入手?
    a、了解当前哪些浏览器是主流,挑选前面3-5个左右的浏览器进行兼容性测试(一般选3个左右就差不多了,项目时间允许的话可以做得更多)
    b、同浏览器的不同版本也要进行兼容性测试(一般测试最新版本)
    c、界面上元素功能是否正常、排版布局是否合理美观,这是兼容性最最最重要的测试范围;
    那么在不同浏览器中或者是同一浏览器不同版本里需要对那些界面功能进行兼容性测试?
    一眼可见的是网页元素位置是否混乱与错位业务与功能结合的异步交互
    功能按钮(增删改查、导入导出、超链接、清空)等等
    各种控件的检查:日期和时间控件、搜索控件
    有些特殊的图标功能比如:盘古系统上的画图功能是否正常(不覆盖区域图标、覆盖区域绘图、站点位置迁移图标、挪动地图坐标等等

    IETester,是专门用于测试网页在IE浏览器各个版本中兼容性的工具,版本包含IE5.5至IE9的各个版本,但是有时候在模拟IE7的时候会弹出错误框(这是IETester本身的bug)总体来说还是不错的一款工具
    Spoon Browser Sandbox,点击你需要测试的浏览器环境,安装插件就可以进行测试了。帮助你测试网页在Safari、Chrome、Firefox和Opera浏览器中是否正常,IE以前也有的,网站上说应微软的要求去掉了
    其实还有很多类似的工具例如:
    BrowserShots BrowserShots 是一款免费的跨浏览器测试工具,捕捉网站在不同浏览器中的截图。这是最有名,也是最古老的浏览器兼容性测试工具。
    Multiple IEs这款工具同样用于测试网页在IE浏览器各个版本的兼容性。
    乱码问题要考虑编码方式
      a.单字节编码
      b.双字节编码
      c.UTF-8、GBK等编码的交界产生的二义性
      列举常见编码问题作为case,供日后测试便利使用。

注:第一次写markdown,还没有熟悉语法,以后会改进的,今天参加了考试,编程方面还有很多欠缺加油!

你可能感兴趣的:(笔试知识点整理笔记)