搜狗测试开发岗面经

本文详述了搜狗测试开发岗位的面试经历,包括两道智力题、Python 2与Python 3的区别、面试中涉及的代码问题、数据库连接与表连接方式,以及面对紧急测试任务和负载均衡测试策略的探讨。此外,还讨论了输入框测试的要点和应对紧急测试任务的策略。
摘要由CSDN通过智能技术生成

搜狗结果给的比较晚,也拿到了offer,就两面,问题也不是很多,主要是发散性思维,三面就是hr了,当时先面了两面,第三面隔了挺久才通知的。

两道智力题

1. 有4个人A,B,C,D,有两个戴着白色帽子,两个戴着黑色帽子,四个人都不能转头,初始的观察方向如下图所示,A与B,C,D之间隔了一道墙,不能看到对面的情况,自己也不能看自己的帽子颜色,过了一段时间之后,有一个人知道了他的帽子颜色,请问是哪一个?
在这里插入图片描述

c能看见b的帽子,而d能看见b和c的,如果b、c的颜色相同,那d就能知道自己帽子的颜色了,显然d不能确认自己的帽子,那么b和c的颜色就是不同的

2. 过桥“有五个人,他们过一个桥分别用1,3,6,8,12分钟,有一座桥每次只能通过俩人,并且他们只有一个灯笼,每次过桥都需要打灯笼,请问,他们如何能在30分钟之内过去这个桥?快的如果和慢的一起走,就按慢的时间

1,3先过,1回来 4分 剩1,6,8,12,
8,12过,3回来,15分 剩1,3,6,
1,6过,1回来,7分,剩1,3,
1,3过,3分
一共29分钟

python 2和python3的区别

为什么要有python3:提升效率,适合大数据的开发
(1)Python3对Unicode字符的原生支持
Python2中使用 ASCII 码作为默认编码方式, 导致string有两种类型str和unicode,Python3只支持unicode的string
(2)Python3采用的是绝对路径的方式进行import。
Python2中相对路径的import,会导致标准库导入变得困难
(3)Python3使用更加严格的缩进。Python2的缩进机制中,1个tab和8个space是等价的,所以在缩进中可以同时允许tab和space在代码中共存
(4)print语句被python3废弃,统一使用print函数
不相等操作符"<>“被Python3废弃,统一使用”!="
long整数类型被Python3废弃,统一使用int
xrange函数被Python3废弃,统一使用range
raw_input函数被Python3废弃,统一使用input函数
(5)浮点数除法操作符/和//区别
Python2:/是整数除法,//是小数除法
Python3:/是小数除法,//是整数除法
• (6)Python2,for循环会修改外部相同名称变量的值
i = 1
print ('comprehension: ', [i for i in range(5)])
print (‘after: i =’, i ) #i=4
Python3,for循环不会修改外部相同名称变量的值
i = 1
print ('comprehension: ', [i for i in range(5)])
print (‘after: i =’, i ) #i=1
(6)比较操作符区别
Python2中任意两个对象都可以比较
11 < ‘test’ #True
Python3中只有同一数据类型的对象可以比较

一面+二面 代码:

1. 给定一个文件,有十万条数据,每一行以/t结尾,数据为 关键字keyword、价格price,参数 如 mp3 5 100 36 毛巾 6 30 89 Mp3 6 300 23 统计keyword的平均价

2 找出字符串s中给定起始字符串和终止字符串的中间字符串,如s=“abcdefdfgg” Begins= bc endstr=df 则返回def

3 java连接数据库的代码

// MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
    static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB";
 
    // MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
    //static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  
    //static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&serverTimezone=UTC";
 
 
    // 数据库的用户名与密码,需要根据自己的设置
    static final String USER = "root";
    static final String PASS = "123456";
 
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try{
            // 注册 JDBC 驱动
            Class.forName(JDBC_DRIVER);
        
            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
        
            // 执行查询
            System.out.println(" 实例化Statement对象...");
            stmt = conn.createStatement();
            String sql;
            sql = "SELECT id, name, url FROM websites";
            ResultSet rs = stmt.executeQuery(sql);
        
            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                int id  = rs.getInt("id");
                String name = rs.getString("name");
                String url = rs.getString("url");
    
                // 输出数据
                System.out.print("ID: " + id);
                System.out.print(", 站点名称: " + name);
                System.out.print(", 站点 URL: " + url);
                System.out.print("\n");
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();

4 数据库中表的连接方式

所谓"连接",就是两张表根据关联字段,组合成一个数据集。问题是,两张表的关联字段的值往往是不一致的,如果关联字段不匹配,怎么处理?比如,表 A 包含张三和李四,表 B 包含李四和王五,匹配的只有李四这一条记录

 只返回两张表匹配的记录,这叫内连接(inner join)。
 返回匹配的记录,以及表 A 多余的记录,这叫左连接(left join)。
 返回匹配的记录,以及表 B 多余的记录,这叫右连接(right join)。
 返回匹配的记录,以及表 A 和表 B 各自的多余记录,这叫全连接(full join)

表 A 的记录是 123,表 B 的记录是 ABC,颜色表示匹配关系。返回结果中,如果另一张表没有匹配的记录,则用 null 填充。
四种连接,又可以分成两大类:内连接(inner join)表示只包含匹配的记录,外连接(outer join)表示还包含不匹配的记录。所以,左连接(LEFT JOIN
)、右连接(RIGTH JOIN)、全连接(FULL JOIN)都属于外连接。
交叉连接"(cross join),指的是表 A 和表 B 不存在关联字段,这时表 A(共有 n 条记录)与表 B (共有 m 条记录)连接后,会产生一张包含 n x m 条记录的新表

总结
内连接:inner join取两表的交集
等值连接、不等值连接、自连接

自然连接(natural join)
自然连接是一种特殊的等值连接,他要求两个关系表中进行比较的必须是相同的属性列,无须添加连接条件,并且在结果中消除重复的属性列

外连接
左连接、右连接、全连接

交叉连接:笛卡尔积

自连接:
可以把它这个过程想象成两张一样的表进行左连接或右连接,这样就会简单多了,其中一张表通过设别名的方式成为了虚表,但是共享原标中的信息

对输入框的检测

 验证输入与输出的是否信息一致;
 输入框之前的标题是否正确;
 对特殊字符的处理,尤其是输入信息徐需要发送到数据库的。特殊字符包括:’(单引号)、”(双引号)、[](中括号)、()(小括号)、{}(大括号)、;(分号)、(大于小于号)……
 对输入框输入超过限制的字符的处理,一般非特殊的没有作出限制的在255byte左右;
 输入框本身的大小、长度;
 不同编码的字符的输入;
 对空格、TAB字符的处理机制;
 字符本身显示的颜色;
 密码输入窗口转换成星号或其它符号;
 密码输入框对其中的信息进行加密,防止采用破解星号的方法破解;
 按下ctrl和alt键对输入框的影响;
 对于新增、修改、注册时用的输入框,有限制的,应该输入时作出提示,指出不允许的或者标出允许的;
 对于有约束条件要求的输入框应当在条件满足时输入框的状态发生相应的改变,比如选了湖南就应该列出湖南下面的市,或者选了某些条件之后,一些输入框会关闭或转为只读状态;
 输入类型;根据前面的栏位标题判断该输入框应该输入哪些内容算是合理的。例如,是否允许输入数字或字母,不允许输入其他字符等。
 .输入长度;数据库字段有长度定义,当输入过长时,提交数据是否会出错。
 .输入状态;当处于某种状态下,输入框是否处于可写或非可写状态。例如,系统自动给予的编号等栏位作为唯一标识,当再次处于编辑状态下,输入框栏位应处于不可写状态,如果可写对其编辑的话,可能会造成数据重复引起冲突等。

 如果是会进行数据库操作的输入框,还可以考虑输入SQL中的一些特殊符号如单引号等,有时会有意想不到的错误出现
 输入类型 输入长度 是否允许复制粘贴 为空的情况 空格的考虑 半角全角测试 对于密码输入框要考虑显示的内容是* 输入错误时的提示信息及提示信息是否准确
 可以先了解你要测试的输入框在软件系统的某个功能中所扮演的角色,然后了解其具体的输入条件,在将输入条件按照有效等价类,无效等价类,边界值等方法进行测试用例的设计。
 关键字有大小写混合的情况;
 关键字中含有一个或多个空格的情况,包括前空格,中间空格(多个关键字),和后空格;前后的空格是否过滤, 中间的空格是否保留
 关键字中是否支持通配符的情况(视功能而定);
 关键字的长度分别为9、10、11个字符时的情况;
 关键字是valid,但是没有匹配搜索结果的情况;
 输入html的标签会出现哪些问题?输入&lt;html&gt; 会出现什么问题呢?
 字符串中带JS标记对, 比如
 是否支持多行,保存是否成功,显示是否按输入的多行显示
 多浏览器的兼容性

数值型的输入框测试点:

1、重复
2、空 不填写是否支持
2、数值类型:
a: 小数 支持的位数、不够支持的位数时,后面是否自动补零,超过支持的位数时,是四舍五入还是直接舍去
b: 整数
3、0 是否支持、是否符合业务逻辑
4、负数是否支持
5、数值的范围:例如 -5<X<5
a: 小数类型时且为4位小数时:-5.0000 -4.9999 0.0000 4.9999 5.0000
b:整数类型时:-5 -4 0 4 5
6、非数字类型是否支持输入
7、半角的数字、全角的数字
8、空格+数字
9、多浏览器的兼容性

输入框测试应该可以分以下几种情况进行测试:

唯一性
如:用户名注册,输入后即检查用户名是否已存在
输入类型
1)字母(大写、小写)
2) 数字(整数、小数;正数、负数、0)
3)中文
4)特殊字符(包括xml敏感字符、json敏感字符)
5)空、空格
输入长度
1)允许输入范围
2)临界值
3)不允许输入范围
提示信息(提示语言的正确性,对一些异常情况进行处理,主要检查提示的正确性、完备性、友好性等,一般是结合bottom 进行测试)
兼容性
1) 浏览器兼容性
2) 系统兼容性 (手机、电脑、平板等)

