软件测试面试题(四)

1、编译错误和运行错误的区别

  • 编译错误一般指语法错误或者很明显的逻辑错误, 如 : 缺少分号, 少写括号, 关键字书写错误等
  • 运行错误是在没有编译错误的基础上运行后产生的逻辑错误, 如 : 空指针异常, 除数为0 , 越界访问等

2、数据库的存储过程

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。

3、怎么优化数据库查询效率

MySQL 常见的数据库查询性能优化手段

如何优化数据库的查询效率

存储引擎的选择:如果数据表需要支持事务处理,应该考虑 Innodb 引擎,因为它完全符合 ACID 的特性;如果数据表不需要支持事务处理,则使用存储引擎 MyISAM

  • 对查询进行优化,要尽量避免使用全表扫描,首先应考虑在 where 以及 order by 字句涉及的列上建立相应的索引
  • 尽量避免在 where 子句当中使用 != 或者 > , < 等操作符,否则将导致存储引擎放弃使用索引,而进行全表扫描
  • 尽量避免在 where 子句当中使用 null 值进行判断,否则将导致存储引擎放弃使用索引,而进行全表扫描
  • 尽量避免在 where 子句当中使用 or 的判断,如果一个字段有索引,一个字段没有索引,将会导致引擎放弃使用索引,而进行全表扫描
  • 下面的查询也将导致全表扫描:(不能使用前置百分号) select id from t where name like ‘%abc%’;
  • 清楚并不是所有的索引都对查询有效,SQL 是根据表中的数据来进行查询优化的,当索引列中有大量数据重复时,查询可能不会去利用索引,如一表中有字段 sex,男女几乎各占用一半时,那么即使在 sex 上建了索引,也对查询效率起不了作用
  • 索引并不是越多越好,索引可以提高相应的 select 的效率,但同时也降低了 insert 和 update 的效率,因为 insert 和 update 时有可能会重建索引,引起两次查询,所以怎样建索引需要慎重考虑,视具体情况而定
  • 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,设置为字符型这将会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型数据而言,只需要比较一次就够了
  • 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引,而进行全表扫描(例如: select id from t where num=100*2; )
     

4、数据库优化方案

如何优化数据库的查询效率

  • 设计表的时候,严格按照数据库设计规范来设计表
  • 使用缓存,把经常访问,并且不需要经常变化的数据放在缓存中,能够减少磁盘 IO 读写次数,因为磁盘 IO 传输速度很慢
  • 采用 mysql 自带的表分区技术,把数据分成不同的文件,能够提高磁盘的读写效率
  • 选择合适的引擎,参数上的优化(能用char(10),就不用char(20))
  • 不采用全文检索
  • 避免频繁创建和删除临时表,以减少系统表资源的消耗
     

五、B/S架构和C/S架构的定义和区别(不同点)

一、B/S架构和C/S架构的定义

1、B/S(Browser-Server)浏览器和服务器架构。 (比如百度、微博、淘宝等网站)

包含寄户端浏览器、web应用服务器、数据库服务器的软件系统。用户只需要一个浏览器就可以访问服务。系统更新时候,只需要更新服务端,不需要更新浏览器 。

2、C/S(Client-Server)客户机和服务器结构。(比如微信、王者荣耀手游,QQ音乐等软件)。

C/S结构与B/S最显著的区别是需要安装客户端,通过客户端程序来访问应用系统。所以系统更新时,既要更新服务端,也要更新客户端。

二、B/S与C/S区别(不同点)

1、硬件环境不同:

C/S建立在专用网络上,小范围的网络环境(相对B/S),局域网之间再通过专门服务器提供连接和数据交换服务。

B/S建立在广城网上,不需要专门的网络硬件环境

2、安全要求不同:

C/S一般面向相对固定的用户群,对信息安全控制能力强,一般高度机密的信息系统采用

B/S建立在广城网上,对安全的掌控能力弱,面向不可知的用户的用户群。

3、系统维护不同:

C/S程序由于整体性,必须整体考察,升级困难,多建立在Windows上,表现方法有限,对程序员要求较高。

B/5系统无缝升级,维护开销小,有更加丰富的表现形式,开发难度较低。

4、处理问题不同:

C/S处理用户固定,安全需求高,要求相同操作系统。

B/S面向所有用户,分散广,对系统要求小。

六、什么是自动装箱和自动拆箱

java中为没一种基本类型都提供相应的包装类型。

byte,short,char,int,long,float,double和boolean

Byte,Short,Character,Integer,Long,Float,Double,Boolean。

自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛_Chenpangzi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值