软件开发面试题总结整理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

软件开发面试题总结整理

一、java8 新特性

1、增加函数式接口,支持lambda表达式,使用lambda表达式和方法引用,可以使代

码更简洁。

缺点:在非并行计算中,很多计算未必有传统的for性能要高。

2、Stream 对集合、数组实现一系列的聚合操作,可以实现像sql一样操作数据。

一般和lamda配合使用。

int count = strings.stream().filter(string -> string.isEmpty()).count();

还有map、limit等方法。Map映射每个元素到对应的结果。

sorted 方法用于对流进行排序。

二、Java支持的数据类型有哪些?什么是拆装箱?

Java中有八种基本数据类型以及引用类型

基本数据类型:

byte(1字节),short(2字节),int(4字节),long(8字节),char(2字节),boolean(不确定,取值是true/false),float(4字节),double(8字节)引用数据类型:包括数组,集合,字符串,接口以及类等

自动装箱/自动拆箱:就是指基本数据类型可以和其对应包装类之间自动转换

三、值传递和引用传递的理解:

值传递是在方法调用的时候,实参复制一份给形参,方法体内对参数变量的修改不影响原来的那一份。引用传递指的是实参和形参指向同一个内存地址,在方法中修改了形参的值,原来的值也就改变了。

四、Array和ArrayList的区别。

Array是容量固定的,效率比较高。ArrayList可以实现自动扩容,但是效率比较低。

数组扩容是对ArrayList效率影响比较大的一个因素。每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。

五、数据库索引

目的是提高查询速度。一般在WHERE和JOIN中出现的列需要建立索引。

包括普通索引、唯一索引、主键索引、组合索引。

索引失效的情况:

1、使用<> not in、not exist、like”%_”

2、对索引列进行运算。

3、某个字段被定义为varchar2(20),但在查询时把该字段作为number类型以where条

件传给Oracle。

索引的缺点:

1、使用索引虽然会提高查询速度,但是会降低更新性能,在执行insert、update、delete

时,不仅要更新数据,还要更新索引文件。

2、建立索引会占用磁盘空间的索引文件。

使用索引的注意事项:

1、索引中不会包含有NULL值的列,如果某一列中有NULL值,那么这一列对索引是无

效的。在数据库设计时不要让字段的默认值为NULL。

2、尽量使用短索引,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。

3、尽量避免在列上进行运算,尽量避免使用like操作。

索引的原理:平衡树,也就是B+树。查询次数为树的深度,所有的数据都在叶子节点上。缺点:更新索引之后需要判断是否还平衡,不平衡的话调整树结构,使他变得平衡。

不应该创建索引的列:

1、很少用这个列查询。

2、更新频率大于查询频率。

六、临时表

临时表的数据只是在会话或事务期间存在,对于会话类型的临时表,会话的数据对于当前会话私有,每个会话只能看到并修改自己的数据。对于使用同一张临时表的不同用户,Oracle都会分配一个独立的TEMP SEGMENT,这样就避免了多个用户在对同一张临时表操作时发生交叉,从而保证了多个用户操作的并发性和独立性。对于事务类型的临时表,当进行事务提交或者事务回滚的时候,临时表中的数据将自动被清空。

会话临时表的创建:CREATE GLOBAL TEMPORARY ( ) ON COMMIT PRESERVE ROWS;

事务级别临时表的创建:CREATE GLOBAL TEMPORARY ( ) ON COMMIT DELETE ROWS;

什么时候用临时表呢?

应用场景1:你在短期内有很多DML操作,比如京东淘宝亚马逊的购物车表,把东西放购物车(insert),变更数量(update),删除商品(delete),一旦结算金钱后,这些数据就要清掉,这时需要用临时表

应用场景2:在导出数据时,你可能不想导完整的数据库,或者表,你可能只想要导出符合某些条件的数据,那么你可以创建临时表,把select语句插入到临时表,接着导出这个临时表,导完以后通过结束session或者事务的方式,让这些没用的数据自动清理掉

应用场景3:你在写存储过程时,有很多的连接,比如你需要连接A,B,C,D,E,F,G,H那么多张表,才能得到你的结果表,同时做连接的消耗太大,你可以先A,B,C连接的结果,放在临时表,接着再把这张临时表,跟D,E,F连接,作为新的结果放在临时表,接着再把临时表与G,H连接,最后得到临时表数据,一次插入到结果表(永久表)。

七、存储过程。

存储过程是多条sql的组合。

存储过程优点:

1、存储过程在创建时进行编译,在以后执行的时候就不需要再编译了。而sql在每一

次执行的时候都需要重新编译一次,所以用存储过程会提高执行效率。

2、一般情况下,复杂的业务逻辑包含多条sql语句,这些语句需要从客户机发送到数

据库服务器,会加大网络传输负载。

3、存储过程写好之后可以多次复用。

4、避免对底层数据库对象的直接访问。

格式:

create or replace procedure p4

as

相关文档
最新文档