网易测试开发工程师笔试体会(秋招)

题型1(单选题20*3)(2016年9月12日19:00-21:00)

不太难(涉及软件工程、测试理论、java程序代码、操作系统、计算机网络等内容)

题型2(简答题2*20)

1.一个简单的论坛系统,以数据库储存如下数据: 用户名,email,主页,电话,联系地址,发帖标题,发帖内容,回复标题,回复内容。每天论坛访问量300万左右,更新帖子10万左右。 请给出数据库表结构设计,并结合范式简要说明设计思路。

参考:

一 分割思想:

1   数据库切分:用户库、主题库、回复库

2   数据表水平切分:用户库1-n、主题库1-n、回复库1-n (比如按时间分)
3   分布式数据库:每台计算机中都有DBMS的一份完整拷贝副本,并具有自己局部的数据库,位于不同地点的许多计算机通过网络互相连接,共同组成一个完整的、全局的大型数据库。

4   论坛功能可以进行分隔,不同的服务器负责不同的功能

5  用主从数据库,master是写, slave是读
6  把内容与其它信息分开,好处就是可以让每个表的文件最小化,对数据库操作压力会减小,这样保证每张表数据量很小,操作速度会快,也可以在这里使用缓存

二 索引:

针对是否建立索引有着一定的分歧:

我觉得建立索引还是很有必要的。理由如下:

1)建立索引可以加快检索速度,对于论坛读和写的比例相差很大,用户体验当然是读多写少,所以综合考虑还是要用索引,而且是加在常用的读关键字上。

2)索引之所以会降低更新的速度,是因为更新还包括对索引的更新,从更新帖子10万左右,这句话是说,我们可能对发帖标题,发帖内容,回复标题,回复内容这4个字段做更新。需要注意的是,这四个字段并不是用来建立表连接的字段,为了优化查询速度我们不会在这四个字段上建立索引,所以从这道题目出发,我们建立的索引不会影响更新帖子的性能。只要被索引的列(例如回复表的标题ID)不被频繁更新,即使索引所在地行的其它列被频繁update,索引也不会被更新从而产生性能消耗,一张表一天30万次的索引更新,因它引起的性能消耗小到即使数据库安装在奔腾3单核CPU下都能轻松承担下来。

3)对于更新的速度慢的问题,我们有解决的方法,你提交更新了后,前台可以让程序返回一个正确结果,后台开个线程异步慢慢跟新数据库就是了,反正更新成功的前提就是假设数据库连接永远正确并处于可靠状态。在数据库和用户之间建立一个缓冲区。(如,将更新的数据放到内存中,达到一定数量的时候再统一更新数据库。假如以100条为例,一旦内存中达到100条数据量将这100条数据统一入库。减少insert操作)

三 缓冲:

读的时候的缓冲:缓存路由表

主题缓存表(这个取每个区的前面100条记录),一般来说负载最大的就是主题的第一页,所以缓存表是个小表。

另外使用hibernate,在数据库上面加了一层缓存。

生成静态页,缓存最热,最新的帖子。

对于经常更新的数据都设计成单独表 ,这样可以最大程度的利用hibernate缓存

缓存常用的数据和表,利用缓存来将经常被访问的帖子留在内存中,为每条缓存的记录添加一个访问时间,如果长时间没被访问就从缓存中删除掉,

避免内存过大,每次用户看帖的时候,首先检索缓存中时候有需要的帖子,没有的话再访问数据库,然后将数据库返回的帖子信息存储到缓存中。

写的时候的缓冲:数据库和用户之间建立缓存,将更新的数据放在内存中,异步操作的。所有的写贴操作 放到一个队列然后批量执行插入数据库操作。

预估计的缓冲:假如用户第一次打开某标题,那将此标题的相关的前100条数据缓存到客户断。这样避开对数据库的直接查询,减少数据库压力。

四 代码优化

