真正面试1:自我介绍,2:python和java的区别, 3:面向对象的三大特性,4:具体解释多态,5:Linux的基础命令,6:单例模型,7:给一个继承实例说出他的输出,8:数据库的查询语句,9,介绍一下你自己做过的项目或者参加过的竞赛,担任的角色,实现的效果。10:反问
其他不是技术问题:1:最快入职时间,2:公司位置偏远能接受吗?3:为什么不选择研究所?4:为什么选择测试而不是开发?
2:python和java的区别
- 开源
都是开源语言,java的体量要大很多,中文版本多,python资料少且都是英文的。
- 面向对象
Java的面向对象体现在动态的接口模型以及非常简单的类机制,他们在对象中封装了父类的变量以及方法,实现了模块化和信息隐藏,而类则提供了类对象的原型,我们通过继承机制可以在子类中使用符类的方法,从而实现代码的复用。
python则支持更加简单粗暴的方式实现面向对象,对于python来说既支持面向过程的函数式编程也支持面向对象的抽象编程。
- 可移植性
都可以跨平台,但是跨平台的方式不同,Java跨平台是因为Java运行于jvm虚拟机中,但是虚拟机在各个平台的实现是不同的,跨平台不彻底,python的跨平台是由语言本身的特性决定的,在不同的平台上写的python代码都可以随便运行,可惜不是支持所有的平台的跨平台,所以两者都是不彻底的跨平台。
- 类库
Java有强大的类库,只需要一些简单的基础语法的调用就能解决大部分的问题。
python也有强大的标准库,不同的是python还可以定义第三方库使用,所以除了标准库我们还有其他高质量的库。
- 应用领域
Python的应用领域主要在游戏开发、搜索引擎、图形图像处理、脚本开发等。
Java的应用领域主要是服务器开发,web开发和安卓开发等。
- 执行
Java解释器直接对Java字节码进行解释执行,使得连接过程更加简单,Java字节码的设计使之能很容易地直接转换成对应于特定CPU的机器码,从而得到较高的性能。
python解释器把源代码转换成字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。
- Java是一种静态类型语言,Python是一种动态类型语言
静态类型语言:(1)变量的类型在编译时确定,(2)运行时不能修改变量的类型
动态类型语言:(1)变量的类型在运行时确定,(2)变量的类型可以在操作过程中修改
强类型语言:强制数据类型定义的语言。一旦给一个变量赋了某个数据类型,如果不进行强制转换,那么它永远是该数据类型。强类型定义语言是一种类型安全的语言。
弱类型语言:数据类型可以忽略的语言。变量可以被赋予不同数据类型的值。
3:面向对象的三大特性(引用)
封装、继承、多态
封装和继承目的都是为了代码重用,多态目的是为了接口重用。
- 封装:封装是把客观事物抽象成类,并且把自己的属性和方法让可信的类或对象操作,对不可性的隐藏。
- 继承:继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
java的访问权限
继承与接口与抽象类
接口可以继承接口,但用extends 而不是implement。
接口不能继承抽象类,抽象类可以实现(implement)接口。原因是接口的实现和抽象类的继承都要重写父类的抽象方法。而接口里只能有抽象方法,抽象类里则允许有抽象方法和非抽象方法。
抽象类可以继承实体类。
- 多态
多态性(polymorphism)1:操作名称的多态性,多个操作具有相同的名字,可以向操作传递不同的信息,以便对象根据相应的消息产生一定的行为,2:与继承有关的多态,同一个操作被不同类型对象调用时可能产生不同的行为。
实现多态,有二种方式,覆盖,重载。
覆盖,是指子类重新定义父类的虚函数的做法。
重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
多态又分为 编译时多态和运行时多态。
编译时多态:比如重载(功能多样性)
运行时多态:比如重写(与继承有关的多态性)
6:单例模型
1:自我介绍
2:数据库:
查询:
select 字段1,字段1,.... from 表名 [where 条件] [group by 字段名] [order by 字段名 排序规则] [having 条件] [limit 起始位置,数量]
/*
分析思路
select 查询结果 [性别,对应性别的人数:汇总函数count]
from 从哪张表中查找数据 [性别在学生表中,所以查找的是学生表student]
where 查询条件 [没有]
group by 分组 [男生、女生人数:按性别分组]
having 对分组结果指定条件 [没有]
order by 对查询结果排序[没有]
limit 起始位置,数量;
*/
SQL里面having和where的区别是什么?
- 相同点:都对条件做判断,在普通情况下使用查询数据库已有字段是两者都可以用
- 不同点
1):最重要的区别是having可以和聚合函数搭配使用,如常用的group by,where不可以和聚合函数搭配使用
2):另外一种情况下不能使用having却能使用where的情况是:条件字段名称不在select的里面
3:软件测试的方法有哪些?引用
黑盒测试(功能测试)、白盒测试(结构测试)
黑盒测试:把测试对象看做一个黑盒子,检查程序的功能是否符合它的功能说明
黑盒测试是一种宏观功能上的测试,该方法适合测试部门的测试人员或用户
白盒测试:把测试对象看做一个透明的盒子,对程序所有的逻辑路径进行测试
适合于很小单元的测试,以及从事软件底层工作、生产构件的测试人员进行的测试。
4:测试的基本流程
需求分析阶段:阅读需求,理解需求,分析需求点,参与需求评审会议。
测试计划阶段:主要任务就是编写测试计划,参考软件需求规格说明书,项目总体计划,内容包括测试范围,进度安排,人力物力分配,整体测试策略的制定。
编写测试用例:适当的了解设计,搭建测试用例框架,根据需求和设计编写测试用例。
测试执行阶段:搭建环境准备数据,执行冒烟测试(预测试)然后进入正式测试(系统测试、回归测试、交叉测试、自由测试),bug管理直到测试结束。
输出测试报告:输出测试报告,确认是否可以上线。
5:测试过程的4个步骤
单元测试、组装测试、确认测试、系统测试
步骤一、单元测试
又称模块测试,针对软件设计的最小单位——程序模块,进行正确性检验的测试工具。单元测试的内容如下
步骤二、组装测试
通常,把模块组装成为系统的方式有:一次性组装方式、增值式组装方式
一次性组装:如果在没有问题的情况下,时间块
增值式组装方式:自顶向下的增值方式、自底向上的增值方式、混合增值式测试
步骤三、确认测试
又称有效性测试。任务是验证软件的功能和性能及其它特性是否与用户的要求一致
步骤四、系统测试
后一个测试,把所有的设备以及实际环境进行测试
测试
功能测试,界面测试,性能测试,安全性测试,可用性测试,兼容性测试。
6:如何测试一个杯子:
反问需求;
功能测试:
- 能否装水,
- 除了装水, 能否装其他液体。比如可乐,酒精
- 能装多少ML的水
- 杯子是否有刻度表
- 杯子能否泡茶,跑咖啡
- 杯子是否能放冰箱,做冰块
- 杯子的材质是什么(玻璃,塑料,黄金做的)
界面测试:
- 外观好不好看。
- 什么颜色
- 杯子的形状是怎么样的。
- 杯子的重量是多少
- 杯子是否有异味
- 杯子的图案是否合理
性能测试:
- 能否装100度的开水 (泡茶)
- 能否装0度冰水
- 装满水,放几天后,是否会漏水
- 杯子内壁上的涂料是否容易脱落。
- 杯子上的颜色是否容易褪色或者脱落
安全性测试:
- 制作杯子的材料,是否有毒
- 放微波炉里转的时候,是否会爆炸, 或者杯子是否会熔化。
- 从桌子上掉到水泥地上是否会摔碎。
- 杯子是否容易长细菌
- 杯子是否有缺口,会划坏嘴巴
- 杯子内壁上的材料,是否会溶解到水中
- 杯子破碎后,是否会对使用者造成伤害
可用性测试:
- 杯子是否容易烫手
- 杯子是否好端,好拿
- 杯子的水是否容易喝到
- 杯子是否有防滑措施
7:设计登录页面的测试用例(引用):
了解用户的需求 --》 设计用例
一:功能测试(function test)
- 什么都不输入操作提交按钮后代码的处理动作是如何的(非空检查)
- 输入正确的用户名和密码,点击提交按钮后验证是否正确登录。(正常输入)
- 输入错误的用户名或者密码(原作者这个“或者”很严谨啊)验证点击登录后时候会提示失败(错误校验)
- 登录成功后是能否跳转到正确的页面(功能校验)
- 用户名和密码输入内容是否支持特殊字符(比如表情字符类空格)和其他非英文的情况(是否做了过滤)
- 记住用户名的功能
- 登录失败后不能记录密码的功能
- 用户名和密码前后有空格的处理、
- 密码是否加密显示(使用星号或者圆点等)
- 牵扯到验证码的还要考虑文字是否扭曲过度导致辨认难度大,考虑颜色(色盲使用者),刷新或换一个按钮是否好用
- 登录页面中的注册忘记密码,登出用另一账号登陆链接是否正确
- 输入密码的时候大写键盘开启的时候是否要有提示
二:界面测试(UI test)
- 页面布局是否合理等
- 输入正确的用户名个密码后登陆成功跳转到新页面的不能超过5秒
三:性能测试(performance test)
- 打开登陆页面后需要几秒
- 输入正确的用户名和密码后登陆成功跳转到新页面不超过的上限时间
四:安全性测试(security test)
- 登陆成功后生成的cookie是否会HTTPonly(否则容易被脚本盗取)
- 用户名和密码是否通过加密的方式发送给web服务器
- 用户名和密码的验证,应该是服务器端的验证, 而不能单单是在客户端用JavaScript验证、
- 用户名和密码的输入框,应该屏蔽SQL注入攻击
- 用户名和密码的输入框应该禁止输入脚本(防止XSS的攻击)
- 错误登录的次数限制(防止暴力破解)
- 考虑是否支持多用户同时登录
- 考虑是否支持在多台机器上登录
五:可用性测试(usability test)
- 是否可以全用键盘操作 是否有快捷键
- 输入用户名和密码后按回车是够可以登录
- 输入框能否可以以tab键切换
六:兼容性测试(Compatibility Test)
- 主流的浏览器能否显示正常以及功能正常(常见的浏览器有:TE6789、Firefox、Chrome、Safari、等)
- 不同的平台是否正常工作,比如windowS MAC 等、
- 不同的移动设备上是否能够正常工作,如iOS、Android等环境
- 不同的分辨率下的UI显示是否正常
七:本地化的测试(localization test )
- 不同语言环境下页面的内容是否正确
八:软件辅助性测试(accessibility test)
- 软件辅助功能测试是指软件是否向残疾用户提供足够的辅助功能
- 高对比下是否显示正常(视力不好的人使用)