zoukankan      html  css  js  c++  java
  • 面试总结

     

    面试公司:帆软

    岗位:测试工程师

    面试:二面 

    时长:1h

    结果:结束一周后拿offer,但实际签三方要提前到公司参加2到3周的考核

     

    面试问题

    一、测试技术

    1、用例设计方法:等价划分、场景法

    1.1 等价类划分:三角形

    1.2 场景法 :ATM--基本流,备选流

    2、测试管理工具:jira,在工作中怎么对BUG进行跟踪维护

    3、怎样测一个ATM?

    4、性能测试,是否有用过?

    二、C语言、数据结构和算法

    1、全局变量加个static?

    2、全局变量和局部变量的区别?当两者名字一样时调用时是优先局部变量还是全局变量?

    3、堆栈、队列的区别?

    4、怎样由两个堆栈组成一个队列?

    5、快排的时间、空间复杂度?

    6、在工作中由读过开发的代码吗?

    三、数据库

    1、说一下触发器,有什么作用

    2、左外链接和右外链接

    3、平时工作中用到什么数据库知识?

    四、计算机网络

    1、TCP和UDP的区别

    2、QQ用的是TCP还是UDP?

    3、既然QQ用的是UDP,那怎样保证数据消息传输可靠性呢?

    4、如果只开放80端口,能否登录QQ?

    5、如果不用VPN的情况下访问外国网站,那返回什么--404

    6、fidder抓包返回的数据有哪些?

    7、返回501是什么?200呢?

    五、趣味问题

    1、硬币能用来做什么

    1.1  硬度

    1.2 厚度

    1.3 花型

    1.4 颜色

    问题解答

    1、全局变量加个static?

    答:被定义为全局静态变量。内存位置为静态存储区(静态存储区在整个程序运行期间都存在),未经初始化的全局静态变量会被程序自动初始化为0,全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。任何声明为不带static属性的全局变量和函数都是公共的,可以被其它模块访问。如果局部变量和全局变量重名,局部变量会暂时覆盖掉全局变量。

    局部变量:

        创建在栈区(向下生长),生命周期存在于当前作用域中。

        创建时若未初始化,则为随机值。

    全局变量:

        创建在static区,生命周期一直存在。

    静态局部变量:

        切断了外部链接属性。创建在static区。 

        创建时若未初始化,则为0。

    全局变量和静态变量的存储是放在一块的,初始化了的全局变量和静态变量在一块区域, 
    未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。

    全局静态变量:

        切断了外部链接属性,创建在static区,生命周期一直存在。

        创建时若未初始化,则为0。

    extern:

        有外部链接属性,即可检测到外部文件。

    static:

        切断外部链接属性,只能应用于内部文件。

    2、堆栈、队列的区别?

    答:堆栈是先进后出,队列是先进先出。栈的插入和删除操作只允许在表的尾端进行(在栈中成为“栈顶”),满足“FILO:First In Last Out”;队列只允许在表尾插入数据元素,在表头删除数据元素,满足“First In First Out”。

    栈与队列的不同点:

    (1).删除数据元素的位置不同,栈的删除操作在表尾进行,队列的删除操作在表头进行。

    (2).应用场景不同;常见栈的应用场景包括括号问题的求解,表达式的转换和求值,函数调用和递归实现,深度优先搜索遍历等;常见的队列的应用场景包括计算机系统中各种资源的管理,消息缓冲器的管理和广度优先搜索遍历等。

    (3).顺序栈能够实现多栈空间共享,而顺序队列不能。

    3、怎样由两个堆栈组成一个队列?

    假设有两个堆栈,分别是s1,s2,现在有数列“1,2,3,4,5”,要让这个数列实现先进先出的功能,也就是用两个堆栈组成一个队列,如何实现?

    分析:

        先将数列压入栈s1,数列在栈中由顶到底的元素为“5,4,3,2,1”,再将数列压入栈s2,数列在栈中由顶到底的元素为“1,2,3,4,5”,如此出栈,则是“1,2,3,4,5”。

        必须注意,实现队列中的入队操作以及出队操作,并非如同上述操作那么直观。上述操作有一个前提,即两个栈都没有元素。而一般情况,s1和s2中都可能有元素或者没有元素。所以要抽象出更一般的入队以及出队操作。

        入队操作:先将s2中的所有元素出栈,再压入s1中,将要进栈的元素压入s1。

        出队操作:先将s1中的所有元素出栈,再压入s2,再从s2中出栈,则得到将要出队列的元素。

    4、触发器的功能?

    答:触发器是一种特殊类型的存储过程,不由用户直接调用。创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行。参考:https://www.cnblogs.com/yank/p/4193820.html

    5、QQ用的是TCP还是UDP?

    答: UDP为主,TCP为辅

    6、既然QQ用的是UDP,那怎样保证数据消息传输可靠性呢?

    答:腾讯采用了上层协议来保证可靠传输:如果客户端使用UDP协议发出消息后,服务器收到该包,需要使用UDP协议发回一个应答包。如此来保证消息可以无遗漏传输。之所以会发生在客户端明明看到“消息发送失败”但对方又收到了这个消息的情况,就是因为客户端发出的消息服务器已经收到并转发成功,但客户端由于网络原因没有收到服务器的应答包引起的

    什么情况下适合用UDP?

    --类似于图像、声音等对可靠性要求没有那么高的业务可以用UDP,他们不需要准确存储对准确性无要求但要求速度快。类似于文本、程序、文件等要求可靠的数据最好就用TCP,但会牺牲一些速度。不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000。 UDP协议是无连接方式的协议,它的效率高,速度快,占资源少,但是其传输机制为不可靠传送,必须依靠辅助的算法来完成传输控制。QQ采用的通信协议以UDP为主,辅以TCP协议。由于QQ的服务器设计容量是海量级的应用,一台服务器要同时容纳十几万的并发连接,因此服务器端只有采用UDP协议与客户端进行通讯才能保证这种超大规模的服务。参考:https://blog.csdn.net/pmt123456/article/details/55216555

  • 相关阅读:
    RxJava Android(RxAndroid) 开发全家桶
    Android Retrofit RxJava实现缓存
    Android Touch事件传递机制详解 下
    Android Touch事件传递机制详解 上
    Android Framework 记录之二
    XMind 8 Update 7 Pro 激活码
    leetcode 2-> Add Two Numbers
    leetcode 1 -> Two Sum
    leetcode 3-> Longest Substring Without Repeating Characters
    Python enumerate() 函数
  • 原文地址:https://www.cnblogs.com/WFM1997/p/9578516.html
Copyright © 2011-2022 走看看