1尽量避免表的连接约束通过代码来实现约束 例如用户id的验证在用户登录时验证这样就可以把帖子表的用户id外键去掉这样就成了单表操作、查询 而连接可以通过触发来实现这样最多是查询了3个表而不是连接中的笛卡尔笛卡尔积  回复表的查询限定每次查询的记录数例如限定10条其它的通过点击触发来操作"注代码优化容易出现bug 原因有些开发工具本身有优化"

五 数据库性能调优

尽量用硬件来代替软件优化 原则就是能用硬件的尽量用硬件 比如磁盘阵列 RAID0 有条件用RAID10 加大内存 .避免小表上建索引 对论坛来说数据帖子和回复不是很重要 可以定期删除一些垃圾帖子 楼主说的几百万条记录的论坛对现在的数据库管理系统和计算机来说永不着刻意的优化,定期维护打包备份数据库就可以了

提高速度的关键: 
1.建立合理的索引并在查询时充分利用; 
2.避免使用关联,这样避免整表扫描;使用关联不如多次使用主键查询来的快; 
3.一些处理的功能尽可能放到内存中来做,比如组织主题和回复; 
4.海量缓存(使用静态页面也是个不错的做法)

5 定期对表进行转储

 2.你经常使用那些自动化测试工具,说出它们的特点?

1)QTP

1)QTP是一个侧重于功能的回归自动化测试工具;提 QTP(6张)供了很多插件,如:.NET的,Java的,SAP的,Terminal Emulator的等等,分别用于各自类型的产品测试。默认提供Web,ActiveX和VB。

2)QTP支持的脚本语言是VBScript,这对于测试人员来说,感觉要“舒服”得多(如相比SilkTest采用C语言)。VBScript毕竟是一种松散的、非严格的、普及面很广的语言。

3)QTP支持录制和回放的功能。录制产生的脚本,可以拿来作为自己编写脚本的template。录制时,还支持一种lower level 功能,这个对于QTP不容易识别出来的对象有用,不过它是使用坐标来标识的,对于坐标位置频繁变动的对象,采用这种方式不可行。另外,QTP的编辑器支持两种视图:Keyword模式和Expert模式。Keyword模式想法是好的,提供一个 描述近似于原始测试用例的、跟代码无关的视图(我基本很少用,除了查看、管理当前test中各个action的完整流程),而Expert就是代码视图,一般编写脚本都在这个区域。

4)一个有用的工具:Object Spy,可以用来查看Run-time object和Test object属性和方法。

5)QTP通过三类属性来识别对象:a)Mandatory; b)Assistive; c)Ordinal identifiers。大部分情况下,通过对象的一些特定属性值就可以识别对象(类型a)。这些属性可以通过Tools->Object Identification 定义。

6)Object Repository(OR)是QTP存储对象的地方。测试脚本运行后,QTP根据测试脚本代码,从这个对象库中查找相应对象。每个Action可以对应有一个或者多个OR,也可以设置某个OR为 sharable的,这样可以供其他Action使用。注意,使用QTP录制功能时,默认将被测对象放在local OR中,可以通过 Resources->Object Respository,选择Local查看。

7)说到QTP的要点,不得不说Action。Action是QTP组织测试用例的具体形式,拥有自己的DataTable和Object Repository,支持Input和output参数。Action可以设置为share类型的,这样可以被其他test中的Action调用(注意:QTP是不支持在一个test中调用另外一个test的,只有通过sharable action来调用)。

8)如3)所述,一个test中,多个action的流程组织,只有通过Keyword视图查看和删除,在Expert视图中没有办法看到。

9)调用Action可以通过菜单Insert->Call to *** 来实现。QTP提供三种类型的调用方式:a)call to new Action,在当前test中创建一个新的Action;b)call to Copy of Action;c)call to existing action,调用一个re-usable action,如果这个re-usable action来自另外一个test,将以只读的方式插入到当前test中。

