zoukankan      html  css  js  c++  java
  • 实习生电话面试

     

    百度贴吧测试部门实习生电话面试

     

    1.内存如何分配?

    答:  内存分配方式有三种:

     (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。

     (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

     (3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

    参考:http://www.cnblogs.com/gaochaooo/archive/2009/09/03/1559764.html

    2.TCP/IP三次握手过程?第三次握手失败会如何?

    答: 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 
    第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 
    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 
    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 
    完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念: 
    未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。 
    Backlog参数:表示未连接队列的最大容纳数目。 
    SYN-ACK 重传次数:服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。

    半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。

    3算法:单链表中查找倒数第n个元素,如何测试?

    通过一次遍历找到单链表中倒数第n个节点,链表可能相当大,可使用辅助空间,但是辅助空间的数目必须固定,不能和n有关。

    单向链表的特点是遍历到末尾后不能反向重数N个节点。因此必须在到达尾部的同时找到倒数第N个节点。

    不管是顺数n个还是倒数n个,其实都是距离-标尺问题。标尺是一段距离可以用线段的两个端点来衡量,我们能够判断倒数第一个节点,因为他的next==NULL。如果我们用两个指针,并保持他们的距离为n,那么当这个线段的右端指向末尾节点时,左端节点就指向倒数第n个节点。

    测试考虑:结点个数是否大于n;链表为空的情况;……(可补充)

    01

    iNode * GetLastNnode(iNode * head, int n)

    02

    {

    03

        iNode * pfirst=head;

    04

        iNode *psecond=head;

    06

        int counter;

    07

        //第1步:建立标尺,移动pfirst N步

    08

        for(counter=0; counter<n; counter++) 

    09

        {

    10

            if(NULL == pfirst)

    11

            break; // 此时pfirst->next无意义

    12

            pfirst=pfirst->next;

    13

        }

    15

        if(n != counter) //长度不够n,未找到倒数第n个节点

    16

            return NULL;

    18

        //第2步:保持距离让标尺向右移动,直到右端指向末尾,左端即结果

    19

        while(pfirst!=NULL) 

    20

        {

    21

            pfirst=pfirst->next;

    22

            psecond=psecond->next;

    23

        }

    24

        return psecond;

    25

    }

    28

    iNode * GetLastNnode ( iNode *head, int n)

    29

    {

    30

        iNode * pfirst = head;

    31

        iNode * psecond = NULL;//可能没有n个

    32

        while( n-- > 0 && (pfirst!= NULL)

    33

        {

    34

            pfirst = pfirst ->next;

    35

        }

    37

        if(pfirst!= NULL)// 有n个节点

    38

            psecond = head;

    40

        while(pfirst!=NULL)

    41

        {

    42

             pfirst = pfirst ->next;

    43

             psecond = psecond ->next;

    44

        }

    45

        return psecond; //只有一个出口,无论是否有n个节点,都能返回正确值

    46

    }

                                                                               

    附加1:一次遍历单向链表找到中间节点

    和上面的思路类似,设置2个指针,一个走2步时,另一个走1步。那么一个走到头时,另一个走到中间。

    01

    iNode * GetMiddleNode ( iNode *head )

    02

    {

    03

        iNode *p1 = head;

    04

        iNode *p2 = p1;

    05

        while( p2 )

    06

        {

    07

            p2 = p2->next;

    08

            if(p2)

    09

            {

    10

                p2 = p2->next;

    11

                p1=p1->next;

    12

            }

    13

        }

    14

        return p1;

    15

    }

    附加2:找到第2/3个结点

     我们用两个指针,一个指针每次向后移动2个,一个指针每次向后移动3个。

    4.如何测试登陆框:

    快捷键的使用是否正常:
    TAB 键的使用是否正确;上下左右键是否正确;界面如果支持 ESC键 看是否正常的工作;ENTER 键的使用是否正确切换时是否正常。

    布局美感:
    界面的布局是否符合人的审美的标准,具体因人而依

    输入框的功能:
    输入合法的用户名和密码可以成功进入
    输入合法的用户名和不合法密码不可以进入,并给出合理的提示
    输入不合法的用户名和正确密码不可以进入,并给出合理的提示
    输入不合法的用户名和不正确的密码不可以进入,并给出合理的提示
    不合法的用户名有:不正确的用户名;使用了字符大于用户名的限制;
    正常用户名不允许的特殊字符、空的用户名,系统(操作系统和应用系统)的保留字符
    不合法的密码有:空密码(除有特殊规定的),错误的密码,字符大于密码的限制
    正常密码不允许的特殊字符,系统(操作系统和应用系统)的保留字符

    界面的链接:
    对于界面有链接的界面,要测试界面上的所有的链接都正常或者给出合理的提示

    补充:
    输入框是否支持 复制和黏贴 和移动
    密码框显示的不要是具体的字符,要是一些密码的字符
    验证用户名前有空格是否可以进入,一般情况可以。
    验证用户名是否区分大小写。(有的软件是区分大小写的)
    验证必填项为空,是否允许进入。
    验证登录的次数是否有限制。从安全角度考虑,有些安全级别高的软件会考虑这方面的限制。

    再补充:

    同一用户名在不同地点登陆是否出现问题;

    登陆有效时间(session值);

  • 相关阅读:
    比特币搬砖对冲策略Python源码
    30行JavaScript代码实现一个比特币量化策略
    JBOSS EJB发布WebService
    位运算小练习(1)
    第二周作业
    第一周作业
    CentOS虚拟机NAT方式无法上网
    go语言实现排序算法
    Ubuntu更换科大源
    将Windows下的文件同步到Linux下
  • 原文地址:https://www.cnblogs.com/herizai/p/3082233.html
Copyright © 2011-2022 走看看