**

2 当测试任务很紧急,只剩一天并且只能你自己一个人测试的话怎么办

**

3 给定一个存储集群,只用路由器来进行负载均衡,即当有多个请求来时优先分发给当前执行请求数较少的node节点,怎么测试

十个免费的 Web 压力测试工具
(1)Grinder
Grinder是一个开源的JVM负载测试框架,它通过很多负载注射器来为分布式测试提供了便利。 支持用于执行测试脚本的Jython脚本引擎HTTP测试可通过HTTP代理进行管理。根据项目网站的说法,Grinder的 主要目标用户是“理解他们所测代码的人——Grinder不仅仅是带有一组相关响应时间的‘黑盒’测试。由于测试过程可以进行编码——而不是简单地脚本 化,所以程序员能测试应用中内部的各个层次,而不仅仅是通过用户界面测试响应时间。
(2)pylot
Pylot 是一款开源的测试web service性能和扩展性的工具,它运行HTTP 负载测试,这对容量计划,确定基准点,分析以及系统调优都很有用处。Pylot产生并发负载(HTTP Requests),检验服务器响应,以及产生带有metrics的报表。通过GUI或者shell/console来执行和监视test suites。
(3)Web Capacity Analysis Tool (WCAT)
这是一种轻量级负载生成实用工具,不仅能够重现对 Web 服务器(或负载平衡服务器场)的脚本 HTTP 请求,同时还可以收集性能统计数据供日后分析之用。WCAT 是多线程应用程序,并且支持从单个源控制多个负载测试客户端,因此您可以模拟数千个并发用户。该实用工具利用您的旧机器作为测试客户端,其中每个测试客户 端又可以产生多个虚拟客户端(最大数量取决于客户端机器的网络适配器和其他硬件)。您可以选择使用 HTTP 1.0 还是 HTTP 1.1 请求,以及是否使用 SSL。并且,如果测试方案需要,您还可以使用脚本执行的基本或 NTLM 身份验证来访问站点的受限部分。(如果您的站点使用 cookie、表单或基于会话的身份验证,那您可以创建正确的 GET 或 POST 请求来对测试用户进行身份验证。)WCAT 还可管理您站点可能设置的任何 cookie,所以配置文件和会话信息将永久保存。
(4)fwptt
也是一个用来进行WEB应用负载测试的工具。它可以记录一般的请求,也可以记录Ajax请求。它可以用来测试 asp.net, jsp, php 或是其它的Web应用。
(5)Apache JMeter
用于对软件做压力测试,是一个专门为运行和服务器装载测试而设计的、100%的纯Java桌面运行程序。原先它是为Web/HTTP测试而设计的,但是它已经扩展以 支持各种各样的测试模块。它和用于HTTP和SQL数据库(使用JDBC)的模块一起运送。它可以用来测试静止资料库或者活动资料库中的服务器的运行情 况,可以用来模拟对服务器或者网络系统加以重负荷以测试它的抵抗力,或者用来分析不同负荷类型下的所有运行情况。它也提供了一个可替换的界面用来定制数据 显示,测试同步及测试的创建和执行。
JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来在不同压力类别下测试它们的 强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果
JMeter测试实例
https://blog.csdn.net/laofashi2015/article/details/80626928
(6)http_load 以并行复用的方式运行,用以测试web服务器的吞吐量与负载。但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机搞死。可以测试HTTPS类的网站请求
(7)OpenSTA
是一个免费的、开放源代码的web性能测试工具,能录制功能非常强大的脚本过程,执行性能测试。例如虚拟多个不同的用户同时登陆被测试网 站。其还能对录制的测试脚本进行,按指定的语法进行编辑。在录制完测试脚本后,可以对测试脚本进行编辑,以便进行特定的性能指标分析。其较为丰富的图形化 测试结果大大提高了测试报告的可阅读性。OpenSTA 基于CORBA 的结构体系,它通过虚拟一个proxy,使用其专用的脚本控制语言,记录通过 proxy 的一切HTTP/S traffic。通过分析OpenSTA的性能指标收集器收集的各项性能指标,以及HTTP 数据,对系统的性能进行分析

4 介绍一个项目

5 介绍一下你遇到过的最困难的事情

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值