10)QTP提供excel 形式的数据表格DataTable,可以用来存放测试数据或参数。DataTable有两种类型:global 和local。QTP为DataTable提供了许多方法供存取数据,在对测试代码进行参数化的时候,这些方法非常有用。

11)环境变量(Environment Variables)。在一个test中,环境变量可以被当前test中所有action共享。环境变量也有两种类型:build in 和user defined。用户自定义的环境变量可以指向一个XML文件,这样可以实现在众多test之间共享变量。

12)QTP可以引用外部的VBS代码库,通过Settings-》Resource加入,也可以ExecuteFile命令在代码中直接执行。这种VBS库可以为所有action和test共享。

13)QTP默认为每个test提供一个测试结果,包括Passed,Failed,Done,Warning和information几种状态类型,可以进行对结果Filter。但是,只能为每个test产生一个testing result,不能为多个testing产生一个总的testing result.

2)postman

特点:

  • 更多的Http方法:Postman除了支持GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS这些常用Http方法,还支持COPY、LINK、UNLINK、PURGE。
  • 集合(Collection)功能:Postman可以管理Http请求的集合,在做完单个测试时,可以将该请求存入特定集合内。这样在后继的重复测试,无需重新输入Http请求,就可以快速测试并获得结果。集合支持输入或导出,便于团队共享。
  • 设置环境变量(Environment):Postman可以管理环境变量。一般我们有可能有多种环境:development、staging或local,每种环境下的请求URL有可能各不相同。通过环境变量,在切换环境测试时无需重写Http请求

3)火狐开发者工具(fireBug)

题型3.编程题2道(2*20)

1.有一袋6个的苹果和一袋8个的苹果,不能拆开,为了便于携带,购买袋数最少的,若跟购买的总数n不一致则不购买

例如:输入20

输出:3

2.不记得了

时间: 2024-10-07 20:45:00

网易测试开发工程师笔试体会(秋招)的相关文章

对测试开发工程师的理解

随着测试在软件开发周期中越来越受到重视,国内测试的缺口一直比较大,各种软件和互联网公司都大肆招收测试工程师,有些走在前面的公司甚至从今年开始取消了测试工程师职位,全部变成了测试开发职位,比如百度.一方面测试开发表明了对工程师有更高的要求,需要在具有测试能力的基础上兼备开发能力:另一方面自动化测试成为趋势,利用开发的技巧解决测试中的问题以提高测试效率,降低QA与RD的人力比. 1.技术含量 面试过许多的应届毕业生,问及为什么选择测试开发这个职位时,经常听到以下的回答: “我觉得自己开发能力比较弱,

Java or Python?测试开发工程师如何选择合适的编程语言?

很多测试开发工程师尤其是刚入行的同学对编程语言和技术栈选择问题特别关注,毕竟掌握一门编程语言要花不少时间成本,也直接关系到未来的面试和就业(不同企业/项目对技术栈要求也不一样),根据自身情况做一个相对正确的选择确实要比盲目投入更明智也更高效. 目前最常见的情况是纠结选择 Java 还是 Python?关于这个问题,我搜索了之前的相关博客,也特意请教了几位资深的测试技术专家,在这里做一个汇总整理,集"各家"之言供大家参考.也欢迎各位朋友根据自己的经验回帖补充意见. P.S. 有一点需要强

【转】测试开发工程师必备软硬能力&高级测试开发工程师需要具备什么能力?

对于测试的基本知识,可以查看软件测试相关书籍 对于在公司成为一位优秀的测试开发工程师,我觉得下面这篇文章涉及到的是我们需要的,稍微进行改动https://blog.csdn.net/sinat_21026543/article/details/79909062 测试流程方面:从最开始的分析需求开始,逐步地跟着项目走完整个测试流程,包括纯手工测试,包含了自动化的测试流程,包含了性能测试的测试流程,直至每一个测试报告的最终形成,理解一个科学,正确,严谨,正规化的测试流程. 测试方法方面:注重理论知识

《Google软件测试之道》测试开发工程师

拖延了将近半年的草稿,断断续续的写完了.之前草草翻看完这本书,关注点主要在TE上,而关于SET的部分则只是浏览,最近后知后觉,又翻出了这本书,重新看了一遍,又有新收获. 就说说Google的SET是如何做的,以及个人的一些思考和收获吧,寥有慰藉... Google的测试流程可以简练的概括为:让每个工程师都注重质量.而在工作流程引入过程中也伴随着一些致命的缺陷,下面简述下Google是如何解决以及其测试流程的是如何进化的. ①.测试并不能保证产品质量.需要一直谨记的一点:质量是内建的,而不是外加的

什么是测试开发工程师-google的解释

“ 软件测试开发工程师[SET or Software Engineer in Test],和软件开发工程师一样是开发工程师,主要负责软件的可测试性.他们参与设计评审,近距离地关注代码质量和风险,对代码做重构为了系统有更好的可测试性,同时他们负责写单元测试框架和自动化测试的框架.在代码级别上他们和软件开发工程师是合作伙伴,但如果和增加新功能或提升性能相比较,他们更关心产品的质量和测试覆盖率的提升.”

腾讯测试工程师笔试体会

时间:2016年9月10日 笔试题目:25道多选题(限时60分钟)+25道填空题(限时60分钟) 1.多选题涉及数据结构.操作系统.计算机网络.C语言.软件工程.安卓.C++相关类型的题目 2.填空题及数据结构.操作系统.计算机网络.C语言.软件工程.安卓.C++相关类型 例如:1.android在内存使用上默认没有使用(),而使用low memory killer 可以让APP有足够的内存使用 2.读程序,写出输出 3.比较2段程序说出面向对象编程语言的一个基本特性 4.哈夫曼编码 5.对于3

网易游戏(互娱)-游戏测试开发工程师-C++

1.已知一棵二叉树的前序遍历是ABCDEFGH,那么它的中序遍历一定不可能是: A. CBEDAGFHB. BADCFEHGC. DCEBFAHGD. CBDAFEHG 答案:无 考点:二叉树遍历 前序遍历:根左右 中序遍历:左根右 后序遍历:左右根 2. 10000个人背上依次贴着从1到10000的编号,他们从小到大依次报数,偶数出列,一圈后,从剩下的5000人再次从号码小的开始报数,偶数出列,直到没人出列为止.问最后一次出列的人,背上的编号是多少? A. 1B. 2049C. 4097D.

多益游戏研发笔试-2019秋招

今天...早上10点赶去西电去参加了宣讲会,完了做了一个笔试....估计没什么情况.编程题不会做.下午又做了平安产险的笔试(比较随便,编程是一道Leetcode简单题吧---求最大连续子数组的和O(n)),晚上通知去第二天面试. 晚上刚做完多益的笔试,比较正经. 1. 20道选择,涉及算法数据库和操作系统方面的知识: 2. 6道填空题,涉及数据结构和算法: 3. 简答题:一个英翻汉,一个数据库,还有一个多线程和多进程的区别: 4. 一道编程:O(n)洗牌算法,忘记了,写了一个大于O(n)的. 贴

网易机器学习算法工程师笔试编程题

1. 小易为了向他的父母表现他已经长大独立了,他决定搬出去自己居住一段时间.一个人生活增加了许多花费: 小易每天必须吃一个水果并且需要每天支付x元的房屋租金.当前小易手中已经有f个水果和d元钱,小易也能去商店购买一些水果,商店每个水果售卖p元.小易为了表现他独立生活的能力,希望能独立生活的时间越长越好,小易希望你来帮他计算一下他最多能独立生活多少天. 输入描述: 输入包括一行,四个整数x, f, d, p(1 ≤ x,f,d,p ≤ 2 * 10^9),以空格分割 输出描述: 输出一个整数, 表